summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname1096
-rw-r--r--FILES.byname.gzbin2515832 -> 2516662 bytes
-rw-r--r--FILES.last07days694
-rw-r--r--biblio/ctan-bibdata/ctan.bib72
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3411812 -> 3653738 bytes
-rw-r--r--language/greek/greek-fontenc/Makefile179
-rw-r--r--language/greek/greek-fontenc/README.md52
-rw-r--r--language/greek/greek-fontenc/alphabeta-doc-tu.pdfbin74857 -> 74857 bytes
-rw-r--r--language/greek/greek-fontenc/alphabeta-doc.pdfbin433268 -> 433268 bytes
-rw-r--r--language/greek/greek-fontenc/alphabeta-doc.tex2
-rw-r--r--language/greek/greek-fontenc/alphabeta-lgr.def2
-rw-r--r--language/greek/greek-fontenc/alphabeta-lgr.def.html587
-rw-r--r--language/greek/greek-fontenc/alphabeta-tuenc.def2
-rw-r--r--language/greek/greek-fontenc/alphabeta-tuenc.def.html587
-rw-r--r--language/greek/greek-fontenc/alphabeta.sty69
-rw-r--r--language/greek/greek-fontenc/alphabeta.sty.html158
-rw-r--r--language/greek/greek-fontenc/greek-fontenc-doc.html13
-rw-r--r--language/greek/greek-fontenc/greek-fontenc-doc.rst10
-rw-r--r--language/greek/greek-fontenc/greek-fontenc.def33
-rw-r--r--language/greek/greek-fontenc/greek-fontenc.def.html66
-rw-r--r--language/greek/greek-fontenc/hyperref-with-greek.pdfbin296813 -> 296813 bytes
-rw-r--r--language/greek/greek-fontenc/lgrenc.def4
-rw-r--r--language/greek/greek-fontenc/lgrenc.def.html6
-rw-r--r--language/greek/greek-fontenc/puenc-greek.def36
-rw-r--r--language/greek/greek-fontenc/puenc-greek.def.html52
-rw-r--r--language/greek/greek-fontenc/test-diacritics.pdfbin198977 -> 195502 bytes
-rw-r--r--language/greek/greek-fontenc/test-diacritics.tex102
-rw-r--r--language/greek/greek-fontenc/test-lgrenc.pdfbin326304 -> 326304 bytes
-rw-r--r--language/greek/greek-fontenc/test-licr-input.pdfbin397294 -> 398308 bytes
-rw-r--r--language/greek/greek-fontenc/test-licr-input.tex24
-rw-r--r--language/greek/greek-fontenc/test-tuenc-greek.pdfbin85973 -> 85979 bytes
-rw-r--r--language/greek/greek-fontenc/test-utf8-input.pdfbin127221 -> 0 bytes
-rw-r--r--language/greek/greek-fontenc/test-utf8-input.tex87
-rw-r--r--language/greek/greek-fontenc/textalpha-doc-tu.pdfbin83990 -> 83999 bytes
-rw-r--r--language/greek/greek-fontenc/textalpha-doc.pdfbin501358 -> 501358 bytes
-rw-r--r--language/greek/greek-fontenc/textalpha.sty106
-rw-r--r--language/greek/greek-fontenc/textalpha.sty.html257
-rw-r--r--language/greek/greek-fontenc/tuenc-greek.def112
-rw-r--r--language/greek/greek-fontenc/tuenc-greek.def.html321
-rw-r--r--language/korean/kotex-oblivoir/README1
-rw-r--r--language/korean/kotex-oblivoir/doc/ChangeLog7
-rw-r--r--language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty39
-rw-r--r--language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty93
-rw-r--r--language/korean/kotex-oblivoir/tex/oblivoir-xl.cls9
-rw-r--r--language/korean/kotex-oblivoir/tex/oblivoir.cls3
-rw-r--r--macros/latex-dev/base/README.md2
-rw-r--r--macros/latex-dev/base/alltt.dtx2
-rw-r--r--macros/latex-dev/base/alltt.ins4
-rw-r--r--macros/latex-dev/base/alltt.pdfbin223831 -> 223829 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin264112 -> 264161 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.tex4
-rw-r--r--macros/latex-dev/base/changes.txt19
-rw-r--r--macros/latex-dev/base/classes.dtx2
-rw-r--r--macros/latex-dev/base/classes.ins4
-rw-r--r--macros/latex-dev/base/classes.pdfbin560326 -> 560248 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin414419 -> 414447 bytes
-rw-r--r--macros/latex-dev/base/clsguide.tex4
-rw-r--r--macros/latex-dev/base/cmextra.ins4
-rw-r--r--macros/latex-dev/base/cmfonts.ins4
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292160 -> 292136 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin257314 -> 257355 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.tex4
-rw-r--r--macros/latex-dev/base/doc-code.pdfbin1075110 -> 1074767 bytes
-rw-r--r--macros/latex-dev/base/doc.pdfbin755547 -> 755242 bytes
-rw-r--r--macros/latex-dev/base/docstrip.dtx2
-rw-r--r--macros/latex-dev/base/docstrip.ins4
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin504178 -> 504361 bytes
-rw-r--r--macros/latex-dev/base/ec.ins4
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1318126 -> 1318139 bytes
-rw-r--r--macros/latex-dev/base/encguide.tex2
-rw-r--r--macros/latex-dev/base/exscale.dtx2
-rw-r--r--macros/latex-dev/base/exscale.ins4
-rw-r--r--macros/latex-dev/base/exscale.pdfbin204711 -> 204709 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.dtx2
-rw-r--r--macros/latex-dev/base/fix-cm.ins4
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin287733 -> 287724 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin517838 -> 517890 bytes
-rw-r--r--macros/latex-dev/base/fntguide.tex4
-rw-r--r--macros/latex-dev/base/fontdef.dtx2
-rw-r--r--macros/latex-dev/base/format.ins8
-rw-r--r--macros/latex-dev/base/graphpap.dtx2
-rw-r--r--macros/latex-dev/base/graphpap.ins4
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin161713 -> 161725 bytes
-rw-r--r--macros/latex-dev/base/idx.tex2
-rw-r--r--macros/latex-dev/base/ifthen.dtx2
-rw-r--r--macros/latex-dev/base/ifthen.ins4
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin221211 -> 221226 bytes
-rw-r--r--macros/latex-dev/base/inputenc.dtx2
-rw-r--r--macros/latex-dev/base/inputenc.ins4
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin318204 -> 318166 bytes
-rw-r--r--macros/latex-dev/base/lablst.tex2
-rw-r--r--macros/latex-dev/base/lamport-manual.pdfbin170878 -> 170874 bytes
-rw-r--r--macros/latex-dev/base/latex209.dtx2
-rw-r--r--macros/latex-dev/base/latex209.ins4
-rw-r--r--macros/latex-dev/base/latexrelease.dtx2
-rw-r--r--macros/latex-dev/base/latexrelease.ins4
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin282115 -> 282105 bytes
-rw-r--r--macros/latex-dev/base/latexsym.dtx2
-rw-r--r--macros/latex-dev/base/latexsym.ins6
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin200760 -> 200762 bytes
-rw-r--r--macros/latex-dev/base/lb2.err7
-rw-r--r--macros/latex-dev/base/lb2.pdfbin252140 -> 252313 bytes
-rw-r--r--macros/latex-dev/base/letter.dtx2
-rw-r--r--macros/latex-dev/base/letter.ins4
-rw-r--r--macros/latex-dev/base/letter.pdfbin337430 -> 337493 bytes
-rw-r--r--macros/latex-dev/base/lgc2.err22
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin215684 -> 217560 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin132382 -> 132384 bytes
-rw-r--r--macros/latex-dev/base/ltalloc.dtx2
-rw-r--r--macros/latex-dev/base/ltbibl.dtx2
-rw-r--r--macros/latex-dev/base/ltboxes.dtx2
-rw-r--r--macros/latex-dev/base/ltclass.dtx2
-rw-r--r--macros/latex-dev/base/ltcmd.dtx2
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin719408 -> 719205 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin478686 -> 478517 bytes
-rw-r--r--macros/latex-dev/base/ltcntrl.dtx2
-rw-r--r--macros/latex-dev/base/ltcounts.dtx2
-rw-r--r--macros/latex-dev/base/ltdefns.dtx2
-rw-r--r--macros/latex-dev/base/ltdirchk.dtx2
-rw-r--r--macros/latex-dev/base/lterror.dtx2
-rw-r--r--macros/latex-dev/base/ltexpl.dtx2
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin803060 -> 803151 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin547926 -> 547988 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook.dtx2
-rw-r--r--macros/latex-dev/base/ltfiles.dtx14
-rw-r--r--macros/latex-dev/base/ltfinal.dtx2
-rw-r--r--macros/latex-dev/base/ltfloat.dtx2
-rw-r--r--macros/latex-dev/base/ltfntcmd.dtx2
-rw-r--r--macros/latex-dev/base/ltfssaxes.dtx2
-rw-r--r--macros/latex-dev/base/ltfssbas.dtx2
-rw-r--r--macros/latex-dev/base/ltfsscmp.dtx2
-rw-r--r--macros/latex-dev/base/ltfssdcl.dtx2
-rw-r--r--macros/latex-dev/base/ltfssini.dtx2
-rw-r--r--macros/latex-dev/base/ltfsstrc.dtx2
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1091429 -> 1091279 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin701473 -> 701283 bytes
-rw-r--r--macros/latex-dev/base/lthooks.dtx2
-rw-r--r--macros/latex-dev/base/lthyphen.dtx2
-rw-r--r--macros/latex-dev/base/ltidxglo.dtx2
-rw-r--r--macros/latex-dev/base/ltkeys.dtx2
-rw-r--r--macros/latex-dev/base/ltlength.dtx2
-rw-r--r--macros/latex-dev/base/ltlists.dtx2
-rw-r--r--macros/latex-dev/base/ltlogos.dtx2
-rw-r--r--macros/latex-dev/base/ltluatex.dtx6
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin324910 -> 325056 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-code.pdfbin715658 -> 715474 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-doc.pdfbin586024 -> 585862 bytes
-rw-r--r--macros/latex-dev/base/ltmath.dtx2
-rw-r--r--macros/latex-dev/base/ltmiscen.dtx2
-rw-r--r--macros/latex-dev/base/ltnews.cls27
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1255282 -> 1265382 bytes
-rw-r--r--macros/latex-dev/base/ltnews.tex18
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin161518 -> 161534 bytes
-rw-r--r--macros/latex-dev/base/ltnews01.tex2
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin159792 -> 159811 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.tex2
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin159332 -> 159349 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.tex2
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin152525 -> 152545 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.tex2
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin174494 -> 174686 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.tex2
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142849 -> 142870 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.tex2
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin137811 -> 138211 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.tex2
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155053 -> 155426 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.tex2
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin129570 -> 129989 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.tex2
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin169416 -> 169414 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.tex2
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin111948 -> 112191 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.tex2
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin156551 -> 156746 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.tex2
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin182225 -> 182464 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.tex2
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin170473 -> 170716 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.tex2
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130309 -> 130323 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.tex2
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin138073 -> 138090 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.tex2
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166228 -> 166247 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.tex2
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin38033 -> 38320 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.tex2
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin230028 -> 230181 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.tex3
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin318548 -> 318566 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.tex1
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin244867 -> 244870 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin317773 -> 317779 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.tex2
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin286591 -> 286600 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.tex2
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265279 -> 265292 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.tex2
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin204935 -> 204948 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.tex2
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379462 -> 379472 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.tex2
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin250592 -> 251083 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.tex3
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin376643 -> 376652 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.tex2
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin455107 -> 455116 bytes
-rw-r--r--macros/latex-dev/base/ltnews29.tex2
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin511909 -> 511895 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526323 -> 526332 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.tex1
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546160 -> 546186 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin522412 -> 522416 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.pdfbin508044 -> 508052 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.tex1
-rw-r--r--macros/latex-dev/base/ltnews35.pdfbin563089 -> 563098 bytes
-rw-r--r--macros/latex-dev/base/ltnews36.pdfbin517565 -> 517571 bytes
-rw-r--r--macros/latex-dev/base/ltnews37.pdfbin408962 -> 456714 bytes
-rw-r--r--macros/latex-dev/base/ltnews37.tex148
-rw-r--r--macros/latex-dev/base/ltoutenc.dtx2
-rw-r--r--macros/latex-dev/base/ltoutenc.ins4
-rw-r--r--macros/latex-dev/base/ltoutput.dtx2
-rw-r--r--macros/latex-dev/base/ltpage.dtx2
-rw-r--r--macros/latex-dev/base/ltpageno.dtx2
-rw-r--r--macros/latex-dev/base/ltpar.dtx2
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin667129 -> 671573 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin560008 -> 559554 bytes
-rw-r--r--macros/latex-dev/base/ltpara.dtx68
-rw-r--r--macros/latex-dev/base/ltpictur.dtx2
-rw-r--r--macros/latex-dev/base/ltplain.dtx2
-rw-r--r--macros/latex-dev/base/ltsect.dtx2
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin820928 -> 821006 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin565931 -> 566006 bytes
-rw-r--r--macros/latex-dev/base/ltshipout.dtx2
-rw-r--r--macros/latex-dev/base/ltspace.dtx2
-rw-r--r--macros/latex-dev/base/lttab.dtx2
-rw-r--r--macros/latex-dev/base/lttextcomp.dtx2
-rw-r--r--macros/latex-dev/base/ltthm.dtx2
-rw-r--r--macros/latex-dev/base/ltvers.dtx4
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219349 -> 219354 bytes
-rw-r--r--macros/latex-dev/base/ltx3info.tex2
-rw-r--r--macros/latex-dev/base/ltxcheck.tex2
-rw-r--r--macros/latex-dev/base/ltxdoc.dtx2
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin243286 -> 243283 bytes
-rw-r--r--macros/latex-dev/base/ltxref.dtx2
-rw-r--r--macros/latex-dev/base/makeindx.dtx2
-rw-r--r--macros/latex-dev/base/makeindx.ins4
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin165821 -> 165817 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin257804 -> 257827 bytes
-rw-r--r--macros/latex-dev/base/modguide.tex4
-rw-r--r--macros/latex-dev/base/newdc.ins4
-rw-r--r--macros/latex-dev/base/newlfont.dtx2
-rw-r--r--macros/latex-dev/base/nfssfont.dtx2
-rw-r--r--macros/latex-dev/base/nfssfont.ins4
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin211180 -> 211180 bytes
-rw-r--r--macros/latex-dev/base/olddc.ins4
-rw-r--r--macros/latex-dev/base/oldlfont.dtx2
-rw-r--r--macros/latex-dev/base/preload.dtx2
-rw-r--r--macros/latex-dev/base/proc.dtx2
-rw-r--r--macros/latex-dev/base/proc.ins4
-rw-r--r--macros/latex-dev/base/proc.pdfbin227059 -> 227056 bytes
-rw-r--r--macros/latex-dev/base/slides.dtx2
-rw-r--r--macros/latex-dev/base/slides.ins8
-rw-r--r--macros/latex-dev/base/slides.pdfbin375518 -> 375514 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin234191 -> 234188 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin5789493 -> 5797424 bytes
-rw-r--r--macros/latex-dev/base/source2e.tex2
-rw-r--r--macros/latex-dev/base/syntonly.dtx2
-rw-r--r--macros/latex-dev/base/syntonly.ins4
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin189819 -> 189552 bytes
-rw-r--r--macros/latex-dev/base/testpage.tex2
-rw-r--r--macros/latex-dev/base/tlc2.err19
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin290615 -> 291015 bytes
-rw-r--r--macros/latex-dev/base/tulm.ins4
-rw-r--r--macros/latex-dev/base/tulm.pdfbin162772 -> 162766 bytes
-rw-r--r--macros/latex-dev/base/unpack.ins2
-rw-r--r--macros/latex-dev/base/usrguide-historic.pdfbin438515 -> 438570 bytes
-rw-r--r--macros/latex-dev/base/usrguide-historic.tex4
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin474808 -> 474841 bytes
-rw-r--r--macros/latex-dev/base/usrguide.tex4
-rw-r--r--macros/latex-dev/base/utf8ienc.dtx2
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin353428 -> 353281 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146198 -> 146195 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/README.md4
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-code.pdfbin0 -> 864389 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-code.tex4
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-doc.pdfbin0 -> 439093 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-doc.tex4
-rw-r--r--macros/latex-dev/required/latex-lab/changes.txt38
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdfbin512028 -> 517856 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdfbin375913 -> 382232 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support.dtx61
-rw-r--r--macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex141
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx131
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdfbin0 -> 357221 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx3821
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdfbin0 -> 864389 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx1418
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdfbin614913 -> 799900 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx102
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdfbin0 -> 302106 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx1277
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdfbin0 -> 608921 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx223
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdfbin0 -> 357221 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx159
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdfbin0 -> 383590 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx (renamed from macros/latex-dev/required/latex-lab/latex-lab-new-or.dtx)10
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf (renamed from macros/latex-dev/required/latex-lab/latex-lab-new-or.pdf)bin529122 -> 529680 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.dtx810
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.pdfbin0 -> 527032 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx78
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.pdfbin290841 -> 296921 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx203
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdfbin0 -> 295610 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx443
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdfbin0 -> 341820 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx365
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdfbin0 -> 377979 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab.ins39
-rw-r--r--macros/latex-dev/required/latex-lab/usage-of-@footnotemark.txt186
-rw-r--r--macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt842
-rw-r--r--macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt80
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.pdfbin186723 -> 187963 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.tex16
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.dtx60
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.pdfbin364942 -> 367390 bytes
-rw-r--r--macros/latex/contrib/genealogytree/CHANGES.md21
-rw-r--r--macros/latex/contrib/genealogytree/README.md4
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree-example-1.pdfbin207760 -> 208264 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree-example-2.pdfbin259457 -> 259473 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree-example-3.pdfbin205130 -> 205145 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree-example-4.pdfbin307952 -> 307948 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree-languages.pdfbin468253 -> 600599 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree.pdfbin9292843 -> 9338306 bytes
-rw-r--r--macros/latex/contrib/genealogytree/genealogytree.sty10
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.contour.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.node.code.tex30
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.options.code.tex8
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.parser.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.processing.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex87
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex94
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.danish.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.english.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.french.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.german.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.italian.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlib.debug.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex6
-rw-r--r--macros/latex/contrib/genealogytree/gtrlib.templates.code.tex6
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/README.md2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty3888
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdfbin962540 -> 962873 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx95
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdfbin686472 -> 691708 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdfbin587431 -> 587721 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdfbin515050 -> 515314 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdfbin558354 -> 558634 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdfbin541395 -> 541673 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdfbin543671 -> 543976 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdfbin536785 -> 537067 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdfbin592206 -> 592524 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdfbin516032 -> 516300 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdfbin750122 -> 750467 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdfbin566285 -> 566543 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdfbin681952 -> 682288 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx23
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdfbin811796 -> 812732 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdfbin526936 -> 527235 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdfbin426770 -> 427013 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdfbin588866 -> 589232 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua78
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdfbin386480 -> 386566 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx37
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdfbin444499 -> 443702 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx6
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdfbin456334 -> 456571 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/tugboat/NEWS11
-rw-r--r--macros/latex/contrib/tugboat/ltubguid.pdfbin363980 -> 363060 bytes
-rw-r--r--macros/latex/contrib/tugboat/tugboat.bst7
-rw-r--r--macros/latex/contrib/tugboat/tugboat.dtx46
-rw-r--r--macros/latex/contrib/tugboat/tugboat.pdfbin516448 -> 516315 bytes
-rw-r--r--macros/luatex/latex/lua-typo/README.md7
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdfbin16859 -> 16859 bytes
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdfbin105225 -> 106404 bytes
-rw-r--r--macros/luatex/latex/lua-typo/doc/lua-typo.pdfbin173735 -> 179022 bytes
-rw-r--r--macros/luatex/latex/lua-typo/source/lua-typo.dtx957
-rw-r--r--macros/optex/README6
-rw-r--r--macros/optex/base/f-cabin.opm43
-rw-r--r--macros/optex/base/f-erewhon.opm2
-rw-r--r--macros/optex/base/f-fira.opm55
-rw-r--r--macros/optex/base/f-heros.opm3
-rw-r--r--macros/optex/base/f-inconsolata.opm18
-rw-r--r--macros/optex/base/f-xcharter.opm5
-rw-r--r--macros/optex/base/fams-ini.opm19
-rw-r--r--macros/optex/base/fonts-catalog.opm7
-rw-r--r--macros/optex/base/fonts-resize.opm30
-rw-r--r--macros/optex/base/fonts-select.opm48
-rw-r--r--macros/optex/base/graphics.opm9
-rw-r--r--macros/optex/base/hi-syntax.opm2
-rw-r--r--macros/optex/base/hisyntax-c.opm20
-rw-r--r--macros/optex/base/lists.opm31
-rw-r--r--macros/optex/base/optex.ini2
-rw-r--r--macros/optex/base/parameters.opm27
-rw-r--r--macros/optex/doc/optex-doc.pdfbin1505109 -> 1510893 bytes
-rw-r--r--macros/optex/doc/optex-doc.tex2
-rw-r--r--macros/optex/doc/optex-userdoc.tex3
-rw-r--r--macros/optex/pkg/tikz.opm8
-rw-r--r--obsolete/support/tlaunch/COPYING (renamed from support/tlaunch/COPYING)0
-rw-r--r--obsolete/support/tlaunch/Changes (renamed from support/tlaunch/Changes)0
-rw-r--r--obsolete/support/tlaunch/README (renamed from support/tlaunch/README)0
-rw-r--r--obsolete/support/tlaunch/figures/custom_ed.png (renamed from support/tlaunch/figures/custom_ed.png)bin45360 -> 45360 bytes
-rw-r--r--obsolete/support/tlaunch/figures/tlaunch_rug.png (renamed from support/tlaunch/figures/tlaunch_rug.png)bin11781 -> 11781 bytes
-rw-r--r--obsolete/support/tlaunch/figures/tlaunch_window.png (renamed from support/tlaunch/figures/tlaunch_window.png)bin9378 -> 9378 bytes
-rw-r--r--obsolete/support/tlaunch/tlaunch.ini (renamed from support/tlaunch/tlaunch.ini)0
-rw-r--r--obsolete/support/tlaunch/tlaunch.pdf (renamed from support/tlaunch/tlaunch.pdf)bin330268 -> 330268 bytes
-rw-r--r--obsolete/support/tlaunch/tlaunch.tex (renamed from support/tlaunch/tlaunch.tex)0
-rw-r--r--obsolete/support/tlaunch/tlaunchmode.pl (renamed from support/tlaunch/tlaunchmode.pl)0
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb146
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2451500 -> 2452656 bytes
-rw-r--r--timestamp2
452 files changed, 13721 insertions, 8462 deletions
diff --git a/FILES.byname b/FILES.byname
index 1c74e789ad..f6999818b5 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2047,12 +2047,12 @@
2022/12/25 | 1673 | biblio/citation-style-language/README.md
2022/12/25 | 11958 | biblio/citation-style-language/vancouver.csl
2022/12/25 | 604004 | biblio/citation-style-language.zip
-2023/03/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/03/09 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2023/03/08 | 2768650 | biblio/ctan-bibdata/ctan.bib
-2023/03/08 | 929531 | biblio/ctan-bibdata/ctan.pdf
+2023/03/09 | 2768660 | biblio/ctan-bibdata/ctan.bib
+2023/03/09 | 3411812 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2023/03/08 | 1376000 | biblio/ctan-bibdata.zip
+2023/03/09 | 3824042 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -2209,7 +2209,7 @@
1989/12/11 | 6196 | biblio/tib/tib.man
1989/03/29 | 23265 | biblio/tib/vitaMake
2005/12/15 | 366385 | biblio/tib.zip
-2023/02/14 | 17987 | CTAN.sites
+2023/03/09 | 18110 | CTAN.sites
1990/10/03 | 5032 | dviware/beebe/00readme.txt
1990/10/03 | 479 | dviware/beebe/doc/00dir.cmd
1990/10/03 | 1209 | dviware/beebe/doc/00dir.lst
@@ -3696,7 +3696,7 @@
2009/11/10 | 9190 | dviware/dviljk/config.h
2007/07/03 | 710 | dviware/dviljk/configure
2013/07/02 | 823 | dviware/dviljk/configure.ac
-2023/03/01 | 551497 | dviware/dviljk/configure.texk
+2023/03/08 | 551509 | dviware/dviljk/configure.texk
2014/06/23 | 161997 | dviware/dviljk/dvi2xx.c
2012/10/02 | 25955 | dviware/dviljk/dvi2xx.h
2018/01/17 | 4487 | dviware/dviljk/dvihp
@@ -3705,7 +3705,7 @@
2022/08/31 | 19957 | dviware/dviljk/dvilj.pod
2006/01/17 | 1151 | dviware/dviljk/INSTALL
2022/08/31 | 1997 | dviware/dviljk/Makefile.am
-2022/08/31 | 52497 | dviware/dviljk/Makefile.in
+2023/03/08 | 52561 | dviware/dviljk/Makefile.in
2006/01/17 | 1848 | dviware/dviljk/NEWS
2009/12/24 | 2244 | dviware/dviljk/README
2009/11/10 | 7671 | dviware/dviljk/tfm.c
@@ -3713,12 +3713,12 @@
2012/07/16 | 715 | dviware/dviljk/win32/ChangeLog
2012/07/16 | 11273 | dviware/dviljk/win32/dvihp.c
2011/08/05 | 538 | dviware/dviljk/win32/Makefile.am
-2021/10/04 | 20650 | dviware/dviljk/win32/Makefile.in
+2023/03/08 | 20670 | dviware/dviljk/win32/Makefile.in
2011/05/25 | 1996 | dviware/dviljk/win32/mktex.h
2011/05/25 | 1112 | dviware/dviljk/win32/mktexlib.h
2011/08/05 | 8164 | dviware/dviljk/win32/stackenv.c
2011/05/25 | 1145 | dviware/dviljk/win32/stackenv.h
-2023/03/02 | 264398 | dviware/dviljk.zip
+2023/03/09 | 264426 | dviware/dviljk.zip
1993/03/01 | 711 | dviware/dvimerge/dvimerge
1993/03/01 | 1419 | dviware/dvimerge/range.c
2007/05/21 | 1224 | dviware/dvimerge.zip
@@ -5408,7 +5408,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2023/03/08 | 102594 | FILES.last07days
+2023/03/09 | 129432 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -193362,7 +193362,7 @@
2017/07/14 | 330649 | install/macros/latex/contrib/fonttable.tds.zip
2023/02/25 | 477803 | install/macros/latex/contrib/footnoterange.tds.zip
2011/09/21 | 1010253 | install/macros/latex/contrib/frontespizio.tds.zip
-2022/03/17 | 6639796 | install/macros/latex/contrib/genealogytree.tds.zip
+2023/03/09 | 6763692 | install/macros/latex/contrib/genealogytree.tds.zip
2019/03/25 | 2001387 | install/macros/latex/contrib/getmap.tds.zip
2019/12/15 | 325426 | install/macros/latex/contrib/gettitlestring.tds.zip
2011/09/05 | 175901 | install/macros/latex/contrib/gincltex.tds.zip
@@ -193559,11 +193559,11 @@
2020/04/09 | 806385 | install/macros/latex/contrib/zhlipsum.tds.zip
2022/07/14 | 321454 | install/macros/latex/contrib/zhnumber.tds.zip
2023/02/21 | 1688405 | install/macros/latex/contrib/zref-clever.tds.zip
-2022/12/03 | 39466146 | install/macros/latex-dev/latex-base-dev.tds.zip
+2023/03/09 | 39542215 | install/macros/latex-dev/latex-base-dev.tds.zip
2022/10/31 | 2795153 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
2022/12/03 | 277960 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip
2022/10/31 | 3109665 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
-2022/10/31 | 2303239 | install/macros/latex-dev/required/latex-lab-dev.tds.zip
+2023/03/09 | 8157258 | install/macros/latex-dev/required/latex-lab-dev.tds.zip
2022/10/31 | 7339002 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
2022/11/30 | 39031324 | install/macros/latex/latex-base.tds.zip
2020/06/01 | 1578753 | install/macros/latex/required/amscls.tds.zip
@@ -196124,49 +196124,46 @@
2009/04/27 | 15010 | language/greek/BibTeX.zip
2009/07/23 | 139204 | language/greek/doc/usage.pdf
2009/07/23 | 9828 | language/greek/doc/usage.tex
-2023/02/28 | 433268 | language/greek/greek-fontenc/alphabeta-doc.pdf
-2023/02/25 | 17508 | language/greek/greek-fontenc/alphabeta-doc.tex
-2023/02/28 | 74857 | language/greek/greek-fontenc/alphabeta-doc-tu.pdf
-2023/02/24 | 10378 | language/greek/greek-fontenc/alphabeta-lgr.def
-2023/02/24 | 26375 | language/greek/greek-fontenc/alphabeta-lgr.def.html
-2023/02/24 | 15728 | language/greek/greek-fontenc/alphabeta.sty
-2023/02/24 | 41784 | language/greek/greek-fontenc/alphabeta.sty.html
-2023/02/24 | 15407 | language/greek/greek-fontenc/alphabeta-tuenc.def
-2023/02/24 | 32105 | language/greek/greek-fontenc/alphabeta-tuenc.def.html
+2023/03/09 | 433268 | language/greek/greek-fontenc/alphabeta-doc.pdf
+2023/03/08 | 17508 | language/greek/greek-fontenc/alphabeta-doc.tex
+2023/03/09 | 74857 | language/greek/greek-fontenc/alphabeta-doc-tu.pdf
+2023/03/08 | 10384 | language/greek/greek-fontenc/alphabeta-lgr.def
+2023/03/08 | 30445 | language/greek/greek-fontenc/alphabeta-lgr.def.html
+2023/03/08 | 15838 | language/greek/greek-fontenc/alphabeta.sty
+2023/03/08 | 42360 | language/greek/greek-fontenc/alphabeta.sty.html
+2023/03/08 | 15413 | language/greek/greek-fontenc/alphabeta-tuenc.def
+2023/03/08 | 36175 | language/greek/greek-fontenc/alphabeta-tuenc.def.html
2023/02/24 | 625 | language/greek/greek-fontenc/greek-euenc.def
-2023/02/28 | 20860 | language/greek/greek-fontenc/greek-fontenc.def
-2023/02/28 | 49890 | language/greek/greek-fontenc/greek-fontenc.def.html
-2023/02/28 | 66128 | language/greek/greek-fontenc/greek-fontenc-doc.html
-2023/02/28 | 23399 | language/greek/greek-fontenc/greek-fontenc-doc.rst
-2023/02/28 | 296813 | language/greek/greek-fontenc/hyperref-with-greek.pdf
+2023/03/08 | 21337 | language/greek/greek-fontenc/greek-fontenc.def
+2023/03/08 | 50932 | language/greek/greek-fontenc/greek-fontenc.def.html
+2023/03/08 | 66518 | language/greek/greek-fontenc/greek-fontenc-doc.html
+2023/03/08 | 23580 | language/greek/greek-fontenc/greek-fontenc-doc.rst
+2023/03/09 | 296813 | language/greek/greek-fontenc/hyperref-with-greek.pdf
2023/02/25 | 12825 | language/greek/greek-fontenc/hyperref-with-greek.tex
2023/02/25 | 4574 | language/greek/greek-fontenc/lgr2licr.lua
2023/02/25 | 25793 | language/greek/greek-fontenc/lgr2licr.lua.html
-2023/02/28 | 41219 | language/greek/greek-fontenc/lgrenc.def
-2023/02/28 | 75963 | language/greek/greek-fontenc/lgrenc.def.html
-2023/02/28 | 4817 | language/greek/greek-fontenc/Makefile
-2023/02/28 | 24298 | language/greek/greek-fontenc/puenc-greek.def
-2023/02/28 | 45842 | language/greek/greek-fontenc/puenc-greek.def.html
-2023/02/28 | 1400 | language/greek/greek-fontenc/README.md
-2023/02/28 | 198977 | language/greek/greek-fontenc/test-diacritics.pdf
-2023/02/28 | 14926 | language/greek/greek-fontenc/test-diacritics.tex
-2023/02/28 | 326304 | language/greek/greek-fontenc/test-lgrenc.pdf
+2023/03/08 | 41227 | language/greek/greek-fontenc/lgrenc.def
+2023/03/08 | 75971 | language/greek/greek-fontenc/lgrenc.def.html
+2023/03/09 | 24370 | language/greek/greek-fontenc/puenc-greek.def
+2023/03/09 | 47651 | language/greek/greek-fontenc/puenc-greek.def.html
+2023/03/08 | 1666 | language/greek/greek-fontenc/README.md
+2023/03/08 | 195502 | language/greek/greek-fontenc/test-diacritics.pdf
+2023/03/08 | 14888 | language/greek/greek-fontenc/test-diacritics.tex
+2023/03/08 | 326304 | language/greek/greek-fontenc/test-lgrenc.pdf
2023/02/28 | 21743 | language/greek/greek-fontenc/test-lgrenc.tex
-2023/02/28 | 397294 | language/greek/greek-fontenc/test-licr-input.pdf
-2023/02/28 | 19792 | language/greek/greek-fontenc/test-licr-input.tex
-2023/02/28 | 85973 | language/greek/greek-fontenc/test-tuenc-greek.pdf
-2023/02/28 | 35485 | language/greek/greek-fontenc/test-tuenc-greek.tex
-2023/02/24 | 127221 | language/greek/greek-fontenc/test-utf8-input.pdf
-2023/02/25 | 3194 | language/greek/greek-fontenc/test-utf8-input.tex
-2023/02/28 | 501358 | language/greek/greek-fontenc/textalpha-doc.pdf
+2023/03/09 | 398308 | language/greek/greek-fontenc/test-licr-input.pdf
+2023/03/08 | 20105 | language/greek/greek-fontenc/test-licr-input.tex
+2023/03/09 | 85979 | language/greek/greek-fontenc/test-tuenc-greek.pdf
+2023/03/08 | 35485 | language/greek/greek-fontenc/test-tuenc-greek.tex
+2023/03/09 | 501358 | language/greek/greek-fontenc/textalpha-doc.pdf
2023/02/28 | 19790 | language/greek/greek-fontenc/textalpha-doc.tex
-2023/02/28 | 83990 | language/greek/greek-fontenc/textalpha-doc-tu.pdf
-2023/02/28 | 23072 | language/greek/greek-fontenc/textalpha.sty
-2023/02/28 | 52772 | language/greek/greek-fontenc/textalpha.sty.html
+2023/03/09 | 83999 | language/greek/greek-fontenc/textalpha-doc-tu.pdf
+2023/03/08 | 23079 | language/greek/greek-fontenc/textalpha.sty
+2023/03/08 | 53144 | language/greek/greek-fontenc/textalpha.sty.html
2023/02/25 | 85804 | language/greek/greek-fontenc/textalpha-tu.pdf
-2023/02/28 | 51003 | language/greek/greek-fontenc/tuenc-greek.def
-2023/02/28 | 85753 | language/greek/greek-fontenc/tuenc-greek.def.html
-2023/02/28 | 2820223 | language/greek/greek-fontenc.zip
+2023/03/09 | 51332 | language/greek/greek-fontenc/tuenc-greek.def
+2023/03/09 | 86840 | language/greek/greek-fontenc/tuenc-greek.def.html
+2023/03/09 | 2691719 | language/greek/greek-fontenc.zip
2023/03/02 | 33017 | language/greek/greek-inputenc/greek-inputenc.html
2023/02/21 | 141 | language/greek/greek-inputenc/greek-utf8-minimal.tex
2023/03/02 | 457627 | language/greek/greek-inputenc/greek-utf8.pdf
@@ -198187,7 +198184,7 @@
2006/02/16 | 1140207 | language/korean/HLaTeX.zip
1992/09/26 | 2175 | language/korean/internet-korea
1992/09/26 | 22240 | language/korean/korea.net.map.ps
-2023/02/28 | 22781 | language/korean/kotex-oblivoir/doc/ChangeLog
+2023/03/08 | 22870 | language/korean/kotex-oblivoir/doc/ChangeLog
2023/02/28 | 59797 | language/korean/kotex-oblivoir/doc/chapstyfig.pdf
2023/02/14 | 81775 | language/korean/kotex-oblivoir/doc/obchaptertoc-doc.pdf
2023/02/14 | 6900 | language/korean/kotex-oblivoir/doc/obchaptertoc-doc.tex
@@ -198196,7 +198193,7 @@
2023/02/28 | 50588 | language/korean/kotex-oblivoir/doc/oblivoir-test.tex
2023/02/14 | 98096 | language/korean/kotex-oblivoir/doc/ob-mathleading-doc.pdf
2023/02/14 | 7101 | language/korean/kotex-oblivoir/doc/ob-mathleading-doc.tex
-2023/02/28 | 1913 | language/korean/kotex-oblivoir/README
+2023/03/08 | 2001 | language/korean/kotex-oblivoir/README
2023/02/28 | 2688 | language/korean/kotex-oblivoir/tex/memhangul-common/10_5.sty
2023/02/28 | 5574 | language/korean/kotex-oblivoir/tex/memhangul-common/fapapersize.sty
2023/02/28 | 44146 | language/korean/kotex-oblivoir/tex/memhangul-common/memhangul-common.sty
@@ -198205,7 +198202,7 @@
2023/02/28 | 19828 | language/korean/kotex-oblivoir/tex/memhangul-common/memucs-setspace.sty
2023/01/28 | 6428 | language/korean/kotex-oblivoir/tex/memhangul-common/obchaptertoc.sty
2023/02/28 | 3026 | language/korean/kotex-oblivoir/tex/memhangul-common/ob-koreanappendix.sty
-2023/02/14 | 3987 | language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
+2023/03/08 | 4574 | language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
2023/02/28 | 2776 | language/korean/kotex-oblivoir/tex/memhangul-common/ob-nokoreanappendix.sty
2023/02/28 | 3979 | language/korean/kotex-oblivoir/tex/memhangul-common/ob-toclof.sty
2023/02/28 | 3276 | language/korean/kotex-oblivoir/tex/memhangul-ucs/hfontsel.sty
@@ -198214,7 +198211,7 @@
2023/02/28 | 3927 | language/korean/kotex-oblivoir/tex/memhangul-ucs/memucs-gremph.sty
2023/02/28 | 4512 | language/korean/kotex-oblivoir/tex/memhangul-ucs/memucs-interword.sty
2023/02/28 | 842 | language/korean/kotex-oblivoir/tex/memhangul-ucs/nanumfontsel.sty
-2023/02/28 | 13140 | language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
+2023/03/08 | 14761 | language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
2023/02/28 | 5084 | language/korean/kotex-oblivoir/tex/memhangul-x/memucs-interword-x.sty
2023/02/28 | 4466 | language/korean/kotex-oblivoir/tex/memhangul-x/ob-mathleading.sty
2023/02/28 | 3355 | language/korean/kotex-oblivoir/tex/memhangul-x/ob-unfontsdefault.sty
@@ -198225,11 +198222,11 @@
2023/02/28 | 1962 | language/korean/kotex-oblivoir/tex/memhangul-x/xob-hyper.sty
2023/02/28 | 4854 | language/korean/kotex-oblivoir/tex/memhangul-x/xob-lwarp.sty
2023/02/28 | 2003 | language/korean/kotex-oblivoir/tex/memhangul-x/xob-paralist.sty
-2023/02/28 | 1678 | language/korean/kotex-oblivoir/tex/oblivoir.cls
+2023/03/08 | 1716 | language/korean/kotex-oblivoir/tex/oblivoir.cls
2023/02/28 | 19922 | language/korean/kotex-oblivoir/tex/oblivoir-utf.cls
-2023/02/28 | 16657 | language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
+2023/03/08 | 16875 | language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
2023/02/28 | 739 | language/korean/kotex-oblivoir/tex/xoblivoir.cls
-2023/03/02 | 679148 | language/korean/kotex-oblivoir.zip
+2023/03/09 | 679835 | language/korean/kotex-oblivoir.zip
2022/06/22 | 2177 | language/korean/kotex-plain/doc/ChangeLog
2022/06/21 | 1832 | language/korean/kotex-plain/README
2022/06/21 | 9436 | language/korean/kotex-plain/tex/hangulcweb.tex
@@ -211473,13 +211470,13 @@
2021/02/06 | 147638 | macros/latex/contrib/babel-contrib/finnish/finnish.pdf
2021/02/06 | 464 | macros/latex/contrib/babel-contrib/finnish/README.md
2021/02/06 | 153608 | macros/latex/contrib/babel-contrib/finnish.zip
-2023/01/02 | 186723 | macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
-2023/01/02 | 96480 | macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
-2023/01/02 | 239786 | macros/latex/contrib/babel-contrib/french/frenchb.dtx
-2023/01/02 | 3029 | macros/latex/contrib/babel-contrib/french/frenchb.ins
-2023/01/02 | 364942 | macros/latex/contrib/babel-contrib/french/frenchb.pdf
-2023/01/02 | 1591 | macros/latex/contrib/babel-contrib/french/README.md
-2023/01/02 | 586372 | macros/latex/contrib/babel-contrib/french.zip
+2023/03/09 | 187963 | macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+2023/03/09 | 96950 | macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
+2023/03/09 | 241048 | macros/latex/contrib/babel-contrib/french/frenchb.dtx
+2023/03/09 | 3029 | macros/latex/contrib/babel-contrib/french/frenchb.ins
+2023/03/09 | 367390 | macros/latex/contrib/babel-contrib/french/frenchb.pdf
+2023/03/09 | 1591 | macros/latex/contrib/babel-contrib/french/README.md
+2023/03/09 | 588990 | macros/latex/contrib/babel-contrib/french.zip
2016/02/24 | 8230 | macros/latex/contrib/babel-contrib/friulan/friulan.dtx
2016/02/24 | 137834 | macros/latex/contrib/babel-contrib/friulan/friulan.pdf
2016/02/23 | 706 | macros/latex/contrib/babel-contrib/friulan/README.txt
@@ -221699,36 +221696,38 @@
2015/03/07 | 311223 | macros/latex/contrib/gender/gender.pdf
2015/03/07 | 614 | macros/latex/contrib/gender/README
2015/03/08 | 314717 | macros/latex/contrib/gender.zip
-2022/03/17 | 12679 | macros/latex/contrib/genealogytree/CHANGES.md
-2022/03/17 | 212189 | macros/latex/contrib/genealogytree/genealogytree.doc.sources.zip
-2022/03/17 | 207760 | macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
-2022/03/17 | 259457 | macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
-2022/03/17 | 205130 | macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
-2022/03/17 | 307952 | macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
-2022/03/17 | 468253 | macros/latex/contrib/genealogytree/genealogytree-languages.pdf
-2022/03/17 | 9292843 | macros/latex/contrib/genealogytree/genealogytree.pdf
-2022/03/17 | 5446 | macros/latex/contrib/genealogytree/genealogytree.sty
-2022/03/17 | 12268 | macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
-2022/03/17 | 22485 | macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
-2022/03/17 | 33777 | macros/latex/contrib/genealogytree/gtrcore.node.code.tex
-2022/03/17 | 20494 | macros/latex/contrib/genealogytree/gtrcore.options.code.tex
-2022/03/17 | 22002 | macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
-2022/03/17 | 21571 | macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
-2022/03/17 | 9080 | macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
-2022/03/17 | 2868 | macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
-2022/03/17 | 2734 | macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
-2022/03/17 | 2668 | macros/latex/contrib/genealogytree/gtrlang.english.code.tex
-2022/03/17 | 2966 | macros/latex/contrib/genealogytree/gtrlang.french.code.tex
-2022/03/17 | 2978 | macros/latex/contrib/genealogytree/gtrlang.german.code.tex
-2022/03/17 | 2827 | macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
-2022/03/17 | 2833 | macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
-2022/03/17 | 2819 | macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
-2022/03/17 | 2749 | macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
-2022/03/17 | 18926 | macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
-2022/03/17 | 39387 | macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
-2022/03/17 | 40184 | macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
-2022/03/17 | 2227 | macros/latex/contrib/genealogytree/README.md
-2022/03/17 | 6669823 | macros/latex/contrib/genealogytree.zip
+2023/03/09 | 13301 | macros/latex/contrib/genealogytree/CHANGES.md
+2023/03/09 | 212433 | macros/latex/contrib/genealogytree/genealogytree.doc.sources.zip
+2023/03/09 | 208264 | macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
+2023/03/09 | 259473 | macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
+2023/03/09 | 205145 | macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
+2023/03/09 | 307948 | macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
+2023/03/09 | 600599 | macros/latex/contrib/genealogytree/genealogytree-languages.pdf
+2023/03/09 | 9338306 | macros/latex/contrib/genealogytree/genealogytree.pdf
+2023/03/09 | 5560 | macros/latex/contrib/genealogytree/genealogytree.sty
+2023/03/09 | 12268 | macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
+2023/03/09 | 22485 | macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
+2023/03/09 | 34000 | macros/latex/contrib/genealogytree/gtrcore.node.code.tex
+2023/03/09 | 20495 | macros/latex/contrib/genealogytree/gtrcore.options.code.tex
+2023/03/09 | 22002 | macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
+2023/03/09 | 21571 | macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
+2023/03/09 | 9080 | macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
+2023/03/09 | 2784 | macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex
+2023/03/09 | 2844 | macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex
+2023/03/09 | 2868 | macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
+2023/03/09 | 2734 | macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
+2023/03/09 | 2668 | macros/latex/contrib/genealogytree/gtrlang.english.code.tex
+2023/03/09 | 2966 | macros/latex/contrib/genealogytree/gtrlang.french.code.tex
+2023/03/09 | 2978 | macros/latex/contrib/genealogytree/gtrlang.german.code.tex
+2023/03/09 | 2827 | macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
+2023/03/09 | 2833 | macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
+2023/03/09 | 2819 | macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
+2023/03/09 | 2749 | macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
+2023/03/09 | 18926 | macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
+2023/03/09 | 39387 | macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
+2023/03/09 | 40184 | macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
+2023/03/09 | 2227 | macros/latex/contrib/genealogytree/README.md
+2023/03/09 | 6795057 | macros/latex/contrib/genealogytree.zip
2022/09/13 | 75820 | macros/latex/contrib/gene/crossword/cwpuzzle.dtx
2022/09/13 | 1662 | macros/latex/contrib/gene/crossword/cwpuzzle.ins
2022/09/13 | 337553 | macros/latex/contrib/gene/crossword/cwpuzzle.pdf
@@ -231128,56 +231127,54 @@
2022/10/29 | 323238 | macros/latex/contrib/pdflscape/pdflscape.pdf
2022/10/29 | 402 | macros/latex/contrib/pdflscape/README.md
2022/10/29 | 319157 | macros/latex/contrib/pdflscape.zip
-2023/02/20 | 9080 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
-2023/02/20 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
-2023/02/20 | 2882 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
-2023/02/20 | 150154 | macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty
-2023/02/20 | 176583 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
-2023/02/20 | 962540 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
-2023/02/20 | 72943 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
-2023/02/20 | 686472 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
-2023/02/20 | 28627 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
-2023/02/20 | 587431 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
-2023/02/20 | 17304 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
-2023/02/20 | 515050 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
-2023/02/20 | 26550 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
-2023/02/20 | 558354 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
-2023/02/20 | 18170 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
-2023/02/20 | 541395 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
-2023/02/20 | 20430 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
-2023/02/20 | 543671 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
-2023/02/20 | 67833 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
-2023/02/20 | 750122 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
-2023/02/20 | 26540 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
-2023/02/20 | 536785 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
-2023/02/20 | 30678 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
-2023/02/20 | 592206 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
-2023/02/20 | 21991 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
-2023/02/20 | 516032 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
-2023/02/20 | 29765 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
-2023/02/20 | 566285 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
-2023/02/20 | 63555 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
-2023/02/20 | 681952 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
-2023/02/20 | 89750 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
-2023/02/20 | 811796 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
-2023/02/20 | 15651 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
-2023/02/20 | 526936 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
-2023/02/20 | 6413 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
-2023/02/20 | 426770 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
-2023/02/20 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty
-2023/02/20 | 12372 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
-2023/02/20 | 588866 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
-2023/02/20 | 2134 | macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua
-2023/02/20 | 5310 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx
-2023/02/20 | 386480 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
-2023/02/20 | 14948 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
-2023/02/20 | 444499 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
-2023/02/20 | 18021 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
-2023/02/20 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins
-2023/02/20 | 456334 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
-2023/02/20 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md
-2023/02/20 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
-2023/02/21 | 11381957 | macros/latex/contrib/pdfmanagement-testphase.zip
+2023/03/09 | 9265 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+2023/03/09 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+2023/03/09 | 2882 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+2023/03/09 | 176583 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+2023/03/09 | 962873 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+2023/03/09 | 75153 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+2023/03/09 | 691708 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+2023/03/09 | 28627 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+2023/03/09 | 587721 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+2023/03/09 | 17304 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+2023/03/09 | 515314 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+2023/03/09 | 26550 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+2023/03/09 | 558634 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+2023/03/09 | 18170 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+2023/03/09 | 541673 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+2023/03/09 | 20430 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+2023/03/09 | 543976 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+2023/03/09 | 67833 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+2023/03/09 | 750467 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+2023/03/09 | 26540 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+2023/03/09 | 537067 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+2023/03/09 | 30678 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+2023/03/09 | 592524 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+2023/03/09 | 21991 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+2023/03/09 | 516300 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+2023/03/09 | 29765 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+2023/03/09 | 566543 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+2023/03/09 | 63555 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+2023/03/09 | 682288 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+2023/03/09 | 90027 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+2023/03/09 | 812732 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+2023/03/09 | 15651 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+2023/03/09 | 527235 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+2023/03/09 | 6413 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+2023/03/09 | 427013 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+2023/03/09 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty
+2023/03/09 | 12372 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+2023/03/09 | 589232 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+2023/03/09 | 5310 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx
+2023/03/09 | 386566 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
+2023/03/09 | 14211 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+2023/03/09 | 443702 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+2023/03/09 | 18021 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+2023/03/09 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins
+2023/03/09 | 456571 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+2023/03/09 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md
+2023/03/09 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+2023/03/09 | 11363780 | macros/latex/contrib/pdfmanagement-testphase.zip
2011/05/05 | 156 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.aux
2011/05/05 | 3368 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.log
2011/05/05 | 64982 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.pdf
@@ -238782,17 +238779,17 @@
2015/06/21 | 70901 | macros/latex/contrib/tufte-latex/tufte-common.def
2015/06/21 | 928 | macros/latex/contrib/tufte-latex/tufte-handout.cls
2015/06/22 | 643007 | macros/latex/contrib/tufte-latex.zip
-2023/01/16 | 39743 | macros/latex/contrib/tugboat/ltubguid.ltx
-2023/01/16 | 363980 | macros/latex/contrib/tugboat/ltubguid.pdf
-2023/01/16 | 22525 | macros/latex/contrib/tugboat/ltugbib.bst
-2023/01/16 | 189 | macros/latex/contrib/tugboat/manifest.txt
-2023/01/16 | 2025 | macros/latex/contrib/tugboat/NEWS
-2023/01/16 | 2676 | macros/latex/contrib/tugboat/README
-2023/01/16 | 41597 | macros/latex/contrib/tugboat/tugboat.bst
-2023/01/16 | 144729 | macros/latex/contrib/tugboat/tugboat.dtx
-2023/01/16 | 2925 | macros/latex/contrib/tugboat/tugboat.ins
-2023/01/16 | 516448 | macros/latex/contrib/tugboat/tugboat.pdf
-2023/01/16 | 931272 | macros/latex/contrib/tugboat.zip
+2023/03/08 | 39743 | macros/latex/contrib/tugboat/ltubguid.ltx
+2023/03/08 | 363060 | macros/latex/contrib/tugboat/ltubguid.pdf
+2023/03/08 | 22525 | macros/latex/contrib/tugboat/ltugbib.bst
+2023/03/08 | 189 | macros/latex/contrib/tugboat/manifest.txt
+2023/03/08 | 2292 | macros/latex/contrib/tugboat/NEWS
+2023/03/08 | 2676 | macros/latex/contrib/tugboat/README
+2023/03/08 | 41708 | macros/latex/contrib/tugboat/tugboat.bst
+2023/03/08 | 145235 | macros/latex/contrib/tugboat/tugboat.dtx
+2023/03/08 | 2925 | macros/latex/contrib/tugboat/tugboat.ins
+2023/03/08 | 516315 | macros/latex/contrib/tugboat/tugboat.pdf
+2023/03/09 | 930565 | macros/latex/contrib/tugboat.zip
2012/07/27 | 232441 | macros/latex/contrib/tui/doc/TUIdoc.pdf
2012/07/27 | 27998 | macros/latex/contrib/tui/doc/TUIdoc.tex
2011/11/30 | 3519 | macros/latex/contrib/tui/example/abstract.tex
@@ -241567,290 +241564,290 @@
2022/04/18 | 501158 | macros/latex/contrib/zwpagelayout/zwpagelayout.pdf
2022/04/18 | 36154 | macros/latex/contrib/zwpagelayout/zwpagelayout.sty
2022/04/18 | 69553 | macros/latex/contrib/zwpagelayout/zwpagelayout.tex
-2022/12/03 | 7104 | macros/latex-dev/base/alltt.dtx
-2022/12/03 | 2890 | macros/latex-dev/base/alltt.ins
-2022/12/03 | 223831 | macros/latex-dev/base/alltt.pdf
-2022/12/03 | 3282 | macros/latex-dev/base/bugs.txt
-2022/12/03 | 264112 | macros/latex-dev/base/cfgguide.pdf
-2022/12/03 | 22720 | macros/latex-dev/base/cfgguide.tex
-2022/12/03 | 42708 | macros/latex-dev/base/changes.old.txt
-2022/12/03 | 394640 | macros/latex-dev/base/changes.txt
-2022/12/03 | 156236 | macros/latex-dev/base/classes.dtx
-2022/12/03 | 4087 | macros/latex-dev/base/classes.ins
-2022/12/03 | 560326 | macros/latex-dev/base/classes.pdf
-2022/12/03 | 414419 | macros/latex-dev/base/clsguide.pdf
-2022/12/03 | 69315 | macros/latex-dev/base/clsguide.tex
-2022/12/03 | 5273 | macros/latex-dev/base/cmextra.ins
-2022/12/03 | 44410 | macros/latex-dev/base/cmfonts.fdd
-2022/12/03 | 4324 | macros/latex-dev/base/cmfonts.ins
-2022/12/03 | 292160 | macros/latex-dev/base/cmfonts.pdf
-2022/12/03 | 257314 | macros/latex-dev/base/cyrguide.pdf
-2022/12/03 | 17779 | macros/latex-dev/base/cyrguide.tex
-2022/12/03 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
-2022/12/03 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
-2022/12/03 | 1075110 | macros/latex-dev/base/doc-code.pdf
-2022/12/03 | 96 | macros/latex-dev/base/doc-code.tex
-2022/12/03 | 242468 | macros/latex-dev/base/doc.dtx
-2022/12/03 | 755547 | macros/latex-dev/base/doc.pdf
-2022/12/03 | 170595 | macros/latex-dev/base/docstrip.dtx
-2022/12/03 | 4273 | macros/latex-dev/base/docstrip.ins
-2022/12/03 | 504178 | macros/latex-dev/base/docstrip.pdf
-2022/12/03 | 4390 | macros/latex-dev/base/ec.ins
-2022/12/03 | 1318126 | macros/latex-dev/base/encguide.pdf
-2022/12/03 | 52813 | macros/latex-dev/base/encguide.tex
-2022/12/03 | 7216 | macros/latex-dev/base/exscale.dtx
-2022/12/03 | 3338 | macros/latex-dev/base/exscale.ins
-2022/12/03 | 204711 | macros/latex-dev/base/exscale.pdf
-2022/12/03 | 23516 | macros/latex-dev/base/fix-cm.dtx
-2022/12/03 | 2892 | macros/latex-dev/base/fix-cm.ins
-2022/12/03 | 287733 | macros/latex-dev/base/fix-cm.pdf
-2022/12/03 | 517838 | macros/latex-dev/base/fntguide.pdf
-2022/12/03 | 108231 | macros/latex-dev/base/fntguide.tex
-2022/12/03 | 60321 | macros/latex-dev/base/fontdef.dtx
-2022/12/03 | 9779 | macros/latex-dev/base/format.ins
-2022/12/03 | 5509 | macros/latex-dev/base/graphpap.dtx
-2022/12/03 | 2892 | macros/latex-dev/base/graphpap.ins
-2022/12/03 | 161713 | macros/latex-dev/base/graphpap.pdf
-2022/12/03 | 2705 | macros/latex-dev/base/idx.tex
-2022/12/03 | 18753 | macros/latex-dev/base/ifthen.dtx
-2022/12/03 | 2888 | macros/latex-dev/base/ifthen.ins
-2022/12/03 | 221211 | macros/latex-dev/base/ifthen.pdf
-2022/12/03 | 106904 | macros/latex-dev/base/inputenc.dtx
-2022/12/03 | 5714 | macros/latex-dev/base/inputenc.ins
-2022/12/03 | 318204 | macros/latex-dev/base/inputenc.pdf
-2022/12/03 | 4079 | macros/latex-dev/base/lablst.tex
-2022/12/03 | 13759 | macros/latex-dev/base/lamport-manual.err
-2022/12/03 | 170878 | macros/latex-dev/base/lamport-manual.pdf
-2022/12/03 | 38730 | macros/latex-dev/base/latex209.dtx
-2022/12/03 | 4219 | macros/latex-dev/base/latex209.ins
-2022/12/03 | 45347 | macros/latex-dev/base/latexrelease.dtx
-2022/12/03 | 6047 | macros/latex-dev/base/latexrelease.ins
-2022/12/03 | 282115 | macros/latex-dev/base/latexrelease.pdf
-2022/12/03 | 6709 | macros/latex-dev/base/latexsym.dtx
-2022/12/03 | 5041 | macros/latex-dev/base/latexsym.ins
-2022/12/03 | 200760 | macros/latex-dev/base/latexsym.pdf
-2022/12/03 | 52710 | macros/latex-dev/base/lb2.err
-2022/12/03 | 252140 | macros/latex-dev/base/lb2.pdf
-2022/12/03 | 1279 | macros/latex-dev/base/legal.txt
-2022/12/03 | 63280 | macros/latex-dev/base/letter.dtx
-2022/12/03 | 3372 | macros/latex-dev/base/letter.ins
-2022/12/03 | 337430 | macros/latex-dev/base/letter.pdf
-2022/12/03 | 20652 | macros/latex-dev/base/lgc2.err
-2022/12/03 | 215684 | macros/latex-dev/base/lgc2.pdf
-2022/12/03 | 9068 | macros/latex-dev/base/lppl-1-0.txt
-2022/12/03 | 14341 | macros/latex-dev/base/lppl-1-1.txt
-2022/12/03 | 14421 | macros/latex-dev/base/lppl-1-2.txt
-2022/12/03 | 132382 | macros/latex-dev/base/lppl.pdf
-2022/12/03 | 23386 | macros/latex-dev/base/lppl.tex
-2022/12/03 | 19040 | macros/latex-dev/base/lppl.txt
-2022/12/03 | 4298 | macros/latex-dev/base/ltalloc.dtx
-2022/12/03 | 17389 | macros/latex-dev/base/ltbibl.dtx
-2022/12/03 | 45712 | macros/latex-dev/base/ltboxes.dtx
-2022/12/03 | 144369 | macros/latex-dev/base/ltclass.dtx
-2022/12/03 | 183578 | macros/latex-dev/base/ltcmd.dtx
-2022/12/03 | 719408 | macros/latex-dev/base/ltcmdhooks-code.pdf
-2022/12/03 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
-2022/12/03 | 478686 | macros/latex-dev/base/ltcmdhooks-doc.pdf
-2022/12/03 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
-2022/12/03 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
-2022/12/03 | 9557 | macros/latex-dev/base/ltcntrl.dtx
-2022/12/03 | 24286 | macros/latex-dev/base/ltcounts.dtx
-2022/12/03 | 92954 | macros/latex-dev/base/ltdefns.dtx
-2022/12/03 | 35984 | macros/latex-dev/base/ltdirchk.dtx
-2022/12/03 | 27069 | macros/latex-dev/base/lterror.dtx
-2022/12/03 | 18711 | macros/latex-dev/base/ltexpl.dtx
-2022/12/03 | 803060 | macros/latex-dev/base/ltfilehook-code.pdf
-2022/12/03 | 105 | macros/latex-dev/base/ltfilehook-code.tex
-2022/12/03 | 547926 | macros/latex-dev/base/ltfilehook-doc.pdf
-2022/12/03 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
-2022/12/03 | 67351 | macros/latex-dev/base/ltfilehook.dtx
-2022/12/03 | 58933 | macros/latex-dev/base/ltfiles.dtx
-2022/12/03 | 50069 | macros/latex-dev/base/ltfinal.dtx
-2022/12/03 | 55687 | macros/latex-dev/base/ltfloat.dtx
-2022/12/03 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
-2022/12/03 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
-2022/12/03 | 82481 | macros/latex-dev/base/ltfssbas.dtx
-2022/12/03 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
-2022/12/03 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
-2022/12/03 | 84215 | macros/latex-dev/base/ltfssini.dtx
-2022/12/03 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
-2022/12/03 | 1091429 | macros/latex-dev/base/lthooks-code.pdf
-2022/12/03 | 102 | macros/latex-dev/base/lthooks-code.tex
-2022/12/03 | 701473 | macros/latex-dev/base/lthooks-doc.pdf
-2022/12/03 | 238 | macros/latex-dev/base/lthooks-doc.tex
-2022/12/03 | 211770 | macros/latex-dev/base/lthooks.dtx
-2022/12/03 | 4945 | macros/latex-dev/base/lthyphen.dtx
-2022/12/03 | 5859 | macros/latex-dev/base/ltidxglo.dtx
-2022/12/03 | 19853 | macros/latex-dev/base/ltkeys.dtx
-2022/12/03 | 4757 | macros/latex-dev/base/ltlength.dtx
-2022/12/03 | 36152 | macros/latex-dev/base/ltlists.dtx
-2022/12/03 | 3725 | macros/latex-dev/base/ltlogos.dtx
-2022/12/03 | 74886 | macros/latex-dev/base/ltluatex.dtx
-2022/12/03 | 324910 | macros/latex-dev/base/ltluatex.pdf
-2022/12/03 | 715658 | macros/latex-dev/base/ltmarks-code.pdf
-2022/12/03 | 102 | macros/latex-dev/base/ltmarks-code.tex
-2022/12/03 | 586024 | macros/latex-dev/base/ltmarks-doc.pdf
-2022/12/03 | 238 | macros/latex-dev/base/ltmarks-doc.tex
-2022/12/03 | 63132 | macros/latex-dev/base/ltmarks.dtx
-2022/12/03 | 41493 | macros/latex-dev/base/ltmath.dtx
-2022/12/03 | 6213 | macros/latex-dev/base/ltmeta.dtx
-2022/12/03 | 59070 | macros/latex-dev/base/ltmiscen.dtx
-2022/12/03 | 161518 | macros/latex-dev/base/ltnews01.pdf
-2022/12/03 | 5246 | macros/latex-dev/base/ltnews01.tex
-2022/12/03 | 159792 | macros/latex-dev/base/ltnews02.pdf
-2022/12/03 | 5462 | macros/latex-dev/base/ltnews02.tex
-2022/12/03 | 159332 | macros/latex-dev/base/ltnews03.pdf
-2022/12/03 | 5369 | macros/latex-dev/base/ltnews03.tex
-2022/12/03 | 152525 | macros/latex-dev/base/ltnews04.pdf
-2022/12/03 | 5678 | macros/latex-dev/base/ltnews04.tex
-2022/12/03 | 174494 | macros/latex-dev/base/ltnews05.pdf
-2022/12/03 | 5699 | macros/latex-dev/base/ltnews05.tex
-2022/12/03 | 142849 | macros/latex-dev/base/ltnews06.pdf
-2022/12/03 | 5544 | macros/latex-dev/base/ltnews06.tex
-2022/12/03 | 137811 | macros/latex-dev/base/ltnews07.pdf
-2022/12/03 | 5576 | macros/latex-dev/base/ltnews07.tex
-2022/12/03 | 155053 | macros/latex-dev/base/ltnews08.pdf
-2022/12/03 | 5732 | macros/latex-dev/base/ltnews08.tex
-2022/12/03 | 129570 | macros/latex-dev/base/ltnews09.pdf
-2022/12/03 | 5451 | macros/latex-dev/base/ltnews09.tex
-2022/12/03 | 169416 | macros/latex-dev/base/ltnews10.pdf
-2022/12/03 | 5825 | macros/latex-dev/base/ltnews10.tex
-2022/12/03 | 111948 | macros/latex-dev/base/ltnews11.pdf
-2022/12/03 | 5529 | macros/latex-dev/base/ltnews11.tex
-2022/12/03 | 156551 | macros/latex-dev/base/ltnews12.pdf
-2022/12/03 | 5574 | macros/latex-dev/base/ltnews12.tex
-2022/12/03 | 182225 | macros/latex-dev/base/ltnews13.pdf
-2022/12/03 | 7029 | macros/latex-dev/base/ltnews13.tex
-2022/12/03 | 170473 | macros/latex-dev/base/ltnews14.pdf
-2022/12/03 | 6424 | macros/latex-dev/base/ltnews14.tex
-2022/12/03 | 130309 | macros/latex-dev/base/ltnews15.pdf
-2022/12/03 | 5986 | macros/latex-dev/base/ltnews15.tex
-2022/12/03 | 138073 | macros/latex-dev/base/ltnews16.pdf
-2022/12/03 | 5775 | macros/latex-dev/base/ltnews16.tex
-2022/12/03 | 166228 | macros/latex-dev/base/ltnews17.pdf
-2022/12/03 | 8970 | macros/latex-dev/base/ltnews17.tex
-2022/12/03 | 38033 | macros/latex-dev/base/ltnews18.pdf
-2022/12/03 | 1341 | macros/latex-dev/base/ltnews18.tex
-2022/12/03 | 230028 | macros/latex-dev/base/ltnews19.pdf
-2022/12/03 | 4170 | macros/latex-dev/base/ltnews19.tex
-2022/12/03 | 318548 | macros/latex-dev/base/ltnews20.pdf
-2022/12/03 | 7221 | macros/latex-dev/base/ltnews20.tex
-2022/12/03 | 244867 | macros/latex-dev/base/ltnews21.pdf
-2022/12/03 | 9926 | macros/latex-dev/base/ltnews21.tex
-2022/12/03 | 317773 | macros/latex-dev/base/ltnews22.pdf
-2022/12/03 | 10792 | macros/latex-dev/base/ltnews22.tex
-2022/12/03 | 286591 | macros/latex-dev/base/ltnews23.pdf
-2022/12/03 | 10791 | macros/latex-dev/base/ltnews23.tex
-2022/12/03 | 265279 | macros/latex-dev/base/ltnews24.pdf
-2022/12/03 | 12334 | macros/latex-dev/base/ltnews24.tex
-2022/12/03 | 204935 | macros/latex-dev/base/ltnews25.pdf
-2022/12/03 | 5588 | macros/latex-dev/base/ltnews25.tex
-2022/12/03 | 379462 | macros/latex-dev/base/ltnews26.pdf
-2022/12/03 | 10798 | macros/latex-dev/base/ltnews26.tex
-2022/12/03 | 250592 | macros/latex-dev/base/ltnews27.pdf
-2022/12/03 | 5671 | macros/latex-dev/base/ltnews27.tex
-2022/12/03 | 376643 | macros/latex-dev/base/ltnews28.pdf
-2022/12/03 | 15047 | macros/latex-dev/base/ltnews28.tex
-2022/12/03 | 455107 | macros/latex-dev/base/ltnews29.pdf
-2022/12/03 | 18944 | macros/latex-dev/base/ltnews29.tex
-2022/12/03 | 511909 | macros/latex-dev/base/ltnews30.pdf
-2022/12/03 | 23637 | macros/latex-dev/base/ltnews30.tex
-2022/12/03 | 526323 | macros/latex-dev/base/ltnews31.pdf
-2022/12/03 | 30428 | macros/latex-dev/base/ltnews31.tex
-2022/12/03 | 546160 | macros/latex-dev/base/ltnews32.pdf
-2022/12/03 | 33239 | macros/latex-dev/base/ltnews32.tex
-2022/12/03 | 522412 | macros/latex-dev/base/ltnews33.pdf
-2022/12/03 | 33907 | macros/latex-dev/base/ltnews33.tex
-2022/12/03 | 508044 | macros/latex-dev/base/ltnews34.pdf
-2022/12/03 | 32307 | macros/latex-dev/base/ltnews34.tex
-2022/12/03 | 563089 | macros/latex-dev/base/ltnews35.pdf
-2022/12/03 | 38793 | macros/latex-dev/base/ltnews35.tex
-2022/12/03 | 517565 | macros/latex-dev/base/ltnews36.pdf
-2022/12/03 | 19329 | macros/latex-dev/base/ltnews36.tex
-2022/12/03 | 408962 | macros/latex-dev/base/ltnews37.pdf
-2022/12/03 | 11852 | macros/latex-dev/base/ltnews37.tex
-2022/12/03 | 20469 | macros/latex-dev/base/ltnews.cls
-2022/12/03 | 1255282 | macros/latex-dev/base/ltnews.pdf
-2022/12/03 | 8367 | macros/latex-dev/base/ltnews.tex
-2022/12/03 | 148294 | macros/latex-dev/base/ltoutenc.dtx
-2022/12/03 | 3367 | macros/latex-dev/base/ltoutenc.ins
-2022/12/03 | 178723 | macros/latex-dev/base/ltoutput.dtx
-2022/12/03 | 14091 | macros/latex-dev/base/ltpage.dtx
-2022/12/03 | 2728 | macros/latex-dev/base/ltpageno.dtx
-2022/12/03 | 667129 | macros/latex-dev/base/ltpara-code.pdf
-2022/12/03 | 99 | macros/latex-dev/base/ltpara-code.tex
-2022/12/03 | 560008 | macros/latex-dev/base/ltpara-doc.pdf
-2022/12/03 | 234 | macros/latex-dev/base/ltpara-doc.tex
-2022/12/03 | 51606 | macros/latex-dev/base/ltpara.dtx
-2022/12/03 | 6155 | macros/latex-dev/base/ltpar.dtx
-2022/12/03 | 69002 | macros/latex-dev/base/ltpictur.dtx
-2022/12/03 | 59499 | macros/latex-dev/base/ltplain.dtx
-2022/12/03 | 33946 | macros/latex-dev/base/ltsect.dtx
-2022/12/03 | 820928 | macros/latex-dev/base/ltshipout-code.pdf
-2022/12/03 | 104 | macros/latex-dev/base/ltshipout-code.tex
-2022/12/03 | 565931 | macros/latex-dev/base/ltshipout-doc.pdf
-2022/12/03 | 240 | macros/latex-dev/base/ltshipout-doc.tex
-2022/12/03 | 81202 | macros/latex-dev/base/ltshipout.dtx
-2022/12/03 | 45754 | macros/latex-dev/base/ltspace.dtx
-2022/12/03 | 47896 | macros/latex-dev/base/lttab.dtx
-2022/12/03 | 90660 | macros/latex-dev/base/lttextcomp.dtx
-2022/12/03 | 8731 | macros/latex-dev/base/ltthm.dtx
-2022/12/03 | 15384 | macros/latex-dev/base/ltvers.dtx
-2022/12/03 | 219349 | macros/latex-dev/base/ltx3info.pdf
-2022/12/03 | 18299 | macros/latex-dev/base/ltx3info.tex
-2022/12/03 | 27122 | macros/latex-dev/base/ltxcheck.tex
-2022/12/03 | 22665 | macros/latex-dev/base/ltxdoc.dtx
-2022/12/03 | 243286 | macros/latex-dev/base/ltxdoc.pdf
-2022/12/03 | 7524 | macros/latex-dev/base/ltxguide.cls
-2022/12/03 | 18363 | macros/latex-dev/base/ltxref.dtx
-2022/12/03 | 10601 | macros/latex-dev/base/makeindx.dtx
-2022/12/03 | 3434 | macros/latex-dev/base/makeindx.ins
-2022/12/03 | 165821 | macros/latex-dev/base/makeindx.pdf
-2022/12/03 | 11124 | macros/latex-dev/base/manifest.txt
-2022/12/03 | 1937 | macros/latex-dev/base/minimal.cls
-2022/12/03 | 257804 | macros/latex-dev/base/modguide.pdf
-2022/12/03 | 16497 | macros/latex-dev/base/modguide.tex
-2022/12/03 | 4254 | macros/latex-dev/base/newdc.ins
-2022/12/03 | 6357 | macros/latex-dev/base/newlfont.dtx
-2022/12/03 | 18399 | macros/latex-dev/base/nfssfont.dtx
-2022/12/03 | 2893 | macros/latex-dev/base/nfssfont.ins
-2022/12/03 | 211180 | macros/latex-dev/base/nfssfont.pdf
-2022/12/03 | 3960 | macros/latex-dev/base/olddc.ins
-2022/12/03 | 8626 | macros/latex-dev/base/oldlfont.dtx
-2022/12/03 | 9345 | macros/latex-dev/base/preload.dtx
-2022/12/03 | 13589 | macros/latex-dev/base/proc.dtx
-2022/12/03 | 3401 | macros/latex-dev/base/proc.ins
-2022/12/03 | 227059 | macros/latex-dev/base/proc.pdf
-2022/12/03 | 3100 | macros/latex-dev/base/README.md
-2022/12/03 | 7200 | macros/latex-dev/base/sample2e.tex
-2022/12/03 | 89727 | macros/latex-dev/base/slides.dtx
-2022/12/03 | 6760 | macros/latex-dev/base/slides.ins
-2022/12/03 | 375518 | macros/latex-dev/base/slides.pdf
-2022/12/03 | 15699 | macros/latex-dev/base/slifonts.fdd
-2022/12/03 | 234191 | macros/latex-dev/base/slifonts.pdf
-2022/12/03 | 1694 | macros/latex-dev/base/small2e.tex
-2022/12/03 | 9401 | macros/latex-dev/base/source2edoc.cls
-2022/12/03 | 5789493 | macros/latex-dev/base/source2e.pdf
-2022/12/03 | 15306 | macros/latex-dev/base/source2e.tex
-2022/12/03 | 9395 | macros/latex-dev/base/syntonly.dtx
-2022/12/03 | 2896 | macros/latex-dev/base/syntonly.ins
-2022/12/03 | 189819 | macros/latex-dev/base/syntonly.pdf
-2022/12/03 | 12520 | macros/latex-dev/base/testpage.tex
-2022/12/03 | 172867 | macros/latex-dev/base/tlc2.err
-2022/12/03 | 290615 | macros/latex-dev/base/tlc2.pdf
-2022/12/03 | 12242 | macros/latex-dev/base/tulm.fdd
-2022/12/03 | 3781 | macros/latex-dev/base/tulm.ins
-2022/12/03 | 162772 | macros/latex-dev/base/tulm.pdf
-2022/12/03 | 3181 | macros/latex-dev/base/unpack.ins
-2022/12/03 | 438515 | macros/latex-dev/base/usrguide-historic.pdf
-2022/12/03 | 68732 | macros/latex-dev/base/usrguide-historic.tex
-2022/12/03 | 474808 | macros/latex-dev/base/usrguide.pdf
-2022/12/03 | 51005 | macros/latex-dev/base/usrguide.tex
-2022/12/03 | 92280 | macros/latex-dev/base/utf8ienc.dtx
-2022/12/03 | 353428 | macros/latex-dev/base/utf8ienc.pdf
-2022/12/03 | 10251 | macros/latex-dev/base/webcomp.err
-2022/12/03 | 146198 | macros/latex-dev/base/webcomp.pdf
-2022/12/03 | 38914585 | macros/latex-dev/base.zip
+2023/03/09 | 7104 | macros/latex-dev/base/alltt.dtx
+2023/03/09 | 2890 | macros/latex-dev/base/alltt.ins
+2023/03/09 | 223829 | macros/latex-dev/base/alltt.pdf
+2023/03/09 | 3282 | macros/latex-dev/base/bugs.txt
+2023/03/09 | 264161 | macros/latex-dev/base/cfgguide.pdf
+2023/03/09 | 22723 | macros/latex-dev/base/cfgguide.tex
+2023/03/09 | 42708 | macros/latex-dev/base/changes.old.txt
+2023/03/09 | 395207 | macros/latex-dev/base/changes.txt
+2023/03/09 | 156236 | macros/latex-dev/base/classes.dtx
+2023/03/09 | 4087 | macros/latex-dev/base/classes.ins
+2023/03/09 | 560248 | macros/latex-dev/base/classes.pdf
+2023/03/09 | 414447 | macros/latex-dev/base/clsguide.pdf
+2023/03/09 | 69318 | macros/latex-dev/base/clsguide.tex
+2023/03/09 | 5273 | macros/latex-dev/base/cmextra.ins
+2023/03/09 | 44410 | macros/latex-dev/base/cmfonts.fdd
+2023/03/09 | 4324 | macros/latex-dev/base/cmfonts.ins
+2023/03/09 | 292136 | macros/latex-dev/base/cmfonts.pdf
+2023/03/09 | 257355 | macros/latex-dev/base/cyrguide.pdf
+2023/03/09 | 17782 | macros/latex-dev/base/cyrguide.tex
+2023/03/09 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
+2023/03/09 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
+2023/03/09 | 1074767 | macros/latex-dev/base/doc-code.pdf
+2023/03/09 | 96 | macros/latex-dev/base/doc-code.tex
+2023/03/09 | 242468 | macros/latex-dev/base/doc.dtx
+2023/03/09 | 755242 | macros/latex-dev/base/doc.pdf
+2023/03/09 | 170595 | macros/latex-dev/base/docstrip.dtx
+2023/03/09 | 4273 | macros/latex-dev/base/docstrip.ins
+2023/03/09 | 504361 | macros/latex-dev/base/docstrip.pdf
+2023/03/09 | 4390 | macros/latex-dev/base/ec.ins
+2023/03/09 | 1318139 | macros/latex-dev/base/encguide.pdf
+2023/03/09 | 52813 | macros/latex-dev/base/encguide.tex
+2023/03/09 | 7216 | macros/latex-dev/base/exscale.dtx
+2023/03/09 | 3338 | macros/latex-dev/base/exscale.ins
+2023/03/09 | 204709 | macros/latex-dev/base/exscale.pdf
+2023/03/09 | 23516 | macros/latex-dev/base/fix-cm.dtx
+2023/03/09 | 2892 | macros/latex-dev/base/fix-cm.ins
+2023/03/09 | 287724 | macros/latex-dev/base/fix-cm.pdf
+2023/03/09 | 517890 | macros/latex-dev/base/fntguide.pdf
+2023/03/09 | 108234 | macros/latex-dev/base/fntguide.tex
+2023/03/09 | 60321 | macros/latex-dev/base/fontdef.dtx
+2023/03/09 | 9779 | macros/latex-dev/base/format.ins
+2023/03/09 | 5509 | macros/latex-dev/base/graphpap.dtx
+2023/03/09 | 2892 | macros/latex-dev/base/graphpap.ins
+2023/03/09 | 161725 | macros/latex-dev/base/graphpap.pdf
+2023/03/09 | 2705 | macros/latex-dev/base/idx.tex
+2023/03/09 | 18753 | macros/latex-dev/base/ifthen.dtx
+2023/03/09 | 2888 | macros/latex-dev/base/ifthen.ins
+2023/03/09 | 221226 | macros/latex-dev/base/ifthen.pdf
+2023/03/09 | 106904 | macros/latex-dev/base/inputenc.dtx
+2023/03/09 | 5714 | macros/latex-dev/base/inputenc.ins
+2023/03/09 | 318166 | macros/latex-dev/base/inputenc.pdf
+2023/03/09 | 4079 | macros/latex-dev/base/lablst.tex
+2023/03/09 | 13759 | macros/latex-dev/base/lamport-manual.err
+2023/03/09 | 170874 | macros/latex-dev/base/lamport-manual.pdf
+2023/03/09 | 38730 | macros/latex-dev/base/latex209.dtx
+2023/03/09 | 4219 | macros/latex-dev/base/latex209.ins
+2023/03/09 | 45347 | macros/latex-dev/base/latexrelease.dtx
+2023/03/09 | 6047 | macros/latex-dev/base/latexrelease.ins
+2023/03/09 | 282105 | macros/latex-dev/base/latexrelease.pdf
+2023/03/09 | 6709 | macros/latex-dev/base/latexsym.dtx
+2023/03/09 | 5041 | macros/latex-dev/base/latexsym.ins
+2023/03/09 | 200762 | macros/latex-dev/base/latexsym.pdf
+2023/03/09 | 52887 | macros/latex-dev/base/lb2.err
+2023/03/09 | 252313 | macros/latex-dev/base/lb2.pdf
+2023/03/09 | 1279 | macros/latex-dev/base/legal.txt
+2023/03/09 | 63280 | macros/latex-dev/base/letter.dtx
+2023/03/09 | 3372 | macros/latex-dev/base/letter.ins
+2023/03/09 | 337493 | macros/latex-dev/base/letter.pdf
+2023/03/09 | 21229 | macros/latex-dev/base/lgc2.err
+2023/03/09 | 217560 | macros/latex-dev/base/lgc2.pdf
+2023/03/09 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2023/03/09 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2023/03/09 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2023/03/09 | 132384 | macros/latex-dev/base/lppl.pdf
+2023/03/09 | 23386 | macros/latex-dev/base/lppl.tex
+2023/03/09 | 19040 | macros/latex-dev/base/lppl.txt
+2023/03/09 | 4298 | macros/latex-dev/base/ltalloc.dtx
+2023/03/09 | 17389 | macros/latex-dev/base/ltbibl.dtx
+2023/03/09 | 45712 | macros/latex-dev/base/ltboxes.dtx
+2023/03/09 | 144369 | macros/latex-dev/base/ltclass.dtx
+2023/03/09 | 183578 | macros/latex-dev/base/ltcmd.dtx
+2023/03/09 | 719205 | macros/latex-dev/base/ltcmdhooks-code.pdf
+2023/03/09 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
+2023/03/09 | 478517 | macros/latex-dev/base/ltcmdhooks-doc.pdf
+2023/03/09 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
+2023/03/09 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
+2023/03/09 | 9557 | macros/latex-dev/base/ltcntrl.dtx
+2023/03/09 | 24286 | macros/latex-dev/base/ltcounts.dtx
+2023/03/09 | 92954 | macros/latex-dev/base/ltdefns.dtx
+2023/03/09 | 35984 | macros/latex-dev/base/ltdirchk.dtx
+2023/03/09 | 27069 | macros/latex-dev/base/lterror.dtx
+2023/03/09 | 18711 | macros/latex-dev/base/ltexpl.dtx
+2023/03/09 | 803151 | macros/latex-dev/base/ltfilehook-code.pdf
+2023/03/09 | 105 | macros/latex-dev/base/ltfilehook-code.tex
+2023/03/09 | 547988 | macros/latex-dev/base/ltfilehook-doc.pdf
+2023/03/09 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
+2023/03/09 | 67351 | macros/latex-dev/base/ltfilehook.dtx
+2023/03/09 | 59322 | macros/latex-dev/base/ltfiles.dtx
+2023/03/09 | 50069 | macros/latex-dev/base/ltfinal.dtx
+2023/03/09 | 55687 | macros/latex-dev/base/ltfloat.dtx
+2023/03/09 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
+2023/03/09 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
+2023/03/09 | 82481 | macros/latex-dev/base/ltfssbas.dtx
+2023/03/09 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
+2023/03/09 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
+2023/03/09 | 84215 | macros/latex-dev/base/ltfssini.dtx
+2023/03/09 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
+2023/03/09 | 1091279 | macros/latex-dev/base/lthooks-code.pdf
+2023/03/09 | 102 | macros/latex-dev/base/lthooks-code.tex
+2023/03/09 | 701283 | macros/latex-dev/base/lthooks-doc.pdf
+2023/03/09 | 238 | macros/latex-dev/base/lthooks-doc.tex
+2023/03/09 | 211770 | macros/latex-dev/base/lthooks.dtx
+2023/03/09 | 4945 | macros/latex-dev/base/lthyphen.dtx
+2023/03/09 | 5859 | macros/latex-dev/base/ltidxglo.dtx
+2023/03/09 | 19853 | macros/latex-dev/base/ltkeys.dtx
+2023/03/09 | 4757 | macros/latex-dev/base/ltlength.dtx
+2023/03/09 | 36152 | macros/latex-dev/base/ltlists.dtx
+2023/03/09 | 3725 | macros/latex-dev/base/ltlogos.dtx
+2023/03/09 | 74921 | macros/latex-dev/base/ltluatex.dtx
+2023/03/09 | 325056 | macros/latex-dev/base/ltluatex.pdf
+2023/03/09 | 715474 | macros/latex-dev/base/ltmarks-code.pdf
+2023/03/09 | 102 | macros/latex-dev/base/ltmarks-code.tex
+2023/03/09 | 585862 | macros/latex-dev/base/ltmarks-doc.pdf
+2023/03/09 | 238 | macros/latex-dev/base/ltmarks-doc.tex
+2023/03/09 | 63132 | macros/latex-dev/base/ltmarks.dtx
+2023/03/09 | 41493 | macros/latex-dev/base/ltmath.dtx
+2023/03/09 | 6213 | macros/latex-dev/base/ltmeta.dtx
+2023/03/09 | 59070 | macros/latex-dev/base/ltmiscen.dtx
+2023/03/09 | 161534 | macros/latex-dev/base/ltnews01.pdf
+2023/03/09 | 5246 | macros/latex-dev/base/ltnews01.tex
+2023/03/09 | 159811 | macros/latex-dev/base/ltnews02.pdf
+2023/03/09 | 5462 | macros/latex-dev/base/ltnews02.tex
+2023/03/09 | 159349 | macros/latex-dev/base/ltnews03.pdf
+2023/03/09 | 5369 | macros/latex-dev/base/ltnews03.tex
+2023/03/09 | 152545 | macros/latex-dev/base/ltnews04.pdf
+2023/03/09 | 5678 | macros/latex-dev/base/ltnews04.tex
+2023/03/09 | 174686 | macros/latex-dev/base/ltnews05.pdf
+2023/03/09 | 5699 | macros/latex-dev/base/ltnews05.tex
+2023/03/09 | 142870 | macros/latex-dev/base/ltnews06.pdf
+2023/03/09 | 5544 | macros/latex-dev/base/ltnews06.tex
+2023/03/09 | 138211 | macros/latex-dev/base/ltnews07.pdf
+2023/03/09 | 5576 | macros/latex-dev/base/ltnews07.tex
+2023/03/09 | 155426 | macros/latex-dev/base/ltnews08.pdf
+2023/03/09 | 5732 | macros/latex-dev/base/ltnews08.tex
+2023/03/09 | 129989 | macros/latex-dev/base/ltnews09.pdf
+2023/03/09 | 5451 | macros/latex-dev/base/ltnews09.tex
+2023/03/09 | 169414 | macros/latex-dev/base/ltnews10.pdf
+2023/03/09 | 5825 | macros/latex-dev/base/ltnews10.tex
+2023/03/09 | 112191 | macros/latex-dev/base/ltnews11.pdf
+2023/03/09 | 5529 | macros/latex-dev/base/ltnews11.tex
+2023/03/09 | 156746 | macros/latex-dev/base/ltnews12.pdf
+2023/03/09 | 5574 | macros/latex-dev/base/ltnews12.tex
+2023/03/09 | 182464 | macros/latex-dev/base/ltnews13.pdf
+2023/03/09 | 7029 | macros/latex-dev/base/ltnews13.tex
+2023/03/09 | 170716 | macros/latex-dev/base/ltnews14.pdf
+2023/03/09 | 6424 | macros/latex-dev/base/ltnews14.tex
+2023/03/09 | 130323 | macros/latex-dev/base/ltnews15.pdf
+2023/03/09 | 5986 | macros/latex-dev/base/ltnews15.tex
+2023/03/09 | 138090 | macros/latex-dev/base/ltnews16.pdf
+2023/03/09 | 5775 | macros/latex-dev/base/ltnews16.tex
+2023/03/09 | 166247 | macros/latex-dev/base/ltnews17.pdf
+2023/03/09 | 8970 | macros/latex-dev/base/ltnews17.tex
+2023/03/09 | 38320 | macros/latex-dev/base/ltnews18.pdf
+2023/03/09 | 1341 | macros/latex-dev/base/ltnews18.tex
+2023/03/09 | 230181 | macros/latex-dev/base/ltnews19.pdf
+2023/03/09 | 4190 | macros/latex-dev/base/ltnews19.tex
+2023/03/09 | 318566 | macros/latex-dev/base/ltnews20.pdf
+2023/03/09 | 7241 | macros/latex-dev/base/ltnews20.tex
+2023/03/09 | 244870 | macros/latex-dev/base/ltnews21.pdf
+2023/03/09 | 9926 | macros/latex-dev/base/ltnews21.tex
+2023/03/09 | 317779 | macros/latex-dev/base/ltnews22.pdf
+2023/03/09 | 10792 | macros/latex-dev/base/ltnews22.tex
+2023/03/09 | 286600 | macros/latex-dev/base/ltnews23.pdf
+2023/03/09 | 10791 | macros/latex-dev/base/ltnews23.tex
+2023/03/09 | 265292 | macros/latex-dev/base/ltnews24.pdf
+2023/03/09 | 12334 | macros/latex-dev/base/ltnews24.tex
+2023/03/09 | 204948 | macros/latex-dev/base/ltnews25.pdf
+2023/03/09 | 5588 | macros/latex-dev/base/ltnews25.tex
+2023/03/09 | 379472 | macros/latex-dev/base/ltnews26.pdf
+2023/03/09 | 10798 | macros/latex-dev/base/ltnews26.tex
+2023/03/09 | 251083 | macros/latex-dev/base/ltnews27.pdf
+2023/03/09 | 5691 | macros/latex-dev/base/ltnews27.tex
+2023/03/09 | 376652 | macros/latex-dev/base/ltnews28.pdf
+2023/03/09 | 15047 | macros/latex-dev/base/ltnews28.tex
+2023/03/09 | 455116 | macros/latex-dev/base/ltnews29.pdf
+2023/03/09 | 18944 | macros/latex-dev/base/ltnews29.tex
+2023/03/09 | 511895 | macros/latex-dev/base/ltnews30.pdf
+2023/03/09 | 23637 | macros/latex-dev/base/ltnews30.tex
+2023/03/09 | 526332 | macros/latex-dev/base/ltnews31.pdf
+2023/03/09 | 30448 | macros/latex-dev/base/ltnews31.tex
+2023/03/09 | 546186 | macros/latex-dev/base/ltnews32.pdf
+2023/03/09 | 33239 | macros/latex-dev/base/ltnews32.tex
+2023/03/09 | 522416 | macros/latex-dev/base/ltnews33.pdf
+2023/03/09 | 33907 | macros/latex-dev/base/ltnews33.tex
+2023/03/09 | 508052 | macros/latex-dev/base/ltnews34.pdf
+2023/03/09 | 32327 | macros/latex-dev/base/ltnews34.tex
+2023/03/09 | 563098 | macros/latex-dev/base/ltnews35.pdf
+2023/03/09 | 38793 | macros/latex-dev/base/ltnews35.tex
+2023/03/09 | 517571 | macros/latex-dev/base/ltnews36.pdf
+2023/03/09 | 19329 | macros/latex-dev/base/ltnews36.tex
+2023/03/09 | 456714 | macros/latex-dev/base/ltnews37.pdf
+2023/03/09 | 18056 | macros/latex-dev/base/ltnews37.tex
+2023/03/09 | 21284 | macros/latex-dev/base/ltnews.cls
+2023/03/09 | 1265382 | macros/latex-dev/base/ltnews.pdf
+2023/03/09 | 8051 | macros/latex-dev/base/ltnews.tex
+2023/03/09 | 148294 | macros/latex-dev/base/ltoutenc.dtx
+2023/03/09 | 3367 | macros/latex-dev/base/ltoutenc.ins
+2023/03/09 | 178723 | macros/latex-dev/base/ltoutput.dtx
+2023/03/09 | 14091 | macros/latex-dev/base/ltpage.dtx
+2023/03/09 | 2728 | macros/latex-dev/base/ltpageno.dtx
+2023/03/09 | 671573 | macros/latex-dev/base/ltpara-code.pdf
+2023/03/09 | 99 | macros/latex-dev/base/ltpara-code.tex
+2023/03/09 | 559554 | macros/latex-dev/base/ltpara-doc.pdf
+2023/03/09 | 234 | macros/latex-dev/base/ltpara-doc.tex
+2023/03/09 | 54672 | macros/latex-dev/base/ltpara.dtx
+2023/03/09 | 6155 | macros/latex-dev/base/ltpar.dtx
+2023/03/09 | 69002 | macros/latex-dev/base/ltpictur.dtx
+2023/03/09 | 59499 | macros/latex-dev/base/ltplain.dtx
+2023/03/09 | 33946 | macros/latex-dev/base/ltsect.dtx
+2023/03/09 | 821006 | macros/latex-dev/base/ltshipout-code.pdf
+2023/03/09 | 104 | macros/latex-dev/base/ltshipout-code.tex
+2023/03/09 | 566006 | macros/latex-dev/base/ltshipout-doc.pdf
+2023/03/09 | 240 | macros/latex-dev/base/ltshipout-doc.tex
+2023/03/09 | 81202 | macros/latex-dev/base/ltshipout.dtx
+2023/03/09 | 45754 | macros/latex-dev/base/ltspace.dtx
+2023/03/09 | 47896 | macros/latex-dev/base/lttab.dtx
+2023/03/09 | 90660 | macros/latex-dev/base/lttextcomp.dtx
+2023/03/09 | 8731 | macros/latex-dev/base/ltthm.dtx
+2023/03/09 | 15384 | macros/latex-dev/base/ltvers.dtx
+2023/03/09 | 219354 | macros/latex-dev/base/ltx3info.pdf
+2023/03/09 | 18299 | macros/latex-dev/base/ltx3info.tex
+2023/03/09 | 27122 | macros/latex-dev/base/ltxcheck.tex
+2023/03/09 | 22665 | macros/latex-dev/base/ltxdoc.dtx
+2023/03/09 | 243283 | macros/latex-dev/base/ltxdoc.pdf
+2023/03/09 | 7524 | macros/latex-dev/base/ltxguide.cls
+2023/03/09 | 18363 | macros/latex-dev/base/ltxref.dtx
+2023/03/09 | 10601 | macros/latex-dev/base/makeindx.dtx
+2023/03/09 | 3434 | macros/latex-dev/base/makeindx.ins
+2023/03/09 | 165817 | macros/latex-dev/base/makeindx.pdf
+2023/03/09 | 11124 | macros/latex-dev/base/manifest.txt
+2023/03/09 | 1937 | macros/latex-dev/base/minimal.cls
+2023/03/09 | 257827 | macros/latex-dev/base/modguide.pdf
+2023/03/09 | 16500 | macros/latex-dev/base/modguide.tex
+2023/03/09 | 4254 | macros/latex-dev/base/newdc.ins
+2023/03/09 | 6357 | macros/latex-dev/base/newlfont.dtx
+2023/03/09 | 18399 | macros/latex-dev/base/nfssfont.dtx
+2023/03/09 | 2893 | macros/latex-dev/base/nfssfont.ins
+2023/03/09 | 211180 | macros/latex-dev/base/nfssfont.pdf
+2023/03/09 | 3960 | macros/latex-dev/base/olddc.ins
+2023/03/09 | 8626 | macros/latex-dev/base/oldlfont.dtx
+2023/03/09 | 9345 | macros/latex-dev/base/preload.dtx
+2023/03/09 | 13589 | macros/latex-dev/base/proc.dtx
+2023/03/09 | 3401 | macros/latex-dev/base/proc.ins
+2023/03/09 | 227056 | macros/latex-dev/base/proc.pdf
+2023/03/09 | 3100 | macros/latex-dev/base/README.md
+2023/03/09 | 7200 | macros/latex-dev/base/sample2e.tex
+2023/03/09 | 89727 | macros/latex-dev/base/slides.dtx
+2023/03/09 | 6760 | macros/latex-dev/base/slides.ins
+2023/03/09 | 375514 | macros/latex-dev/base/slides.pdf
+2023/03/09 | 15699 | macros/latex-dev/base/slifonts.fdd
+2023/03/09 | 234188 | macros/latex-dev/base/slifonts.pdf
+2023/03/09 | 1694 | macros/latex-dev/base/small2e.tex
+2023/03/09 | 9401 | macros/latex-dev/base/source2edoc.cls
+2023/03/09 | 5797424 | macros/latex-dev/base/source2e.pdf
+2023/03/09 | 15306 | macros/latex-dev/base/source2e.tex
+2023/03/09 | 9395 | macros/latex-dev/base/syntonly.dtx
+2023/03/09 | 2896 | macros/latex-dev/base/syntonly.ins
+2023/03/09 | 189552 | macros/latex-dev/base/syntonly.pdf
+2023/03/09 | 12520 | macros/latex-dev/base/testpage.tex
+2023/03/09 | 173013 | macros/latex-dev/base/tlc2.err
+2023/03/09 | 291015 | macros/latex-dev/base/tlc2.pdf
+2023/03/09 | 12242 | macros/latex-dev/base/tulm.fdd
+2023/03/09 | 3781 | macros/latex-dev/base/tulm.ins
+2023/03/09 | 162766 | macros/latex-dev/base/tulm.pdf
+2023/03/09 | 3181 | macros/latex-dev/base/unpack.ins
+2023/03/09 | 438570 | macros/latex-dev/base/usrguide-historic.pdf
+2023/03/09 | 68735 | macros/latex-dev/base/usrguide-historic.tex
+2023/03/09 | 474841 | macros/latex-dev/base/usrguide.pdf
+2023/03/09 | 51008 | macros/latex-dev/base/usrguide.tex
+2023/03/09 | 92280 | macros/latex-dev/base/utf8ienc.dtx
+2023/03/09 | 353281 | macros/latex-dev/base/utf8ienc.pdf
+2023/03/09 | 10251 | macros/latex-dev/base/webcomp.err
+2023/03/09 | 146195 | macros/latex-dev/base/webcomp.pdf
+2023/03/09 | 38990293 | macros/latex-dev/base.zip
2022/10/31 | 8663 | macros/latex-dev/required/amsmath/amsbsy.dtx
2022/10/31 | 1505 | macros/latex-dev/required/amsmath/amsbsy.ins
2022/10/31 | 174944 | macros/latex-dev/required/amsmath/amsbsy.pdf
@@ -241926,24 +241923,46 @@
2022/10/31 | 10753 | macros/latex-dev/required/graphics/trig.dtx
2022/10/31 | 199266 | macros/latex-dev/required/graphics/trig.pdf
2022/11/02 | 3072859 | macros/latex-dev/required/graphics.zip
-2022/10/31 | 940 | macros/latex-dev/required/latex-lab/changes.txt
-2022/10/31 | 512028 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
-2022/10/31 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex
-2022/10/31 | 375913 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
-2022/10/31 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex
-2022/10/31 | 14019 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
-2022/10/31 | 53084 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
-2022/10/31 | 614913 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
-2022/10/31 | 2823 | macros/latex-dev/required/latex-lab/latex-lab.ins
-2022/10/31 | 16134 | macros/latex-dev/required/latex-lab/latex-lab-new-or.dtx
-2022/10/31 | 529122 | macros/latex-dev/required/latex-lab/latex-lab-new-or.pdf
-2022/10/31 | 2293 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
-2022/10/31 | 290841 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
-2022/10/31 | 1156 | macros/latex-dev/required/latex-lab/README.md
-2022/10/31 | 4396 | macros/latex-dev/required/latex-lab/usage-of-@footnotemark.txt
-2022/10/31 | 22370 | macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt
-2022/10/31 | 1594 | macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt
-2022/11/02 | 2286787 | macros/latex-dev/required/latex-lab.zip
+2023/03/09 | 864389 | macros/latex-dev/required/latex-lab/blocks-code.pdf
+2023/03/09 | 116 | macros/latex-dev/required/latex-lab/blocks-code.tex
+2023/03/09 | 439093 | macros/latex-dev/required/latex-lab/blocks-doc.pdf
+2023/03/09 | 113 | macros/latex-dev/required/latex-lab/blocks-doc.tex
+2023/03/09 | 2288 | macros/latex-dev/required/latex-lab/changes.txt
+2023/03/09 | 517856 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
+2023/03/09 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex
+2023/03/09 | 382232 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
+2023/03/09 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex
+2023/03/09 | 16029 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
+2023/03/09 | 6221 | macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex
+2023/03/09 | 3179 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
+2023/03/09 | 357221 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
+2023/03/09 | 125721 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx
+2023/03/09 | 864389 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf
+2023/03/09 | 82446 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
+2023/03/09 | 799900 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
+2023/03/09 | 4562 | macros/latex-dev/required/latex-lab/latex-lab.ins
+2023/03/09 | 2453 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx
+2023/03/09 | 302106 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
+2023/03/09 | 35532 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx
+2023/03/09 | 608921 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf
+2023/03/09 | 6134 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
+2023/03/09 | 357221 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
+2023/03/09 | 4917 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
+2023/03/09 | 383590 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
+2023/03/09 | 16161 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
+2023/03/09 | 529680 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
+2023/03/09 | 26622 | macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.dtx
+2023/03/09 | 527032 | macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.pdf
+2023/03/09 | 4462 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
+2023/03/09 | 296921 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
+2023/03/09 | 5883 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
+2023/03/09 | 295610 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
+2023/03/09 | 14737 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
+2023/03/09 | 341820 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
+2023/03/09 | 11323 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx
+2023/03/09 | 377979 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf
+2023/03/09 | 1156 | macros/latex-dev/required/latex-lab/README.md
+2023/03/09 | 8103209 | macros/latex-dev/required/latex-lab.zip
2022/10/31 | 14072 | macros/latex-dev/required/tools/afterpage.dtx
2022/10/31 | 2538 | macros/latex-dev/required/tools/afterpage.ins
2022/10/31 | 197738 | macros/latex-dev/required/tools/afterpage.pdf
@@ -243582,14 +243601,14 @@
2022/09/14 | 17200 | macros/luatex/latex/luatruthtable/luatruthtable.tex
2022/09/14 | 1383 | macros/luatex/latex/luatruthtable/README.txt
2022/09/25 | 101701 | macros/luatex/latex/luatruthtable.zip
-2023/02/10 | 16859 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
-2023/02/10 | 2997 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
-2023/02/10 | 105225 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
-2023/02/10 | 173735 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
-2023/02/10 | 25642 | macros/luatex/latex/lua-typo/lua-typo-2021-04-18.sty
-2023/02/10 | 2776 | macros/luatex/latex/lua-typo/README.md
-2023/02/10 | 108475 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
-2023/02/10 | 294176 | macros/luatex/latex/lua-typo.zip
+2023/03/09 | 16859 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
+2021/03/03 | 2997 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
+2023/03/09 | 106404 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
+2023/03/09 | 179022 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
+2021/05/22 | 25642 | macros/luatex/latex/lua-typo/lua-typo-2021-04-18.sty
+2023/03/04 | 2904 | macros/luatex/latex/lua-typo/README.md
+2023/03/09 | 113341 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
+2023/03/09 | 299787 | macros/luatex/latex/lua-typo.zip
2022/06/01 | 1432 | macros/luatex/latex/lua-ul/docstrip-luacode.sty
2022/06/01 | 43771 | macros/luatex/latex/lua-ul/lua-ul.dtx
2022/06/01 | 109525 | macros/luatex/latex/lua-ul/lua-ul.pdf
@@ -245039,19 +245058,22 @@
2022/03/07 | 20216 | macros/optex/base/colors.opm
2022/12/11 | 15909 | macros/optex/base/doc.opm
2021/04/22 | 657 | macros/optex/base/f-adventor.opm
-2023/02/03 | 11276 | macros/optex/base/fams-ini.opm
+2023/03/09 | 12153 | macros/optex/base/fams-ini.opm
2021/04/22 | 1156 | macros/optex/base/f-antt.opm
2022/05/02 | 652 | macros/optex/base/f-baskervald.opm
2021/04/22 | 665 | macros/optex/base/f-baskerville.opm
2021/04/22 | 679 | macros/optex/base/f-bonum.opm
+2023/02/12 | 1678 | macros/optex/base/f-cabin.opm
2021/01/07 | 718 | macros/optex/base/f-comicneue.opm
2021/04/22 | 646 | macros/optex/base/f-cursor.opm
2021/04/27 | 1191 | macros/optex/base/f-dejavu.opm
2021/04/22 | 1265 | macros/optex/base/f-ebgaramond.opm
-2021/05/21 | 959 | macros/optex/base/f-erewhon.opm
+2023/02/11 | 971 | macros/optex/base/f-erewhon.opm
+2023/03/08 | 2443 | macros/optex/base/f-fira.opm
2021/04/22 | 882 | macros/optex/base/f-garamondl.opm
2021/04/22 | 635 | macros/optex/base/f-gfsbodoni.opm
-2023/02/07 | 10931 | macros/optex/base/f-heros.opm
+2023/02/23 | 10980 | macros/optex/base/f-heros.opm
+2023/03/08 | 553 | macros/optex/base/f-inconsolata.opm
2022/11/29 | 1058 | macros/optex/base/f-iwona.opm
2021/01/07 | 1201 | macros/optex/base/f-kerkis.opm
2021/04/27 | 1468 | macros/optex/base/f-kpfonts.opm
@@ -245067,11 +245089,11 @@
2022/07/11 | 1423 | macros/optex/base/f-montserrat.opm
2021/04/27 | 1337 | macros/optex/base/f-newcm.opm
2022/10/29 | 9000 | macros/optex/base/fnotes.opm
-2023/02/03 | 4594 | macros/optex/base/fonts-catalog.opm
+2023/03/09 | 4748 | macros/optex/base/fonts-catalog.opm
2022/02/22 | 9448 | macros/optex/base/fonts-opmac.opm
2022/02/12 | 2423 | macros/optex/base/fonts-preload.opm
-2022/12/11 | 15674 | macros/optex/base/fonts-resize.opm
-2023/01/30 | 40310 | macros/optex/base/fonts-select.opm
+2023/02/12 | 16749 | macros/optex/base/fonts-resize.opm
+2023/03/09 | 41762 | macros/optex/base/fonts-select.opm
2022/05/22 | 893 | macros/optex/base/f-overlock.opm
2021/04/22 | 694 | macros/optex/base/f-pagella.opm
2021/04/22 | 1515 | macros/optex/base/f-poltawski.opm
@@ -245082,13 +245104,13 @@
2022/06/03 | 904 | macros/optex/base/f-stixtwo.opm
2021/04/22 | 1115 | macros/optex/base/f-technika.opm
2023/02/03 | 684 | macros/optex/base/f-termes.opm
-2021/04/22 | 762 | macros/optex/base/f-xcharter.opm
+2023/03/07 | 856 | macros/optex/base/f-xcharter.opm
2022/06/03 | 742 | macros/optex/base/f-xits.opm
-2022/11/06 | 20551 | macros/optex/base/graphics.opm
-2023/01/30 | 2743 | macros/optex/base/hisyntax-c.opm
+2023/02/18 | 20428 | macros/optex/base/graphics.opm
+2023/03/02 | 3151 | macros/optex/base/hisyntax-c.opm
2022/05/12 | 1109 | macros/optex/base/hisyntax-html.opm
2022/11/17 | 2916 | macros/optex/base/hisyntax-lua.opm
-2022/10/29 | 9673 | macros/optex/base/hi-syntax.opm
+2023/03/02 | 9677 | macros/optex/base/hi-syntax.opm
2021/07/16 | 3014 | macros/optex/base/hisyntax-python.opm
2021/01/07 | 1566 | macros/optex/base/hisyntax-tex.opm
2022/10/29 | 9966 | macros/optex/base/hyperlinks.opm
@@ -245097,7 +245119,7 @@
2022/10/11 | 7206 | macros/optex/base/lang-data.opm
2022/10/11 | 16512 | macros/optex/base/lang-decl.opm
2022/11/18 | 7314 | macros/optex/base/languages.opm
-2022/12/11 | 5225 | macros/optex/base/lists.opm
+2023/02/25 | 5243 | macros/optex/base/lists.opm
2021/01/11 | 2377 | macros/optex/base/logos.opm
2021/04/06 | 7398 | macros/optex/base/luatex-ini.opm
2022/10/29 | 24552 | macros/optex/base/makeindex.opm
@@ -245108,12 +245130,12 @@
2022/12/01 | 11215 | macros/optex/base/math-preload.opm
2023/01/24 | 17853 | macros/optex/base/more-macros.opm
2022/11/26 | 6505 | macros/optex/base/multicolumns.opm
-2023/02/09 | 4074 | macros/optex/base/optex.ini
+2023/03/09 | 4074 | macros/optex/base/optex.ini
2022/12/06 | 28297 | macros/optex/base/optex.lua
2023/01/30 | 8302 | macros/optex/base/others.opm
2022/11/25 | 4624 | macros/optex/base/outlines.opm
2022/10/22 | 11366 | macros/optex/base/output.opm
-2023/01/07 | 26234 | macros/optex/base/parameters.opm
+2023/02/25 | 26894 | macros/optex/base/parameters.opm
2022/10/29 | 5518 | macros/optex/base/pdfuni-string.opm
2022/10/14 | 14785 | macros/optex/base/plain-macros.opm
2023/02/07 | 18431 | macros/optex/base/prefixed.opm
@@ -245140,11 +245162,11 @@
2021/04/13 | 10355 | macros/optex/demo/op-slides.tex
2022/01/13 | 34625 | macros/optex/doc/omls.tex
2020/05/16 | 1460 | macros/optex/doc/optex.1
-2023/02/09 | 1505109 | macros/optex/doc/optex-doc.pdf
-2023/02/09 | 4488 | macros/optex/doc/optex-doc.tex
+2023/03/09 | 1510893 | macros/optex/doc/optex-doc.pdf
+2023/03/09 | 4488 | macros/optex/doc/optex-doc.tex
2022/11/19 | 70805 | macros/optex/doc/optex-math.tex
2022/11/22 | 8487 | macros/optex/doc/optex-techdoc.tex
-2023/02/07 | 89744 | macros/optex/doc/optex-userdoc.tex
+2023/03/02 | 89817 | macros/optex/doc/optex-userdoc.tex
2021/05/02 | 1949 | macros/optex/pkg/emoji.opm
2023/01/30 | 38186 | macros/optex/pkg/math.opm
2022/03/05 | 327 | macros/optex/pkg/minim-mp.opm
@@ -245153,10 +245175,10 @@
2022/11/21 | 22083 | macros/optex/pkg/mte.opm
2022/02/19 | 1282 | macros/optex/pkg/plain-at.opm
2020/11/11 | 85045 | macros/optex/pkg/qrcode.opm
-2022/03/18 | 5084 | macros/optex/pkg/tikz.opm
+2023/03/04 | 5289 | macros/optex/pkg/tikz.opm
2021/05/02 | 7597 | macros/optex/pkg/vlna.opm
-2023/02/09 | 8941 | macros/optex/README
-2023/02/09 | 2515700 | macros/optex.zip
+2023/03/09 | 9090 | macros/optex/README
+2023/03/09 | 2525458 | macros/optex.zip
2023/02/14 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
2023/02/14 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
2023/02/14 | 21474 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mis.mkii
@@ -270802,6 +270824,20 @@
1998/04/28 | 243 | obsolete/support/texshell/ts-9804.Readme.HPUX
1998/04/28 | 238722 | obsolete/support/texshell/ts-9804.tgz
1998/04/28 | 613 | obsolete/support/texshell/ts.lsm
+2017/06/29 | 1340 | obsolete/support/tlaunch/Changes
+2016/02/20 | 35147 | obsolete/support/tlaunch/COPYING
+2017/06/26 | 45360 | obsolete/support/tlaunch/figures/custom_ed.png
+2016/11/29 | 11781 | obsolete/support/tlaunch/figures/tlaunch_rug.png
+2016/11/01 | 9378 | obsolete/support/tlaunch/figures/tlaunch_window.png
+2017/04/23 | 999 | obsolete/support/tlaunch/README
+2017/06/29 | 10600 | obsolete/support/tlaunch/rug.zip
+2017/06/29 | 69371 | obsolete/support/tlaunch/tlaunch-0.5.3-src.zip
+2017/06/29 | 117760 | obsolete/support/tlaunch/tlaunch.exe
+2017/06/29 | 3104 | obsolete/support/tlaunch/tlaunch.ini
+2017/01/28 | 3743 | obsolete/support/tlaunch/tlaunchmode.pl
+2017/06/29 | 330268 | obsolete/support/tlaunch/tlaunch.pdf
+2017/06/28 | 42961 | obsolete/support/tlaunch/tlaunch.tex
+2017/06/29 | 557771 | obsolete/support/tlaunch.zip
2004/09/29 | 3490 | obsolete/support/ttf2tex/README
2004/09/29 | 3834 | obsolete/support/ttf2tex/ttf2tex.cfg
2004/09/29 | 157083 | obsolete/support/ttf2tex/ttf2tex.pdf
@@ -284538,20 +284574,6 @@
2000/02/25 | 46768 | support/tiny_c2l/tiny_t2l.exe
2000/02/25 | 20023 | support/tiny_c2l/tiny_t2l.l
2012/09/29 | 238901 | support/tiny_c2l.zip
-2017/06/29 | 1340 | support/tlaunch/Changes
-2016/02/20 | 35147 | support/tlaunch/COPYING
-2017/06/26 | 45360 | support/tlaunch/figures/custom_ed.png
-2016/11/29 | 11781 | support/tlaunch/figures/tlaunch_rug.png
-2016/11/01 | 9378 | support/tlaunch/figures/tlaunch_window.png
-2017/04/23 | 999 | support/tlaunch/README
-2017/06/29 | 10600 | support/tlaunch/rug.zip
-2017/06/29 | 69371 | support/tlaunch/tlaunch-0.5.3-src.zip
-2017/06/29 | 117760 | support/tlaunch/tlaunch.exe
-2017/06/29 | 3104 | support/tlaunch/tlaunch.ini
-2017/01/28 | 3743 | support/tlaunch/tlaunchmode.pl
-2017/06/29 | 330268 | support/tlaunch/tlaunch.pdf
-2017/06/28 | 42961 | support/tlaunch/tlaunch.tex
-2017/06/29 | 557771 | support/tlaunch.zip
2020/04/22 | 1934 | support/tlcockpit/build.sbt-jdk14
2020/04/22 | 966 | support/tlcockpit/build.sbt-jdk8
2020/04/22 | 31873 | support/tlcockpit/ChangeLog
@@ -288759,14 +288781,14 @@
2023/03/08 | 267440 | systems/texlive/tlnet/archive/biber.doc.r66456.tar.xz
2022/07/24 | 21463940 | systems/texlive/tlnet/archive/biber.i386-freebsd.r63965.tar.xz
2023/03/07 | 21084428 | systems/texlive/tlnet/archive/biber.i386-linux.r66404.tar.xz
-2022/08/28 | 258716 | systems/texlive/tlnet/archive/biber-ms.doc.r64213.tar.xz
-2022/08/24 | 21092560 | systems/texlive/tlnet/archive/biber-ms.i386-linux.r64180.tar.xz
-2022/08/28 | 500 | systems/texlive/tlnet/archive/biber-ms.r64213.tar.xz
-2022/08/28 | 945480 | systems/texlive/tlnet/archive/biber-ms.source.r64213.tar.xz
-2022/08/24 | 86793064 | systems/texlive/tlnet/archive/biber-ms.universal-darwin.r64180.tar.xz
-2022/08/24 | 22842996 | systems/texlive/tlnet/archive/biber-ms.win32.r64180.tar.xz
-2022/08/24 | 35440240 | systems/texlive/tlnet/archive/biber-ms.x86_64-darwinlegacy.r64180.tar.xz
-2022/08/24 | 23549548 | systems/texlive/tlnet/archive/biber-ms.x86_64-linux.r64180.tar.xz
+2023/03/09 | 261028 | systems/texlive/tlnet/archive/biber-ms.doc.r66479.tar.xz
+2023/03/09 | 21092224 | systems/texlive/tlnet/archive/biber-ms.i386-linux.r66479.tar.xz
+2023/03/09 | 504 | systems/texlive/tlnet/archive/biber-ms.r66479.tar.xz
+2023/03/09 | 957440 | systems/texlive/tlnet/archive/biber-ms.source.r66479.tar.xz
+2023/03/09 | 87344364 | systems/texlive/tlnet/archive/biber-ms.universal-darwin.r66479.tar.xz
+2023/03/09 | 22843076 | systems/texlive/tlnet/archive/biber-ms.win32.r66479.tar.xz
+2023/03/09 | 35442280 | systems/texlive/tlnet/archive/biber-ms.x86_64-darwinlegacy.r66479.tar.xz
+2023/03/09 | 23551308 | systems/texlive/tlnet/archive/biber-ms.x86_64-linux.r66479.tar.xz
2023/03/08 | 736 | systems/texlive/tlnet/archive/biber.r66456.tar.xz
2023/03/08 | 963824 | systems/texlive/tlnet/archive/biber.source.r66456.tar.xz
2023/03/07 | 87335564 | systems/texlive/tlnet/archive/biber.universal-darwin.r66404.tar.xz
@@ -288877,8 +288899,8 @@
2022/02/23 | 24920 | systems/texlive/tlnet/archive/biblatex-mla.r62138.tar.xz
2019/02/28 | 134744 | systems/texlive/tlnet/archive/biblatex-morenames.doc.r43049.tar.xz
2019/02/28 | 2448 | systems/texlive/tlnet/archive/biblatex-morenames.r43049.tar.xz
-2022/08/24 | 7479136 | systems/texlive/tlnet/archive/biblatex-ms.doc.r64180.tar.xz
-2022/08/24 | 248772 | systems/texlive/tlnet/archive/biblatex-ms.r64180.tar.xz
+2023/03/09 | 7467104 | systems/texlive/tlnet/archive/biblatex-ms.doc.r66481.tar.xz
+2023/03/09 | 262168 | systems/texlive/tlnet/archive/biblatex-ms.r66481.tar.xz
2019/02/28 | 54860 | systems/texlive/tlnet/archive/biblatex-multiple-dm.doc.r37081.tar.xz
2019/02/28 | 1088 | systems/texlive/tlnet/archive/biblatex-multiple-dm.r37081.tar.xz
2019/02/28 | 424364 | systems/texlive/tlnet/archive/biblatex-musuos.doc.r24097.tar.xz
@@ -292441,9 +292463,9 @@
2019/02/28 | 41296 | systems/texlive/tlnet/archive/frederika2016.r42157.tar.xz
2019/02/28 | 142332 | systems/texlive/tlnet/archive/frege.doc.r27417.tar.xz
2019/02/28 | 4528 | systems/texlive/tlnet/archive/frege.r27417.tar.xz
-2023/02/26 | 234988 | systems/texlive/tlnet/archive/frenchmath.doc.r66155.tar.xz
-2023/02/26 | 2832 | systems/texlive/tlnet/archive/frenchmath.r66155.tar.xz
-2023/02/26 | 13552 | systems/texlive/tlnet/archive/frenchmath.source.r66155.tar.xz
+2023/03/09 | 234896 | systems/texlive/tlnet/archive/frenchmath.doc.r66477.tar.xz
+2023/03/09 | 2832 | systems/texlive/tlnet/archive/frenchmath.r66477.tar.xz
+2023/03/09 | 13568 | systems/texlive/tlnet/archive/frenchmath.source.r66477.tar.xz
2020/10/20 | 191432 | systems/texlive/tlnet/archive/frimurer.doc.r56704.tar.xz
2020/10/20 | 15456 | systems/texlive/tlnet/archive/frimurer.r56704.tar.xz
2020/10/20 | 4184 | systems/texlive/tlnet/archive/frimurer.source.r56704.tar.xz
@@ -293915,14 +293937,14 @@
2019/02/28 | 344 | systems/texlive/tlnet/archive/l3build.amd64-freebsd.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.amd64-netbsd.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.armhf-linux.r46894.tar.xz
-2023/02/27 | 743768 | systems/texlive/tlnet/archive/l3build.doc.r66194.tar.xz
+2023/03/09 | 743760 | systems/texlive/tlnet/archive/l3build.doc.r66476.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.i386-cygwin.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.i386-freebsd.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.i386-linux.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.i386-netbsd.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.i386-solaris.r46894.tar.xz
-2023/02/27 | 35868 | systems/texlive/tlnet/archive/l3build.r66194.tar.xz
-2023/02/27 | 30984 | systems/texlive/tlnet/archive/l3build.source.r66194.tar.xz
+2023/03/09 | 36100 | systems/texlive/tlnet/archive/l3build.r66476.tar.xz
+2023/03/09 | 30996 | systems/texlive/tlnet/archive/l3build.source.r66476.tar.xz
2021/02/25 | 340 | systems/texlive/tlnet/archive/l3build.universal-darwin.r57908.tar.xz
2019/02/28 | 684 | systems/texlive/tlnet/archive/l3build.win32.r46894.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/l3build.x86_64-cygwin.r46894.tar.xz
@@ -294439,13 +294461,13 @@
2020/09/16 | 352 | systems/texlive/tlnet/archive/light-latex-make.amd64-freebsd.r56352.tar.xz
2020/09/16 | 352 | systems/texlive/tlnet/archive/light-latex-make.amd64-netbsd.r56352.tar.xz
2020/09/16 | 352 | systems/texlive/tlnet/archive/light-latex-make.armhf-linux.r56352.tar.xz
-2021/09/21 | 185760 | systems/texlive/tlnet/archive/light-latex-make.doc.r60558.tar.xz
+2023/03/09 | 200260 | systems/texlive/tlnet/archive/light-latex-make.doc.r66474.tar.xz
2020/09/16 | 348 | systems/texlive/tlnet/archive/light-latex-make.i386-cygwin.r56352.tar.xz
2020/09/16 | 352 | systems/texlive/tlnet/archive/light-latex-make.i386-freebsd.r56352.tar.xz
2020/09/16 | 348 | systems/texlive/tlnet/archive/light-latex-make.i386-linux.r56352.tar.xz
2020/09/16 | 348 | systems/texlive/tlnet/archive/light-latex-make.i386-netbsd.r56352.tar.xz
2020/09/16 | 352 | systems/texlive/tlnet/archive/light-latex-make.i386-solaris.r56352.tar.xz
-2021/09/21 | 10568 | systems/texlive/tlnet/archive/light-latex-make.r60558.tar.xz
+2023/03/09 | 10744 | systems/texlive/tlnet/archive/light-latex-make.r66474.tar.xz
2021/02/25 | 348 | systems/texlive/tlnet/archive/light-latex-make.universal-darwin.r57908.tar.xz
2020/09/16 | 688 | systems/texlive/tlnet/archive/light-latex-make.win32.r56352.tar.xz
2020/09/16 | 348 | systems/texlive/tlnet/archive/light-latex-make.x86_64-cygwin.r56352.tar.xz
@@ -299475,7 +299497,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2023/03/08 | 424868 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66415.tar.xz
+2023/03/09 | 424864 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66467.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -299499,7 +299521,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2023/03/08 | 113808 | systems/texlive/tlnet/archive/texlive-scripts.r66415.tar.xz
+2023/03/09 | 113808 | systems/texlive/tlnet/archive/texlive-scripts.r66467.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2022/11/29 | 36264 | systems/texlive/tlnet/archive/texlive-scripts.win32.r65128.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -300946,9 +300968,9 @@
2022/04/24 | 693304 | systems/texlive/tlnet/archive/xduthesis.doc.r63116.tar.xz
2022/04/24 | 113392 | systems/texlive/tlnet/archive/xduthesis.r63116.tar.xz
2022/04/24 | 15976 | systems/texlive/tlnet/archive/xduthesis.source.r63116.tar.xz
-2023/03/06 | 329612 | systems/texlive/tlnet/archive/xduts.doc.r66368.tar.xz
-2023/03/06 | 524312 | systems/texlive/tlnet/archive/xduts.r66368.tar.xz
-2023/03/06 | 45480 | systems/texlive/tlnet/archive/xduts.source.r66368.tar.xz
+2023/03/09 | 329916 | systems/texlive/tlnet/archive/xduts.doc.r66475.tar.xz
+2023/03/09 | 524328 | systems/texlive/tlnet/archive/xduts.r66475.tar.xz
+2023/03/09 | 45552 | systems/texlive/tlnet/archive/xduts.source.r66475.tar.xz
2022/03/01 | 527308 | systems/texlive/tlnet/archive/xdvi.aarch64-linux.r62280.tar.xz
2022/02/27 | 566196 | systems/texlive/tlnet/archive/xdvi.amd64-freebsd.r62206.tar.xz
2022/02/27 | 488448 | systems/texlive/tlnet/archive/xdvi.amd64-netbsd.r62220.tar.xz
@@ -301370,16 +301392,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2022/07/17 | 124404 | systems/texlive/tlnet/install-tl
-2023/03/08 | 5829017 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/03/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/03/09 | 5828995 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/03/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2023/03/08 | 20435431 | systems/texlive/tlnet/install-tl-windows.exe
-2023/03/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/03/08 | 25513809 | systems/texlive/tlnet/install-tl.zip
-2023/03/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/03/09 | 20433061 | systems/texlive/tlnet/install-tl-windows.exe
+2023/03/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/03/09 | 25513808 | systems/texlive/tlnet/install-tl.zip
+2023/03/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -301389,7 +301411,7 @@
2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2023/01/17 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2023/03/08 | 7320 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/03/09 | 7287 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/01/11 | 216583 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -301432,12 +301454,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2023/03/08 | 18073147 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/03/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/03/09 | 18073138 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/03/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2023/03/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2023/03/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/03/08 | 2451500 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/03/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/03/09 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/03/09 | 2452656 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/10/04 | 42404 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -304145,7 +304167,7 @@
2023/02/18 | 94454 | systems/texlive/tlnet/tlpkg/translations/fr.po
2023/02/18 | 88047 | systems/texlive/tlnet/tlpkg/translations/it.po
2023/02/18 | 62994 | systems/texlive/tlnet/tlpkg/translations/ja.po
-2023/03/08 | 47403 | systems/texlive/tlnet/tlpkg/translations/messages.pot
+2023/03/09 | 47403 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2023/02/18 | 58359 | systems/texlive/tlnet/tlpkg/translations/nl.po
2023/02/18 | 67459 | systems/texlive/tlnet/tlpkg/translations/pl.po
2023/02/18 | 82899 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
@@ -311762,7 +311784,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2023/03/09 | 186 | timestamp
+2023/03/10 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 5fdb80ca3d..97b1cdc1ff 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 06231c7696..274a2f71be 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,3 +1,489 @@
+2023/03/09 | 99 | macros/latex-dev/base/ltpara-code.tex
+2023/03/09 | 9926 | macros/latex-dev/base/ltnews21.tex
+2023/03/09 | 9779 | macros/latex-dev/base/format.ins
+2023/03/09 | 96 | macros/latex-dev/base/doc-code.tex
+2023/03/09 | 96950 | macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
+2023/03/09 | 962873 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+2023/03/09 | 957440 | systems/texlive/tlnet/archive/biber-ms.source.r66479.tar.xz
+2023/03/09 | 9557 | macros/latex-dev/base/ltcntrl.dtx
+2023/03/09 | 9401 | macros/latex-dev/base/source2edoc.cls
+2023/03/09 | 9395 | macros/latex-dev/base/syntonly.dtx
+2023/03/09 | 9345 | macros/latex-dev/base/preload.dtx
+2023/03/09 | 9338306 | macros/latex/contrib/genealogytree/genealogytree.pdf
+2023/03/09 | 930565 | macros/latex/contrib/tugboat.zip
+2023/03/09 | 92954 | macros/latex-dev/base/ltdefns.dtx
+2023/03/09 | 9265 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+2023/03/09 | 92280 | macros/latex-dev/base/utf8ienc.dtx
+2023/03/09 | 9090 | macros/optex/README
+2023/03/09 | 9080 | macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
+2023/03/09 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2023/03/09 | 90660 | macros/latex-dev/base/lttextcomp.dtx
+2023/03/09 | 90027 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+2023/03/09 | 89727 | macros/latex-dev/base/slides.dtx
+2023/03/09 | 8970 | macros/latex-dev/base/ltnews17.tex
+2023/03/09 | 87344364 | systems/texlive/tlnet/archive/biber-ms.universal-darwin.r66479.tar.xz
+2023/03/09 | 8731 | macros/latex-dev/base/ltthm.dtx
+2023/03/09 | 86840 | language/greek/greek-fontenc/tuenc-greek.def.html
+2023/03/09 | 864389 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf
+2023/03/09 | 864389 | macros/latex-dev/required/latex-lab/blocks-code.pdf
+2023/03/09 | 8626 | macros/latex-dev/base/oldlfont.dtx
+2023/03/09 | 85979 | language/greek/greek-fontenc/test-tuenc-greek.pdf
+2023/03/09 | 84215 | macros/latex-dev/base/ltfssini.dtx
+2023/03/09 | 83999 | language/greek/greek-fontenc/textalpha-doc-tu.pdf
+2023/03/09 | 82481 | macros/latex-dev/base/ltfssbas.dtx
+2023/03/09 | 82446 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
+2023/03/09 | 821006 | macros/latex-dev/base/ltshipout-code.pdf
+2023/03/09 | 8157258 | install/macros/latex-dev/required/latex-lab-dev.tds.zip
+2023/03/09 | 812732 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+2023/03/09 | 81202 | macros/latex-dev/base/ltshipout.dtx
+2023/03/09 | 8103209 | macros/latex-dev/required/latex-lab.zip
+2023/03/09 | 8051 | macros/latex-dev/base/ltnews.tex
+2023/03/09 | 803151 | macros/latex-dev/base/ltfilehook-code.pdf
+2023/03/09 | 799900 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
+2023/03/09 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+2023/03/09 | 755242 | macros/latex-dev/base/doc.pdf
+2023/03/09 | 7524 | macros/latex-dev/base/ltxguide.cls
+2023/03/09 | 75153 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+2023/03/09 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
+2023/03/09 | 750467 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+2023/03/09 | 74921 | macros/latex-dev/base/ltluatex.dtx
+2023/03/09 | 74857 | language/greek/greek-fontenc/alphabeta-doc-tu.pdf
+2023/03/09 | 7467104 | systems/texlive/tlnet/archive/biblatex-ms.doc.r66481.tar.xz
+2023/03/09 | 743760 | systems/texlive/tlnet/archive/l3build.doc.r66476.tar.xz
+2023/03/09 | 7287 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/03/09 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
+2023/03/09 | 7241 | macros/latex-dev/base/ltnews20.tex
+2023/03/09 | 7216 | macros/latex-dev/base/exscale.dtx
+2023/03/09 | 7200 | macros/latex-dev/base/sample2e.tex
+2023/03/09 | 719205 | macros/latex-dev/base/ltcmdhooks-code.pdf
+2023/03/09 | 715474 | macros/latex-dev/base/ltmarks-code.pdf
+2023/03/09 | 7104 | macros/latex-dev/base/alltt.dtx
+2023/03/09 | 7029 | macros/latex-dev/base/ltnews13.tex
+2023/03/09 | 701283 | macros/latex-dev/base/lthooks-doc.pdf
+2023/03/09 | 69318 | macros/latex-dev/base/clsguide.tex
+2023/03/09 | 691708 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+2023/03/09 | 69002 | macros/latex-dev/base/ltpictur.dtx
+2023/03/09 | 68735 | macros/latex-dev/base/usrguide-historic.tex
+2023/03/09 | 682288 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+2023/03/09 | 679835 | language/korean/kotex-oblivoir.zip
+2023/03/09 | 6795057 | macros/latex/contrib/genealogytree.zip
+2023/03/09 | 67833 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+2023/03/09 | 6763692 | install/macros/latex/contrib/genealogytree.tds.zip
+2023/03/09 | 6760 | macros/latex-dev/base/slides.ins
+2023/03/09 | 67351 | macros/latex-dev/base/ltfilehook.dtx
+2023/03/09 | 671573 | macros/latex-dev/base/ltpara-code.pdf
+2023/03/09 | 6709 | macros/latex-dev/base/latexsym.dtx
+2023/03/09 | 6424 | macros/latex-dev/base/ltnews14.tex
+2023/03/09 | 6413 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+2023/03/09 | 6357 | macros/latex-dev/base/newlfont.dtx
+2023/03/09 | 63555 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+2023/03/09 | 63280 | macros/latex-dev/base/letter.dtx
+2023/03/09 | 63132 | macros/latex-dev/base/ltmarks.dtx
+2023/03/09 | 6221 | macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex
+2023/03/09 | 6213 | macros/latex-dev/base/ltmeta.dtx
+2023/03/09 | 6155 | macros/latex-dev/base/ltpar.dtx
+2023/03/09 | 6134 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
+2023/03/09 | 608921 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf
+2023/03/09 | 6047 | macros/latex-dev/base/latexrelease.ins
+2023/03/09 | 60321 | macros/latex-dev/base/fontdef.dtx
+2023/03/09 | 600599 | macros/latex/contrib/genealogytree/genealogytree-languages.pdf
+2023/03/09 | 5986 | macros/latex-dev/base/ltnews15.tex
+2023/03/09 | 59499 | macros/latex-dev/base/ltplain.dtx
+2023/03/09 | 59322 | macros/latex-dev/base/ltfiles.dtx
+2023/03/09 | 592524 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+2023/03/09 | 59070 | macros/latex-dev/base/ltmiscen.dtx
+2023/03/09 | 589232 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+2023/03/09 | 588990 | macros/latex/contrib/babel-contrib/french.zip
+2023/03/09 | 5883 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
+2023/03/09 | 587721 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+2023/03/09 | 5859 | macros/latex-dev/base/ltidxglo.dtx
+2023/03/09 | 585862 | macros/latex-dev/base/ltmarks-doc.pdf
+2023/03/09 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
+2023/03/09 | 5828995 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/03/09 | 5825 | macros/latex-dev/base/ltnews10.tex
+2023/03/09 | 5797424 | macros/latex-dev/base/source2e.pdf
+2023/03/09 | 5775 | macros/latex-dev/base/ltnews16.tex
+2023/03/09 | 5732 | macros/latex-dev/base/ltnews08.tex
+2023/03/09 | 5714 | macros/latex-dev/base/inputenc.ins
+2023/03/09 | 5699 | macros/latex-dev/base/ltnews05.tex
+2023/03/09 | 5691 | macros/latex-dev/base/ltnews27.tex
+2023/03/09 | 5678 | macros/latex-dev/base/ltnews04.tex
+2023/03/09 | 566543 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+2023/03/09 | 566006 | macros/latex-dev/base/ltshipout-doc.pdf
+2023/03/09 | 563098 | macros/latex-dev/base/ltnews35.pdf
+2023/03/09 | 560248 | macros/latex-dev/base/classes.pdf
+2023/03/09 | 559554 | macros/latex-dev/base/ltpara-doc.pdf
+2023/03/09 | 5588 | macros/latex-dev/base/ltnews25.tex
+2023/03/09 | 558634 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+2023/03/09 | 5576 | macros/latex-dev/base/ltnews07.tex
+2023/03/09 | 5574 | macros/latex-dev/base/ltnews12.tex
+2023/03/09 | 55687 | macros/latex-dev/base/ltfloat.dtx
+2023/03/09 | 5560 | macros/latex/contrib/genealogytree/genealogytree.sty
+2023/03/09 | 5544 | macros/latex-dev/base/ltnews06.tex
+2023/03/09 | 5529 | macros/latex-dev/base/ltnews11.tex
+2023/03/09 | 5509 | macros/latex-dev/base/graphpap.dtx
+2023/03/09 | 547988 | macros/latex-dev/base/ltfilehook-doc.pdf
+2023/03/09 | 54672 | macros/latex-dev/base/ltpara.dtx
+2023/03/09 | 5462 | macros/latex-dev/base/ltnews02.tex
+2023/03/09 | 546186 | macros/latex-dev/base/ltnews32.pdf
+2023/03/09 | 5451 | macros/latex-dev/base/ltnews09.tex
+2023/03/09 | 543976 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+2023/03/09 | 541673 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+2023/03/09 | 537067 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+2023/03/09 | 5369 | macros/latex-dev/base/ltnews03.tex
+2023/03/09 | 5310 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx
+2023/03/09 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
+2023/03/09 | 529680 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
+2023/03/09 | 52887 | macros/latex-dev/base/lb2.err
+2023/03/09 | 52813 | macros/latex-dev/base/encguide.tex
+2023/03/09 | 5273 | macros/latex-dev/base/cmextra.ins
+2023/03/09 | 527235 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+2023/03/09 | 527032 | macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.pdf
+2023/03/09 | 526332 | macros/latex-dev/base/ltnews31.pdf
+2023/03/09 | 5246 | macros/latex-dev/base/ltnews01.tex
+2023/03/09 | 524328 | systems/texlive/tlnet/archive/xduts.r66475.tar.xz
+2023/03/09 | 522416 | macros/latex-dev/base/ltnews33.pdf
+2023/03/09 | 517890 | macros/latex-dev/base/fntguide.pdf
+2023/03/09 | 517856 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
+2023/03/09 | 517571 | macros/latex-dev/base/ltnews36.pdf
+2023/03/09 | 516300 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+2023/03/09 | 515314 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+2023/03/09 | 51332 | language/greek/greek-fontenc/tuenc-greek.def
+2023/03/09 | 511895 | macros/latex-dev/base/ltnews30.pdf
+2023/03/09 | 51008 | macros/latex-dev/base/usrguide.tex
+2023/03/09 | 508052 | macros/latex-dev/base/ltnews34.pdf
+2023/03/09 | 504 | systems/texlive/tlnet/archive/biber-ms.r66479.tar.xz
+2023/03/09 | 504361 | macros/latex-dev/base/docstrip.pdf
+2023/03/09 | 5041 | macros/latex-dev/base/latexsym.ins
+2023/03/09 | 501358 | language/greek/greek-fontenc/textalpha-doc.pdf
+2023/03/09 | 50069 | macros/latex-dev/base/ltfinal.dtx
+2023/03/09 | 4945 | macros/latex-dev/base/lthyphen.dtx
+2023/03/09 | 4917 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
+2023/03/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/03/09 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins
+2023/03/09 | 47896 | macros/latex-dev/base/lttab.dtx
+2023/03/09 | 478517 | macros/latex-dev/base/ltcmdhooks-doc.pdf
+2023/03/09 | 47651 | language/greek/greek-fontenc/puenc-greek.def.html
+2023/03/09 | 4757 | macros/latex-dev/base/ltlength.dtx
+2023/03/09 | 4748 | macros/optex/base/fonts-catalog.opm
+2023/03/09 | 474841 | macros/latex-dev/base/usrguide.pdf
+2023/03/09 | 47403 | systems/texlive/tlnet/tlpkg/translations/messages.pot
+2023/03/09 | 45754 | macros/latex-dev/base/ltspace.dtx
+2023/03/09 | 45712 | macros/latex-dev/base/ltboxes.dtx
+2023/03/09 | 456714 | macros/latex-dev/base/ltnews37.pdf
+2023/03/09 | 456571 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+2023/03/09 | 4562 | macros/latex-dev/required/latex-lab/latex-lab.ins
+2023/03/09 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/03/09 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/03/09 | 45552 | systems/texlive/tlnet/archive/xduts.source.r66475.tar.xz
+2023/03/09 | 455116 | macros/latex-dev/base/ltnews29.pdf
+2023/03/09 | 45347 | macros/latex-dev/base/latexrelease.dtx
+2023/03/09 | 4488 | macros/optex/doc/optex-doc.tex
+2023/03/09 | 4462 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
+2023/03/09 | 44410 | macros/latex-dev/base/cmfonts.fdd
+2023/03/09 | 443702 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+2023/03/09 | 4390 | macros/latex-dev/base/ec.ins
+2023/03/09 | 439093 | macros/latex-dev/required/latex-lab/blocks-doc.pdf
+2023/03/09 | 438570 | macros/latex-dev/base/usrguide-historic.pdf
+2023/03/09 | 433268 | language/greek/greek-fontenc/alphabeta-doc.pdf
+2023/03/09 | 4324 | macros/latex-dev/base/cmfonts.ins
+2023/03/09 | 4298 | macros/latex-dev/base/ltalloc.dtx
+2023/03/09 | 4273 | macros/latex-dev/base/docstrip.ins
+2023/03/09 | 42708 | macros/latex-dev/base/changes.old.txt
+2023/03/09 | 427013 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+2023/03/09 | 4254 | macros/latex-dev/base/newdc.ins
+2023/03/09 | 424864 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66467.tar.xz
+2023/03/09 | 4219 | macros/latex-dev/base/latex209.ins
+2023/03/09 | 4190 | macros/latex-dev/base/ltnews19.tex
+2023/03/09 | 41762 | macros/optex/base/fonts-select.opm
+2023/03/09 | 41493 | macros/latex-dev/base/ltmath.dtx
+2023/03/09 | 414447 | macros/latex-dev/base/clsguide.pdf
+2023/03/09 | 4087 | macros/latex-dev/base/classes.ins
+2023/03/09 | 4079 | macros/latex-dev/base/lablst.tex
+2023/03/09 | 4074 | macros/optex/base/optex.ini
+2023/03/09 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty
+2023/03/09 | 40184 | macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
+2023/03/09 | 398308 | language/greek/greek-fontenc/test-licr-input.pdf
+2023/03/09 | 3960 | macros/latex-dev/base/olddc.ins
+2023/03/09 | 39542215 | install/macros/latex-dev/latex-base-dev.tds.zip
+2023/03/09 | 395207 | macros/latex-dev/base/changes.txt
+2023/03/09 | 39387 | macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
+2023/03/09 | 38990293 | macros/latex-dev/base.zip
+2023/03/09 | 38793 | macros/latex-dev/base/ltnews35.tex
+2023/03/09 | 38730 | macros/latex-dev/base/latex209.dtx
+2023/03/09 | 386566 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
+2023/03/09 | 383590 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
+2023/03/09 | 38320 | macros/latex-dev/base/ltnews18.pdf
+2023/03/09 | 3824042 | biblio/ctan-bibdata.zip
+2023/03/09 | 382232 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
+2023/03/09 | 379472 | macros/latex-dev/base/ltnews26.pdf
+2023/03/09 | 3781 | macros/latex-dev/base/tulm.ins
+2023/03/09 | 377979 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf
+2023/03/09 | 376652 | macros/latex-dev/base/ltnews28.pdf
+2023/03/09 | 375514 | macros/latex-dev/base/slides.pdf
+2023/03/09 | 3725 | macros/latex-dev/base/ltlogos.dtx
+2023/03/09 | 367390 | macros/latex/contrib/babel-contrib/french/frenchb.pdf
+2023/03/09 | 36152 | macros/latex-dev/base/ltlists.dtx
+2023/03/09 | 36100 | systems/texlive/tlnet/archive/l3build.r66476.tar.xz
+2023/03/09 | 35984 | macros/latex-dev/base/ltdirchk.dtx
+2023/03/09 | 357221 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
+2023/03/09 | 357221 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
+2023/03/09 | 35532 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx
+2023/03/09 | 35442280 | systems/texlive/tlnet/archive/biber-ms.x86_64-darwinlegacy.r66479.tar.xz
+2023/03/09 | 353281 | macros/latex-dev/base/utf8ienc.pdf
+2023/03/09 | 3434 | macros/latex-dev/base/makeindx.ins
+2023/03/09 | 341820 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
+2023/03/09 | 3411812 | biblio/ctan-bibdata/ctan.pdf
+2023/03/09 | 3401 | macros/latex-dev/base/proc.ins
+2023/03/09 | 34000 | macros/latex/contrib/genealogytree/gtrcore.node.code.tex
+2023/03/09 | 33946 | macros/latex-dev/base/ltsect.dtx
+2023/03/09 | 33907 | macros/latex-dev/base/ltnews33.tex
+2023/03/09 | 337493 | macros/latex-dev/base/letter.pdf
+2023/03/09 | 3372 | macros/latex-dev/base/letter.ins
+2023/03/09 | 3367 | macros/latex-dev/base/ltoutenc.ins
+2023/03/09 | 3338 | macros/latex-dev/base/exscale.ins
+2023/03/09 | 33239 | macros/latex-dev/base/ltnews32.tex
+2023/03/09 | 329916 | systems/texlive/tlnet/archive/xduts.doc.r66475.tar.xz
+2023/03/09 | 3282 | macros/latex-dev/base/bugs.txt
+2023/03/09 | 325056 | macros/latex-dev/base/ltluatex.pdf
+2023/03/09 | 32327 | macros/latex-dev/base/ltnews34.tex
+2023/03/09 | 318566 | macros/latex-dev/base/ltnews20.pdf
+2023/03/09 | 3181 | macros/latex-dev/base/unpack.ins
+2023/03/09 | 318166 | macros/latex-dev/base/inputenc.pdf
+2023/03/09 | 3179 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
+2023/03/09 | 317779 | macros/latex-dev/base/ltnews22.pdf
+2023/03/09 | 3100 | macros/latex-dev/base/README.md
+2023/03/09 | 30996 | systems/texlive/tlnet/archive/l3build.source.r66476.tar.xz
+2023/03/09 | 307948 | macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
+2023/03/09 | 30678 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+2023/03/09 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
+2023/03/09 | 30448 | macros/latex-dev/base/ltnews31.tex
+2023/03/09 | 3029 | macros/latex/contrib/babel-contrib/french/frenchb.ins
+2023/03/09 | 302106 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
+2023/03/09 | 299787 | macros/luatex/latex/lua-typo.zip
+2023/03/09 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
+2023/03/09 | 2978 | macros/latex/contrib/genealogytree/gtrlang.german.code.tex
+2023/03/09 | 29765 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+2023/03/09 | 296921 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
+2023/03/09 | 296813 | language/greek/greek-fontenc/hyperref-with-greek.pdf
+2023/03/09 | 2966 | macros/latex/contrib/genealogytree/gtrlang.french.code.tex
+2023/03/09 | 295610 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
+2023/03/09 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
+2023/03/09 | 292136 | macros/latex-dev/base/cmfonts.pdf
+2023/03/09 | 291015 | macros/latex-dev/base/tlc2.pdf
+2023/03/09 | 2896 | macros/latex-dev/base/syntonly.ins
+2023/03/09 | 2893 | macros/latex-dev/base/nfssfont.ins
+2023/03/09 | 2892 | macros/latex-dev/base/graphpap.ins
+2023/03/09 | 2892 | macros/latex-dev/base/fix-cm.ins
+2023/03/09 | 2890 | macros/latex-dev/base/alltt.ins
+2023/03/09 | 2888 | macros/latex-dev/base/ifthen.ins
+2023/03/09 | 2882 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+2023/03/09 | 287724 | macros/latex-dev/base/fix-cm.pdf
+2023/03/09 | 2868 | macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
+2023/03/09 | 286600 | macros/latex-dev/base/ltnews23.pdf
+2023/03/09 | 28627 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+2023/03/09 | 2844 | macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex
+2023/03/09 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+2023/03/09 | 2833 | macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
+2023/03/09 | 2832 | systems/texlive/tlnet/archive/frenchmath.r66477.tar.xz
+2023/03/09 | 2827 | macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
+2023/03/09 | 282105 | macros/latex-dev/base/latexrelease.pdf
+2023/03/09 | 2819 | macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
+2023/03/09 | 2784 | macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex
+2023/03/09 | 2768660 | biblio/ctan-bibdata/ctan.bib
+2023/03/09 | 2749 | macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
+2023/03/09 | 2734 | macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
+2023/03/09 | 2728 | macros/latex-dev/base/ltpageno.dtx
+2023/03/09 | 27122 | macros/latex-dev/base/ltxcheck.tex
+2023/03/09 | 27069 | macros/latex-dev/base/lterror.dtx
+2023/03/09 | 2705 | macros/latex-dev/base/idx.tex
+2023/03/09 | 2691719 | language/greek/greek-fontenc.zip
+2023/03/09 | 2668 | macros/latex/contrib/genealogytree/gtrlang.english.code.tex
+2023/03/09 | 26622 | macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.dtx
+2023/03/09 | 26550 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+2023/03/09 | 26540 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+2023/03/09 | 265292 | macros/latex-dev/base/ltnews24.pdf
+2023/03/09 | 264426 | dviware/dviljk.zip
+2023/03/09 | 264161 | macros/latex-dev/base/cfgguide.pdf
+2023/03/09 | 262168 | systems/texlive/tlnet/archive/biblatex-ms.r66481.tar.xz
+2023/03/09 | 261028 | systems/texlive/tlnet/archive/biber-ms.doc.r66479.tar.xz
+2023/03/09 | 259473 | macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
+2023/03/09 | 257827 | macros/latex-dev/base/modguide.pdf
+2023/03/09 | 257355 | macros/latex-dev/base/cyrguide.pdf
+2023/03/09 | 25513808 | systems/texlive/tlnet/install-tl.zip
+2023/03/09 | 2525458 | macros/optex.zip
+2023/03/09 | 252313 | macros/latex-dev/base/lb2.pdf
+2023/03/09 | 251083 | macros/latex-dev/base/ltnews27.pdf
+2023/03/09 | 2453 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx
+2023/03/09 | 2452656 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/03/09 | 244870 | macros/latex-dev/base/ltnews21.pdf
+2023/03/09 | 24370 | language/greek/greek-fontenc/puenc-greek.def
+2023/03/09 | 243283 | macros/latex-dev/base/ltxdoc.pdf
+2023/03/09 | 24286 | macros/latex-dev/base/ltcounts.dtx
+2023/03/09 | 242468 | macros/latex-dev/base/doc.dtx
+2023/03/09 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
+2023/03/09 | 241048 | macros/latex/contrib/babel-contrib/french/frenchb.dtx
+2023/03/09 | 240 | macros/latex-dev/base/ltshipout-doc.tex
+2023/03/09 | 238 | macros/latex-dev/base/ltmarks-doc.tex
+2023/03/09 | 238 | macros/latex-dev/base/lthooks-doc.tex
+2023/03/09 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
+2023/03/09 | 23637 | macros/latex-dev/base/ltnews30.tex
+2023/03/09 | 23551308 | systems/texlive/tlnet/archive/biber-ms.x86_64-linux.r66479.tar.xz
+2023/03/09 | 23516 | macros/latex-dev/base/fix-cm.dtx
+2023/03/09 | 234 | macros/latex-dev/base/ltpara-doc.tex
+2023/03/09 | 234896 | systems/texlive/tlnet/archive/frenchmath.doc.r66477.tar.xz
+2023/03/09 | 234188 | macros/latex-dev/base/slifonts.pdf
+2023/03/09 | 23386 | macros/latex-dev/base/lppl.tex
+2023/03/09 | 230181 | macros/latex-dev/base/ltnews19.pdf
+2023/03/09 | 2288 | macros/latex-dev/required/latex-lab/changes.txt
+2023/03/09 | 22843076 | systems/texlive/tlnet/archive/biber-ms.win32.r66479.tar.xz
+2023/03/09 | 22723 | macros/latex-dev/base/cfgguide.tex
+2023/03/09 | 227056 | macros/latex-dev/base/proc.pdf
+2023/03/09 | 22665 | macros/latex-dev/base/ltxdoc.dtx
+2023/03/09 | 22485 | macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
+2023/03/09 | 223829 | macros/latex-dev/base/alltt.pdf
+2023/03/09 | 2227 | macros/latex/contrib/genealogytree/README.md
+2023/03/09 | 221226 | macros/latex-dev/base/ifthen.pdf
+2023/03/09 | 22002 | macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
+2023/03/09 | 21991 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+2023/03/09 | 219354 | macros/latex-dev/base/ltx3info.pdf
+2023/03/09 | 217560 | macros/latex-dev/base/lgc2.pdf
+2023/03/09 | 21571 | macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
+2023/03/09 | 21284 | macros/latex-dev/base/ltnews.cls
+2023/03/09 | 212433 | macros/latex/contrib/genealogytree/genealogytree.doc.sources.zip
+2023/03/09 | 21229 | macros/latex-dev/base/lgc2.err
+2023/03/09 | 211770 | macros/latex-dev/base/lthooks.dtx
+2023/03/09 | 211180 | macros/latex-dev/base/nfssfont.pdf
+2023/03/09 | 21092224 | systems/texlive/tlnet/archive/biber-ms.i386-linux.r66479.tar.xz
+2023/03/09 | 208264 | macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
+2023/03/09 | 205145 | macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
+2023/03/09 | 20495 | macros/latex/contrib/genealogytree/gtrcore.options.code.tex
+2023/03/09 | 204948 | macros/latex-dev/base/ltnews25.pdf
+2023/03/09 | 204709 | macros/latex-dev/base/exscale.pdf
+2023/03/09 | 20433061 | systems/texlive/tlnet/install-tl-windows.exe
+2023/03/09 | 20430 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+2023/03/09 | 200762 | macros/latex-dev/base/latexsym.pdf
+2023/03/09 | 200260 | systems/texlive/tlnet/archive/light-latex-make.doc.r66474.tar.xz
+2023/03/09 | 19853 | macros/latex-dev/base/ltkeys.dtx
+2023/03/09 | 1937 | macros/latex-dev/base/minimal.cls
+2023/03/09 | 19329 | macros/latex-dev/base/ltnews36.tex
+2023/03/09 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex
+2023/03/09 | 19040 | macros/latex-dev/base/lppl.txt
+2023/03/09 | 189552 | macros/latex-dev/base/syntonly.pdf
+2023/03/09 | 18944 | macros/latex-dev/base/ltnews29.tex
+2023/03/09 | 18926 | macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
+2023/03/09 | 187963 | macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+2023/03/09 | 18753 | macros/latex-dev/base/ifthen.dtx
+2023/03/09 | 18711 | macros/latex-dev/base/ltexpl.dtx
+2023/03/09 | 18399 | macros/latex-dev/base/nfssfont.dtx
+2023/03/09 | 18363 | macros/latex-dev/base/ltxref.dtx
+2023/03/09 | 183578 | macros/latex-dev/base/ltcmd.dtx
+2023/03/09 | 18299 | macros/latex-dev/base/ltx3info.tex
+2023/03/09 | 182464 | macros/latex-dev/base/ltnews13.pdf
+2023/03/09 | 18170 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+2023/03/09 | 18110 | CTAN.sites
+2023/03/09 | 18073138 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/03/09 | 18056 | macros/latex-dev/base/ltnews37.tex
+2023/03/09 | 18021 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+2023/03/09 | 179022 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
+2023/03/09 | 178723 | macros/latex-dev/base/ltoutput.dtx
+2023/03/09 | 17782 | macros/latex-dev/base/cyrguide.tex
+2023/03/09 | 176583 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+2023/03/09 | 174686 | macros/latex-dev/base/ltnews05.pdf
+2023/03/09 | 17389 | macros/latex-dev/base/ltbibl.dtx
+2023/03/09 | 17304 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+2023/03/09 | 173013 | macros/latex-dev/base/tlc2.err
+2023/03/09 | 170874 | macros/latex-dev/base/lamport-manual.pdf
+2023/03/09 | 170716 | macros/latex-dev/base/ltnews14.pdf
+2023/03/09 | 170595 | macros/latex-dev/base/docstrip.dtx
+2023/03/09 | 1694 | macros/latex-dev/base/small2e.tex
+2023/03/09 | 169414 | macros/latex-dev/base/ltnews10.pdf
+2023/03/09 | 16859 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
+2023/03/09 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/03/09 | 166247 | macros/latex-dev/base/ltnews17.pdf
+2023/03/09 | 165817 | macros/latex-dev/base/makeindx.pdf
+2023/03/09 | 16500 | macros/latex-dev/base/modguide.tex
+2023/03/09 | 162766 | macros/latex-dev/base/tulm.pdf
+2023/03/09 | 161725 | macros/latex-dev/base/graphpap.pdf
+2023/03/09 | 16161 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
+2023/03/09 | 161534 | macros/latex-dev/base/ltnews01.pdf
+2023/03/09 | 16029 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
+2023/03/09 | 159811 | macros/latex-dev/base/ltnews02.pdf
+2023/03/09 | 159349 | macros/latex-dev/base/ltnews03.pdf
+2023/03/09 | 1591 | macros/latex/contrib/babel-contrib/french/README.md
+2023/03/09 | 15699 | macros/latex-dev/base/slifonts.fdd
+2023/03/09 | 156746 | macros/latex-dev/base/ltnews12.pdf
+2023/03/09 | 15651 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+2023/03/09 | 156236 | macros/latex-dev/base/classes.dtx
+2023/03/09 | 155426 | macros/latex-dev/base/ltnews08.pdf
+2023/03/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/03/09 | 15384 | macros/latex-dev/base/ltvers.dtx
+2023/03/09 | 15306 | macros/latex-dev/base/source2e.tex
+2023/03/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/03/09 | 152545 | macros/latex-dev/base/ltnews04.pdf
+2023/03/09 | 1510893 | macros/optex/doc/optex-doc.pdf
+2023/03/09 | 15047 | macros/latex-dev/base/ltnews28.tex
+2023/03/09 | 148294 | macros/latex-dev/base/ltoutenc.dtx
+2023/03/09 | 14737 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
+2023/03/09 | 146195 | macros/latex-dev/base/webcomp.pdf
+2023/03/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/03/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/03/09 | 144369 | macros/latex-dev/base/ltclass.dtx
+2023/03/09 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2023/03/09 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2023/03/09 | 142870 | macros/latex-dev/base/ltnews06.pdf
+2023/03/09 | 14211 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+2023/03/09 | 14091 | macros/latex-dev/base/ltpage.dtx
+2023/03/09 | 138211 | macros/latex-dev/base/ltnews07.pdf
+2023/03/09 | 138090 | macros/latex-dev/base/ltnews16.pdf
+2023/03/09 | 13759 | macros/latex-dev/base/lamport-manual.err
+2023/03/09 | 13589 | macros/latex-dev/base/proc.dtx
+2023/03/09 | 13568 | systems/texlive/tlnet/archive/frenchmath.source.r66477.tar.xz
+2023/03/09 | 1341 | macros/latex-dev/base/ltnews18.tex
+2023/03/09 | 13301 | macros/latex/contrib/genealogytree/CHANGES.md
+2023/03/09 | 132384 | macros/latex-dev/base/lppl.pdf
+2023/03/09 | 1318139 | macros/latex-dev/base/encguide.pdf
+2023/03/09 | 130323 | macros/latex-dev/base/ltnews15.pdf
+2023/03/09 | 129989 | macros/latex-dev/base/ltnews09.pdf
+2023/03/09 | 1279 | macros/latex-dev/base/legal.txt
+2023/03/09 | 1265382 | macros/latex-dev/base/ltnews.pdf
+2023/03/09 | 125721 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx
+2023/03/09 | 12520 | macros/latex-dev/base/testpage.tex
+2023/03/09 | 12372 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+2023/03/09 | 12334 | macros/latex-dev/base/ltnews24.tex
+2023/03/09 | 12268 | macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
+2023/03/09 | 12242 | macros/latex-dev/base/tulm.fdd
+2023/03/09 | 12153 | macros/optex/base/fams-ini.opm
+2023/03/09 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md
+2023/03/09 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex
+2023/03/09 | 116 | macros/latex-dev/required/latex-lab/blocks-code.tex
+2023/03/09 | 1156 | macros/latex-dev/required/latex-lab/README.md
+2023/03/09 | 113 | macros/latex-dev/required/latex-lab/blocks-doc.tex
+2023/03/09 | 113808 | systems/texlive/tlnet/archive/texlive-scripts.r66467.tar.xz
+2023/03/09 | 11363780 | macros/latex/contrib/pdfmanagement-testphase.zip
+2023/03/09 | 113341 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
+2023/03/09 | 11323 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx
+2023/03/09 | 112191 | macros/latex-dev/base/ltnews11.pdf
+2023/03/09 | 11124 | macros/latex-dev/base/manifest.txt
+2023/03/09 | 1091279 | macros/latex-dev/base/lthooks-code.pdf
+2023/03/09 | 108234 | macros/latex-dev/base/fntguide.tex
+2023/03/09 | 10798 | macros/latex-dev/base/ltnews26.tex
+2023/03/09 | 10792 | macros/latex-dev/base/ltnews22.tex
+2023/03/09 | 10791 | macros/latex-dev/base/ltnews23.tex
+2023/03/09 | 1074767 | macros/latex-dev/base/doc-code.pdf
+2023/03/09 | 10744 | systems/texlive/tlnet/archive/light-latex-make.r66474.tar.xz
+2023/03/09 | 106904 | macros/latex-dev/base/inputenc.dtx
+2023/03/09 | 106404 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
+2023/03/09 | 10601 | macros/latex-dev/base/makeindx.dtx
+2023/03/09 | 105 | macros/latex-dev/base/ltfilehook-code.tex
+2023/03/09 | 104 | macros/latex-dev/base/ltshipout-code.tex
+2023/03/09 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
+2023/03/09 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
+2023/03/09 | 102 | macros/latex-dev/base/ltmarks-code.tex
+2023/03/09 | 102 | macros/latex-dev/base/lthooks-code.tex
+2023/03/09 | 10251 | macros/latex-dev/base/webcomp.err
2023/03/08 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-note-ms.bbx
2023/03/08 | 99 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ibid-ms.bbx
2023/03/08 | 9907 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-icomp-ms.cbx
@@ -13,7 +499,6 @@
2023/03/08 | 95 | macros/latex/contrib/biblatex-ms/latex/bbx/numeric-comp-ms.bbx
2023/03/08 | 95330 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.def
2023/03/08 | 94 | macros/latex/contrib/biblatex-ms/latex/bbx/verbose-ms.bbx
-2023/03/08 | 929531 | biblio/ctan-bibdata/ctan.pdf
2023/03/08 | 90 | macros/latex/contrib/biblatex-ms/latex/cbx/reading-ms.cbx
2023/03/08 | 9094 | macros/latex/contrib/biblatex-ms/latex/cbx/verbose-trad1-ms.cbx
2023/03/08 | 89956869 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwin_universal.tar.gz
@@ -51,13 +536,13 @@
2023/03/08 | 77263 | support/light-latex-make/llmk-logo.png
2023/03/08 | 7713 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-ms.tex
2023/03/08 | 760 | macros/latex/contrib/biblatex-ms/doc/examples/42-style-alphabetic-template-ms.tex
+2023/03/08 | 75971 | language/greek/greek-fontenc/lgrenc.def.html
2023/03/08 | 7481 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-ms.tex
2023/03/08 | 747 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-ms.tex
2023/03/08 | 7436 | systems/texlive/tlnet/archive/colorist.doc.r66450.tar.xz
2023/03/08 | 7428 | systems/texlive/tlnet/archive/minimalist.doc.r66447.tar.xz
2023/03/08 | 742027 | macros/latex/contrib/l3build/l3build.pdf
2023/03/08 | 736 | systems/texlive/tlnet/archive/biber.r66456.tar.xz
-2023/03/08 | 7320 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/03/08 | 72 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.cfg
2023/03/08 | 7291 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-ms.tex
2023/03/08 | 724 | systems/texlive/tlnet/archive/collection-langeuropean.r66452.tar.xz
@@ -69,6 +554,7 @@
2023/03/08 | 6744 | macros/latex/contrib/l3build/l3build.lua
2023/03/08 | 6739 | macros/latex/contrib/l3build/l3build-typesetting.lua
2023/03/08 | 6702 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-icomp-ms.cbx
+2023/03/08 | 66518 | language/greek/greek-fontenc/greek-fontenc-doc.html
2023/03/08 | 65771 | macros/latex/contrib/biblatex-ms/bibtex/bst/biblatex-ms.bst
2023/03/08 | 64896 | systems/texlive/tlnet/archive/lithuanian.r66465.tar.xz
2023/03/08 | 63347 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-biber-ms.pdf
@@ -77,39 +563,39 @@
2023/03/08 | 6140 | systems/texlive/tlnet/archive/biblatex-german-legal.r66465.tar.xz
2023/03/08 | 595038 | macros/latex/contrib/biblatex-ms/latex/biblatex-ms.sty
2023/03/08 | 5891 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-ms.tex
-2023/03/08 | 5829017 | systems/texlive/tlnet/install-tl-unx.tar.gz
2023/03/08 | 5783 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-ms.tex
2023/03/08 | 574 | macros/latex/contrib/biblatex-ms/latex/lbx/naustrian-ms.lbx
2023/03/08 | 57332 | systems/texlive/tlnet/archive/microtype.r66465.tar.xz
2023/03/08 | 5715 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-comp-ms.cbx
2023/03/08 | 56132 | systems/texlive/tlnet/archive/lithuanian.doc.r66465.tar.xz
2023/03/08 | 555376 | systems/texlive/tlnet/archive/lastpage.doc.r66465.tar.xz
+2023/03/08 | 553 | macros/optex/base/f-inconsolata.opm
+2023/03/08 | 551509 | dviware/dviljk/configure.texk
2023/03/08 | 5512 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-ms.tex
2023/03/08 | 548 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-ms.tex
2023/03/08 | 5488 | systems/texlive/tlnet/archive/outilsgeomtikz.r66465.tar.xz
2023/03/08 | 5397 | macros/latex/contrib/l3build/l3build-aux.lua
+2023/03/08 | 53144 | language/greek/greek-fontenc/textalpha.sty.html
+2023/03/08 | 52561 | dviware/dviljk/Makefile.in
2023/03/08 | 523 | macros/latex/contrib/biblatex-ms/latex/lbx/ngerman-ms.lbx
2023/03/08 | 5197 | macros/latex/contrib/biblatex-ms/README
2023/03/08 | 5178 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-ms.tex
2023/03/08 | 51749 | macros/latex/contrib/biblatex-ms/CHANGES.md
+2023/03/08 | 516315 | macros/latex/contrib/tugboat/tugboat.pdf
2023/03/08 | 51468 | systems/texlive/tlnet/archive/linebreaker.doc.r66465.tar.xz
2023/03/08 | 5134 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ibid-ms.cbx
2023/03/08 | 5094 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-ms.tex
+2023/03/08 | 50932 | language/greek/greek-fontenc/greek-fontenc.def.html
2023/03/08 | 505 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.bib
2023/03/08 | 5050 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-ms.tex
2023/03/08 | 4972 | macros/latex/contrib/l3build/l3build-ctan.lua
-2023/03/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2023/03/08 | 47880 | macros/latex/contrib/biblatex-ms/latex/lbx/spanish-ms.lbx
2023/03/08 | 477 | macros/latex/contrib/biblatex-ms/latex/lbx/swissgerman-ms.lbx
-2023/03/08 | 47403 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2023/03/08 | 4632 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-ms.cbx
2023/03/08 | 4614 | macros/latex/contrib/biblatex-ms/latex/bbx/reading-ms.bbx
2023/03/08 | 45862 | macros/latex/contrib/biblatex-ms/latex/lbx/russian-ms.lbx
+2023/03/08 | 4574 | language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
2023/03/08 | 45737 | macros/latex/contrib/biblatex-ms/latex/lbx/lithuanian-ms.lbx
-2023/03/08 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/03/08 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/03/08 | 452888 | systems/texlive/tlnet/archive/tablestyles.doc.r66465.tar.xz
2023/03/08 | 45260 | macros/latex/contrib/biblatex-ms/latex/lbx/bulgarian-ms.lbx
2023/03/08 | 44949 | macros/latex/contrib/biblatex-ms/latex/lbx/ukrainian-ms.lbx
@@ -118,8 +604,10 @@
2023/03/08 | 4338 | macros/latex/contrib/l3build/l3build-stdmain.lua
2023/03/08 | 4315 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-ms.cbx
2023/03/08 | 426 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.bib
-2023/03/08 | 424868 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66415.tar.xz
+2023/03/08 | 42360 | language/greek/greek-fontenc/alphabeta.sty.html
+2023/03/08 | 41708 | macros/latex/contrib/tugboat/tugboat.bst
2023/03/08 | 4150 | macros/latex/contrib/l3build/l3build-zip.lua
+2023/03/08 | 41227 | language/greek/greek-fontenc/lgrenc.def
2023/03/08 | 41155 | macros/latex/contrib/frenchmath/frenchmath.dtx
2023/03/08 | 40678 | support/light-latex-make/llmk.lua
2023/03/08 | 4064 | systems/texlive/tlnet/archive/babel-lithuanian.source.r66452.tar.xz
@@ -127,6 +615,7 @@
2023/03/08 | 39968 | macros/latex/contrib/biblatex-ms/latex/lbx/english-ms.lbx
2023/03/08 | 3980 | systems/texlive/tlnet/archive/lastpage.r66465.tar.xz
2023/03/08 | 3979 | macros/latex/contrib/biblatex-ms/latex/cbx/authoryear-ms.cbx
+2023/03/08 | 39743 | macros/latex/contrib/tugboat/ltubguid.ltx
2023/03/08 | 394 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-ms.tex
2023/03/08 | 39272 | macros/latex/contrib/biblatex-ms/latex/lbx/magyar-ms.lbx
2023/03/08 | 39226 | macros/latex/contrib/biblatex-ms/doc/examples/03-localization-keys-ms.tex
@@ -143,10 +632,13 @@
2023/03/08 | 36724 | macros/latex/contrib/biblatex-ms/latex/lbx/catalan-ms.lbx
2023/03/08 | 3668 | macros/xetex/latex/xduts/README.md
2023/03/08 | 36620893 | biblio/biber-ms/biber-ms-macos/biber-ms-4.0-darwinlegacy_x86_64.tar.gz
+2023/03/08 | 363060 | macros/latex/contrib/tugboat/ltubguid.pdf
+2023/03/08 | 36175 | language/greek/greek-fontenc/alphabeta-tuenc.def.html
2023/03/08 | 36091 | macros/latex/contrib/biblatex-ms/latex/lbx/greek-ms.lbx
2023/03/08 | 3591 | macros/latex/contrib/biblatex-ms/doc/examples/22-indexing-subentry-ms.tex
2023/03/08 | 35785 | macros/latex/contrib/biblatex-ms/latex/lbx/romanian-ms.lbx
2023/03/08 | 35748 | macros/latex/contrib/biblatex-ms/latex/lbx/marathi-ms.lbx
+2023/03/08 | 35485 | language/greek/greek-fontenc/test-tuenc-greek.tex
2023/03/08 | 35244 | macros/latex/contrib/biblatex-ms/latex/lbx/french-ms.lbx
2023/03/08 | 3523 | macros/latex/contrib/biblatex-ms/doc/examples/94-labelprefix-ms.tex
2023/03/08 | 3457 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ticomp-ms.cbx
@@ -164,6 +656,7 @@
2023/03/08 | 3276 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.tex
2023/03/08 | 32752 | macros/latex/contrib/biblatex-ms/latex/lbx/turkish-ms.lbx
2023/03/08 | 327370 | macros/latex/contrib/biblatex-ms/doc/examples/74-style-verbose-trad1-bibtex-ms.pdf
+2023/03/08 | 326304 | language/greek/greek-fontenc/test-lgrenc.pdf
2023/03/08 | 32288 | macros/latex/contrib/biblatex-ms/latex/lbx/danish-ms.lbx
2023/03/08 | 3209 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-ms.tex
2023/03/08 | 32065 | macros/latex/contrib/biblatex-ms/latex/lbx/slovene-ms.lbx
@@ -171,6 +664,7 @@
2023/03/08 | 31454 | macros/latex/contrib/biblatex-ms/latex/lbx/dutch-ms.lbx
2023/03/08 | 31281 | macros/latex/contrib/biblatex-ms/doc/examples/90-related-entries-biber-ms.pdf
2023/03/08 | 30864 | systems/texlive/tlnet/archive/epstopdf.doc.r66465.tar.xz
+2023/03/08 | 30445 | language/greek/greek-fontenc/alphabeta-lgr.def.html
2023/03/08 | 3018 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-ms.tex
2023/03/08 | 30143 | macros/latex/contrib/biblatex-ms/latex/lbx/portuguese-ms.lbx
2023/03/08 | 301379 | macros/latex/contrib/biblatex-ms/doc/examples/50-style-authoryear-biber-ms.pdf
@@ -182,13 +676,13 @@
2023/03/08 | 297499 | macros/latex/contrib/biblatex-ms/doc/examples/60-style-authortitle-bibtex-ms.pdf
2023/03/08 | 29446 | macros/latex/contrib/biblatex-ms/latex/lbx/galician-ms.lbx
2023/03/08 | 2937 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-tcomp-ms.cbx
+2023/03/08 | 2925 | macros/latex/contrib/tugboat/tugboat.ins
2023/03/08 | 2920 | macros/latex/contrib/biblatex-ms/latex/lbx/british-ms.lbx
2023/03/08 | 2902 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-ms.tex
2023/03/08 | 2896 | macros/latex/contrib/biblatex-ms/latex/cbx/authortitle-ms.cbx
2023/03/08 | 288529 | macros/xetex/latex/xduts/xduts.dtx
2023/03/08 | 2836 | macros/latex/contrib/biblatex-ms/doc/examples/63-style-authortitle-icomp-ms.tex
2023/03/08 | 279 | macros/latex/contrib/biblatex-ms/latex/lbx/austrian-ms.lbx
-2023/03/08 | 2768650 | biblio/ctan-bibdata/ctan.bib
2023/03/08 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua
2023/03/08 | 274161 | macros/latex/contrib/biblatex-ms/doc/examples/73-style-verbose-inote-biber-ms.pdf
2023/03/08 | 273584 | macros/latex/contrib/biblatex-ms/doc/examples/75-style-verbose-trad2-biber-ms.pdf
@@ -203,6 +697,7 @@
2023/03/08 | 2691 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-ms.tex
2023/03/08 | 268908 | macros/latex/contrib/biblatex-ms/doc/examples/72-style-verbose-note-bibtex-ms.pdf
2023/03/08 | 268058 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-biber-ms.pdf
+2023/03/08 | 2676 | macros/latex/contrib/tugboat/README
2023/03/08 | 267440 | systems/texlive/tlnet/archive/biber.doc.r66456.tar.xz
2023/03/08 | 2666 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction.run-ms.xml
2023/03/08 | 266542 | macros/latex/contrib/biblatex-ms/doc/examples/70-style-verbose-bibtex-ms.pdf
@@ -221,14 +716,13 @@
2023/03/08 | 25672 | systems/texlive/tlnet/archive/bfh-ci.r66465.tar.xz
2023/03/08 | 25633254 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN64.zip
2023/03/08 | 2552 | systems/texlive/tlnet/archive/babel-lithuanian.r66452.tar.xz
-2023/03/08 | 25513809 | systems/texlive/tlnet/install-tl.zip
2023/03/08 | 25295 | macros/latex/contrib/biblatex-ms/doc/examples/96-dates-biber-ms.pdf
2023/03/08 | 25177 | macros/latex/contrib/biblatex-ms/latex/blx-bibtex-ms.def
2023/03/08 | 249428 | macros/latex/contrib/frenchmath.zip
2023/03/08 | 2473 | macros/latex/contrib/l3build/l3build-help.lua
2023/03/08 | 24650 | macros/latex/contrib/biblatex-ms/latex/lbx/serbian-ms.lbx
2023/03/08 | 24647160 | biblio/biber-ms/biber-ms-linux/biber-ms-4.0-linux_x86_64.tar.gz
-2023/03/08 | 2451500 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/03/08 | 2443 | macros/optex/base/f-fira.opm
2023/03/08 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-bibtex-ms.pdf
2023/03/08 | 244291 | macros/latex/contrib/biblatex-ms/doc/examples/80-style-reading-biber-ms.pdf
2023/03/08 | 2437 | macros/latex/contrib/biblatex-ms/doc/examples/20-indexing-single-ms.tex
@@ -238,12 +732,17 @@
2023/03/08 | 2391 | macros/latex/contrib/biblatex-ms/latex/cbx/debug-ms.cbx
2023/03/08 | 23901567 | biblio/biber-ms/biber-ms-windows/biber-ms-4.0-MSWIN32.zip
2023/03/08 | 236012 | systems/texlive/tlnet/archive/bfh-ci.doc.r66465.tar.xz
+2023/03/08 | 23580 | language/greek/greek-fontenc/greek-fontenc-doc.rst
2023/03/08 | 2334 | support/light-latex-make/llmk.1
+2023/03/08 | 23079 | language/greek/greek-fontenc/textalpha.sty
2023/03/08 | 2300 | systems/texlive/tlnet/archive/tablestyles.r66465.tar.xz
+2023/03/08 | 2292 | macros/latex/contrib/tugboat/NEWS
+2023/03/08 | 22870 | language/korean/kotex-oblivoir/doc/ChangeLog
2023/03/08 | 2285 | macros/latex/contrib/l3build/l3build-tagging.lua
2023/03/08 | 2260 | macros/latex/contrib/biblatex-ms/latex/cbx/alphabetic-verb-ms.cbx
2023/03/08 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-bibtex-ms.pdf
2023/03/08 | 225925 | macros/latex/contrib/biblatex-ms/doc/examples/53-style-authoryear-icomp-biber-ms.pdf
+2023/03/08 | 22525 | macros/latex/contrib/tugboat/ltugbib.bst
2023/03/08 | 22492 | systems/texlive/tlnet/archive/hyphen-base.r66418.tar.xz
2023/03/08 | 224457 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-biber-ms.pdf
2023/03/08 | 224065 | macros/latex/contrib/biblatex-ms/doc/examples/02-annotations-bibtex-ms.pdf
@@ -258,14 +757,17 @@
2023/03/08 | 2149 | macros/latex/contrib/l3build/l3build-clean.lua
2023/03/08 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-bibtex-ms.pdf
2023/03/08 | 213637 | macros/latex/contrib/biblatex-ms/doc/examples/51-style-authoryear-ibid-biber-ms.pdf
+2023/03/08 | 21337 | language/greek/greek-fontenc/greek-fontenc.def
2023/03/08 | 2129 | macros/latex/contrib/biblatex-ms/latex/blx-mcite-ms.def
2023/03/08 | 209484 | systems/texlive/tlnet/archive/babel-lithuanian.doc.r66452.tar.xz
2023/03/08 | 20880 | systems/texlive/tlnet/archive/lastpage.source.r66465.tar.xz
2023/03/08 | 2069860 | systems/texlive/tlnet/archive/tagpdf.doc.r66465.tar.xz
+2023/03/08 | 20670 | dviware/dviljk/win32/Makefile.in
2023/03/08 | 20549 | macros/latex/contrib/biblatex-ms/latex/lbx/nynorsk-ms.lbx
-2023/03/08 | 20435431 | systems/texlive/tlnet/install-tl-windows.exe
2023/03/08 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-bibtex-ms.pdf
2023/03/08 | 203055 | macros/latex/contrib/biblatex-ms/doc/examples/61-style-authortitle-ibid-biber-ms.pdf
+2023/03/08 | 20105 | language/greek/greek-fontenc/test-licr-input.tex
+2023/03/08 | 2001 | language/korean/kotex-oblivoir/README
2023/03/08 | 199 | biblio/biber-ms/biber-ms-windows/README
2023/03/08 | 1997 | macros/latex/contrib/biblatex-ms/doc/examples/10-references-per-section-ms.tex
2023/03/08 | 1991 | macros/latex/contrib/biblatex-ms/doc/examples/40-style-alphabetic-ms.tex
@@ -273,12 +775,14 @@
2023/03/08 | 197 | biblio/biber-ms/biber-ms-linux/README
2023/03/08 | 196181 | support/light-latex-make.zip
2023/03/08 | 196031 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-bibtex-ms.pdf
+2023/03/08 | 195502 | language/greek/greek-fontenc/test-diacritics.pdf
2023/03/08 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-bibtex-ms.pdf
2023/03/08 | 195323 | macros/latex/contrib/biblatex-ms/doc/examples/64-style-authortitle-terse-biber-ms.pdf
2023/03/08 | 194914 | macros/latex/contrib/biblatex-ms/doc/examples/31-style-numeric-comp-biber-ms.pdf
2023/03/08 | 1945 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-ms.tex
2023/03/08 | 19322 | macros/latex/contrib/l3build/CHANGELOG.md
2023/03/08 | 19208682 | macros/latex/contrib/biblatex-ms.zip
+2023/03/08 | 189 | macros/latex/contrib/tugboat/manifest.txt
2023/03/08 | 1889528 | systems/texlive/tlnet/archive/nicematrix.doc.r66465.tar.xz
2023/03/08 | 1879 | macros/latex/contrib/biblatex-ms/doc/examples/11-references-by-section-ms.tex
2023/03/08 | 187356 | macros/latex/contrib/biblatex-ms/doc/examples/21-indexing-multiple-biber-ms.pdf
@@ -293,12 +797,12 @@
2023/03/08 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-bibtex-ms.pdf
2023/03/08 | 181606 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-biber-ms.pdf
2023/03/08 | 1811 | macros/latex/contrib/biblatex-ms/latex/cbx/draft-ms.cbx
-2023/03/08 | 18073147 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2023/03/08 | 1800 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-ms.tex
2023/03/08 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-bibtex-ms.pdf
2023/03/08 | 177233 | macros/latex/contrib/biblatex-ms/doc/examples/30-style-numeric-biber-ms.pdf
2023/03/08 | 1760091 | macros/latex/contrib/biblatex-ms/doc/biblatex-ms.pdf
2023/03/08 | 175130 | macros/latex/contrib/biblatex-ms/doc/examples/13-references-by-keyword-bibtex-ms.pdf
+2023/03/08 | 17508 | language/greek/greek-fontenc/alphabeta-doc.tex
2023/03/08 | 174634 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-bibtex-ms.pdf
2023/03/08 | 173977 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-biber-ms.pdf
2023/03/08 | 173868 | systems/texlive/tlnet/archive/biblatex-german-legal.doc.r66465.tar.xz
@@ -310,29 +814,32 @@
2023/03/08 | 172 | macros/latex/contrib/biblatex-ms/latex/lbx/american-ms.lbx
2023/03/08 | 172213 | macros/latex/contrib/biblatex-ms/doc/examples/17-numeric-prefixed-2-bibtex-ms.pdf
2023/03/08 | 172206 | macros/latex/contrib/biblatex-ms/doc/examples/16-numeric-prefixed-1-bibtex-ms.pdf
+2023/03/08 | 1716 | language/korean/kotex-oblivoir/tex/oblivoir.cls
+2023/03/08 | 16875 | language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
2023/03/08 | 1685 | macros/latex/contrib/biblatex-ms/doc/examples/14-references-by-category-ms.tex
2023/03/08 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-bibtex-ms.pdf
2023/03/08 | 167962 | macros/latex/contrib/biblatex-ms/doc/examples/01-introduction-biber-ms.pdf
-2023/03/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2023/03/08 | 166 | macros/latex/contrib/biblatex-ms/latex/lbx/canadian-ms.lbx
+2023/03/08 | 1666 | language/greek/greek-fontenc/README.md
2023/03/08 | 16647 | macros/latex/contrib/biblatex-ms/doc/examples/97-annotations-biber-ms.pdf
2023/03/08 | 1602651 | support/TeX4ht/source/tex4ht-fonts-noncjk.tex
2023/03/08 | 159 | macros/latex/contrib/biblatex-ms/doc/examples/95-customlists-ms.dbx
+2023/03/08 | 15838 | language/greek/greek-fontenc/alphabeta.sty
2023/03/08 | 1552 | macros/latex/contrib/biblatex-ms/doc/examples/92-bibliographylists-ms.tex
2023/03/08 | 1549 | macros/latex/contrib/biblatex-ms/doc/examples/32-style-numeric-verb-ms.tex
+2023/03/08 | 15413 | language/greek/greek-fontenc/alphabeta-tuenc.def
2023/03/08 | 1540 | macros/latex/contrib/l3build/l3build.ins
-2023/03/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/03/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2023/03/08 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-bibtex-ms.pdf
2023/03/08 | 149733 | macros/latex/contrib/biblatex-ms/doc/examples/81-style-draft-biber-ms.pdf
2023/03/08 | 149679 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-biber-ms.pdf
+2023/03/08 | 14888 | language/greek/greek-fontenc/test-diacritics.tex
2023/03/08 | 148860 | macros/latex/contrib/biblatex-ms/doc/examples/82-style-debug-bibtex-ms.pdf
2023/03/08 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-bibtex-ms.pdf
2023/03/08 | 147776 | macros/latex/contrib/biblatex-ms/doc/examples/66-style-authortitle-ticomp-biber-ms.pdf
+2023/03/08 | 14761 | language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
2023/03/08 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-bibtex-ms.pdf
2023/03/08 | 147304 | macros/latex/contrib/biblatex-ms/doc/examples/52-style-authoryear-comp-biber-ms.pdf
-2023/03/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/03/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/03/08 | 145235 | macros/latex/contrib/tugboat/tugboat.dtx
2023/03/08 | 1447440 | systems/texlive/tlnet/archive/tex4ht.source.r66459.tar.xz
2023/03/08 | 1433 | support/light-latex-make/llmk-logo-code.tex
2023/03/08 | 143176 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-bibtex-ms.pdf
@@ -341,7 +848,6 @@
2023/03/08 | 14145 | macros/latex/contrib/biblatex-ms/doc/examples/98-multiscript-biber-ms.pdf
2023/03/08 | 1412 | macros/latex/contrib/biblatex-ms/doc/examples/19-alphabetic-prefixed-ms.tex
2023/03/08 | 13922 | macros/latex/contrib/biblatex-ms/latex/blx-compat-ms.def
-2023/03/08 | 1376000 | biblio/ctan-bibdata.zip
2023/03/08 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r66459.tar.xz
2023/03/08 | 135 | macros/latex/contrib/biblatex-ms/latex/lbx/portuges-ms.lbx
2023/03/08 | 1349 | macros/latex/contrib/biblatex-ms/doc/examples/65-style-authortitle-tcomp-ms.tex
@@ -374,7 +880,6 @@
2023/03/08 | 1163 | macros/latex/contrib/biblatex-ms/latex/bbx/draft-ms.bbx
2023/03/08 | 1154232 | support/TeX4ht/source/tex4ht-4ht.tex
2023/03/08 | 114804 | support/light-latex-make/llmk.pdf
-2023/03/08 | 113808 | systems/texlive/tlnet/archive/texlive-scripts.r66415.tar.xz
2023/03/08 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-bibtex-ms.pdf
2023/03/08 | 112916 | macros/latex/contrib/biblatex-ms/doc/examples/18-numeric-hybrid-biber-ms.pdf
2023/03/08 | 111947 | macros/latex/contrib/biblatex-ms/doc/examples/41-style-alphabetic-verb-bibtex-ms.pdf
@@ -395,6 +900,7 @@
2023/03/08 | 10428 | macros/latex/contrib/biblatex-ms/latex/cbx/numeric-comp-ms.cbx
2023/03/08 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-ibid-ms.bbx
2023/03/08 | 103 | macros/latex/contrib/biblatex-ms/latex/bbx/authortitle-comp-ms.bbx
+2023/03/08 | 10384 | language/greek/greek-fontenc/alphabeta-lgr.def
2023/03/08 | 102 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-icomp-ms.bbx
2023/03/08 | 102 | macros/latex/contrib/biblatex-ms/doc/examples/93-nameparts-ms.dbx
2023/03/08 | 101 | macros/latex/contrib/biblatex-ms/latex/bbx/authoryear-ibid-ms.bbx
@@ -414,6 +920,7 @@
2023/03/07 | 8842 | macros/latex/contrib/bfh-ci/tex/bfh-projectproposal.cfg
2023/03/07 | 87335564 | systems/texlive/tlnet/archive/biber.universal-darwin.r66404.tar.xz
2023/03/07 | 8652 | macros/latex/contrib/tagpdf/ex-AF-file.pdf
+2023/03/07 | 856 | macros/optex/base/f-xcharter.opm
2023/03/07 | 8335 | macros/latex/contrib/babel-contrib/lithuanian/babel-lithuanian.dtx
2023/03/07 | 8281 | macros/latex/contrib/tagpdf/global-ex.png
2023/03/07 | 8273 | macros/latex/contrib/minimalist/minimart.cls
@@ -622,20 +1129,17 @@
2023/03/06 | 5724 | systems/texlive/tlnet/archive/causets.r66375.tar.xz
2023/03/06 | 5278 | language/lithuanian/doc/testlt.tex
2023/03/06 | 527152 | systems/texlive/tlnet/archive/jlreq.doc.r66374.tar.xz
-2023/03/06 | 524312 | systems/texlive/tlnet/archive/xduts.r66368.tar.xz
2023/03/06 | 516543 | language/hyphenation/dehyph-exptl.zip
2023/03/06 | 49887 | macros/luatex/latex/linebreaker/linebreaker-doc.pdf
2023/03/06 | 4971 | language/hyphenation/dehyph-exptl/dehyphts-x-2023-03-06.tex
2023/03/06 | 4964 | language/hyphenation/dehyph-exptl/dehypht-x-2023-03-06.tex
2023/03/06 | 4964 | language/hyphenation/dehyph-exptl/dehyphn-x-2023-03-06.tex
2023/03/06 | 4713278 | macros/latex/contrib/pagelayout.zip
-2023/03/06 | 45480 | systems/texlive/tlnet/archive/xduts.source.r66368.tar.xz
2023/03/06 | 42464 | systems/texlive/tlnet/archive/bithesis.source.r66369.tar.xz
2023/03/06 | 40187 | macros/luatex/generic/minim-pdf/minim-pdf.lua
2023/03/06 | 3758 | language/hyphenation/dehyph-exptl/dehyph-exptl.bib
2023/03/06 | 36614136 | biblio/biber/biber-macos/biber-2.19-darwinlegacy_x86_64.tar.gz
2023/03/06 | 337729 | macros/luatex/generic/minim.zip
-2023/03/06 | 329612 | systems/texlive/tlnet/archive/xduts.doc.r66368.tar.xz
2023/03/06 | 321641 | macros/luatex/generic/minim/minim.pdf
2023/03/06 | 29529 | macros/xetex/plain/unimath-plain-xetex/tex/unimath-plain-xetex.tex
2023/03/06 | 2856 | systems/texlive/tlnet/archive/beamertheme-arguelles.r66373.tar.xz
@@ -1219,6 +1723,7 @@
2023/03/04 | 544962 | macros/latex/contrib/babel-contrib/greek/babel-greek.pdf
2023/03/04 | 54007 | macros/latex/contrib/siunitx/siunitx-table.dtx
2023/03/04 | 53538 | macros/latex/contrib/babel-contrib/greek/babel-greek-doc.html
+2023/03/04 | 5289 | macros/optex/pkg/tikz.opm
2023/03/04 | 4922 | indexing/upmendex/source/c-auto.in
2023/03/04 | 47731 | indexing/upmendex/source/Makefile.in
2023/03/04 | 4765 | indexing/upmendex/README.md
@@ -1270,6 +1775,7 @@
2023/03/04 | 30280 | systems/texlive/tlnet/archive/photobook.r66336.tar.xz
2023/03/04 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx
2023/03/04 | 293 | indexing/upmendex/doc/samples/mdxsty01.ist
+2023/03/04 | 2904 | macros/luatex/latex/lua-typo/README.md
2023/03/04 | 286 | indexing/upmendex/doc/samples/option/mdxsty_j02.ist
2023/03/04 | 28270 | macros/latex/contrib/sillypage/sillywalk-map.pdf
2023/03/04 | 2780 | macros/latex/contrib/sillypage/sillypage.ins
@@ -1431,141 +1937,3 @@
2023/03/03 | 1228 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOne.tfm
2023/03/03 | 1119 | fonts/simpleicons/map/simpleicons.map
2023/03/03 | 101268 | systems/texlive/tlnet/archive/pangram.doc.r66305.tar.xz
-2023/03/02 | 991 | support/tex4ebook/tex4ebook-exec_azw.lua
-2023/03/02 | 9234 | macros/latex/contrib/photobook/Makefile
-2023/03/02 | 90419 | support/tex4ebook/tex4ebook-doc.pdf
-2023/03/02 | 903080 | systems/texlive/tlnet/archive/beebe.r66287.tar.xz
-2023/03/02 | 887 | fonts/newcomputermodern/tex/NewCMSans10-Book.fontspec
-2023/03/02 | 886 | fonts/newcomputermodern/tex/NewCMSans10-Regular.fontspec
-2023/03/02 | 86454 | macros/latex/contrib/qrbill/qrbill.pdf
-2023/03/02 | 834644 | systems/texlive/tlnet/archive/lyluatex.doc.r66280.tar.xz
-2023/03/02 | 812944 | macros/jptex/latex/pxrubrica.zip
-2023/03/02 | 8015 | fonts/newcomputermodern/doc/newcomputermodern-sample.tex
-2023/03/02 | 752 | support/tex4ebook/tex4ebook-doc.tex
-2023/03/02 | 725832 | systems/texlive/tlnet/archive/tabularray.doc.r66281.tar.xz
-2023/03/02 | 7108 | systems/texlive/tlnet/archive/eolang.r66283.tar.xz
-2023/03/02 | 7033 | macros/latex/contrib/beamer-contrib/themes/beamertheme-arguelles/README.md
-2023/03/02 | 702336 | language/greek/greek-inputenc.zip
-2023/03/02 | 6824 | systems/texlive/tlnet/archive/collection-latexextra.r66263.tar.xz
-2023/03/02 | 679148 | language/korean/kotex-oblivoir.zip
-2023/03/02 | 672276 | fonts/newcomputermodern/otf/NewCMMono10-BoldOblique.otf
-2023/03/02 | 655416 | systems/texlive/tlnet/archive/fistrum.doc.r66263.tar.xz
-2023/03/02 | 6423 | fonts/newcomputermodern/doc/opticalmathlm-cropped.pdf
-2023/03/02 | 622704 | support/TeX4ht/source/tex4ht-html4.tex
-2023/03/02 | 618524 | fonts/newcomputermodern/otf/NewCM08-BookItalic.otf
-2023/03/02 | 6102 | fonts/newcomputermodern/doc/integral.pdf
-2023/03/02 | 5983 | support/tex4ebook/tex4ebook
-2023/03/02 | 597492 | fonts/newcomputermodern/otf/NewCM08-Book.otf
-2023/03/02 | 591560 | fonts/newcomputermodern/otf/NewCM10-Book.otf
-2023/03/02 | 56970 | macros/latex/contrib/qrbill/qrbill-qrencode.lua
-2023/03/02 | 567744 | fonts/newcomputermodern/otf/NewCM10-Regular.otf
-2023/03/02 | 56587 | macros/jptex/latex/pxrubrica/pxrubrica-en.pdf
-2023/03/02 | 551008 | fonts/newcomputermodern/otf/NewCM10-BookItalic.otf
-2023/03/02 | 54823 | macros/latex/contrib/qrbill/qrbill.dtx
-2023/03/02 | 537448 | fonts/newcomputermodern/otf/NewCM08-Italic.otf
-2023/03/02 | 517965 | biblio/bibtex/bibtex-x.zip
-2023/03/02 | 516976 | fonts/newcomputermodern/otf/NewCM08-Regular.otf
-2023/03/02 | 51436 | systems/texlive/tlnet/archive/markdown.r66261.tar.xz
-2023/03/02 | 5023 | support/tex4ebook/tex4ebook.sty
-2023/03/02 | 501812 | fonts/utilities/ps2pk.zip
-2023/03/02 | 496348 | fonts/newcomputermodern/otf/NewCMMono10-BookItalic.otf
-2023/03/02 | 495400 | fonts/newcomputermodern/otf/NewCM10-Bold.otf
-2023/03/02 | 464808 | fonts/newcomputermodern/otf/NewCM10-Italic.otf
-2023/03/02 | 460064 | systems/texlive/tlnet/archive/lwarp.source.r66260.tar.xz
-2023/03/02 | 4599 | support/tex4ebook/tex4ebook-epub3.4ht
-2023/03/02 | 457627 | language/greek/greek-inputenc/greek-utf8.pdf
-2023/03/02 | 456 | macros/latex/contrib/qrbill/qrbill-latexluaqrcode.lua
-2023/03/02 | 445800 | fonts/newcomputermodern/otf/NewCM10-BoldItalic.otf
-2023/03/02 | 441 | macros/latex/contrib/pangram/README.md
-2023/03/02 | 423972 | systems/texlive/tlnet/archive/biblatex-publist.doc.r66284.tar.xz
-2023/03/02 | 421548 | fonts/newcomputermodern/otf/NewCMMono10-Book.otf
-2023/03/02 | 4212 | macros/latex/contrib/photobook/scripts/cls2tex.sh
-2023/03/02 | 414 | graphics/pgf/contrib/outilsgeomtikz/README.md
-2023/03/02 | 399576 | fonts/newcomputermodern/otf/NewCMMono10-Italic.otf
-2023/03/02 | 3984 | systems/texlive/tlnet/archive/fistrum.r66263.tar.xz
-2023/03/02 | 392897 | macros/jptex/latex/pxrubrica/pxrubrica.pdf
-2023/03/02 | 391136 | fonts/newcomputermodern/otf/NewCMSans08-BookOblique.otf
-2023/03/02 | 3888 | fonts/newcomputermodern/doc/opticalmathlm.pdf
-2023/03/02 | 374632 | fonts/newcomputermodern/otf/NewCMSans08-Book.otf
-2023/03/02 | 368828 | fonts/newcomputermodern/otf/NewCMSans10-Book.otf
-2023/03/02 | 365764 | fonts/newcomputermodern/otf/NewCMSans08-Regular.otf
-2023/03/02 | 36204 | systems/texlive/tlnet/archive/tabularray.r66281.tar.xz
-2023/03/02 | 360860 | fonts/newcomputermodern/otf/NewCMSans10-BoldOblique.otf
-2023/03/02 | 360060 | fonts/newcomputermodern/otf/NewCMSans08-Oblique.otf
-2023/03/02 | 348508 | fonts/newcomputermodern/otf/NewCMSans10-BookOblique.otf
-2023/03/02 | 340 | fonts/newcomputermodern/tex/newcomputermodern.sty
-2023/03/02 | 337184 | fonts/newcomputermodern/otf/NewCMMono10-Regular.otf
-2023/03/02 | 3345 | macros/latex/contrib/uvaletter/uvaletter.sty
-2023/03/02 | 33017 | language/greek/greek-inputenc/greek-inputenc.html
-2023/03/02 | 328912 | fonts/newcomputermodern/otf/NewCMSans10-Bold.otf
-2023/03/02 | 3256104 | systems/texlive/tlnet/archive/lwarp.doc.r66260.tar.xz
-2023/03/02 | 32120 | systems/texlive/tlnet/archive/greek-fontenc.r66262.tar.xz
-2023/03/02 | 3204 | macros/latex/contrib/pangram/pangram.ins
-2023/03/02 | 318516 | fonts/newcomputermodern/otf/NewCMSans10-Regular.otf
-2023/03/02 | 30252 | fonts/newcomputermodern/otf/NewCMUncial10-Regular.otf
-2023/03/02 | 297488 | fonts/newcomputermodern/otf/NewCMMono10-Bold.otf
-2023/03/02 | 284504 | fonts/newcomputermodern/otf/NewCMSans10-Oblique.otf
-2023/03/02 | 2783 | macros/latex/contrib/qrbill/README.md
-2023/03/02 | 2677 | support/tex4ebook/tex4ebook-tidyconf.conf
-2023/03/02 | 264398 | dviware/dviljk.zip
-2023/03/02 | 2552976 | systems/texlive/tlnet/archive/greek-fontenc.doc.r66262.tar.xz
-2023/03/02 | 2500 | macros/latex/contrib/uvaletter/demo/uvaletter-demo.tex
-2023/03/02 | 246864 | indexing/makeindexk.zip
-2023/03/02 | 24347 | language/greek/greek-inputenc/greek-utf8.tex
-2023/03/02 | 234 | fonts/newcomputermodern/tex/NewCMMono10-Regular.fontspec
-2023/03/02 | 232 | fonts/newcomputermodern/tex/NewCMMono10-Book.fontspec
-2023/03/02 | 23240 | fonts/newcomputermodern/otf/NewCMUncial08-Book.otf
-2023/03/02 | 22920 | fonts/newcomputermodern/otf/NewCMUncial10-Book.otf
-2023/03/02 | 22508 | fonts/newcomputermodern/otf/NewCMUncial08-Regular.otf
-2023/03/02 | 22400 | fonts/newcomputermodern/otf/NewCMUncial08-Bold.otf
-2023/03/02 | 212740 | systems/texlive/tlnet/archive/lwarp.r66260.tar.xz
-2023/03/02 | 212228 | macros/jptex/latex/pxrubrica/pxrubrica.dtx
-2023/03/02 | 21120 | fonts/newcomputermodern/otf/NewCMUncial10-Bold.otf
-2023/03/02 | 205 | fonts/newcomputermodern/doc/opticalmathlm.tex
-2023/03/02 | 2059 | macros/latex/contrib/uvaletter/README.md
-2023/03/02 | 19404 | systems/texlive/tlnet/archive/pxjahyper.r66285.tar.xz
-2023/03/02 | 191 | fonts/newcomputermodern/doc/integral.tex
-2023/03/02 | 18858 | support/tex4ebook/readme.tex
-2023/03/02 | 180963 | dviware/dvidvi.zip
-2023/03/02 | 1732 | support/tex4ebook/tex4ebook-exec_mobi.lua
-2023/03/02 | 1705 | macros/latex/contrib/photobook/README.md
-2023/03/02 | 16850 | support/tex4ebook/changelog.tex
-2023/03/02 | 163532 | systems/texlive/tlnet/archive/pxjahyper.doc.r66285.tar.xz
-2023/03/02 | 16189 | support/tex4ebook/tex4ebook-exec_epub.lua
-2023/03/02 | 1616200 | systems/texlive/tlnet/archive/eolang.doc.r66283.tar.xz
-2023/03/02 | 16144 | fonts/newcomputermodern/doc/newcm-unimath-symbols.ltx
-2023/03/02 | 1613 | macros/latex/contrib/qrbill/qrbill.ins
-2023/03/02 | 159132 | macros/latex/contrib/photobook/photobook.cls
-2023/03/02 | 1588 | systems/texlive/tlnet/archive/greek-fontenc.source.r66262.tar.xz
-2023/03/02 | 15724 | systems/texlive/tlnet/archive/eolang.source.r66283.tar.xz
-2023/03/02 | 15548 | systems/texlive/tlnet/archive/fistrum.source.r66263.tar.xz
-2023/03/02 | 15473 | support/tex4ebook/tex4ebook.4ht
-2023/03/02 | 1527 | macros/latex/contrib/photobook/LICENSE
-2023/03/02 | 14844 | support/tex4ebook/README
-2023/03/02 | 14576 | systems/texlive/tlnet/archive/lyluatex.r66280.tar.xz
-2023/03/02 | 141279 | fonts/newcomputermodern/doc/newcomputermodern-sample.pdf
-2023/03/02 | 140491 | macros/latex/contrib/photobook/photobook.pdf
-2023/03/02 | 13678 | macros/latex/contrib/pangram/pangram.dtx
-2023/03/02 | 134477 | macros/latex/contrib/uvaletter/demo/uvaletter-demo.pdf
-2023/03/02 | 132106 | install/macros/latex/contrib/qrbill.tds.zip
-2023/03/02 | 1303962 | fonts/newcomputermodern/doc/newcm-unimath-symbols.pdf
-2023/03/02 | 128372 | support/tex4ebook.zip
-2023/03/02 | 12666400 | fonts/newcomputermodern/source.txz
-2023/03/02 | 12196 | systems/texlive/tlnet/archive/biblatex-publist.r66284.tar.xz
-2023/03/02 | 120571 | macros/latex/contrib/qrbill.zip
-2023/03/02 | 11789 | fonts/newcomputermodern/README
-2023/03/02 | 1153 | macros/latex/contrib/qrbill/qrbill_swiss-cross.pdf
-2023/03/02 | 1151 | support/tex4ebook/tex4ebook-exec_azw3.lua
-2023/03/02 | 1139328 | fonts/newcomputermodern/otf/NewCMMath-Book.otf
-2023/03/02 | 1123752 | systems/texlive/tlnet/archive/markdown.doc.r66261.tar.xz
-2023/03/02 | 1107 | macros/latex/contrib/qrbill/qrbill-vocab.csv
-2023/03/02 | 107888 | systems/texlive/tlnet/archive/markdown.source.r66261.tar.xz
-2023/03/02 | 1069 | language/greek/greek-inputenc/README.md
-2023/03/02 | 106070 | macros/latex/contrib/pangram.zip
-2023/03/02 | 10553 | macros/latex/contrib/photobook/scripts/make-images.sh
-2023/03/02 | 105320 | macros/latex/contrib/pangram/pangram.pdf
-2023/03/02 | 1034 | fonts/newcomputermodern/tex/NewCM10-Regular.fontspec
-2023/03/02 | 1025552 | macros/latex/contrib/etoc.zip
-2023/03/02 | 1014 | fonts/newcomputermodern/tex/NewCM10-Book.fontspec
-2023/03/02 | 10133 | support/tex4ebook/tex4ebook-exec_epub3.lua
-2023/03/02 | 1005380 | fonts/newcomputermodern/otf/NewCMMath-Regular.otf
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 11d5c4c280..f9d958a250 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 09-03-2023, 02:00:14
+%% created at 10-03-2023, 02:06:39
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -4502,8 +4502,8 @@
title = {The \texttt{babel-french} package},
subtitle = {Babel contributed support for French},
author = {Daniel Flipo},
- date = {2023-01-02},
- version = {3.5p},
+ date = {2023-03-09},
+ version = {3.5q},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/babel-contrib/french},
url = {https://ctan.org/pkg/babel-french},
@@ -6242,7 +6242,7 @@
title = {The \texttt{bearwear} package},
subtitle = {Shirts to dress TikZbears},
author = {Ulrike Fischer},
- date = {2020-04-21},
+ date = {2023-03-09},
version = {0.2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/bearwear},
@@ -11972,7 +11972,7 @@
title = {The \texttt{chessboard} package},
subtitle = {Print chess boards},
author = {Ulrike Fischer},
- date = {2020-11-01},
+ date = {2023-03-09},
version = {1.9},
license = {lppl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/chessboard},
@@ -11983,7 +11983,7 @@
title = {The \texttt{chessfss} package},
subtitle = {A package to handle chess fonts},
author = {Ulrike Fischer},
- date = {2018-01-06},
+ date = {2023-03-09},
version = {1.2a},
license = {lppl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/chessfss},
@@ -12555,7 +12555,7 @@
title = {The \texttt{citeall} package},
subtitle = {Cite all entries of a bbl created with BibLaTeX},
author = {Ulrike Fischer},
- date = {2017-12-03},
+ date = {2023-03-09},
version = {1.4},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/biblatex-contrib/citeall},
@@ -14101,7 +14101,7 @@
title = {The \texttt{combofont} package},
subtitle = {Add NFSS-declarations of combo fonts to Lua\LaTeX{} documents},
author = {Ulrike Fischer},
- date = {2019-06-08},
+ date = {2023-03-09},
version = {0.3},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/luatex/latex/combofont},
@@ -21745,7 +21745,7 @@
title = {The \texttt{enpassant} package},
subtitle = {Enpassant chess font support},
author = {Ulrike Fischer},
- date = {2016-06-24},
+ date = {2023-03-09},
version = {1.1},
license = {lppl},
mirror = {https://mirror.ctan.org/fonts/chess/enpassant},
@@ -26253,7 +26253,7 @@
title = {The \texttt{fontloader-luaotfload} package},
subtitle = {Alternative fontloaders for luaotfload},
author = {Ulrike Fischer},
- date = {2018-09-30},
+ date = {2023-03-09},
version = {1.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/obsolete/macros/luatex/generic/fontloader-luaotfload},
@@ -27890,8 +27890,8 @@
title = {The \texttt{genealogytree} package},
subtitle = {Pedigree and genealogical tree diagrams},
author = {Thomas F. Sturm},
- date = {2022-03-17},
- version = {2.2.0},
+ date = {2023-03-09},
+ version = {2.3.0},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/genealogytree},
url = {https://ctan.org/pkg/genealogytree},
@@ -29598,8 +29598,8 @@
title = {The \texttt{greek-fontenc} package},
subtitle = {LICR macros and encoding definition files for Greek},
author = {Günter Milde},
- date = {2023-02-28},
- version = {2.2},
+ date = {2023-03-09},
+ version = {2.2.1},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/language/greek/greek-fontenc},
url = {https://ctan.org/pkg/greek-fontenc},
@@ -35910,8 +35910,8 @@
title = {The \texttt{kotex-oblivoir} package},
subtitle = {A \LaTeX{} document class for typesetting Korean documents},
author = {Kihwang Lee and Kangsoo Kim},
- date = {2023-03-02},
- version = {3.2},
+ date = {2023-03-09},
+ version = {3.2.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/language/korean/kotex-oblivoir},
url = {https://ctan.org/pkg/kotex-oblivoir},
@@ -36767,8 +36767,8 @@
title = {The \texttt{latex-base-dev} package},
subtitle = {Development pre-release of the \LaTeX{} kernel},
author = {{The \LaTeX{} Project Team}},
- date = {2022-12-03},
- version = {2023-06-01 pre-release 1},
+ date = {2023-03-09},
+ version = {2023-06-01 pre-release 2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex-dev/base},
url = {https://ctan.org/pkg/latex-base-dev},
@@ -37036,8 +37036,8 @@
title = {The \texttt{latex-lab-dev} package},
subtitle = {\LaTeX{} laboratory: Development pre-release},
author = {{The \LaTeX{} Project Team}},
- date = {2022-11-02},
- version = {2023-05-01 pre-release 0},
+ date = {2023-03-09},
+ version = {2023-06-01 pre-release 2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex-dev/required/latex-lab},
url = {https://ctan.org/pkg/latex-lab-dev},
@@ -40712,8 +40712,8 @@
title = {The \texttt{lua-typo} package},
subtitle = {Highlighting typographical flaws with LuaLaTeX},
author = {Daniel Flipo},
- date = {2023-02-10},
- version = {0.61},
+ date = {2023-03-09},
+ version = {0.65},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/luatex/latex/lua-typo},
url = {https://ctan.org/pkg/lua-typo},
@@ -45751,7 +45751,7 @@
title = {The \texttt{mparhack} package},
subtitle = {Work around a \LaTeX{} bug in marginpars},
author = {Stefan Ulrich and Ulrike Fischer},
- date = {2021-05-03},
+ date = {2023-03-09},
version = {1.5},
license = {gpl2+},
mirror = {https://mirror.ctan.org/macros/latex/contrib/mparhack},
@@ -47533,7 +47533,7 @@
title = {The \texttt{newpax} package},
subtitle = {Experimental package to extract and reinsert PDF annotations},
author = {Ulrike Fischer},
- date = {2022-09-15},
+ date = {2023-03-09},
version = {0.53},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/newpax},
@@ -49430,8 +49430,8 @@
title = {The \texttt{OpTeX} package},
subtitle = {LuaTeX format based on Plain \TeX{} and OPmac},
author = {Petr Olšák},
- date = {2023-02-09},
- version = {1.10},
+ date = {2023-03-09},
+ version = {1.11},
license = {pd},
mirror = {https://mirror.ctan.org/macros/optex},
url = {https://ctan.org/pkg/optex},
@@ -51115,8 +51115,8 @@
title = {The \texttt{pdfmanagement-testphase} package},
subtitle = {\LaTeX{} PDF management testphase bundle},
author = {{The \LaTeX{} Project Team}},
- date = {2023-02-21},
- version = {0.95w},
+ date = {2023-03-09},
+ version = {0.95x},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/pdfmanagement-testphase},
url = {https://ctan.org/pkg/pdfmanagement-testphase},
@@ -58164,7 +58164,7 @@
title = {The \texttt{returntogrid} package},
subtitle = {Semi-automatic grid typesetting},
author = {Ulrike Fischer},
- date = {2018-08-24},
+ date = {2023-03-09},
version = {0.2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/returntogrid},
@@ -58174,7 +58174,7 @@
less what the existing  
package does. The main differences to  are that
 works also with Lua\LaTeX{} and that it has
- also a command to do some horizontal movements to get to "tab"
+ also a command to do some horizontal movements to get to “tab”
positions.},
}
@@ -65376,7 +65376,7 @@
title = {The \texttt{tagpdf} package},
subtitle = {Tools for experimenting with tagging using pdf\LaTeX{} and LuaLaTeX},
author = {Ulrike Fischer},
- date = {2023-03-07},
+ date = {2023-03-09},
version = {0.98e},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/tagpdf},
@@ -69710,10 +69710,10 @@
title = {The \texttt{tlaunch} package},
subtitle = {A Windows GUI to run a networked \TeX{} Live as if installed locally},
author = {Siep Kroonenberg},
- date = {2019-06-21},
+ date = {2023-03-09},
version = {0.5.3},
license = {gpl3+},
- mirror = {https://mirror.ctan.org/support/tlaunch},
+ mirror = {https://mirror.ctan.org/obsolete/support/tlaunch},
url = {https://ctan.org/pkg/tlaunch},
}
@@ -71053,8 +71053,8 @@
title = {The \texttt{tugboat} package},
subtitle = {\LaTeX{} macros for TUGboat articles},
author = {Robin Fairbairns and Karl Berry},
- date = {2023-01-16},
- version = {2.28},
+ date = {2023-03-09},
+ version = {2.29},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/tugboat},
url = {https://ctan.org/pkg/tugboat},
@@ -76608,7 +76608,7 @@
title = {The \texttt{xskak} package},
subtitle = {An extension to the skak package for chess typesetting},
author = {Ulrike Fischer},
- date = {2019-06-23},
+ date = {2023-03-09},
version = {1.5},
license = {lppl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/xskak},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index 4ab2d2433b..d8808c8547 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/Makefile b/language/greek/greek-fontenc/Makefile
deleted file mode 100644
index e91e783830..0000000000
--- a/language/greek/greek-fontenc/Makefile
+++ /dev/null
@@ -1,179 +0,0 @@
-# This Makefile updates the source and documentation for the
-# greek-fontenc LateX package
-#
-# © 2019 Günter Milde
-#
-# SRCDIR (and the other variables) can be easily modified as parameters
-# while calling `make', e.g.
-#
-# make install SRCDIR=~/texmf/tex/latex/
-
-# Global variables
-# =================
-
-# for installation into a users local texmf tree
-DESTDIR = ~/texmf/tex/latex/greek/greek-fontenc
-DOCDIR = ~/texmf/doc/latex/greek/greek-fontenc
-
-CHDIR = cd
-COPY = cp -u
-SH = sh
-
-# programs
-PYLIT = pylit # text <-> source converter for literal programming
-RST2HTML = rst2html5 # text -> HTML converter, see docutils.sf.net
-RUBBER = rubber -f --pdf -m hyperref # wrapper around `latex`, run until references resolved
-LATEX = pdflatex -interaction batchmode
-
-# LaTeX source files
-# ==================
-
-.PHONY: all font-encodings packages
-
-all: font-encodings packages
-
-# font encoding definition files
-font-encodings: greek-fontenc.def lgrenc.def tuenc-greek.def greek-euenc.def
-
-# tuenc-greek.def: tuenc-greek.def.txt
-# $(PYLIT) $@.txt
-#
-# greek-fontenc.def: greek-fontenc.def.txt
-# $(PYLIT) $@.txt
-#
-# lgrenc.def: lgrenc.def.txt
-# $(PYLIT) $@.txt
-
-# LaTeX packages
-packages: textalpha.sty alphabeta.sty alphabeta-tuenc.def alphabeta-lgr.def
-
-# textalpha.sty: textalpha.sty.txt
-# $(PYLIT) $@.txt
-#
-# alphabeta.sty: alphabeta.sty.txt
-# $(PYLIT) $@.txt
-#
-# alphabeta-tuenc.def: alphabeta-tuenc.def.txt
-# $(PYLIT) $@.txt
-#
-# alphabeta-lgr.def: alphabeta-lgr.def.txt
-# $(PYLIT) $@.txt
-#
-# # Experimental files
-# lgr2licr.lua: lgr2licr.lua.txt
-# $(PYLIT) $@.txt
-
-# Documentation
-# =============
-
-.PHONY: doc html pdf
-
-doc: html pdf
-
-html: greek-fontenc-doc.html lgrenc.def.html puenc-greek.def.html \
- tuenc-greek.def.html greek-fontenc.def.html \
- textalpha.sty.html alphabeta.sty.html \
- alphabeta-tuenc.def.html alphabeta-lgr.def.html lgr2licr.lua.html
-
-greek-fontenc-doc.html: greek-fontenc-doc.rst
- $(RST2HTML) greek-fontenc-doc.rst > greek-fontenc-doc.html
-
-greek-fontenc.def.html: greek-fontenc.def
- $(PYLIT) greek-fontenc.def
- $(RST2HTML) greek-fontenc.def.txt > greek-fontenc.def.html
-
-lgrenc.def.html: lgrenc.def
- $(PYLIT) lgrenc.def
- $(RST2HTML) lgrenc.def.txt > lgrenc.def.html
-
-tuenc-greek.def.html: tuenc-greek.def
- $(PYLIT) tuenc-greek.def
- $(RST2HTML) tuenc-greek.def.txt > tuenc-greek.def.html
-
-puenc-greek.def.html: puenc-greek.def
- $(PYLIT) puenc-greek.def
- $(RST2HTML) puenc-greek.def.txt > puenc-greek.def.html
-
-textalpha.sty.html: textalpha.sty
- $(PYLIT) textalpha.sty
- $(RST2HTML) textalpha.sty.txt > textalpha.sty.html
-
-alphabeta.sty.html: alphabeta.sty
- $(PYLIT) alphabeta.sty
- $(RST2HTML) alphabeta.sty.txt > alphabeta.sty.html
-
-alphabeta-tuenc.def.html: alphabeta-tuenc.def
- $(PYLIT) alphabeta-tuenc.def
- $(RST2HTML) alphabeta-tuenc.def.txt > alphabeta-tuenc.def.html
-
-alphabeta-lgr.def.html: alphabeta-lgr.def
- $(PYLIT) alphabeta-lgr.def
- $(RST2HTML) alphabeta-lgr.def.txt > alphabeta-lgr.def.html
-
-lgr2licr.lua.html: lgr2licr.lua
- $(PYLIT) lgr2licr.lua
- $(RST2HTML) lgr2licr.lua.txt > lgr2licr.lua.html
-
-# User documentation
-# ==================
-
-pdf: alphabeta-doc.pdf alphabeta-doc-tu.pdf \
- textalpha-doc.pdf textalpha-doc-tu.pdf hyperref-with-greek.pdf \
- test-licr-input.pdf test-lgrenc.pdf test-tuenc-greek.pdf
-
-TEXTALPHA = textalpha.sty greek-fontenc.def lgrenc.def tuenc-greek.def puenc-greek.def
-ALPHABETA = $(TEXTALPHA) alphabeta.sty
-
-alphabeta-doc.pdf: alphabeta-doc.tex $(ALPHABETA)
- $(RUBBER) alphabeta-doc.tex
-
-alphabeta-doc-tu.pdf: alphabeta-doc.tex $(ALPHABETA)
- $(RUBBER) -m xelatex --jobname=alphabeta-doc-tu alphabeta-doc.tex
-
-textalpha-doc.pdf: textalpha-doc.tex $(TEXTALPHA)
- $(RUBBER) textalpha-doc.tex
-
-textalpha-doc-tu.pdf: textalpha-doc.tex lgrenc.def $(TEXTALPHA)
- $(RUBBER) -m xelatex --jobname=textalpha-doc-tu textalpha-doc.tex
-
-hyperref-with-greek.pdf: hyperref-with-greek.tex $(ALPHABETA)
- $(RUBBER) hyperref-with-greek.tex
-
-test-lgrenc.pdf: test-lgrenc.tex lgrenc.def greek-fontenc.def
- $(LATEX) test-lgrenc.tex
-
-test-tuenc-greek.pdf: test-tuenc-greek.tex tuenc-greek.def greek-fontenc.def
- $(RUBBER) -m xelatex test-tuenc-greek.tex
-
-test-licr-input.pdf: test-licr-input.tex $(TEXTALPHA)
- $(RUBBER) test-licr-input.tex
-
-test-licr-input-tu.pdf: test-licr-input.tex lgrenc.def $(TEXTALPHA)
- $(RUBBER) -m lualatex --jobname=test-licr-input-tu test-licr-input.tex
-
-
-# Installation
-# ------------
-
-update: packages
- $(COPY) *.def $(DESTDIR)
- $(COPY) *.sty $(DESTDIR)
-
-update-package: packages doc
- $(COPY) README.md $(DOCDIR)
- $(COPY) *.def $(DOCDIR)
- $(COPY) *.sty $(DOCDIR)
- $(COPY) *.tex $(DOCDIR)
- $(COPY) *.lua $(DOCDIR)
- $(COPY) *.rst $(DOCDIR)
- $(COPY) *.html $(DOCDIR)
- $(COPY) *.pdf $(DOCDIR)
- $(COPY) Makefile $(DOCDIR)
-
-# Cleanup
-# -------
-
-.PHONY: clean
-
-clean:
- rm -f *~ *.aux *.log *.out *.rubbercache *.toc
diff --git a/language/greek/greek-fontenc/README.md b/language/greek/greek-fontenc/README.md
index 8a6da67416..0b61d52f49 100644
--- a/language/greek/greek-fontenc/README.md
+++ b/language/greek/greek-fontenc/README.md
@@ -1,44 +1,50 @@
greek-fontenc
=============
-Greek font encoding definition files
-------------------------------------
Font encoding definition files with *LaTeX internal character
representation* (LICR) macros for letters and symbols from the Greek
script.
-The included LaTeX packages [textalpha] and [alphabeta] facilitate the use
-of Greek symbols in text.
+The included LaTeX packages [textalpha][1] and [alphabeta][2]
+facilitate the use of Greek symbols in text.
-**Version**: 2.2 ([changelog])
+**Version**: 2.2.1
-**Copyright**: © 2010 - 2023 Günter Milde <milde@users.sf.net>
+**Copyright**: © 2010 – 2023 Günter Milde
-**License**:
- This work may be distributed and/or modified under the conditions of the
- [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
- either version 1.3 of this license or any later version.
+This work may be distributed and/or modified under the conditions of the
+[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+either version 1.3 of this license or any later version.
**Home**: <https://codeberg.org/milde/greek-tex>
**Latest Release**: <https://ctan.org/pkg/greek-fontenc>
-**Requires**: text fonts supporting the Greek script
-**Recommends**: [greek-inputenc] (when used with 8-bit TeX/pdfTeX)
+Usage
+-----
-**Required by**: [babel-greek], [greek-inputenc]
+Usually, the font definition files are loaded via
+[Babel's ``greek`` option](https://ctan.org/pkg/babel-greek),
+the [textalpha][1] or [textbeta][2] packages, or the
+[fontenc](https://ctan.org/pkg/fontenc) package.
+Requires [text fonts supporting the Greek script][3].
+With 8-bit TeX/pdfTeX, [greek-inputenc](https://ctan.org/pkg/greek-inputenc)
+is recommended.
-See [greek-fontenc-doc.html] ([greek-fontenc-doc.rst]) for a detailed
-overview.
+Documentation
+-------------
+* [greek-fontenc-doc.html][4] (CTAN)
-[Babel]: https://ctan.org/pkg/babel
-[babel-greek]: https://ctan.org/pkg/babel-greek
-[greek-inputenc]: https://ctan.org/pkg/greek-inputenc
-[textalpha]: greek-fontenc-doc.html#textalpha
-[alphabeta]: greek-fontenc-doc.html#alphabeta
-[greek-fontenc-doc.html]: greek-fontenc-doc.html
-[greek-fontenc-doc.rst]: greek-fontenc-doc.rst
-[changelog]: greek-fontenc-doc.html#changelog
+* [greek-fontenc-doc.html](greek-fontenc-doc.html) (next to this file)
+
+* [greek-fontenc-doc.rst][5] (source repository)
+
+
+[1]: http://mirrors.ctan.org/language/greek/greek-fontenc/textalpha.sty.html
+[2]: http://mirrors.ctan.org/language/greek/greek-fontenc/alphabeta.sty.html
+[3]: https://ctan.org/tex-archive/macros/latex/contrib/babel-contrib/greek/babel-greek-doc.html#greek-text-fonts
+[4]: http://mirrors.ctan.org/language/greek/greek-fontenc/greek-fontenc-doc.html
+[5]: https://codeberg.org/milde/greek-tex/src/branch/master/greek-fontenc/greek-fontenc-doc.rst
diff --git a/language/greek/greek-fontenc/alphabeta-doc-tu.pdf b/language/greek/greek-fontenc/alphabeta-doc-tu.pdf
index 23d5dcfcb0..02bd042e9e 100644
--- a/language/greek/greek-fontenc/alphabeta-doc-tu.pdf
+++ b/language/greek/greek-fontenc/alphabeta-doc-tu.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/alphabeta-doc.pdf b/language/greek/greek-fontenc/alphabeta-doc.pdf
index 4b8d9aeefb..85a69a21af 100644
--- a/language/greek/greek-fontenc/alphabeta-doc.pdf
+++ b/language/greek/greek-fontenc/alphabeta-doc.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/alphabeta-doc.tex b/language/greek/greek-fontenc/alphabeta-doc.tex
index c149f517ba..4143da034b 100644
--- a/language/greek/greek-fontenc/alphabeta-doc.tex
+++ b/language/greek/greek-fontenc/alphabeta-doc.tex
@@ -1,7 +1,7 @@
% alphabeta-doc: Documentation and tests for alphabeta.sty
% ********************************************************
%
-% :Copyright: © 2010, 2015 Günter Milde
+% :Copyright: © 2010, 2023 Günter Milde
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
diff --git a/language/greek/greek-fontenc/alphabeta-lgr.def b/language/greek/greek-fontenc/alphabeta-lgr.def
index e976eafd56..1affabd264 100644
--- a/language/greek/greek-fontenc/alphabeta-lgr.def
+++ b/language/greek/greek-fontenc/alphabeta-lgr.def
@@ -3,7 +3,7 @@
% Composite definitions for 8-bit TeX
% ******************************************
%
-% :Copyright: © 2014 Günter Milde
+% :Copyright: © 2014, 2020 Günter Milde
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
diff --git a/language/greek/greek-fontenc/alphabeta-lgr.def.html b/language/greek/greek-fontenc/alphabeta-lgr.def.html
index a0d9674440..05af3f854e 100644
--- a/language/greek/greek-fontenc/alphabeta-lgr.def.html
+++ b/language/greek/greek-fontenc/alphabeta-lgr.def.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2014 Günter Milde" />
+<meta name="dcterms.rights" content="© 2014, 2020 Günter Milde" />
<title>alphabeta-lgr.def</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -289,12 +289,13 @@ p img, p video, figure img, figure video {
</style>
<style type="text/css">
-/* CSS31_ style sheet for the output of Docutils HTML writers. */
-/* Rules for easy reading and pre-defined style variants. */
+/* CSS3_ style sheet for the output of Docutils HTML5 writer. */
+/* Generic responsive design for all screen sizes. */
+/* */
+/* :Author: Günter Milde */
/* */
-/* :Author: Günter Milde, based on html4css1.css by David Goodger */
/* :Id: $Id$ */
-/* :Copyright: © 2015 Günter Milde. */
+/* :Copyright: © 2021 Günter Milde. */
/* :License: Released under the terms of the `2-Clause BSD license`_, */
/* in short: */
/* */
@@ -307,167 +308,199 @@ p img, p video, figure img, figure video {
/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
/* .. _CSS3: https://www.w3.org/Style/CSS/ */
+/* Note: */
+/* This style sheet is provisional: */
+/* the API is not settled and may change with any minor Docutils version. */
+
+
-/* Document Structure */
-/* ****************** */
+/* General Settings */
+/* ================ */
+
+
+* { box-sizing: border-box; }
-/* "page layout" */
body {
- margin: 0;
- background-color: #dbdbdb;
- --field-indent: 9em; /* default indent of fields in field lists */
-}
-main, footer, header {
- line-height:1.6;
- /* avoid long lines --> better reading */
- /* optimum is 45…75 characters/line <http://webtypography.net/2.1.2> */
- /* OTOH: lines should not be too short because of missing hyphenation, */
- max-width: 50rem;
- padding: 1px 2%; /* 1px on top avoids grey bar above title (mozilla) */
+ background-color: #fafaf6;
margin: auto;
+ --field-indent: 6.6em; /* indent of fields in field lists */
+ --sidebar-margin-right: 0; /* adapted in media queries below */
}
main {
- counter-reset: table figure;
+ counter-reset: figure table;
+}
+body > * {
background-color: white;
+ line-height: 1.6;
+ padding: 0.5rem calc(29% - 7.2rem); /* go from 5% to 15% (8.15em/54em) */
+ margin: auto;
+ max-width: 100rem;
+}
+sup, sub { /* avoid additional inter-line space for lines with sup/sub */
+ line-height: 1;
+}
+
+/* Vertical Space (Parskip) */
+p, ol, ul, dl, li,
+div.line-block,
+.topic,
+.footnote, .citation,
+div > math,
+table {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+h1, h2, h3, h4, h5, h6,
+dl > dd, details > p:last-child {
+ margin-bottom: 0.5em;
+}
+
+/* Indented Blocks */
+blockquote, figure, .topic {
+ margin: 1em 2%;
+ padding-left: 1em;
}
+div.line-block div.line-block,
+pre, dd, dl.option-list {
+ margin-left: calc(2% + 1em);
+}
+
+/* Object styling */
+/* ============== */
+
footer, header {
- font-size: smaller;
- padding: 0.5em 2%;
- border: none;
+ font-size: small;
+}
+
+/* Frontmatter */
+div.dedication {
+ padding: 0;
+ margin: 1.4em 0;
+ font-style: italic;
+ font-size: large;
+}
+.dedication p.topic-title {
+ display: none;
+}
+
+blockquote p.attribution,
+.topic p.attribution {
+ text-align: right;
}
/* Table of Contents */
-ul.auto-toc > li > p {
+nav.contents ul {
padding-left: 1em;
- text-indent: -1em;
}
-nav.contents ul {
+ul.auto-toc > li > p { /* hanging indent */
padding-left: 1em;
+ text-indent: -1em;
+}
+main > nav.contents ul:not(.auto-toc) {
+ list-style-type: square;
+}
+main > nav.contents ul ul:not(.auto-toc) {
+ list-style-type: disc;
}
-main > nav.contents ul ul ul ul:not(.auto-toc) {
+main > nav.contents ul ul ul:not(.auto-toc) {
list-style-type: '\2B29\ ';
}
-main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+main > nav.contents ul ul ul ul:not(.auto-toc) {
list-style-type: '\2B1D\ ';
}
-
-/* Transitions */
-hr.docutils {
- width: 80%;
- margin-top: 1em;
- margin-bottom: 1em;
- clear: both;
+main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B2A\ ';
}
-
-/* Paragraphs */
-
-/* vertical space (parskip) */
-p, ol, ul, dl, li,
-div.line-block,
-.footnote, .citation,
-div > math,
-table {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
+nav.contents ul > li::marker {
+ color: grey;
}
-h1, h2, h3, h4, h5, h6,
-dd, details > p:last-child {
- margin-bottom: 0.5em;
+/* Transitions */
+hr {
+ margin: 1em 10%;
}
/* Lists */
-/* ===== */
-
-/* Definition Lists */
-/* Indent lists nested in definition lists */
-dd > ul:only-child, dd > ol:only-child { padding-left: 1em; }
-/* Description Lists */
-/* styled like in most dictionaries, encyclopedias etc. */
+ul, ol {
+ padding-left: 1.1em; /* indent by bullet width (Firefox, DejaVu fonts) */
+}
+dl.field-list > dd,
+dl.docinfo > dd {
+ margin-left: var(--field-indent); /* adapted in media queries or HTML */
+}
+dl.option-list > dd {
+ margin-left: 20%;
+}
+/* run-in: start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+/* "description style" like in most dictionaries, encyclopedias etc. */
dl.description {
display: flow-root;
}
dl.description > dt {
- font-weight: bold;
clear: left;
float: left;
margin: 0;
padding: 0;
padding-right: 0.3em;
+ font-weight: bold;
}
dl.description > dd:after {
display: table;
content: "";
clear: left; /* clearfix for empty descriptions */
}
+/* start lists nested in description/field lists on new line */
+dd > dl:first-child,
+dd > ul:first-child,
+dd > ol:first-child {
+ clear: left;
+}
-/* Field Lists */
+/* disclosures */
+details { padding-left: 1em; }
+summary { margin-left: -1em; }
-dl.field-list > dd,
-dl.docinfo > dd {
- margin-left: var(--field-indent); /* adapted in media queries or HTML */
+/* Footnotes and Citations */
+.footnote {
+ font-size: small;
}
-/* example for custom field-name width */
-dl.field-list.narrow > dd {
- --field-indent: 5em;
-}
-/* run-in: start field-body on same line after long field names */
-dl.field-list.run-in > dd p {
+/* Images, Figures, and Tables */
+img {
display: block;
}
-
-/* Bibliographic Fields */
-
-/* generally, bibliographic fields use dl.docinfo */
-/* but dedication and abstract are placed into divs */
-div.abstract p.topic-title {
- text-align: center;
+p > img, p > a > img,
+figure > img, figure > a > img {
+ display: inline;
}
-div.dedication {
- margin: 2em 5em;
- text-align: center;
+
+figcaption,
+table > caption {
+ /* font-size: small; */
font-style: italic;
}
-div.dedication p.topic-title {
- font-style: normal;
+figcaption > .legend {
+ font-size: small;
+ font-style: initial;
}
-
-/* disclosures */
-details { padding-left: 1em; }
-summary { margin-left: -1em; }
-
-/* Text Blocks */
-/* =========== */
-
-/* Literal Blocks */
-pre.literal-block, pre.doctest-block,
-pre.math, pre.code {
- font-family: monospace;
+figure.numbered > figcaption > p:before {
+ counter-increment: figure;
+ content: "Figure " counter(figure) ": ";
+ font-weight: bold;
+ font-style: initial;
}
-/* Block Quotes and Topics */
-bockquote { margin: 1em 2em; }
-blockquote p.attribution,
-.topic p.attribution {
- text-align: right;
- margin-left: 20%;
+table tr {
+ text-align: left;
+ vertical-align: baseline;
}
-
-/* Tables */
-/* ====== */
-
-/* th { vertical-align: bottom; } */
-
-table tr { text-align: left; }
-
-/* "booktabs" style (no vertical lines) */
-table.booktabs {
- border: 0;
+table.booktabs { /* "booktabs" style (no vertical lines) */
border-top: 2px solid;
border-bottom: 2px solid;
- border-collapse: collapse;
}
table.booktabs * {
border: 0;
@@ -475,88 +508,43 @@ table.booktabs * {
table.booktabs th {
border-bottom: thin solid;
}
-
-/* numbered tables (counter defined in div.document) */
table.numbered > caption:before {
counter-increment: table;
content: "Table " counter(table) ": ";
font-weight: bold;
-}
-
-/* Explicit Markup Blocks */
-/* ====================== */
-
-/* Footnotes and Citations */
-/* ----------------------- */
-
-/* line on the left */
-.footnote-list {
- border-left: solid thin;
- padding-left: 0.25em;
-}
-
-/* Directives */
-/* ---------- */
-
-/* Body Elements */
-/* ~~~~~~~~~~~~~ */
-
-/* Images and Figures */
-
-/* let content flow to the side of aligned images and figures */
-figure.align-left,
-img.align-left,
-video.align-left,
-object.align-left {
- clear: left;
- float: left;
- margin-right: 1em;
-}
-figure.align-right,
-img.align-right,
-video.align-right,
-object.align-right {
- clear: right;
- float: right;
- margin-left: 1em;
-}
-/* Stop floating sidebars, images and figures */
-h1, h2, h3, h4, footer, header { clear: both; }
-
-/* Numbered figures */
-figure.numbered > figcaption > p:before {
- counter-increment: figure;
- content: "Figure " counter(figure) ": ";
- font-weight: bold;
+ font-style: initial;
}
/* Admonitions and System Messages */
+.admonition,
+div.system-message {
+ border: thin solid silver;
+ margin: 1em 2%;
+ padding: 0.5em 1em;
+}
.caution p.admonition-title,
.attention p.admonition-title,
.danger p.admonition-title,
-.error p.admonition-title,
.warning p.admonition-title,
div.error {
- color: red;
+ color: maroon;
}
-
-/* Sidebar */
-/* Move right. In a layout with fixed margins, */
-/* it can be moved into the margin. */
-aside.sidebar {
- width: 30%;
- max-width: 26em;
- float: right;
- clear: right;
- margin-left: 1em;
- margin-right: -1%;
- background-color: #fffffa;
+div.system-message > p > span.literal {
+ overflow-wrap: break-word;
}
+/* Literal and Code */
+pre.literal-block, pre.doctest{
+ padding: 0.2em;
+ overflow-x: auto;
+}
+.literal-block, .doctest, span.literal {
+ background-color: #f6f9f8;
+}
+.system-message span.literal {
+ background-color: inherit;
+}
-/* Code */
-pre.code { padding: 0.7ex }
-pre.code, code { background-color: #eeeeee }
/* basic highlighting: for a complete scheme, see */
/* https://docutils.sourceforge.io/sandbox/stylesheets/ */
pre.code .comment, code .comment { color: #5C6576 }
@@ -566,6 +554,94 @@ pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
+/* Hyperlink References */
+a {
+ text-decoration: none; /* for chromium */
+ /* Wrap links at any place, if this is the only way to prevent overflow */
+ overflow-wrap: break-word;
+}
+.contents a, a.toc-backref, a.citation-reference {
+ overflow-wrap: inherit;
+}
+/* Undecorated Links (see also minimal.css) */
+/* a.citation-reference, */
+.citation a.fn-backref {
+ color: inherit;
+}
+a:hover {
+ text-decoration: underline;
+}
+*:hover > a.toc-backref:after {
+ content: " \2191"; /* ↑ UPWARDS ARROW */
+ color: grey;
+}
+*:hover > a.self-link:after {
+ content: "\1F517"; /* LINK SYMBOL */
+ color: grey;
+ font-size: smaller;
+ margin-left: 0.2em;
+}
+/* highlight the target of the current URL */
+section:target > h2, section:target > h3, section:target > h4,
+section:target > h5, section:target > h6,
+.contents :target,
+.contents:target > .topic-title,
+[role="doc-biblioentry"]:target > .label,
+[role="doc-biblioref"]:target,
+[role="note"]:target, /* Docutils 0.18 ... 0.19 */
+[role="doc-footnote"]:target, /* Docutils >= 0.20 */
+[role="doc-noteref"]:target {
+ background-color: #d2e6ec;
+}
+
+/* Block Alignment */
+/* Let content flow to the side of aligned images and figures */
+
+/* no floats around this elements */
+footer, header, hr,
+h1, h2, h3 {
+ clear: both;
+}
+
+img.align-left,
+video.align-left,
+figure.align-left,
+table.align-left {
+ margin-left: 0;
+ padding-left: 0;
+ margin-right: 0.5em;
+ clear: left;
+ float: left;
+}
+img.align-right,
+video.align-right,
+figure.align-right,
+table.align-right {
+ margin-left: 0.5em;
+ margin-right: 0;
+ clear: right;
+ float: right;
+}
+
+/* Margin Elements */
+/* see below for screen size dependent rules */
+.sidebar,
+.marginal,
+.admonition.marginal {
+ max-width: 40%;
+ border: none;
+ background-color: #efefea;
+ margin: 0.5em var(--sidebar-margin-right) 0.5em 1em;
+ padding: 0.5em;
+ padding-left: 0.7em;
+ clear: right;
+ float: right;
+ font-size: small;
+}
+.sidebar {
+ width: 40%;
+}
+
/* Math */
/* for math-output=MathML (for math-output=HTML, see math.css) */
math .boldsymbol {
@@ -575,32 +651,139 @@ mstyle.mathscr, mi.mathscr {
font-family: STIX;
}
-/* Epigraph */
-/* Highlights */
-/* Pull-Quote */
-/* Compound Paragraph */
-/* Container */
-
-/* Inline Markup */
-/* ============= */
-
-sup, sub { line-height: 0.8; } /* do not add leading for lines with sup/sub */
-
-/* Inline Literals */
-/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
-/* span.docutils.literal { white-space: pre-wrap; } */
-
-/* Hyperlink References */
-a { text-decoration: none; }
-
-/* External Targets */
-/* span.target.external */
-/* Internal Targets */
-/* span.target.internal */
-/* Footnote References */
-/* a[role="doc-noteref"] */
-/* Citation References */
-/* a.citation-reference */
+/* Adaptive page layout */
+/* ==================== */
+
+@media (max-width: 30em) {
+ /* Smaller margins and no floating elements for small screens */
+ /* (main text less than 40 characters/line) */
+ body > * {
+ padding: 0.5rem 5%;
+ line-height: 1.4
+ }
+ .sidebar,
+ .marginal,
+ .admonition.marginal {
+ width: auto;
+ max-width: 100%;
+ float: none;
+ }
+ dl.option-list,
+ pre {
+ margin-left: 0;
+ }
+ body {
+ --field-indent: 4em;
+ }
+ dl.field-list.narrow, dl.docinfo, dl.option-list {
+ --field-indent: 2.4em;
+ }
+ pre, pre * {
+ font-size: 0.9em;
+ /* overflow: auto; */
+ }
+}
+
+@media (min-width: 54em) {
+ /* Move ToC to the left */
+ /* Main text width before: 70% ≙ 35em ≙ 75…95 chrs (Dejavu/Times) */
+ /* after: ≳ 30em ≙ 54…70 chrs (Dejavu/Times) */
+ body.with-toc {
+ padding-left: 8%;
+ }
+ body.with-toc > * {
+ margin-left: 0;
+ padding-left: 22rem; /* fallback for webkit */
+ padding-left: min(22%, 22rem);
+ padding-right: 7%;
+ }
+ main > nav.contents { /* global ToC */
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: min(25%, 25em);
+ height: 100vh;
+ margin: 0;
+ background-color: #fafaf6;
+ padding: 1em 2% 0 2%;
+ overflow: auto;
+ }
+ main > nav.contents > * {
+ padding-left: 0;
+ line-height: 1.4;
+ }
+ main > nav.contents a {
+ color: inherit;
+ }
+}
+
+@media (min-width: 70em) {
+ body {
+ --field-indent: 9em;
+ }
+}
+
+@media (min-width: 77em) {
+ /* Move marginalia to 6rem from right border */
+ /* .sidebar, */
+ /* .marginal, */
+ /* .admonition.marginal { */
+ /* margin-right: calc(6rem - 15%); */
+ /* } */
+ /* BUG: margin is calculated for break point width */
+ /* workaround: variable + many breakpoints */
+ body > * {
+ padding-left: 18%;
+ padding-right: 28%; /* fallback for webkit */
+ padding-right: min(28%, 28rem);
+ --sidebar-margin-right: -20rem;
+ }
+ /* limit main text to ~ 50em ≙ 85…100 characters DejaVu rsp. …120 Times */
+ body.with-toc > * {
+ padding-left: min(22%, 22rem);
+ padding-right: calc(78% - 50rem); /* fallback for webkit */
+ padding-right: min(78% - 50rem, 28rem);
+ --sidebar-margin-right: 0;
+ }
+}
+
+@media (min-width: 85em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -9rem;
+ }
+}
+
+@media (min-width: 90em) {
+ /* move marginalia into the margin */
+ body > * {
+ padding-left: min(22%, 22rem);
+ --sidebar-margin-right: -23rem;
+ }
+ body.with-toc > * {
+ --sidebar-margin-right: -14rem;
+ }
+}
+
+@media (min-width: 99em) {
+ /* move marginalia out of main text area */
+ body.with-toc > * {
+ --sidebar-margin-right: -20rem;
+ }
+ body > *, body.with-toc > * { /* for webkit */
+ padding-left: 22rem;
+ padding-right: 28rem;
+ }
+ .admonition.marginal,
+ .marginal {
+ width: 40%; /* make marginal figures, ... "full width" */
+ }
+}
+
+@media (min-width: 104em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -23rem;
+ }
+}
</style>
</head>
@@ -610,7 +793,7 @@ a { text-decoration: none; }
<p class="subtitle" id="composite-definitions-for-8-bit-tex">Composite definitions for 8-bit TeX</p>
<dl class="docinfo">
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2014 Günter Milde</dd>
+<dd class="copyright">© 2014, 2020 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
diff --git a/language/greek/greek-fontenc/alphabeta-tuenc.def b/language/greek/greek-fontenc/alphabeta-tuenc.def
index cb2f621e54..897cd68516 100644
--- a/language/greek/greek-fontenc/alphabeta-tuenc.def
+++ b/language/greek/greek-fontenc/alphabeta-tuenc.def
@@ -3,7 +3,7 @@
% Composite definitions for XeTeX and LuaTeX
% ******************************************
%
-% :Copyright: © 2013 Günter Milde
+% :Copyright: © 2013, 2020 Günter Milde
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
diff --git a/language/greek/greek-fontenc/alphabeta-tuenc.def.html b/language/greek/greek-fontenc/alphabeta-tuenc.def.html
index 308e0bef42..55e8042b22 100644
--- a/language/greek/greek-fontenc/alphabeta-tuenc.def.html
+++ b/language/greek/greek-fontenc/alphabeta-tuenc.def.html
@@ -5,7 +5,7 @@
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="width=device-width, initial-scale=1" name="viewport" />
-<meta name="dcterms.rights" content="© 2013 Günter Milde" />
+<meta name="dcterms.rights" content="© 2013, 2020 Günter Milde" />
<title>alphabeta-tuenc.def</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -290,12 +290,13 @@ p img, p video, figure img, figure video {
</style>
<style type="text/css">
-/* CSS31_ style sheet for the output of Docutils HTML writers. */
-/* Rules for easy reading and pre-defined style variants. */
+/* CSS3_ style sheet for the output of Docutils HTML5 writer. */
+/* Generic responsive design for all screen sizes. */
+/* */
+/* :Author: Günter Milde */
/* */
-/* :Author: Günter Milde, based on html4css1.css by David Goodger */
/* :Id: $Id$ */
-/* :Copyright: © 2015 Günter Milde. */
+/* :Copyright: © 2021 Günter Milde. */
/* :License: Released under the terms of the `2-Clause BSD license`_, */
/* in short: */
/* */
@@ -308,167 +309,199 @@ p img, p video, figure img, figure video {
/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
/* .. _CSS3: https://www.w3.org/Style/CSS/ */
+/* Note: */
+/* This style sheet is provisional: */
+/* the API is not settled and may change with any minor Docutils version. */
+
+
-/* Document Structure */
-/* ****************** */
+/* General Settings */
+/* ================ */
+
+
+* { box-sizing: border-box; }
-/* "page layout" */
body {
- margin: 0;
- background-color: #dbdbdb;
- --field-indent: 9em; /* default indent of fields in field lists */
-}
-main, footer, header {
- line-height:1.6;
- /* avoid long lines --> better reading */
- /* optimum is 45…75 characters/line <http://webtypography.net/2.1.2> */
- /* OTOH: lines should not be too short because of missing hyphenation, */
- max-width: 50rem;
- padding: 1px 2%; /* 1px on top avoids grey bar above title (mozilla) */
+ background-color: #fafaf6;
margin: auto;
+ --field-indent: 6.6em; /* indent of fields in field lists */
+ --sidebar-margin-right: 0; /* adapted in media queries below */
}
main {
- counter-reset: table figure;
+ counter-reset: figure table;
+}
+body > * {
background-color: white;
+ line-height: 1.6;
+ padding: 0.5rem calc(29% - 7.2rem); /* go from 5% to 15% (8.15em/54em) */
+ margin: auto;
+ max-width: 100rem;
+}
+sup, sub { /* avoid additional inter-line space for lines with sup/sub */
+ line-height: 1;
+}
+
+/* Vertical Space (Parskip) */
+p, ol, ul, dl, li,
+div.line-block,
+.topic,
+.footnote, .citation,
+div > math,
+table {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+h1, h2, h3, h4, h5, h6,
+dl > dd, details > p:last-child {
+ margin-bottom: 0.5em;
+}
+
+/* Indented Blocks */
+blockquote, figure, .topic {
+ margin: 1em 2%;
+ padding-left: 1em;
}
+div.line-block div.line-block,
+pre, dd, dl.option-list {
+ margin-left: calc(2% + 1em);
+}
+
+/* Object styling */
+/* ============== */
+
footer, header {
- font-size: smaller;
- padding: 0.5em 2%;
- border: none;
+ font-size: small;
+}
+
+/* Frontmatter */
+div.dedication {
+ padding: 0;
+ margin: 1.4em 0;
+ font-style: italic;
+ font-size: large;
+}
+.dedication p.topic-title {
+ display: none;
+}
+
+blockquote p.attribution,
+.topic p.attribution {
+ text-align: right;
}
/* Table of Contents */
-ul.auto-toc > li > p {
+nav.contents ul {
padding-left: 1em;
- text-indent: -1em;
}
-nav.contents ul {
+ul.auto-toc > li > p { /* hanging indent */
padding-left: 1em;
+ text-indent: -1em;
+}
+main > nav.contents ul:not(.auto-toc) {
+ list-style-type: square;
+}
+main > nav.contents ul ul:not(.auto-toc) {
+ list-style-type: disc;
}
-main > nav.contents ul ul ul ul:not(.auto-toc) {
+main > nav.contents ul ul ul:not(.auto-toc) {
list-style-type: '\2B29\ ';
}
-main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+main > nav.contents ul ul ul ul:not(.auto-toc) {
list-style-type: '\2B1D\ ';
}
-
-/* Transitions */
-hr.docutils {
- width: 80%;
- margin-top: 1em;
- margin-bottom: 1em;
- clear: both;
+main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B2A\ ';
}
-
-/* Paragraphs */
-
-/* vertical space (parskip) */
-p, ol, ul, dl, li,
-div.line-block,
-.footnote, .citation,
-div > math,
-table {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
+nav.contents ul > li::marker {
+ color: grey;
}
-h1, h2, h3, h4, h5, h6,
-dd, details > p:last-child {
- margin-bottom: 0.5em;
+/* Transitions */
+hr {
+ margin: 1em 10%;
}
/* Lists */
-/* ===== */
-
-/* Definition Lists */
-/* Indent lists nested in definition lists */
-dd > ul:only-child, dd > ol:only-child { padding-left: 1em; }
-/* Description Lists */
-/* styled like in most dictionaries, encyclopedias etc. */
+ul, ol {
+ padding-left: 1.1em; /* indent by bullet width (Firefox, DejaVu fonts) */
+}
+dl.field-list > dd,
+dl.docinfo > dd {
+ margin-left: var(--field-indent); /* adapted in media queries or HTML */
+}
+dl.option-list > dd {
+ margin-left: 20%;
+}
+/* run-in: start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+/* "description style" like in most dictionaries, encyclopedias etc. */
dl.description {
display: flow-root;
}
dl.description > dt {
- font-weight: bold;
clear: left;
float: left;
margin: 0;
padding: 0;
padding-right: 0.3em;
+ font-weight: bold;
}
dl.description > dd:after {
display: table;
content: "";
clear: left; /* clearfix for empty descriptions */
}
+/* start lists nested in description/field lists on new line */
+dd > dl:first-child,
+dd > ul:first-child,
+dd > ol:first-child {
+ clear: left;
+}
-/* Field Lists */
+/* disclosures */
+details { padding-left: 1em; }
+summary { margin-left: -1em; }
-dl.field-list > dd,
-dl.docinfo > dd {
- margin-left: var(--field-indent); /* adapted in media queries or HTML */
+/* Footnotes and Citations */
+.footnote {
+ font-size: small;
}
-/* example for custom field-name width */
-dl.field-list.narrow > dd {
- --field-indent: 5em;
-}
-/* run-in: start field-body on same line after long field names */
-dl.field-list.run-in > dd p {
+/* Images, Figures, and Tables */
+img {
display: block;
}
-
-/* Bibliographic Fields */
-
-/* generally, bibliographic fields use dl.docinfo */
-/* but dedication and abstract are placed into divs */
-div.abstract p.topic-title {
- text-align: center;
+p > img, p > a > img,
+figure > img, figure > a > img {
+ display: inline;
}
-div.dedication {
- margin: 2em 5em;
- text-align: center;
+
+figcaption,
+table > caption {
+ /* font-size: small; */
font-style: italic;
}
-div.dedication p.topic-title {
- font-style: normal;
+figcaption > .legend {
+ font-size: small;
+ font-style: initial;
}
-
-/* disclosures */
-details { padding-left: 1em; }
-summary { margin-left: -1em; }
-
-/* Text Blocks */
-/* =========== */
-
-/* Literal Blocks */
-pre.literal-block, pre.doctest-block,
-pre.math, pre.code {
- font-family: monospace;
+figure.numbered > figcaption > p:before {
+ counter-increment: figure;
+ content: "Figure " counter(figure) ": ";
+ font-weight: bold;
+ font-style: initial;
}
-/* Block Quotes and Topics */
-bockquote { margin: 1em 2em; }
-blockquote p.attribution,
-.topic p.attribution {
- text-align: right;
- margin-left: 20%;
+table tr {
+ text-align: left;
+ vertical-align: baseline;
}
-
-/* Tables */
-/* ====== */
-
-/* th { vertical-align: bottom; } */
-
-table tr { text-align: left; }
-
-/* "booktabs" style (no vertical lines) */
-table.booktabs {
- border: 0;
+table.booktabs { /* "booktabs" style (no vertical lines) */
border-top: 2px solid;
border-bottom: 2px solid;
- border-collapse: collapse;
}
table.booktabs * {
border: 0;
@@ -476,88 +509,43 @@ table.booktabs * {
table.booktabs th {
border-bottom: thin solid;
}
-
-/* numbered tables (counter defined in div.document) */
table.numbered > caption:before {
counter-increment: table;
content: "Table " counter(table) ": ";
font-weight: bold;
-}
-
-/* Explicit Markup Blocks */
-/* ====================== */
-
-/* Footnotes and Citations */
-/* ----------------------- */
-
-/* line on the left */
-.footnote-list {
- border-left: solid thin;
- padding-left: 0.25em;
-}
-
-/* Directives */
-/* ---------- */
-
-/* Body Elements */
-/* ~~~~~~~~~~~~~ */
-
-/* Images and Figures */
-
-/* let content flow to the side of aligned images and figures */
-figure.align-left,
-img.align-left,
-video.align-left,
-object.align-left {
- clear: left;
- float: left;
- margin-right: 1em;
-}
-figure.align-right,
-img.align-right,
-video.align-right,
-object.align-right {
- clear: right;
- float: right;
- margin-left: 1em;
-}
-/* Stop floating sidebars, images and figures */
-h1, h2, h3, h4, footer, header { clear: both; }
-
-/* Numbered figures */
-figure.numbered > figcaption > p:before {
- counter-increment: figure;
- content: "Figure " counter(figure) ": ";
- font-weight: bold;
+ font-style: initial;
}
/* Admonitions and System Messages */
+.admonition,
+div.system-message {
+ border: thin solid silver;
+ margin: 1em 2%;
+ padding: 0.5em 1em;
+}
.caution p.admonition-title,
.attention p.admonition-title,
.danger p.admonition-title,
-.error p.admonition-title,
.warning p.admonition-title,
div.error {
- color: red;
+ color: maroon;
}
-
-/* Sidebar */
-/* Move right. In a layout with fixed margins, */
-/* it can be moved into the margin. */
-aside.sidebar {
- width: 30%;
- max-width: 26em;
- float: right;
- clear: right;
- margin-left: 1em;
- margin-right: -1%;
- background-color: #fffffa;
+div.system-message > p > span.literal {
+ overflow-wrap: break-word;
}
+/* Literal and Code */
+pre.literal-block, pre.doctest{
+ padding: 0.2em;
+ overflow-x: auto;
+}
+.literal-block, .doctest, span.literal {
+ background-color: #f6f9f8;
+}
+.system-message span.literal {
+ background-color: inherit;
+}
-/* Code */
-pre.code { padding: 0.7ex }
-pre.code, code { background-color: #eeeeee }
/* basic highlighting: for a complete scheme, see */
/* https://docutils.sourceforge.io/sandbox/stylesheets/ */
pre.code .comment, code .comment { color: #5C6576 }
@@ -567,6 +555,94 @@ pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
+/* Hyperlink References */
+a {
+ text-decoration: none; /* for chromium */
+ /* Wrap links at any place, if this is the only way to prevent overflow */
+ overflow-wrap: break-word;
+}
+.contents a, a.toc-backref, a.citation-reference {
+ overflow-wrap: inherit;
+}
+/* Undecorated Links (see also minimal.css) */
+/* a.citation-reference, */
+.citation a.fn-backref {
+ color: inherit;
+}
+a:hover {
+ text-decoration: underline;
+}
+*:hover > a.toc-backref:after {
+ content: " \2191"; /* ↑ UPWARDS ARROW */
+ color: grey;
+}
+*:hover > a.self-link:after {
+ content: "\1F517"; /* LINK SYMBOL */
+ color: grey;
+ font-size: smaller;
+ margin-left: 0.2em;
+}
+/* highlight the target of the current URL */
+section:target > h2, section:target > h3, section:target > h4,
+section:target > h5, section:target > h6,
+.contents :target,
+.contents:target > .topic-title,
+[role="doc-biblioentry"]:target > .label,
+[role="doc-biblioref"]:target,
+[role="note"]:target, /* Docutils 0.18 ... 0.19 */
+[role="doc-footnote"]:target, /* Docutils >= 0.20 */
+[role="doc-noteref"]:target {
+ background-color: #d2e6ec;
+}
+
+/* Block Alignment */
+/* Let content flow to the side of aligned images and figures */
+
+/* no floats around this elements */
+footer, header, hr,
+h1, h2, h3 {
+ clear: both;
+}
+
+img.align-left,
+video.align-left,
+figure.align-left,
+table.align-left {
+ margin-left: 0;
+ padding-left: 0;
+ margin-right: 0.5em;
+ clear: left;
+ float: left;
+}
+img.align-right,
+video.align-right,
+figure.align-right,
+table.align-right {
+ margin-left: 0.5em;
+ margin-right: 0;
+ clear: right;
+ float: right;
+}
+
+/* Margin Elements */
+/* see below for screen size dependent rules */
+.sidebar,
+.marginal,
+.admonition.marginal {
+ max-width: 40%;
+ border: none;
+ background-color: #efefea;
+ margin: 0.5em var(--sidebar-margin-right) 0.5em 1em;
+ padding: 0.5em;
+ padding-left: 0.7em;
+ clear: right;
+ float: right;
+ font-size: small;
+}
+.sidebar {
+ width: 40%;
+}
+
/* Math */
/* for math-output=MathML (for math-output=HTML, see math.css) */
math .boldsymbol {
@@ -576,32 +652,139 @@ mstyle.mathscr, mi.mathscr {
font-family: STIX;
}
-/* Epigraph */
-/* Highlights */
-/* Pull-Quote */
-/* Compound Paragraph */
-/* Container */
-
-/* Inline Markup */
-/* ============= */
-
-sup, sub { line-height: 0.8; } /* do not add leading for lines with sup/sub */
-
-/* Inline Literals */
-/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
-/* span.docutils.literal { white-space: pre-wrap; } */
-
-/* Hyperlink References */
-a { text-decoration: none; }
-
-/* External Targets */
-/* span.target.external */
-/* Internal Targets */
-/* span.target.internal */
-/* Footnote References */
-/* a[role="doc-noteref"] */
-/* Citation References */
-/* a.citation-reference */
+/* Adaptive page layout */
+/* ==================== */
+
+@media (max-width: 30em) {
+ /* Smaller margins and no floating elements for small screens */
+ /* (main text less than 40 characters/line) */
+ body > * {
+ padding: 0.5rem 5%;
+ line-height: 1.4
+ }
+ .sidebar,
+ .marginal,
+ .admonition.marginal {
+ width: auto;
+ max-width: 100%;
+ float: none;
+ }
+ dl.option-list,
+ pre {
+ margin-left: 0;
+ }
+ body {
+ --field-indent: 4em;
+ }
+ dl.field-list.narrow, dl.docinfo, dl.option-list {
+ --field-indent: 2.4em;
+ }
+ pre, pre * {
+ font-size: 0.9em;
+ /* overflow: auto; */
+ }
+}
+
+@media (min-width: 54em) {
+ /* Move ToC to the left */
+ /* Main text width before: 70% ≙ 35em ≙ 75…95 chrs (Dejavu/Times) */
+ /* after: ≳ 30em ≙ 54…70 chrs (Dejavu/Times) */
+ body.with-toc {
+ padding-left: 8%;
+ }
+ body.with-toc > * {
+ margin-left: 0;
+ padding-left: 22rem; /* fallback for webkit */
+ padding-left: min(22%, 22rem);
+ padding-right: 7%;
+ }
+ main > nav.contents { /* global ToC */
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: min(25%, 25em);
+ height: 100vh;
+ margin: 0;
+ background-color: #fafaf6;
+ padding: 1em 2% 0 2%;
+ overflow: auto;
+ }
+ main > nav.contents > * {
+ padding-left: 0;
+ line-height: 1.4;
+ }
+ main > nav.contents a {
+ color: inherit;
+ }
+}
+
+@media (min-width: 70em) {
+ body {
+ --field-indent: 9em;
+ }
+}
+
+@media (min-width: 77em) {
+ /* Move marginalia to 6rem from right border */
+ /* .sidebar, */
+ /* .marginal, */
+ /* .admonition.marginal { */
+ /* margin-right: calc(6rem - 15%); */
+ /* } */
+ /* BUG: margin is calculated for break point width */
+ /* workaround: variable + many breakpoints */
+ body > * {
+ padding-left: 18%;
+ padding-right: 28%; /* fallback for webkit */
+ padding-right: min(28%, 28rem);
+ --sidebar-margin-right: -20rem;
+ }
+ /* limit main text to ~ 50em ≙ 85…100 characters DejaVu rsp. …120 Times */
+ body.with-toc > * {
+ padding-left: min(22%, 22rem);
+ padding-right: calc(78% - 50rem); /* fallback for webkit */
+ padding-right: min(78% - 50rem, 28rem);
+ --sidebar-margin-right: 0;
+ }
+}
+
+@media (min-width: 85em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -9rem;
+ }
+}
+
+@media (min-width: 90em) {
+ /* move marginalia into the margin */
+ body > * {
+ padding-left: min(22%, 22rem);
+ --sidebar-margin-right: -23rem;
+ }
+ body.with-toc > * {
+ --sidebar-margin-right: -14rem;
+ }
+}
+
+@media (min-width: 99em) {
+ /* move marginalia out of main text area */
+ body.with-toc > * {
+ --sidebar-margin-right: -20rem;
+ }
+ body > *, body.with-toc > * { /* for webkit */
+ padding-left: 22rem;
+ padding-right: 28rem;
+ }
+ .admonition.marginal,
+ .marginal {
+ width: 40%; /* make marginal figures, ... "full width" */
+ }
+}
+
+@media (min-width: 104em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -23rem;
+ }
+}
</style>
</head>
@@ -611,7 +794,7 @@ a { text-decoration: none; }
<p class="subtitle" id="composite-definitions-for-xetex-and-luatex">Composite definitions for XeTeX and LuaTeX</p>
<dl class="docinfo">
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2013 Günter Milde</dd>
+<dd class="copyright">© 2013, 2020 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
diff --git a/language/greek/greek-fontenc/alphabeta.sty b/language/greek/greek-fontenc/alphabeta.sty
index 09a1cf5c6e..a0352815db 100644
--- a/language/greek/greek-fontenc/alphabeta.sty
+++ b/language/greek/greek-fontenc/alphabeta.sty
@@ -3,38 +3,17 @@
% Greek symbols in text and math
% ******************************
%
-% :Copyright: © 2010 Günter Milde
+% :Version: 2.2.1 (changelog_)
+%
+% :Copyright: © 2010, 2020 Günter Milde
+%
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
%
-% :Abstract: Use ``\alpha, \beta, ...`` for Greek letters in text and math
-% mode.
+% :Abstract: Use ``\alpha, \beta, ...`` for Greek letters in text and math
+% mode.
%
-% :Identification:
-% ::
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{alphabeta}
- [2020/10/13 2.0 macros for Greek letters in text and math]
-
-% Changelog:
-% .. class:: borderless
-%
-% ====== ========== =========================================================
-% 0.1 2012-06-26 initial version
-% 0.2 2013-05-03 new accent macro names with ``lgrxenc.def`` 0.7
-% 0.3 2013-05-28 use ``lgrenc.def`` from greek-fontenc,
-% .. enable Unicode input in math mode.
-% 0.4 2013-09-11 move to greek-fontenc_, support XeTeX/LuaTeX.
-% 0.13 2015-09-04 Support for `variant symbols`.
-% 0.13.2 2016-02-05 Support for standard Unicode text font encoding "TU"
-% (new in fontspec v2.5a).
-% 0.14 2020/02/28 rename ``alphabeta-euenc.def`` to
-% ``alphabeta-tuenc.def``.
-% 1.0 2020/09/25 New package version. No changes in this file.
-% 2.0 2020/10/13 Provide ``\Koppa``.
-% ====== ========== =========================================================
%
% .. contents::
%
@@ -91,6 +70,16 @@
% Implementation
% ==============
%
+% Identification
+% --------------
+%
+% ::
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{alphabeta}
+ [2023/03/08 2.2.1 macros for Greek letters in text and math]
+
+
% Requirements
% ------------
%
@@ -121,6 +110,7 @@
\AtBeginDocument{
+
% Save math macros
% ----------------
%
@@ -180,6 +170,7 @@
\let\mathvarkappa\varkappa
\fi
+
% Commands to access Greek letters by name
% ----------------------------------------
%
@@ -333,6 +324,7 @@
\input{alphabeta-lgr.def}
}{}
+
% Re-definition for Greek Unicode input in math mode
% --------------------------------------------------
%
@@ -395,6 +387,29 @@
} % close the \AtBeginDocument macro
+
+% Changelog
+% =========
+%
+% .. class:: borderless
+%
+% ====== =========== ========================================================
+% 0.1 2012-06-26 initial version
+% 0.2 2013-05-03 new accent macro names with ``lgrxenc.def`` 0.7
+% 0.3 2013-05-28 use ``lgrenc.def`` from greek-fontenc,
+% .. enable Unicode input in math mode.
+% 0.4 2013-09-11 move to greek-fontenc_, support XeTeX/LuaTeX.
+% 0.13 2015-09-04 Support for `variant symbols`.
+% 0.13.2 2016-02-05 Support for standard Unicode text font encoding "TU"
+% (new in fontspec v2.5a).
+% 0.14 2020/02/28 rename ``alphabeta-euenc.def`` to
+% ``alphabeta-tuenc.def``.
+% 1.0 2020/09/25 New package version. No changes in this file.
+% 2.0 2020/10/13 Provide ``\Koppa``.
+% 2.2.1 2023-03-08 Documentation update.
+% ====== =========== ========================================================
+%
+%
% .. References
% ----------
% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
diff --git a/language/greek/greek-fontenc/alphabeta.sty.html b/language/greek/greek-fontenc/alphabeta.sty.html
index ba21b883b2..f6deffaf26 100644
--- a/language/greek/greek-fontenc/alphabeta.sty.html
+++ b/language/greek/greek-fontenc/alphabeta.sty.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2010 Günter Milde" />
+<meta name="dcterms.rights" content="© 2010, 2020 Günter Milde" />
<title>alphabeta.sty</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -792,75 +792,21 @@ mstyle.mathscr, mi.mathscr {
<h1 class="title">alphabeta.sty</h1>
<p class="subtitle" id="greek-symbols-in-text-and-math">Greek symbols in text and math</p>
<dl class="docinfo">
+<dt class="version">Version<span class="colon">:</span></dt>
+<dd class="version">2.2.1 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2010 Günter Milde</dd>
+<dd class="copyright">© 2010, 2020 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
version 1.3 of this license or any later version.</p>
</dd>
-<dt class="identification">Identification<span class="colon">:</span></dt>
-<dd class="identification"><pre class="literal-block">\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{alphabeta}
- [2020/10/13 2.0 macros for Greek letters in text and math]</pre>
-</dd>
</dl>
<div class="topic abstract" role="doc-abstract">
<p class="topic-title">Abstract</p>
<p>Use <span class="docutils literal">\alpha, \beta, ...</span> for Greek letters in text and math
mode.</p>
</div>
-<dl>
-<dt>Changelog:</dt>
-<dd><table class="borderless">
-<tbody>
-<tr><td><p>0.1</p></td>
-<td><p>2012-06-26</p></td>
-<td><p>initial version</p></td>
-</tr>
-<tr><td><p>0.2</p></td>
-<td><p>2013-05-03</p></td>
-<td><p>new accent macro names with <span class="docutils literal">lgrxenc.def</span> 0.7</p></td>
-</tr>
-<tr><td><p>0.3</p></td>
-<td><p>2013-05-28</p></td>
-<td><p>use <span class="docutils literal">lgrenc.def</span> from greek-fontenc,</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>enable Unicode input in math mode.</p></td>
-</tr>
-<tr><td><p>0.4</p></td>
-<td><p>2013-09-11</p></td>
-<td><p>move to <a class="reference external" href="https://ctan.org/pkg/greek-fontenc">greek-fontenc</a>, support XeTeX/LuaTeX.</p></td>
-</tr>
-<tr><td><p>0.13</p></td>
-<td><p>2015-09-04</p></td>
-<td><p>Support for <cite>variant symbols</cite>.</p></td>
-</tr>
-<tr><td><p>0.13.2</p></td>
-<td><p>2016-02-05</p></td>
-<td><p>Support for standard Unicode text font encoding “TU”
-(new in fontspec v2.5a).</p></td>
-</tr>
-<tr><td><p>0.14</p></td>
-<td><p>2020/02/28</p></td>
-<td><p>rename <span class="docutils literal"><span class="pre">alphabeta-euenc.def</span></span> to
-<span class="docutils literal"><span class="pre">alphabeta-tuenc.def</span></span>.</p></td>
-</tr>
-<tr><td><p>1.0</p></td>
-<td><p>2020/09/25</p></td>
-<td><p>New package version. No changes in this file.</p></td>
-</tr>
-<tr><td><p>2.0</p></td>
-<td><p>2020/10/13</p></td>
-<td><p>Provide <span class="docutils literal">\Koppa</span>.</p></td>
-</tr>
-</tbody>
-</table>
-</dd>
-</dl>
<nav class="contents" id="contents" role="doc-toc">
<p class="topic-title">Contents</p>
<ul class="simple">
@@ -872,19 +818,21 @@ mode.</p>
</li>
<li><p><a class="reference internal" href="#implementation" id="toc-entry-4">Implementation</a></p>
<ul>
-<li><p><a class="reference internal" href="#requirements" id="toc-entry-5">Requirements</a></p></li>
-<li><p><a class="reference internal" href="#postpone-the-re-definitions" id="toc-entry-6">Postpone the re-definitions</a></p></li>
-<li><p><a class="reference internal" href="#save-math-macros" id="toc-entry-7">Save math macros</a></p></li>
-<li><p><a class="reference internal" href="#commands-to-access-greek-letters-by-name" id="toc-entry-8">Commands to access Greek letters by name</a></p>
+<li><p><a class="reference internal" href="#identification" id="toc-entry-5">Identification</a></p></li>
+<li><p><a class="reference internal" href="#requirements" id="toc-entry-6">Requirements</a></p></li>
+<li><p><a class="reference internal" href="#postpone-the-re-definitions" id="toc-entry-7">Postpone the re-definitions</a></p></li>
+<li><p><a class="reference internal" href="#save-math-macros" id="toc-entry-8">Save math macros</a></p></li>
+<li><p><a class="reference internal" href="#commands-to-access-greek-letters-by-name" id="toc-entry-9">Commands to access Greek letters by name</a></p>
<ul>
-<li><p><a class="reference internal" href="#archaic-letters" id="toc-entry-9">Archaic letters</a></p></li>
-<li><p><a class="reference internal" href="#variant-shape-symbols" id="toc-entry-10">Variant shape symbols</a></p></li>
+<li><p><a class="reference internal" href="#archaic-letters" id="toc-entry-10">Archaic letters</a></p></li>
+<li><p><a class="reference internal" href="#variant-shape-symbols" id="toc-entry-11">Variant shape symbols</a></p></li>
</ul>
</li>
-<li><p><a class="reference internal" href="#textcompositecommands-for-the-generic-macros" id="toc-entry-11">TextCompositeCommands for the generic macros</a></p></li>
-<li><p><a class="reference internal" href="#re-definition-for-greek-unicode-input-in-math-mode" id="toc-entry-12">Re-definition for Greek Unicode input in math mode</a></p></li>
+<li><p><a class="reference internal" href="#textcompositecommands-for-the-generic-macros" id="toc-entry-12">TextCompositeCommands for the generic macros</a></p></li>
+<li><p><a class="reference internal" href="#re-definition-for-greek-unicode-input-in-math-mode" id="toc-entry-13">Re-definition for Greek Unicode input in math mode</a></p></li>
</ul>
</li>
+<li><p><a class="reference internal" href="#changelog" id="toc-entry-14">Changelog</a></p></li>
</ul>
</nav>
<section id="motivation">
@@ -925,8 +873,14 @@ non-compatible definition of <span class="docutils literal">\DeclareUnicodeChara
</section>
<section id="implementation">
<h2><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Implementation</a></h2>
+<section id="identification">
+<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Identification</a></h3>
+<pre class="literal-block">\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{alphabeta}
+ [2023/03/08 2.2.1 macros for Greek letters in text and math]</pre>
+</section>
<section id="requirements">
-<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Requirements</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Requirements</a></h3>
<p>This package extends the <a class="reference external" href="textalpha.sty.html">textalpha</a> package.
Package options are passed on to <cite>textalpha</cite>:</p>
<pre class="literal-block">\RequirePackageWithOptions{textalpha}</pre>
@@ -939,13 +893,13 @@ distribution) for the <span class="docutils literal">\ifdefined</span> test.</p>
<pre class="code latex literal-block"><code><span class="keyword">\usepackage</span><span class="name builtin">{</span>fixltx2e<span class="name builtin">}</span></code></pre>
</section>
<section id="postpone-the-re-definitions">
-<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Postpone the re-definitions</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Postpone the re-definitions</a></h3>
<p>To prevent other packages overwriting the re-defined commands we postpone
the next steps until the start of the document body:</p>
<pre class="literal-block">\AtBeginDocument{</pre>
</section>
<section id="save-math-macros">
-<h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Save math macros</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Save math macros</a></h3>
<p>Map the standard math commands to maths-specific names:</p>
<pre class="literal-block">\let\mathGamma\Gamma
\let\mathDelta\Delta
@@ -1002,7 +956,7 @@ the next steps until the start of the document body:</p>
\fi</pre>
</section>
<section id="commands-to-access-greek-letters-by-name">
-<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Commands to access Greek letters by name</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Commands to access Greek letters by name</a></h3>
<p>For letters defined in math mode, the commands work in both, text and math.</p>
<p>Some Greek letters look identical to Latin letters and can therefore not be
used as variable symbols in math formulas. These letters are not defined in
@@ -1072,7 +1026,7 @@ in both, text and math mode.</p>
\renewcommand*{\psi}{\TextOrMath{\textpsi}{\mathpsi}}
\renewcommand*{\omega}{\TextOrMath{\textomega}{\mathomega}}</pre>
<section id="archaic-letters">
-<h4><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Archaic letters</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Archaic letters</a></h4>
<pre class="literal-block">\renewcommand*{\digamma}{\TextOrMath{\textdigamma}{\mathdigamma}} % ϝ
\providecommand*{\Digamma}{\textDigamma} % Ϝ
\providecommand*{\stigma}{\textstigma} % ϛ
@@ -1086,7 +1040,7 @@ in both, text and math mode.</p>
\providecommand*{\sampi}{\textsampi} % ϡ</pre>
</section>
<section id="variant-shape-symbols">
-<h4><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Variant shape symbols</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">Variant shape symbols</a></h4>
<p>TeX’s concept of “standard” vs. “variant” math symbols does not map to the
distinction between GREEK LETTER … vs. GREEK … SYMBOL in the Unicode
standard (see <a class="reference external" href="test-tuenc-greek.pdf">test-tuenc-greek.pdf</a>).</p>
@@ -1124,7 +1078,7 @@ math (or, if not supported, the SYMBOL shape):</p>
</section>
</section>
<section id="textcompositecommands-for-the-generic-macros">
-<h3><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">TextCompositeCommands for the generic macros</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">TextCompositeCommands for the generic macros</a></h3>
<p>The NFSS TextComposite mechanism looks for the next token without expanding
it. In order to let compositions like <span class="docutils literal"><span class="pre">\ensuregreek{\'\Alpha}</span></span> or
<span class="docutils literal"><span class="pre">\ensuregreek{\&gt;&quot;\alpha}</span></span> work as expected we define TextComposites with the
@@ -1138,7 +1092,7 @@ is LGR).</p>
}{}</pre>
</section>
<section id="re-definition-for-greek-unicode-input-in-math-mode">
-<h3><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">Re-definition for Greek Unicode input in math mode</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-13" role="doc-backlink">Re-definition for Greek Unicode input in math mode</a></h3>
<p>Check with <span class="docutils literal">\ifdefined</span> for the definition of
<span class="docutils literal">\DeclareUnicodeCharacter</span>. In contrast to <span class="docutils literal">\&#64;ifdefined</span>, this works
without side-effects. It makes the package dependent on the <a class="reference external" href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=etex">e-TeX</a>
@@ -1192,10 +1146,64 @@ macros:</p>
\fi</pre>
<pre class="literal-block">} % close the \AtBeginDocument macro</pre>
+</section>
+</section>
+<section id="changelog">
+<h2><a class="toc-backref" href="#toc-entry-14" role="doc-backlink">Changelog</a></h2>
+<table class="borderless">
+<tbody>
+<tr><td><p>0.1</p></td>
+<td><p>2012-06-26</p></td>
+<td><p>initial version</p></td>
+</tr>
+<tr><td><p>0.2</p></td>
+<td><p>2013-05-03</p></td>
+<td><p>new accent macro names with <span class="docutils literal">lgrxenc.def</span> 0.7</p></td>
+</tr>
+<tr><td><p>0.3</p></td>
+<td><p>2013-05-28</p></td>
+<td><p>use <span class="docutils literal">lgrenc.def</span> from greek-fontenc,</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>enable Unicode input in math mode.</p></td>
+</tr>
+<tr><td><p>0.4</p></td>
+<td><p>2013-09-11</p></td>
+<td><p>move to <a class="reference external" href="https://ctan.org/pkg/greek-fontenc">greek-fontenc</a>, support XeTeX/LuaTeX.</p></td>
+</tr>
+<tr><td><p>0.13</p></td>
+<td><p>2015-09-04</p></td>
+<td><p>Support for <cite>variant symbols</cite>.</p></td>
+</tr>
+<tr><td><p>0.13.2</p></td>
+<td><p>2016-02-05</p></td>
+<td><p>Support for standard Unicode text font encoding “TU”
+(new in fontspec v2.5a).</p></td>
+</tr>
+<tr><td><p>0.14</p></td>
+<td><p>2020/02/28</p></td>
+<td><p>rename <span class="docutils literal"><span class="pre">alphabeta-euenc.def</span></span> to
+<span class="docutils literal"><span class="pre">alphabeta-tuenc.def</span></span>.</p></td>
+</tr>
+<tr><td><p>1.0</p></td>
+<td><p>2020/09/25</p></td>
+<td><p>New package version. No changes in this file.</p></td>
+</tr>
+<tr><td><p>2.0</p></td>
+<td><p>2020/10/13</p></td>
+<td><p>Provide <span class="docutils literal">\Koppa</span>.</p></td>
+</tr>
+<tr><td><p>2.2.1</p></td>
+<td><p>2023-03-08</p></td>
+<td><p>Documentation update.</p></td>
+</tr>
+</tbody>
+</table>
<!-- References
- - - - - - - - - - -->
</section>
-</section>
</main>
</body>
</html>
diff --git a/language/greek/greek-fontenc/greek-fontenc-doc.html b/language/greek/greek-fontenc/greek-fontenc-doc.html
index 82bd481047..df2405c2dd 100644
--- a/language/greek/greek-fontenc/greek-fontenc-doc.html
+++ b/language/greek/greek-fontenc/greek-fontenc-doc.html
@@ -793,7 +793,7 @@ mstyle.mathscr, mi.mathscr {
<p class="subtitle" id="greek-font-encoding-definition-files">Greek font encoding definition files</p>
<dl class="docinfo">
<dt class="version">Version<span class="colon">:</span></dt>
-<dd class="version">2.2 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
+<dd class="version">2.2.1 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
<dt class="copyright">Copyright<span class="colon">:</span></dt>
<dd class="copyright">© 2010 – 2023 Günter Milde &lt;<a class="reference external" href="mailto:milde&#64;users.sf.net">milde&#64;users.sf.net</a>&gt;</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
@@ -932,8 +932,8 @@ with <a class="reference external" href="https://docutils.sourceforge.io/rst.htm
<dt>Test LICRs with non-Greek legacy 8-bit input encoding</dt>
<dd><p><a class="reference external" href="test-licr-input.tex">test-licr-input.tex</a>, <a class="reference external" href="test-licr-input.pdf">test-licr-input.pdf</a></p>
</dd>
-<dt>Greek diacritics with standard accent macros</dt>
-<dd><p><a class="reference external" href="diacritics.tex">diacritics.tex</a>, <a class="reference external" href="diacritics.pdf">diacritics.pdf</a></p>
+<dt>Test Greek diacritics with standard accent macros</dt>
+<dd><p><a class="reference external" href="test-diacritics.tex">test-diacritics.tex</a>, <a class="reference external" href="test-diacritics.pdf">test-diacritics.pdf</a></p>
</dd>
</dl>
</section>
@@ -1386,6 +1386,13 @@ converted to pre-composed characters.</p></li>
<li><p>Various small fixes and documentation update.</p></li>
</ul>
</dd>
+<dt>2.2.1 (2023-03-08)</dt>
+<dd><ul class="simple">
+<li><p>Fix broken links in README.md.</p></li>
+<li><p><span class="docutils literal">&#64;uclclist</span> entry for <span class="docutils literal">\accoxia</span>, prevent
+downcasing <span class="docutils literal">\textStigma</span> to <span class="docutils literal">\textvarstigma</span>.</p></li>
+</ul>
+</dd>
</dl>
</section>
<section id="references">
diff --git a/language/greek/greek-fontenc/greek-fontenc-doc.rst b/language/greek/greek-fontenc/greek-fontenc-doc.rst
index 0ff78e7238..67a866da11 100644
--- a/language/greek/greek-fontenc/greek-fontenc-doc.rst
+++ b/language/greek/greek-fontenc/greek-fontenc-doc.rst
@@ -4,7 +4,7 @@ greek-fontenc
Greek font encoding definition files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-:Version: 2.2 (changelog_)
+:Version: 2.2.1 (changelog_)
:Copyright: © 2010 -- 2023 Günter Milde <milde@users.sf.net>
:Licence: This work may be distributed and/or modified under the
@@ -100,8 +100,8 @@ Hyperref_ test and usage example
Test LICRs with non-Greek legacy 8-bit input encoding
`<test-licr-input.tex>`_, `<test-licr-input.pdf>`_
-Greek diacritics with standard accent macros
- `<diacritics.tex>`_, `<diacritics.pdf>`_
+Test Greek diacritics with standard accent macros
+ `<test-diacritics.tex>`_, `<test-diacritics.pdf>`_
Download and Installation
@@ -536,6 +536,10 @@ Changelog
- Don't use ``\makeatother`` in ``\AtBeginDocument``.
- Skip ``\uccode`` fixes when ignored by ``\MakeUppercase``.
- Various small fixes and documentation update.
+2.2.1 (2023-03-08)
+ - Fix broken links in README.md.
+ - ``@uclclist`` entry for ``\accoxia``, prevent
+ downcasing ``\textStigma`` to ``\textvarstigma``.
__ http://tex.stackexchange.com/questions/281631/greek-small-rho-with-dasia-and-also-psili-problem-with-accent-and-lgr-encodin
.. _ltxbugs 4399:
diff --git a/language/greek/greek-fontenc/greek-fontenc.def b/language/greek/greek-fontenc/greek-fontenc.def
index d7db6ff2ce..1e5d781b49 100644
--- a/language/greek/greek-fontenc/greek-fontenc.def
+++ b/language/greek/greek-fontenc/greek-fontenc.def
@@ -4,16 +4,14 @@
% Common Greek font encoding definitions
% ======================================
%
-% :Copyright: © 2013 Günter Milde
+% :Version: 2.2.1 (changelog_)
+%
+% :Copyright: © 2013 -- 2023 Günter Milde
+%
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
-% :Identification:
-% ::
-
-\ProvidesFile{greek-fontenc.def}
-[2023/02/28 2.2 Common Greek font encoding definitions]
-
+%
% :Abstract: This file provides definitions that are shared between
% font encodings providing Greek characters.
%
@@ -28,6 +26,13 @@
% Implementation
% --------------
%
+% Identification
+% ~~~~~~~~~~~~~~
+% ::
+
+\ProvidesFile{greek-fontenc.def}
+ [2023/03/08 2.2.1 Common Greek font encoding definitions]
+
% ensuregreek, greekscript
% ~~~~~~~~~~~~~~~~~~~~~~~~
%
@@ -290,6 +295,7 @@
\accpsilivaria\LGR@hiatus
\accpsiliperispomeni\LGR@accdropped
\acctonos\LGR@hiatus
+ \accoxia\LGR@hiatus
\accvaria\LGR@accdropped
\accdialytikatonos\LGR@accDialytika
\accdialytikavaria\LGR@accDialytika
@@ -324,7 +330,7 @@
\textomega \textOmega
\textkoppa \textKoppa
\textqoppa \textQoppa
- \textvarstigma \textStigma
+ \textvarstigma \LGR@Stigma
\textstigma \textStigma
\textsampi \textSampi
\textdigamma \textDigamma
@@ -357,6 +363,11 @@
\DeclareTextCommand{\LGR@ypogegrammeni}{\LastDeclaredEncoding}{\ypogegrammeni}
+% Prevent downcasing ``\textStigma`` to the stigma variant ``\textvarstigma``
+% (only available in LGR). This happened sometimes with the post-2022/06
+% ``\MakeLowercase``::
+
+\DeclareTextCommand{\LGR@Stigma}{\LastDeclaredEncoding}{\textStigma}
% Mark hiatus
% """""""""""
@@ -394,8 +405,8 @@
\reserved@b
}
-% Changes
-% -------
+% Changelog
+% ---------
%
% .. class:: borderless
%
@@ -409,6 +420,8 @@
% 1.0 2020-09-25 ``\textKoppagreek`` and ``\textstigmagreek`` aliases.
% 2.0 2020/10/30 Alias definitions matching mathematical variant symbols.
% 2.2 2023-02-28 Add missing accent composite commands.
+% 2.2.1 2023-03-08 ``@uclclist`` entry for ``\accoxia``, prevent
+% downcasing ``\textStigma`` to ``\textvarstigma``.
% ====== ============ ========================================================
%
%
diff --git a/language/greek/greek-fontenc/greek-fontenc.def.html b/language/greek/greek-fontenc/greek-fontenc.def.html
index 488bee24e9..68d93d25d0 100644
--- a/language/greek/greek-fontenc/greek-fontenc.def.html
+++ b/language/greek/greek-fontenc/greek-fontenc.def.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2013 Günter Milde" />
+<meta name="dcterms.rights" content="© 2013 – 2023 Günter Milde" />
<title>greek-fontenc.def</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -792,17 +792,15 @@ mstyle.mathscr, mi.mathscr {
<h1 class="title">greek-fontenc.def</h1>
<p class="subtitle" id="common-greek-font-encoding-definitions">Common Greek font encoding definitions</p>
<dl class="docinfo">
+<dt class="version">Version<span class="colon">:</span></dt>
+<dd class="version">2.2.1 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2013 Günter Milde</dd>
+<dd class="copyright">© 2013 – 2023 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
version 1.3 of this license or any later version.</p>
</dd>
-<dt class="identification">Identification<span class="colon">:</span></dt>
-<dd class="identification"><pre class="literal-block">\ProvidesFile{greek-fontenc.def}
-[2023/02/28 2.2 Common Greek font encoding definitions]</pre>
-</dd>
</dl>
<div class="topic abstract" role="doc-abstract">
<p class="topic-title">Abstract</p>
@@ -815,20 +813,21 @@ font encodings providing Greek characters.</p>
<li><p><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></p></li>
<li><p><a class="reference internal" href="#implementation" id="toc-entry-2">Implementation</a></p>
<ul>
-<li><p><a class="reference internal" href="#ensuregreek-greekscript" id="toc-entry-3">ensuregreek, greekscript</a></p></li>
-<li><p><a class="reference internal" href="#aliases" id="toc-entry-4">Aliases</a></p></li>
-<li><p><a class="reference internal" href="#composite-diacritics" id="toc-entry-5">Composite diacritics</a></p></li>
-<li><p><a class="reference internal" href="#uppercase" id="toc-entry-6">UPPERCASE</a></p>
+<li><p><a class="reference internal" href="#identification" id="toc-entry-3">Identification</a></p></li>
+<li><p><a class="reference internal" href="#ensuregreek-greekscript" id="toc-entry-4">ensuregreek, greekscript</a></p></li>
+<li><p><a class="reference internal" href="#aliases" id="toc-entry-5">Aliases</a></p></li>
+<li><p><a class="reference internal" href="#composite-diacritics" id="toc-entry-6">Composite diacritics</a></p></li>
+<li><p><a class="reference internal" href="#uppercase" id="toc-entry-7">UPPERCASE</a></p>
<ul>
-<li><p><a class="reference internal" href="#uclclist-extension" id="toc-entry-7">&#64;uclclist extension</a></p></li>
-<li><p><a class="reference internal" href="#substitution-macros" id="toc-entry-8">Substitution macros</a></p></li>
-<li><p><a class="reference internal" href="#mark-hiatus" id="toc-entry-9">Mark hiatus</a></p></li>
+<li><p><a class="reference internal" href="#uclclist-extension" id="toc-entry-8">&#64;uclclist extension</a></p></li>
+<li><p><a class="reference internal" href="#substitution-macros" id="toc-entry-9">Substitution macros</a></p></li>
+<li><p><a class="reference internal" href="#mark-hiatus" id="toc-entry-10">Mark hiatus</a></p></li>
</ul>
</li>
</ul>
</li>
-<li><p><a class="reference internal" href="#changes" id="toc-entry-10">Changes</a></p></li>
-<li><p><a class="reference internal" href="#references" id="toc-entry-11">References</a></p></li>
+<li><p><a class="reference internal" href="#changelog" id="toc-entry-11">Changelog</a></p></li>
+<li><p><a class="reference internal" href="#references" id="toc-entry-12">References</a></p></li>
</ul>
</nav>
<section id="usage">
@@ -838,8 +837,13 @@ font encodings providing Greek characters.</p>
</section>
<section id="implementation">
<h2><a class="toc-backref" href="#toc-entry-2" role="doc-backlink">Implementation</a></h2>
+<section id="identification">
+<h3><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">Identification</a></h3>
+<pre class="literal-block">\ProvidesFile{greek-fontenc.def}
+ [2023/03/08 2.2.1 Common Greek font encoding definitions]</pre>
+</section>
<section id="ensuregreek-greekscript">
-<h3><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">ensuregreek, greekscript</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">ensuregreek, greekscript</a></h3>
<p>Provide “empty” encoding-specific definitions for <span class="docutils literal">\ensuregreek</span> and
<span class="docutils literal">\greekscript</span>. The definitions in this file make the font encoding fit
for use with the Greek script. (See <span class="docutils literal">textalpha.sty</span> for default
@@ -856,7 +860,7 @@ the Greek script, if required. The following definition announces the
<pre class="literal-block">\ProvideTextCommand{\greekscript}{\LastDeclaredEncoding}{}</pre>
</section>
<section id="aliases">
-<h3><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Aliases</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Aliases</a></h3>
<p>Aliases are defined via <cite>DeclareTextCommand</cite> so that up/downcasing works
without the need for additional <a class="reference internal" href="#uclclist">uclclist</a> entries.</p>
<p>Names matching mathematical variant symbols:</p>
@@ -910,7 +914,7 @@ table, LCI encoding)?</p>
</span><span class="name variable">\DeclareTextCommand</span><span class="name builtin">{</span><span class="literal string">\)</span><span class="name builtin">}{</span><span class="keyword">\LastDeclaredEncoding</span><span class="name builtin">}{</span><span class="keyword">\accpsili</span><span class="name builtin">}</span></code></pre>
</section>
<section id="composite-diacritics">
-<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Composite diacritics</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Composite diacritics</a></h3>
<p>Composite accents can be input as sequence of simple diacritics (in
arbitrary order) via named macro, symbol macro and “transliteration
characters”, e.g. one of</p>
@@ -1016,7 +1020,7 @@ composite definitions starting with standard macros are requried:</p>
\DeclareTextCompositeCommand{\accdasia}{\LastDeclaredEncoding}{\~}{\accdasiaperispomeni}</pre>
</section>
<section id="uppercase">
-<span id="uclclist"></span><h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">UPPERCASE</a></h3>
+<span id="uclclist"></span><h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">UPPERCASE</a></h3>
<p>UPPERCASE (all-caps) is generated with <span class="docutils literal">\MakeUppercase</span>. The
implementation of this command changed in June 2022 <a class="citation-reference" href="#ltnews35" id="citation-reference-1" role="doc-biblioref">[ltnews35]</a>.</p>
<p>According to Greek typographical tradition, diacritics (except dialytika,
@@ -1033,7 +1037,7 @@ CB Fonts, a small capital adscript iota is used.</p>
<p>Up to 2022/06, macro substitutions in the <span class="docutils literal">\&#64;uclclist</span> could be used to
get the expected behaviour:</p>
<section id="uclclist-extension">
-<h4><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">&#64;uclclist extension</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">&#64;uclclist extension</a></h4>
<p>Based on Werner Lemberg’s 2008 <a class="reference external" href="http://www.eutypon.gr/eutypon/pdf/e2008-20/e20-a03.pdf">babel patch</a> and <span class="docutils literal">fontenc.sty</span>.</p>
<p>The definition of an auxiliary, self-resetting macro makes this idempotent
(only the first use of this function will expand the <span class="docutils literal">&#64;uclclist</span>).
@@ -1051,6 +1055,7 @@ The second and third lines are TeX’ way of writing <span class="docutils liter
\accpsilivaria\LGR&#64;hiatus
\accpsiliperispomeni\LGR&#64;accdropped
\acctonos\LGR&#64;hiatus
+ \accoxia\LGR&#64;hiatus
\accvaria\LGR&#64;accdropped
\accdialytikatonos\LGR&#64;accDialytika
\accdialytikavaria\LGR&#64;accDialytika
@@ -1085,7 +1090,7 @@ The second and third lines are TeX’ way of writing <span class="docutils liter
\textomega \textOmega
\textkoppa \textKoppa
\textqoppa \textQoppa
- \textvarstigma \textStigma
+ \textvarstigma \LGR&#64;Stigma
\textstigma \textStigma
\textsampi \textSampi
\textdigamma \textDigamma
@@ -1096,7 +1101,7 @@ The second and third lines are TeX’ way of writing <span class="docutils liter
<pre class="literal-block">\update&#64;uclc&#64;with&#64;greek</pre>
</section>
<section id="substitution-macros">
-<h4><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Substitution macros</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Substitution macros</a></h4>
<p>Drop diacritics (The argument passing ensures that kerning is preserved)</p>
<pre class="literal-block">\DeclareTextCommand{\LGR&#64;accdropped}{\LastDeclaredEncoding}[1]{#1}</pre>
<p>Keep dialytika: Define a dummy alias so that downcasing with
@@ -1109,9 +1114,13 @@ accent:</p>
We define a dummy macro to enable the conversion of <span class="docutils literal">\prosgegrammeni</span>
to <span class="docutils literal">\ypogegrammeni</span> (subscript iota) but not vice versa:</p>
<pre class="literal-block">\DeclareTextCommand{\LGR&#64;ypogegrammeni}{\LastDeclaredEncoding}{\ypogegrammeni}</pre>
+<p>Prevent downcasing <span class="docutils literal">\textStigma</span> to the stigma variant <span class="docutils literal">\textvarstigma</span>
+(only available in LGR). This happened sometimes with the post-2022/06
+<span class="docutils literal">\MakeLowercase</span>:</p>
+<pre class="literal-block">\DeclareTextCommand{\LGR&#64;Stigma}{\LastDeclaredEncoding}{\textStigma}</pre>
</section>
<section id="mark-hiatus">
-<h4><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Mark hiatus</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Mark hiatus</a></h4>
<p>Tonos and dasia mark a hiatus if placed on the
first vowel of a diphthong (ΑΙ, ΑΥ, ΕΙ). A dialytika must be placed on the
second vowel if they are dropped (άυλος → ΑΫΛΟΣ, μάινα → ΜΑΪΝΑ, κέικ → ΚΕΪΚ,
@@ -1140,8 +1149,8 @@ that does not skip over spaces.</p>
</section>
</section>
</section>
-<section id="changes">
-<h2><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Changes</a></h2>
+<section id="changelog">
+<h2><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">Changelog</a></h2>
<table class="borderless">
<tbody>
<tr><td><p>0.9</p></td>
@@ -1180,11 +1189,16 @@ that does not skip over spaces.</p>
<td><p>2023-02-28</p></td>
<td><p>Add missing accent composite commands.</p></td>
</tr>
+<tr><td><p>2.2.1</p></td>
+<td><p>2023-03-08</p></td>
+<td><p><span class="docutils literal">&#64;uclclist</span> entry for <span class="docutils literal">\accoxia</span>, prevent
+downcasing <span class="docutils literal">\textStigma</span> to <span class="docutils literal">\textvarstigma</span>.</p></td>
+</tr>
</tbody>
</table>
</section>
<section id="references">
-<h2><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">References</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">References</a></h2>
<div role="list" class="citation-list">
<div class="citation" id="haralambous-98" role="doc-biblioentry">
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#citation-reference-3">Haralambous-98</a><span class="fn-bracket">]</span></span>
diff --git a/language/greek/greek-fontenc/hyperref-with-greek.pdf b/language/greek/greek-fontenc/hyperref-with-greek.pdf
index 12a6b3c613..f59b95823b 100644
--- a/language/greek/greek-fontenc/hyperref-with-greek.pdf
+++ b/language/greek/greek-fontenc/hyperref-with-greek.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/lgrenc.def b/language/greek/greek-fontenc/lgrenc.def
index d1c748b466..7d60da1fd5 100644
--- a/language/greek/greek-fontenc/lgrenc.def
+++ b/language/greek/greek-fontenc/lgrenc.def
@@ -4,7 +4,7 @@
% LGR Greek font encoding definitions
% ===================================
%
-% :Copyright: © 2010 -- 2022 Günter Milde
+% :Copyright: © 2010 -- 2023 Günter Milde
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
@@ -100,7 +100,7 @@
\ProvidesFile{lgrenc.def}
[2023/02/28 2.2 LGR Greek font encoding definitions]
-% Copyright © 2010 Günter Milde
+% Copyright © 2010 -- 2023 Günter Milde
% This file is part of the "greek-fontenc" package.
% It may be distributed and/or modified under the
% conditions of the "LaTeX Project Public License", either
diff --git a/language/greek/greek-fontenc/lgrenc.def.html b/language/greek/greek-fontenc/lgrenc.def.html
index cfc8a71301..1442193414 100644
--- a/language/greek/greek-fontenc/lgrenc.def.html
+++ b/language/greek/greek-fontenc/lgrenc.def.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2010 – 2022 Günter Milde" />
+<meta name="dcterms.rights" content="© 2010 – 2023 Günter Milde" />
<title>lgrenc.def</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -793,7 +793,7 @@ mstyle.mathscr, mi.mathscr {
<p class="subtitle" id="lgr-greek-font-encoding-definitions">LGR Greek font encoding definitions</p>
<dl class="docinfo simple">
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2010 – 2022 Günter Milde</dd>
+<dd class="copyright">© 2010 – 2023 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
@@ -1038,7 +1038,7 @@ anyway.</p>
<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Identification</a></h3>
<pre class="literal-block">\ProvidesFile{lgrenc.def}
[2023/02/28 2.2 LGR Greek font encoding definitions]
-% Copyright © 2010 Günter Milde
+% Copyright © 2010 -- 2023 Günter Milde
% This file is part of the &quot;greek-fontenc&quot; package.
% It may be distributed and/or modified under the
% conditions of the &quot;LaTeX Project Public License&quot;, either
diff --git a/language/greek/greek-fontenc/puenc-greek.def b/language/greek/greek-fontenc/puenc-greek.def
index fdc51336b5..915725fdbf 100644
--- a/language/greek/greek-fontenc/puenc-greek.def
+++ b/language/greek/greek-fontenc/puenc-greek.def
@@ -2,20 +2,16 @@
% puenc-greek.def
% +++++++++++++++
%
-% Greek LICR definitions for PDF strings (hyperref)
-% *************************************************
+% Greek LICR definitions for PDF strings
+% **************************************
%
% :Copyright: © 2020, 2023 Günter Milde
+%
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
-% :Identification:
-% ::
-
-\ProvidesFile{puenc-greek.def}
-[2023/02/28 2.2 Greek LICRs for PDF strings]
-
-% :abstract:
+%
+% :Abstract:
% Support for Greek LICR macros in PDF bookmarks. Extends ``puenc.def``
% and supersedes ``puenc-greekbasic.def`` from the hyperref_ package.
% Used by babel-greek_ and textalpha_.
@@ -26,8 +22,20 @@
% ====== =========== =======================================================
% 2.0 2020-10-18 Initial version.
% 2.2 2023-02-28 Add compatibility definitions for hyperref.
+% 2.2.1 2023-03-08 Documentation update.
% ====== =========== =======================================================
%
+% .. contents::
+%
+%
+% Identification
+% ==============
+% ::
+
+\ProvidesFile{puenc-greek.def}
+ [2023/03/08 2.2.1 Greek LICRs for PDF strings]
+
+
% Diacritics
% ==========
%
@@ -63,6 +71,7 @@
\DeclareTextCommand{\accpsilioxia}{PU}[1]{#1\83\001\83\023}
\DeclareTextCommand{\accpsiliperispomeni}{PU}[1]{#1\83\102\83\023}
+
% Common Definitions
% ==================
%
@@ -74,6 +83,7 @@
\renewcommand*{\LastDeclaredEncoding}{PU}
\input{greek-fontenc.def}
+
% Character Definitions
% =====================
%
@@ -196,13 +206,13 @@
\DeclareTextCommand{\textQoppa}{PU}{\83\330} % Ϙ "03D8
\DeclareTextCommand{\textqoppa}{PU}{\83\331} % ϙ "03D9
\DeclareTextCommand{\textStigma}{PU}{\83\332} % Ϛ "03DA \textStigmagreek
-\DeclareTextCommand{\textstigma}{PU}{\83\333} % ϛ "03DB \textstigmagreek
+\DeclareTextCommand{\textstigma}{PU}{\83\333} % ϛ "03DB \textstigmagreek
\DeclareTextCommand{\textDigamma}{PU}{\83\334} % Ϝ "03DC \textDigammagreek
\DeclareTextCommand{\textdigamma}{PU}{\83\335} % ϝ "03DD \textdigammagreek
\DeclareTextCommand{\textKoppa}{PU}{\83\336} % Ϟ "03DE \textKoppagreek in LGR identic to \textkoppa
\DeclareTextCommand{\textkoppa}{PU}{\83\337} % ϟ "03DF \textkoppagreek
-\DeclareTextCommand{\textSampi}{PU}{\83\340} % Ϡ "03E0 \textSampigreek
-\DeclareTextCommand{\textsampi}{PU}{\83\341} % ϡ "03E1 \textsampigreek
+\DeclareTextCommand{\textSampi}{PU}{\83\340} % Ϡ "03E0 \textSampigreek
+\DeclareTextCommand{\textsampi}{PU}{\83\341} % ϡ "03E1 \textsampigreek
\DeclareTextCommand{\textkappasymbol}{PU}{\83\360} % ϰ "03F0
\DeclareTextCommand{\textrhosymbol}{PU}{\83\361} % ϱ "03F1
@@ -430,12 +440,14 @@
\DeclareTextCompositeCommand{\accdasia}{PU}{\@empty}{\9037\376} % ῾
\DeclareTextCompositeCommand{\accdasia}{PU}{\ }{\9037\376} % ῾
+
% Letterlike Symbols
% ------------------
% ::
\DeclareTextCommand{\textohm}{PU}{\83\251} % "03A9 OHM SIGN, use 03A9 Omega
+
% Ancient Greek Numbers
% ---------------------
% TODO: map other chars to corresponding Greek letters.
diff --git a/language/greek/greek-fontenc/puenc-greek.def.html b/language/greek/greek-fontenc/puenc-greek.def.html
index 0743c622df..c2ea69705d 100644
--- a/language/greek/greek-fontenc/puenc-greek.def.html
+++ b/language/greek/greek-fontenc/puenc-greek.def.html
@@ -787,11 +787,11 @@ mstyle.mathscr, mi.mathscr {
</style>
</head>
-<body>
+<body class="with-toc">
<main id="puenc-greek-def">
<h1 class="title">puenc-greek.def</h1>
-<p class="subtitle" id="greek-licr-definitions-for-pdf-strings-hyperref">Greek LICR definitions for PDF strings (hyperref)</p>
-<dl class="docinfo">
+<p class="subtitle" id="greek-licr-definitions-for-pdf-strings">Greek LICR definitions for PDF strings</p>
+<dl class="docinfo simple">
<dt class="copyright">Copyright<span class="colon">:</span></dt>
<dd class="copyright">© 2020, 2023 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
@@ -799,10 +799,6 @@ mstyle.mathscr, mi.mathscr {
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
version 1.3 of this license or any later version.</p>
</dd>
-<dt class="identification">Identification<span class="colon">:</span></dt>
-<dd class="identification"><pre class="literal-block">\ProvidesFile{puenc-greek.def}
-[2023/02/28 2.2 Greek LICRs for PDF strings]</pre>
-</dd>
</dl>
<div class="topic abstract" role="doc-abstract">
<p class="topic-title">Abstract</p>
@@ -822,12 +818,38 @@ Used by <a class="reference external" href="https://ctan.org/pkg/babel-greek">ba
<td><p>2023-02-28</p></td>
<td><p>Add compatibility definitions for hyperref.</p></td>
</tr>
+<tr><td><p>2.2.1</p></td>
+<td><p>2023-03-08</p></td>
+<td><p>Documentation update.</p></td>
+</tr>
</tbody>
</table>
</dd>
</dl>
+<nav class="contents" id="contents" role="doc-toc">
+<p class="topic-title">Contents</p>
+<ul class="simple">
+<li><p><a class="reference internal" href="#identification" id="toc-entry-1">Identification</a></p></li>
+<li><p><a class="reference internal" href="#diacritics" id="toc-entry-2">Diacritics</a></p></li>
+<li><p><a class="reference internal" href="#common-definitions" id="toc-entry-3">Common Definitions</a></p></li>
+<li><p><a class="reference internal" href="#character-definitions" id="toc-entry-4">Character Definitions</a></p>
+<ul>
+<li><p><a class="reference internal" href="#compatibility-defs-with-lgr" id="toc-entry-5">Compatibility defs with LGR</a></p></li>
+<li><p><a class="reference internal" href="#greek-and-coptic" id="toc-entry-6">Greek and Coptic</a></p></li>
+<li><p><a class="reference internal" href="#greek-extended" id="toc-entry-7">Greek Extended</a></p></li>
+<li><p><a class="reference internal" href="#letterlike-symbols" id="toc-entry-8">Letterlike Symbols</a></p></li>
+<li><p><a class="reference internal" href="#ancient-greek-numbers" id="toc-entry-9">Ancient Greek Numbers</a></p></li>
+</ul>
+</li>
+</ul>
+</nav>
+<section id="identification">
+<h2><a class="toc-backref" href="#toc-entry-1" role="doc-backlink">Identification</a></h2>
+<pre class="literal-block">\ProvidesFile{puenc-greek.def}
+ [2023/03/08 2.2.1 Greek LICRs for PDF strings]</pre>
+</section>
<section id="diacritics">
-<h2>Diacritics</h2>
+<h2><a class="toc-backref" href="#toc-entry-2" role="doc-backlink">Diacritics</a></h2>
<p>Greek alias names for standard accents (without tabacckludge):</p>
<pre class="literal-block">\DeclareTextCommand{\acctonos}{PU}{\'}
\DeclareTextCommand{\accvaria}{PU}{\`}
@@ -853,7 +875,7 @@ Used by <a class="reference external" href="https://ctan.org/pkg/babel-greek">ba
\DeclareTextCommand{\accpsiliperispomeni}{PU}[1]{#1\83\102\83\023}</pre>
</section>
<section id="common-definitions">
-<h2>Common Definitions</h2>
+<h2><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">Common Definitions</a></h2>
<p>Use the common <cite>Greek font encoding definitions</cite>.</p>
<p>Set the <span class="docutils literal">\LastDeclaredEncoding</span> to PU and read definitions
from <a class="reference external" href="greek-fontenc.def.html">greek-fontenc.def</a>:</p>
@@ -861,9 +883,9 @@ from <a class="reference external" href="greek-fontenc.def.html">greek-fontenc.d
\input{greek-fontenc.def}</pre>
</section>
<section id="character-definitions">
-<h2>Character Definitions</h2>
+<h2><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Character Definitions</a></h2>
<section id="compatibility-defs-with-lgr">
-<h3>Compatibility defs with LGR</h3>
+<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Compatibility defs with LGR</a></h3>
<p>Basic Latin:</p>
<pre class="literal-block">\DeclareTextCommand{\textsemicolon}{PU}{;} % &quot;003B</pre>
<p>Latin 1 Supplement:
@@ -871,7 +893,7 @@ Distinguish MICRO SIGN from letter mu:</p>
<pre class="literal-block">\DeclareTextCommand{\textmicro}{PU}{\83\274} % &quot;00B5 MICRO SIGN</pre>
</section>
<section id="greek-and-coptic">
-<h3>Greek and Coptic</h3>
+<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Greek and Coptic</a></h3>
<p>Without coptic and archaic letters (except the ones used in Greek numerals).</p>
<pre class="literal-block">% NR Unicode Name % PU name (alias in greek-fontenc.def)
\DeclareTextCommand{\textdexiakeraia}{PU}{\83\164} % ʹ \textnumeralsigngreek
@@ -988,7 +1010,7 @@ and symbol variants:</p>
<pre class="literal-block">\ProvideTextCommand{\textautosigma}{PU}{\MakeLowercase{\textSigma}}</pre>
</section>
<section id="greek-extended">
-<h3>Greek Extended</h3>
+<h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Greek Extended</a></h3>
<p>We skip definitions for characters “… WITH OXIA”, because they would
overwrite the defintions for “… WITH TONOS” in the <cite>Greek and Coptic</cite>
block.</p>
@@ -1197,11 +1219,11 @@ block.</p>
\DeclareTextCompositeCommand{\accdasia}{PU}{\ }{\9037\376} % ῾</pre>
</section>
<section id="letterlike-symbols">
-<h3>Letterlike Symbols</h3>
+<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Letterlike Symbols</a></h3>
<pre class="literal-block">\DeclareTextCommand{\textohm}{PU}{\83\251} % &quot;03A9 OHM SIGN, use 03A9 Omega</pre>
</section>
<section id="ancient-greek-numbers">
-<h3>Ancient Greek Numbers</h3>
+<h3><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Ancient Greek Numbers</a></h3>
<p>TODO: map other chars to corresponding Greek letters.
See also the <a class="reference external" href="https://ctan.org/pkg/grnumalt">grnumalt</a> package.</p>
<p>Definition with literal Unicode characters, because the code-point has 5
diff --git a/language/greek/greek-fontenc/test-diacritics.pdf b/language/greek/greek-fontenc/test-diacritics.pdf
index bb990fdcc9..101d8efb5c 100644
--- a/language/greek/greek-fontenc/test-diacritics.pdf
+++ b/language/greek/greek-fontenc/test-diacritics.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/test-diacritics.tex b/language/greek/greek-fontenc/test-diacritics.tex
index a098793082..f1a6c36417 100644
--- a/language/greek/greek-fontenc/test-diacritics.tex
+++ b/language/greek/greek-fontenc/test-diacritics.tex
@@ -2,6 +2,7 @@
% \RequirePackage{latexbug}
\documentclass[a4paper]{article}
\usepackage{lmodern}
+\usepackage{parskip}
% Load encoding definitions
% \usepackage[LGR,T1]{fontenc}
@@ -12,12 +13,7 @@
%
\usepackage[greek,english]{babel} % babel-greek
% \usepackage[greek,english,provide=*]{babel} % Babel's Greek "ini"
-%
-% However, currently, with TL22 and Babel, we get
-% ...
-% (That makes 100 errors; please try again.)
-% ...
-% ==> Fatal error occurred, no output PDF file produced!
+
\IfFormatAtLeastTF{2022/06/01}
{\newcommand*{\uppercaseversion}{new (post-2022/06/01)}}
@@ -29,21 +25,21 @@
This document tests support for the Greek non-standard LGR fonts with the
contributed packages \emph{greek-fontenc} and \emph{greek-inputenc}.
-It is compiled with the
-\textbf{\uppercaseversion{}} \verb|\MakeUppercase| version.
-
+It is compiled with the \textbf{\uppercaseversion{}} \verb|\MakeUppercase|
+version.
-The LGR font encoding definition file \texttt{lgrenc.def} defines LICR macros
-for all non-ASCII characters in the LGR font encoding and loads definitions
-shared with the TU font encoding from \texttt{greek-fontenc.def}.
+The LGR font encoding definition file \texttt{lgrenc.def} defines LICR
+macros for all non-ASCII characters in the LGR font encoding and loads
+definitions shared with the TU font encoding from
+\texttt{greek-fontenc.def}.
In addition to the LICR, Greek letters can also be input via a Latin
transliteration.
Greek accent macros have names starting with \verb|\acc| followed by the
Greek accent name as used in the Unicode standard (e.g. \verb|\acctonos|).
-The standard symbol accents \verb|\' \` \~ \"| behave according to Greek
-typography if used in the LGR font encoding.
+The standard symbol accents \verb|\' \` \~ \"| should behave according to
+Greek typography if used with Greek letters.
Apart from the diacritical marks native to Greek itself, linguists also
regularly mark vowel length with macrons (¯) and breves (˘).
@@ -68,7 +64,7 @@ literal tilde like \verb|\>~|. This can be fixed by using a tilde accent
(even in text parts only changing the font encoding without selecting the
Greek language).
\begin{quote}
- \ensuregreek{\accsample\ $\mapsto$ \MakeUppercase{\accsample}}
+ \ensuregreek{\accsample\ → \MakeUppercase{\accsample}}
\end{quote}
Test the upcasing of the different input methods:
@@ -78,52 +74,52 @@ Test the upcasing of the different input methods:
\begin{quotation}
single accent (named, [alias], short)
- \ensuregreek{\acctonos w \accoxia w \'w
+ \ensuregreek{\acctonos w \accoxia w \'w →
\MakeUppercase{\acctonos w \accoxia w \'w}}
- \ensuregreek{\accvaria w \`w \MakeUppercase{\accvaria w \`w}}
+ \ensuregreek{\accvaria w \`w → \MakeUppercase{\accvaria w \`w}}
- \ensuregreek{\accperispomeni w \~w \MakeUppercase{\accperispomeni w \~w}}
+ \ensuregreek{\accperispomeni w \~w → \MakeUppercase{\accperispomeni w \~w}}
- \ensuregreek{\accdasia w \<w \MakeUppercase{\accdasia w \<w}}
+ \ensuregreek{\accdasia w \<w → \MakeUppercase{\accdasia w \<w}}
- \ensuregreek{\accpsili w \>w \MakeUppercase{\accpsili w \>w}}
+ \ensuregreek{\accpsili w \>w → \MakeUppercase{\accpsili w \>w}}
- \ensuregreek{\accdialytika u \"u \MakeUppercase{\accdialytika u \"u}}
+ \ensuregreek{\accdialytika u \"u → \MakeUppercase{\accdialytika u \"u}}
- \ensuregreek{w\ypogegrammeni{} w| \MakeUppercase{w\ypogegrammeni{} w|}}
+ \ensuregreek{w\ypogegrammeni{} w| → \MakeUppercase{w\ypogegrammeni{} w|}}
combined accents (name, name+name, short+short, short+char)
\ensuregreek{\accdasiaperispomeni w \accdasia\accperispomeni w \<\~w \~<w
- \MakeUppercase{\accdasiaperispomeni w \accdasia\accperispomeni w \<\~w \~<w}}
+ → \MakeUppercase{\accdasiaperispomeni w \accdasia\accperispomeni w \<\~w \~<w}}
\ensuregreek{\accdasiavaria w \accdasia\accvaria w \<\`w \<`w
- \MakeUppercase{\accdasiavaria w \accdasia\accvaria w \<\`w \<`w}}
+ → \MakeUppercase{\accdasiavaria w \accdasia\accvaria w \<\`w \<`w}}
\ensuregreek{\accdasiaoxia w \accdasia\accoxia w \<\'w \<'w
- \MakeUppercase{\accdasiaoxia w \accdasia\accoxia w \<\'w \<'w}}
+ → \MakeUppercase{\accdasiaoxia w \accdasia\accoxia w \<\'w \<'w}}
\ensuregreek{\accpsiliperispomeni w \accpsili\accperispomeni w \>\~w \~>w
- \MakeUppercase{\accpsiliperispomeni w \accpsili\accperispomeni w \>\~w \~>w}}
+ → \MakeUppercase{\accpsiliperispomeni w \accpsili\accperispomeni w \>\~w \~>w}}
\ensuregreek{\accpsilioxia w \accpsili\accoxia w \>\'w \>'w
- \MakeUppercase{\accpsilioxia w \accpsili\accoxia w \>\'w \>'w}}
+ → \MakeUppercase{\accpsilioxia w \accpsili\accoxia w \>\'w \>'w}}
\ensuregreek{\accpsilivaria w \accpsili\accvaria w \>\`w \>`w
- \MakeUppercase{\accpsilivaria w \accpsili\accvaria w \>\`w \>`w}}
+ → \MakeUppercase{\accpsilivaria w \accpsili\accvaria w \>\`w \>`w}}
\ensuregreek{\accdialytikaperispomeni u \accdialytika\accperispomeni u \"\~u \~"u
- \MakeUppercase{\accdialytikaperispomeni u \accdialytika\accperispomeni u \"\~u \~"u}}
+ → \MakeUppercase{\accdialytikaperispomeni u \accdialytika\accperispomeni u \"\~u \~"u}}
\ensuregreek{\accdialytikatonos u \accdialytika\acctonos u \"\'u \"'u
- \MakeUppercase{\accdialytikatonos u \accdialytika\acctonos u \"\'u \"'u}}
+ → \MakeUppercase{\accdialytikatonos u \accdialytika\acctonos u \"\'u \"'u}}
\ensuregreek{\accdialytikavaria u \accdialytika\accvaria u \"\`u \"`u
- \MakeUppercase{\accdialytikavaria u \accdialytika\accvaria u \"\`u \"`u}}
+ → \MakeUppercase{\accdialytikavaria u \accdialytika\accvaria u \"\`u \"`u}}
\ensuregreek{\accpsilivaria w\ypogegrammeni{} \accpsili\accvaria w| \>\`w| \>`w|
- \MakeUppercase{\accpsilivaria w\ypogegrammeni{} \accpsili\accvaria w| \>\`w| \>`w|}}
+ → \MakeUppercase{\accpsilivaria w\ypogegrammeni{} \accpsili\accvaria w| \>\`w| \>`w|}}
\end{quotation}
@@ -141,51 +137,51 @@ The mute iota is kept (as expected).
single accent (named, [alias], short)
\ensuregreek{\acctonos \textomega{} \accoxia \textomega{} \'\textomega{}
- \MakeUppercase{\acctonos \textomega{} \accoxia \textomega{} \'\textomega{}}}
+ → \MakeUppercase{\acctonos \textomega{} \accoxia \textomega{} \'\textomega{}}}
- \ensuregreek{\accvaria \textomega{} \`\textomega{} \MakeUppercase{\accvaria \textomega{} \`\textomega{}}}
+ \ensuregreek{\accvaria \textomega{} \`\textomega{} → \MakeUppercase{\accvaria \textomega{} \`\textomega{}}}
- \ensuregreek{\accperispomeni \textomega{} \~\textomega{} \MakeUppercase{\accperispomeni \textomega{} \~\textomega{}}}
+ \ensuregreek{\accperispomeni \textomega{} \~\textomega{} → \MakeUppercase{\accperispomeni \textomega{} \~\textomega{}}}
- \ensuregreek{\accdasia \textomega{} \<\textomega{} \MakeUppercase{\accdasia \textomega{} \<\textomega{}}}
+ \ensuregreek{\accdasia \textomega{} \<\textomega{} → \MakeUppercase{\accdasia \textomega{} \<\textomega{}}}
- \ensuregreek{\accpsili \textomega{} \>\textomega{} \MakeUppercase{\accpsili \textomega{} \>\textomega{}}}
+ \ensuregreek{\accpsili \textomega{} \>\textomega{} → \MakeUppercase{\accpsili \textomega{} \>\textomega{}}}
- \ensuregreek{\accdialytika \textupsilon{} \"\textupsilon{} \MakeUppercase{\accdialytika \textupsilon{} \"\textupsilon{}}}
+ \ensuregreek{\accdialytika \textupsilon{} \"\textupsilon{} → \MakeUppercase{\accdialytika \textupsilon{} \"\textupsilon{}}}
- \ensuregreek{\textomega\ypogegrammeni{} \textomega| \MakeUppercase{\textomega\ypogegrammeni{} \textomega|}}
+ \ensuregreek{\textomega\ypogegrammeni{} \textomega| → \MakeUppercase{\textomega\ypogegrammeni{} \textomega|}}
combined accents (name, name+name, short+short, short+char)
\ensuregreek{\accdasiaperispomeni \textomega{} \accdasia\accperispomeni \textomega{} \<\~\textomega{} \~<\textomega{}
- \MakeUppercase{\accdasiaperispomeni \textomega{} \accdasia\accperispomeni \textomega{} \<\~\textomega{} \~<\textomega{}}}
+ → \MakeUppercase{\accdasiaperispomeni \textomega{} \accdasia\accperispomeni \textomega{} \<\~\textomega{} \~<\textomega{}}}
\ensuregreek{\accdasiavaria \textomega{} \accdasia\accvaria \textomega{} \<\`\textomega{} \<`\textomega{}
- \MakeUppercase{\accdasiavaria \textomega{} \accdasia\accvaria \textomega{} \<\`\textomega{} \<`\textomega{}}}
+ → \MakeUppercase{\accdasiavaria \textomega{} \accdasia\accvaria \textomega{} \<\`\textomega{} \<`\textomega{}}}
\ensuregreek{\accdasiaoxia \textomega{} \accdasia\accoxia \textomega{} \<\'\textomega{} \<'\textomega{}
- \MakeUppercase{\accdasiaoxia \textomega{} \accdasia\accoxia \textomega{} \<\'\textomega{} \<'\textomega{}}}
+ → \MakeUppercase{\accdasiaoxia \textomega{} \accdasia\accoxia \textomega{} \<\'\textomega{} \<'\textomega{}}}
\ensuregreek{\accpsiliperispomeni \textomega{} \accpsili\accperispomeni \textomega{} \>\~\textomega{} \~>\textomega{}
- \MakeUppercase{\accpsiliperispomeni \textomega{} \accpsili\accperispomeni \textomega{} \>\~\textomega{} \~>\textomega{}}}
+ → \MakeUppercase{\accpsiliperispomeni \textomega{} \accpsili\accperispomeni \textomega{} \>\~\textomega{} \~>\textomega{}}}
\ensuregreek{\accpsilioxia \textomega{} \accpsili\accoxia \textomega{} \>\'\textomega{} \>'\textomega{}
- \MakeUppercase{\accpsilioxia \textomega{} \accpsili\accoxia \textomega{} \>\'\textomega{} \>'\textomega{}}}
+ → \MakeUppercase{\accpsilioxia \textomega{} \accpsili\accoxia \textomega{} \>\'\textomega{} \>'\textomega{}}}
\ensuregreek{\accpsilivaria \textomega{} \accpsili\accvaria \textomega{} \>\`\textomega{} \>`\textomega{}
- \MakeUppercase{\accpsilivaria \textomega{} \accpsili\accvaria \textomega{} \>\`\textomega{} \>`\textomega{}}}
+ → \MakeUppercase{\accpsilivaria \textomega{} \accpsili\accvaria \textomega{} \>\`\textomega{} \>`\textomega{}}}
\ensuregreek{\accdialytikaperispomeni \textupsilon{} \accdialytika\accperispomeni \textupsilon{} \"\~\textupsilon{} \~"\textupsilon{}
- \MakeUppercase{\accdialytikaperispomeni \textupsilon{} \accdialytika\accperispomeni \textupsilon{} \"\~\textupsilon{} \~"\textupsilon{}}}
+ → \MakeUppercase{\accdialytikaperispomeni \textupsilon{} \accdialytika\accperispomeni \textupsilon{} \"\~\textupsilon{} \~"\textupsilon{}}}
\ensuregreek{\accdialytikatonos \textupsilon{} \accdialytika\acctonos \textupsilon{} \"\'\textupsilon{} \"'\textupsilon{}
- \MakeUppercase{\accdialytikatonos \textupsilon{} \accdialytika\acctonos \textupsilon{} \"\'\textupsilon{} \"'\textupsilon{}}}
+ → \MakeUppercase{\accdialytikatonos \textupsilon{} \accdialytika\acctonos \textupsilon{} \"\'\textupsilon{} \"'\textupsilon{}}}
\ensuregreek{\accdialytikavaria \textupsilon{} \accdialytika\accvaria \textupsilon{} \"\`\textupsilon{} \"`\textupsilon{}
- \MakeUppercase{\accdialytikavaria \textupsilon{} \accdialytika\accvaria \textupsilon{} \"\`\textupsilon{} \"`\textupsilon{}}}
+ → \MakeUppercase{\accdialytikavaria \textupsilon{} \accdialytika\accvaria \textupsilon{} \"\`\textupsilon{} \"`\textupsilon{}}}
\ensuregreek{\accpsilivaria \textomega\ypogegrammeni{} \accpsili\accvaria \textomega| \>\`\textomega| \>`\textomega|
- \MakeUppercase{\accpsilivaria \textomega\ypogegrammeni{} \accpsili\accvaria \textomega| \>\`\textomega| \>`\textomega|}}
+ → \MakeUppercase{\accpsilivaria \textomega\ypogegrammeni{} \accpsili\accvaria \textomega| \>\`\textomega| \>`\textomega|}}
\end{quotation}
@@ -217,7 +213,7 @@ A dialytika must be placed on the second vowel if they are dropped:
\accdasiaoxia\textalpha\textupsilon,
\accdasiaoxia\textepsilon\textiota}%
Named + LICR:
-\ensuregreek{\Hiatus\ $\mapsto$ \MakeUppercase{\Hiatus}}.
+\ensuregreek{\Hiatus\ → \MakeUppercase{\Hiatus}}.
\renewcommand{\Hiatus}{\'\textalpha\textiota,
\'\textalpha\textupsilon,
@@ -226,7 +222,7 @@ Named + LICR:
\'>\textalpha\textupsilon,
\'>\textepsilon\textiota}%
Short + LICR:
-\ensuregreek{\Hiatus\ $\mapsto$ \MakeUppercase{\Hiatus}}.
+\ensuregreek{\Hiatus\ → \MakeUppercase{\Hiatus}}.
\renewcommand{\Hiatus}{\acctonos ai,
\acctonos au,
@@ -235,7 +231,7 @@ Short + LICR:
\accdasiaoxia au,
\accdasiaoxia ei}%
Named + transliteration:
-\ensuregreek{\Hiatus\ $\mapsto$ \MakeUppercase{\Hiatus}}.
+\ensuregreek{\Hiatus\ → \MakeUppercase{\Hiatus}}.
\renewcommand{\Hiatus}{\'ai,
\'au,
@@ -244,7 +240,7 @@ Named + transliteration:
\'>au,
\'>ei}%
Short + transliteration:
-\ensuregreek{\Hiatus\ $\mapsto$ \MakeUppercase{\Hiatus}}.
+\ensuregreek{\Hiatus\ → \MakeUppercase{\Hiatus}}.
In current TeXLive, the \emph{hiatus} feature keeps working with named
accend macros but fails with short accent macros.
diff --git a/language/greek/greek-fontenc/test-lgrenc.pdf b/language/greek/greek-fontenc/test-lgrenc.pdf
index 6adb474ee8..2c4049d8be 100644
--- a/language/greek/greek-fontenc/test-lgrenc.pdf
+++ b/language/greek/greek-fontenc/test-lgrenc.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/test-licr-input.pdf b/language/greek/greek-fontenc/test-licr-input.pdf
index c9ac81f00d..5fdafab10a 100644
--- a/language/greek/greek-fontenc/test-licr-input.pdf
+++ b/language/greek/greek-fontenc/test-licr-input.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/test-licr-input.tex b/language/greek/greek-fontenc/test-licr-input.tex
index 4782f5146a..a1e6642630 100644
--- a/language/greek/greek-fontenc/test-licr-input.tex
+++ b/language/greek/greek-fontenc/test-licr-input.tex
@@ -57,22 +57,29 @@
\title{Test Greek LaTeX internal character representations (LICR macros)}
\author{G\"unter Milde}
-\date{2020/10/30}
+\date{2023/03/08}
\maketitle
+
+This document tests the compatibility of ``luainputenc'' and the Greek font
+setup for TU and PU. It uses only ASCII input.
+
+See the source \texttt{test-inputenc.tex} for the input used in the examples.
+
+TODO: Compiling with LuaTeX fails: \texttt{tuenc-greek.def} uses
+literal Unicode characters which is incompatible with legacy 8-bit encodings
+defined via "luainputenc".
+
\tableofcontents
\section{LICR input%
\label{licr}}
-The LaTeX internal character representation (LICR) is a verbose,
-fail-safe 7-bit ASCII encoding that can be used unaltered under both, 8-bit
-TeX and XeTeX/LuaTeX. Use cases are macro definitions and generated text.
-
-See the source of this document,
-\texttt{test-inputenc.tex} for the input used
-in the examples below.
+The LaTeX internal character representation (LICR) is a verbose, fail-safe
+7-bit ASCII encoding that can be used unaltered under both, 8-bit TeX (with
+any ASCII-compatible input encoding) and XeTeX/LuaTeX.
+Use cases are macro definitions and generated text.
\subsection{Greek alphabet}
@@ -689,5 +696,4 @@ non-standard accents or combined diacritics.
\accdasia{ }
}}
-
\end{document}
diff --git a/language/greek/greek-fontenc/test-tuenc-greek.pdf b/language/greek/greek-fontenc/test-tuenc-greek.pdf
index 9c46cbdb44..3a0837cdfc 100644
--- a/language/greek/greek-fontenc/test-tuenc-greek.pdf
+++ b/language/greek/greek-fontenc/test-tuenc-greek.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/test-utf8-input.pdf b/language/greek/greek-fontenc/test-utf8-input.pdf
deleted file mode 100644
index 46a3139369..0000000000
--- a/language/greek/greek-fontenc/test-utf8-input.pdf
+++ /dev/null
Binary files differ
diff --git a/language/greek/greek-fontenc/test-utf8-input.tex b/language/greek/greek-fontenc/test-utf8-input.tex
deleted file mode 100644
index 6e979fba2c..0000000000
--- a/language/greek/greek-fontenc/test-utf8-input.tex
+++ /dev/null
@@ -1,87 +0,0 @@
-% Test definitions for accents and composite accents in Greek
-\RequirePackage{latexbug}
-\documentclass[a4paper]{article}
-% \pagestyle{empty}
-\usepackage{lmodern}
-
-% Load encoding definitions (after font package)
-\usepackage[LGR,T1]{fontenc}
-
-
-% \usepackage{textalpha} % Greek script "everywhere"!
-\usepackage[greek,english,provide=*]{babel} % Babel's Greek "ini"
-% \usepackage[greek,english]{babel} % babel-greek
-
-\begin{document}
-
-\section*{Test upcasing of Greek characters with 8-bit TeX}
-
-The Greek and Coptic Unicode Block
-
-\newcommand{\GreekAndCoptic}{%
- ͺ ; ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ \\
- ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο \\
- Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί \\
- ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο \\
- π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ }
-\begin{quote}
- \selectlanguage{greek}
- % \greekscript
- \GreekAndCoptic
-\end{quote}
-%
-MakeUppercase:
-\begin{quote}
- \selectlanguage{greek}
- % \greekscript
- \MakeUppercase{\GreekAndCoptic}
-\end{quote}
-%
-% MakeLowercase:
-% \begin{quote}
-% \greekscript
-% \MakeLowercase{\GreekAndCoptic}
-% \end{quote}
-
-
-Greek extended Unicode block
-
-\newcommand{\GreekExtended}{\raggedright
- ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ \\
- ἐ ἑ ἒ ἓ ἔ ἕ \ \ \ \ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ \\
- ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ \\
- ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ \\
- ὀ ὁ ὂ ὃ ὄ ὅ \ \ \ \ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ \\
- ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ \ \ Ὑ \ \ Ὓ \ \ Ὕ \ \ Ὗ \\
- ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ \\
- ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ \\
- ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ᾎ ᾏ \\
- ᾐ ᾑ ᾒ ᾓ ᾔ ᾕ ᾖ ᾗ ᾘ ᾙ ᾚ ᾛ ᾜ ᾝ ᾞ ᾟ \\
- ᾠ ᾡ ᾢ ᾣ ᾤ ᾦ ᾧ ᾥ ᾨ ᾩ ᾪ ᾫ ᾬ ᾭ ᾮ ᾯ \\
- ᾰ ᾱ ᾲ ᾳ ᾴ \ \ ᾶ ᾷ Ᾰ Ᾱ Ὰ Ά ᾼ ᾽ ι ᾿ \\
- ῀ ῁ ῂ ῃ ῄ \ \ ῆ ῇ Ὲ Έ Ὴ Ή ῌ ῍ ῏ \\
- ῐ ῑ ῒ ΐ \ \ \ \ ῖ ῗ Ῐ Ῑ Ὶ Ί \ \ ῝ ῟ \\
- ῠ ῡ ῢ ΰ \ \ \ \ ῤ ῥ ῦ ῧ Ὺ Ύ Ῥ ῭ ` \\
- \ \ \ \ ῲ ῳ ῴ \ \ ῶ ῷ Ὸ Ό Ὼ Ώ ῼ ´ }
-
-\begin{quote}
- \selectlanguage{greek}
- \greekscript
- \GreekExtended
-\end{quote}
-%
-MakeUppercase:
-\begin{quote}
- \selectlanguage{greek}
- \greekscript
- \MakeUppercase{\GreekExtended}
-\end{quote}
-
-% MakeLowercase:
-% \begin{quote}
-% % \selectlanguage{greek}
-% \greekscript
-% \MakeLowercase{\GreekExtended}
-% \end{quote}
-
-\end{document}
diff --git a/language/greek/greek-fontenc/textalpha-doc-tu.pdf b/language/greek/greek-fontenc/textalpha-doc-tu.pdf
index 068a0005f3..5f2459b90c 100644
--- a/language/greek/greek-fontenc/textalpha-doc-tu.pdf
+++ b/language/greek/greek-fontenc/textalpha-doc-tu.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/textalpha-doc.pdf b/language/greek/greek-fontenc/textalpha-doc.pdf
index ee2aedd801..bbe6d82713 100644
--- a/language/greek/greek-fontenc/textalpha-doc.pdf
+++ b/language/greek/greek-fontenc/textalpha-doc.pdf
Binary files differ
diff --git a/language/greek/greek-fontenc/textalpha.sty b/language/greek/greek-fontenc/textalpha.sty
index 851f39dc95..97b7423fc7 100644
--- a/language/greek/greek-fontenc/textalpha.sty
+++ b/language/greek/greek-fontenc/textalpha.sty
@@ -3,7 +3,10 @@
% Greek symbols in text
% *********************
%
-% :Copyright: © 2010 Günter Milde
+% :Version: 2.2.1 (changelog_)
+%
+% :Copyright: © 2010, 2023 Günter Milde
+%
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
@@ -11,46 +14,6 @@
% :Abstract: Provide a set of ``\text*`` macros for Greek characters
% in text mode.
%
-% :Identification:
-% ::
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{textalpha}
-[2023/02/28 2.2 macros for Greek letters in text]
-
-% .. note::
-%
-% The package was renamed from `textgreek` to `textalpha` to prevent
-% confusion with the textgreek_ package by Leonard Michlmayr.
-%
-%
-% Changelog:
-% .. class:: borderless
-%
-% ====== =========== ========================================================
-% 0.1 2010-06-16 initial version
-% 0.2 2012-06-27 support for compound Unicode definitions outside LGR
-% 0.3 2013-05-03 new accent macro names with ``lgrxenc.def`` 0.7
-% 0.4 2013-05-28 use ``lgrenc.def`` from greek-fontenc.
-% 0.5 2013-09-11 move to greek-fontenc_,
-% .. support XeTeX/LuaTeX, add breve below accents.
-% 0.11 2013-11-28 compatibility with Xe/LuaTeX in 8-bit mode.
-% 0.12 2014-12-12 fix auxiliary macro names,
-% define symbol macros for breathing accents.
-% 0.13 2015-09-04 Option normalize-symbols_: support for symbol variants.
-% .. Option keep-semicolon_: use semicolon as erotimatiko
-% in LGR.
-% 0.13.2 2016-02-05 Support for standard Unicode text font encoding "TU"
-% (new in fontspec v2.5a).
-% 0.13.4 2019-07-11 Auxiliary command for subscript iota.
-% 0.14 2020-02-28 Update test for Unicode fonts.
-% Rename ``greek-euenc`` to ``tuenc-greek``.
-% Don't use ``\LastDeclaredEncoding``.
-% 1.0 2020-09-25 Also set ``\encodingdefault`` with ``\greekscript``.
-% 2.0 2020-10-30 Load ``tuenc-greek.def`` with Xe/LuaTeX by default.
-% .. Load ``puenc-greek.def`` if used with `hyperref`_.
-% 2.2 2023-02-28 Don't use ``\makeatother`` in ``\AtBeginDocument``.
-% ====== =========== ========================================================
%
% .. contents::
%
@@ -112,13 +75,13 @@
%
% \usepackage{textalpha}
%
-% eventually with the options_ to normalize symbols variants
+% eventually with the options to `normalize symbols variants`_
%
% .. code:: latex
%
% \usepackage[normalize-symbols]{textalpha}
%
-% and/or to use the semicolon as erotimatiko_ also in 8-bit TeX
+% and/or to `use the semicolon as erotimatiko`_ also in 8-bit TeX
%
% .. code:: latex
%
@@ -142,9 +105,20 @@
% Implementation
% ==============
%
+% Identification
+% --------------
+% ::
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{textalpha}
+ [2023/03/08 2.2.1 macros for Greek letters in text]
+
+
% Options
% -------
%
+% .. _normalize symbols variants:
+%
% normalize-symbols
% """""""""""""""""
%
@@ -171,6 +145,9 @@
\newif\iftextalpha@normalizeSymbols
\DeclareOption{normalize-symbols}{\textalpha@normalizeSymbolstrue}
+
+% .. _use the semicolon as erotimatiko:
+%
% keep-semicolon
% """"""""""""""
%
@@ -194,8 +171,7 @@
\ProcessOptions\relax
-% .. _font encoding:
-%
+
% Symbol macros for breathings
% ----------------------------
%
@@ -215,6 +191,9 @@
\DeclareTextCompositeCommand{\<}{#1}{~}{\accdasiaperispomeni}
}
+
+% .. _font encoding:
+%
% Font encodings
% --------------
%
@@ -296,6 +275,7 @@
\DeclareTextSymbol{\textmicro}{TS1}{181} % micro sign
\DeclareTextSymbolDefault{\textmicro}{TS1}
+
% Default declarations
% --------------------
%
@@ -407,6 +387,7 @@
\DeclareTextSymbolDefault{\textpsi}{LGR}
\DeclareTextSymbolDefault{\textomega}{LGR}
+
% Additional Greek symbols
% """"""""""""""""""""""""
%
@@ -450,6 +431,7 @@
\DeclareTextSymbolDefault{\textaristerikeraia}{LGR} % ͵ (Aristeri keraia)
\DeclareTextSymbolDefault{\textnumeralsignlowergreek}{LGR} % (puenc.def)
+
% variant shape symbols
% '''''''''''''''''''''
%
@@ -564,7 +546,7 @@
% ...
%
% For the same reason default declarations should never come last since
-% they are implemented as a special encoding themselves (with the name ?).
+% they are implemented as a special encoding themselves (with the name "?").
% Specifying them last would simply mean to make those encoding-specific
% commands equally inefficient in all encodings.
%
@@ -572,6 +554,38 @@
% subsection "The order of declarations".
%
%
+% Changelog
+% =========
+%
+% .. class:: borderless
+%
+% ====== =========== ========================================================
+% 0.1 2010-06-16 initial version
+% 0.2 2012-06-27 support for compound Unicode definitions outside LGR
+% 0.3 2013-05-03 new accent macro names with ``lgrxenc.def`` 0.7
+% 0.4 2013-05-28 use ``lgrenc.def`` from greek-fontenc.
+% 0.5 2013-09-11 move to greek-fontenc_,
+% .. support XeTeX/LuaTeX, add breve below accents.
+% 0.11 2013-11-28 compatibility with Xe/LuaTeX in 8-bit mode.
+% 0.12 2014-12-12 fix auxiliary macro names,
+% define symbol macros for breathing accents.
+% 0.13 2015-09-04 Option normalize-symbols_: support for symbol variants.
+% .. Option keep-semicolon_: use semicolon as erotimatiko
+% in LGR.
+% 0.13.2 2016-02-05 Support for standard Unicode text font encoding "TU"
+% (new in fontspec v2.5a).
+% 0.13.4 2019-07-11 Auxiliary command for subscript iota.
+% 0.14 2020-02-28 Update test for Unicode fonts.
+% Rename ``greek-euenc`` to ``tuenc-greek``.
+% Don't use ``\LastDeclaredEncoding``.
+% 1.0 2020-09-25 Also set ``\encodingdefault`` with ``\greekscript``.
+% 2.0 2020-10-30 Load ``tuenc-greek.def`` with Xe/LuaTeX by default.
+% .. Load ``puenc-greek.def`` if used with `hyperref`_.
+% 2.2 2023-02-28 Don't use ``\makeatother`` in ``\AtBeginDocument``.
+% 2.2.1 2023-03-08 Documentation update.
+% ====== =========== ========================================================
+%
+%
% .. References
% ----------
% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
diff --git a/language/greek/greek-fontenc/textalpha.sty.html b/language/greek/greek-fontenc/textalpha.sty.html
index c54289ce83..dce522aadb 100644
--- a/language/greek/greek-fontenc/textalpha.sty.html
+++ b/language/greek/greek-fontenc/textalpha.sty.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2010 Günter Milde" />
+<meta name="dcterms.rights" content="© 2010, 2023 Günter Milde" />
<title>textalpha.sty</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -792,113 +792,21 @@ mstyle.mathscr, mi.mathscr {
<h1 class="title">textalpha.sty</h1>
<p class="subtitle" id="greek-symbols-in-text">Greek symbols in text</p>
<dl class="docinfo">
+<dt class="version">Version<span class="colon">:</span></dt>
+<dd class="version">2.2.1 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2010 Günter Milde</dd>
+<dd class="copyright">© 2010, 2023 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
version 1.3 of this license or any later version.</p>
</dd>
-<dt class="identification">Identification<span class="colon">:</span></dt>
-<dd class="identification"><pre class="literal-block">\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{textalpha}
-[2023/02/28 2.2 macros for Greek letters in text]</pre>
-</dd>
</dl>
<div class="topic abstract" role="doc-abstract">
<p class="topic-title">Abstract</p>
<p>Provide a set of <span class="docutils literal">\text*</span> macros for Greek characters
in text mode.</p>
</div>
-<aside class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The package was renamed from <cite>textgreek</cite> to <cite>textalpha</cite> to prevent
-confusion with the <a class="reference external" href="https://ctan.org/pkg/textgreek">textgreek</a> package by Leonard Michlmayr.</p>
-</aside>
-<dl>
-<dt>Changelog:</dt>
-<dd><table class="borderless">
-<tbody>
-<tr><td><p>0.1</p></td>
-<td><p>2010-06-16</p></td>
-<td><p>initial version</p></td>
-</tr>
-<tr><td><p>0.2</p></td>
-<td><p>2012-06-27</p></td>
-<td><p>support for compound Unicode definitions outside LGR</p></td>
-</tr>
-<tr><td><p>0.3</p></td>
-<td><p>2013-05-03</p></td>
-<td><p>new accent macro names with <span class="docutils literal">lgrxenc.def</span> 0.7</p></td>
-</tr>
-<tr><td><p>0.4</p></td>
-<td><p>2013-05-28</p></td>
-<td><p>use <span class="docutils literal">lgrenc.def</span> from greek-fontenc.</p></td>
-</tr>
-<tr><td><p>0.5</p></td>
-<td><p>2013-09-11</p></td>
-<td><p>move to <a class="reference external" href="https://ctan.org/pkg/greek-fontenc">greek-fontenc</a>,</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>support XeTeX/LuaTeX, add breve below accents.</p></td>
-</tr>
-<tr><td><p>0.11</p></td>
-<td><p>2013-11-28</p></td>
-<td><p>compatibility with Xe/LuaTeX in 8-bit mode.</p></td>
-</tr>
-<tr><td><p>0.12</p></td>
-<td><p>2014-12-12</p></td>
-<td><p>fix auxiliary macro names,
-define symbol macros for breathing accents.</p></td>
-</tr>
-<tr><td><p>0.13</p></td>
-<td><p>2015-09-04</p></td>
-<td><p>Option <a class="reference internal" href="#normalize-symbols">normalize-symbols</a>: support for symbol variants.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Option <a class="reference internal" href="#keep-semicolon">keep-semicolon</a>: use semicolon as erotimatiko
-in LGR.</p></td>
-</tr>
-<tr><td><p>0.13.2</p></td>
-<td><p>2016-02-05</p></td>
-<td><p>Support for standard Unicode text font encoding “TU”
-(new in fontspec v2.5a).</p></td>
-</tr>
-<tr><td><p>0.13.4</p></td>
-<td><p>2019-07-11</p></td>
-<td><p>Auxiliary command for subscript iota.</p></td>
-</tr>
-<tr><td><p>0.14</p></td>
-<td><p>2020-02-28</p></td>
-<td><p>Update test for Unicode fonts.
-Rename <span class="docutils literal"><span class="pre">greek-euenc</span></span> to <span class="docutils literal"><span class="pre">tuenc-greek</span></span>.
-Don’t use <span class="docutils literal">\LastDeclaredEncoding</span>.</p></td>
-</tr>
-<tr><td><p>1.0</p></td>
-<td><p>2020-09-25</p></td>
-<td><p>Also set <span class="docutils literal">\encodingdefault</span> with <span class="docutils literal">\greekscript</span>.</p></td>
-</tr>
-<tr><td><p>2.0</p></td>
-<td><p>2020-10-30</p></td>
-<td><p>Load <span class="docutils literal"><span class="pre">tuenc-greek.def</span></span> with Xe/LuaTeX by default.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Load <span class="docutils literal"><span class="pre">puenc-greek.def</span></span> if used with <a class="reference external" href="https://ctan.org/pkg/hyperref">hyperref</a>.</p></td>
-</tr>
-<tr><td><p>2.2</p></td>
-<td><p>2023-02-28</p></td>
-<td><p>Don’t use <span class="docutils literal">\makeatother</span> in <span class="docutils literal">\AtBeginDocument</span>.</p></td>
-</tr>
-</tbody>
-</table>
-</dd>
-</dl>
<nav class="contents" id="contents" role="doc-toc">
<p class="topic-title">Contents</p>
<ul class="simple">
@@ -906,31 +814,33 @@ Don’t use <span class="docutils literal">\LastDeclaredEncoding</span>.</p></td
<li><p><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></p></li>
<li><p><a class="reference internal" href="#implementation" id="toc-entry-3">Implementation</a></p>
<ul>
-<li><p><a class="reference internal" href="#options" id="toc-entry-4">Options</a></p>
+<li><p><a class="reference internal" href="#identification" id="toc-entry-4">Identification</a></p></li>
+<li><p><a class="reference internal" href="#options" id="toc-entry-5">Options</a></p>
<ul>
-<li><p><a class="reference internal" href="#normalize-symbols" id="toc-entry-5">normalize-symbols</a></p></li>
-<li><p><a class="reference internal" href="#keep-semicolon" id="toc-entry-6">keep-semicolon</a></p></li>
+<li><p><a class="reference internal" href="#normalize-symbols" id="toc-entry-6">normalize-symbols</a></p></li>
+<li><p><a class="reference internal" href="#keep-semicolon" id="toc-entry-7">keep-semicolon</a></p></li>
</ul>
</li>
-<li><p><a class="reference internal" href="#symbol-macros-for-breathings" id="toc-entry-7">Symbol macros for breathings</a></p></li>
-<li><p><a class="reference internal" href="#font-encodings" id="toc-entry-8">Font encodings</a></p></li>
-<li><p><a class="reference internal" href="#default-declarations" id="toc-entry-9">Default declarations</a></p>
+<li><p><a class="reference internal" href="#symbol-macros-for-breathings" id="toc-entry-8">Symbol macros for breathings</a></p></li>
+<li><p><a class="reference internal" href="#font-encodings" id="toc-entry-9">Font encodings</a></p></li>
+<li><p><a class="reference internal" href="#default-declarations" id="toc-entry-10">Default declarations</a></p>
<ul>
-<li><p><a class="reference internal" href="#greekscript-ensuregreek" id="toc-entry-10">greekscript, ensuregreek</a></p></li>
-<li><p><a class="reference internal" href="#greek-alphabet" id="toc-entry-11">Greek Alphabet</a></p></li>
-<li><p><a class="reference internal" href="#additional-greek-symbols" id="toc-entry-12">Additional Greek symbols</a></p>
+<li><p><a class="reference internal" href="#greekscript-ensuregreek" id="toc-entry-11">greekscript, ensuregreek</a></p></li>
+<li><p><a class="reference internal" href="#greek-alphabet" id="toc-entry-12">Greek Alphabet</a></p></li>
+<li><p><a class="reference internal" href="#additional-greek-symbols" id="toc-entry-13">Additional Greek symbols</a></p>
<ul>
-<li><p><a class="reference internal" href="#variant-shape-symbols" id="toc-entry-13">variant shape symbols</a></p></li>
+<li><p><a class="reference internal" href="#variant-shape-symbols" id="toc-entry-14">variant shape symbols</a></p></li>
</ul>
</li>
-<li><p><a class="reference internal" href="#diacritics" id="toc-entry-14">Diacritics</a></p></li>
-<li><p><a class="reference internal" href="#auxiliary-macros" id="toc-entry-15">Auxiliary macros</a></p></li>
-<li><p><a class="reference internal" href="#semicolon-as-erotimatiko" id="toc-entry-16">semicolon as erotimatiko</a></p></li>
+<li><p><a class="reference internal" href="#diacritics" id="toc-entry-15">Diacritics</a></p></li>
+<li><p><a class="reference internal" href="#auxiliary-macros" id="toc-entry-16">Auxiliary macros</a></p></li>
+<li><p><a class="reference internal" href="#semicolon-as-erotimatiko" id="toc-entry-17">semicolon as erotimatiko</a></p></li>
</ul>
</li>
</ul>
</li>
-<li><p><a class="reference internal" href="#todo" id="toc-entry-17">TODO</a></p></li>
+<li><p><a class="reference internal" href="#todo" id="toc-entry-18">TODO</a></p></li>
+<li><p><a class="reference internal" href="#changelog" id="toc-entry-19">Changelog</a></p></li>
</ul>
</nav>
<section id="motivation">
@@ -982,9 +892,9 @@ to ensure correct hyphenation of Greek text.</p>
<h2><a class="toc-backref" href="#toc-entry-2" role="doc-backlink">Usage</a></h2>
<p>Ensure support for Greek characters in text mode with</p>
<pre class="code latex literal-block"><code><span class="keyword">\usepackage</span><span class="name builtin">{</span>textalpha<span class="name builtin">}</span></code></pre>
-<p>eventually with the <a class="reference internal" href="#options">options</a> to normalize symbols variants</p>
+<p>eventually with the options to <a class="reference internal" href="#normalize-symbols-variants">normalize symbols variants</a></p>
<pre class="code latex literal-block"><code><span class="keyword">\usepackage</span><span class="name attribute">[normalize-symbols]</span><span class="name builtin">{</span>textalpha<span class="name builtin">}</span></code></pre>
-<p>and/or to use the semicolon as <a class="reference external" href="https://en.wikipedia.org/wiki/Question_mark#Erotimatiko">erotimatiko</a> also in 8-bit TeX</p>
+<p>and/or to <a class="reference internal" href="#use-the-semicolon-as-erotimatiko">use the semicolon as erotimatiko</a> also in 8-bit TeX</p>
<pre class="code latex literal-block"><code><span class="keyword">\usepackage</span><span class="name attribute">[normalize-symbols,keep-semicolon]</span><span class="name builtin">{</span>textalpha<span class="name builtin">}</span></code></pre>
<p>To give <span class="docutils literal">textalpha.sty</span> a chance of finding out which <a class="reference internal" href="#font-encodings">font encodings</a>
are used, load it after <a class="reference external" href="https://ctan.org/pkg/fontspec">fontspec</a> and/or <a class="reference external" href="https://ctan.org/pkg/fontenc">fontenc</a>.</p>
@@ -997,10 +907,16 @@ in the same document (see <a class="reference external" href="test-tuenc-greek.t
</section>
<section id="implementation">
<h2><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">Implementation</a></h2>
+<section id="identification">
+<h3><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Identification</a></h3>
+<pre class="literal-block">\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{textalpha}
+ [2023/03/08 2.2.1 macros for Greek letters in text]</pre>
+</section>
<section id="options">
-<h3><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Options</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Options</a></h3>
<section id="normalize-symbols">
-<h4><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">normalize-symbols</a></h4>
+<span id="normalize-symbols-variants"></span><h4><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">normalize-symbols</a></h4>
<p>The “variant shape” symbol characters like <span class="docutils literal">03D1 GREEK THETA SYMBOL</span> are
mathematical charcters for mathematical use
(similar to <span class="docutils literal">1D440 MATHEMATICAL ITALIC CAPITAL M</span>).
@@ -1021,7 +937,7 @@ errors to prevent information loss in cases where the distinction between
\DeclareOption{normalize-symbols}{\textalpha&#64;normalizeSymbolstrue}</pre>
</section>
<section id="keep-semicolon">
-<h4><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">keep-semicolon</a></h4>
+<span id="use-the-semicolon-as-erotimatiko"></span><h4><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">keep-semicolon</a></h4>
<p>The <a class="reference external" href="https://en.wikipedia.org/wiki/Question_mark#Erotimatiko">erotimatiko</a> looks like a semicolon but is a
<strong>Greek question mark</strong>:</p>
<ul class="simple">
@@ -1042,7 +958,7 @@ With XeTeX/LuaTeX and Unicode fonts, this option is ignored.</p>
</section>
</section>
<section id="symbol-macros-for-breathings">
-<span id="font-encoding"></span><h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Symbol macros for breathings</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Symbol macros for breathings</a></h3>
<p>In the Latin transliteration provided by LGR, breathing accents (Dasia and
Psili) are input as &lt; and &gt;. Provide the corresponding NFSS macro accents.
(Used below for LGR, TU, and PU, if these font encodings are defined):</p>
@@ -1059,7 +975,7 @@ Psili) are input as &lt; and &gt;. Provide the corresponding NFSS macro accents.
}</pre>
</section>
<section id="font-encodings">
-<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Font encodings</a></h3>
+<span id="font-encoding"></span><h3><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Font encodings</a></h3>
<p>With 8-bit LaTeX, the <a class="reference external" href="README.html#lgr">LGR font encoding</a> is used for Greek characters. If
no Greek-supporting font encoding (TU or LGR) is declared, LGR is
loaded and set up as default Greek font encoding by this package.</p>
@@ -1125,7 +1041,7 @@ and is not capitalised with <span class="docutils literal">\MakeUppercase</span>
\DeclareTextSymbolDefault{\textmicro}{TS1}</pre>
</section>
<section id="default-declarations">
-<h3><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Default declarations</a></h3>
+<h3><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Default declarations</a></h3>
<p>The following definitions ensure that the Greek LICR macros can be used
anywhere in the document also with 8-bit TeX by declaring LGR as their
default font encoding. Abort here, if the LGR font encoding is not defined:</p>
@@ -1133,7 +1049,7 @@ default font encoding. Abort here, if the LGR font encoding is not defined:</p>
\expandafter\endinput
}</pre>
<section id="greekscript-ensuregreek">
-<h4><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">greekscript, ensuregreek</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">greekscript, ensuregreek</a></h4>
<p>The <span class="docutils literal">\greekscript</span> declaration ensures the current font encoding supports
the Greek script. <span class="docutils literal"><span class="pre">greek-fontenc.def</span></span> sets this to the empty declaration
for font encodings that do so. This is currently used by <span class="docutils literal">lgrenc.def</span>
@@ -1163,7 +1079,7 @@ argument unchanged. This way, kerning and selection of precomposed glyphs
would work also for cases like <span class="docutils literal"><span class="pre">\ensuregreek{\'A}U</span></span>.</p>
</section>
<section id="greek-alphabet">
-<h4><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">Greek Alphabet</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">Greek Alphabet</a></h4>
<p>Define the <span class="docutils literal">text*</span> marcos as default for all font encodings:</p>
<pre class="literal-block">\DeclareTextSymbolDefault{\textAlpha}{LGR}
\DeclareTextSymbolDefault{\textBeta}{LGR}
@@ -1220,7 +1136,7 @@ would work also for cases like <span class="docutils literal"><span class="pre">
\DeclareTextSymbolDefault{\textomega}{LGR}</pre>
</section>
<section id="additional-greek-symbols">
-<h4><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">Additional Greek symbols</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-13" role="doc-backlink">Additional Greek symbols</a></h4>
<p>Including alias names for compatibility with hyperref’s puenc.def.</p>
<p>Ancient Greek Numbers (Athenian Numerals):</p>
<pre class="literal-block">\DeclareTextSymbolDefault{\textpentedeka}{LGR} % GREEK ACROPHONIC ATTIC FIFTY
@@ -1255,7 +1171,7 @@ would work also for cases like <span class="docutils literal"><span class="pre">
\DeclareTextSymbolDefault{\textaristerikeraia}{LGR} % ͵ (Aristeri keraia)
\DeclareTextSymbolDefault{\textnumeralsignlowergreek}{LGR} % (puenc.def)</pre>
<section id="variant-shape-symbols">
-<h5><a class="toc-backref" href="#toc-entry-13" role="doc-backlink">variant shape symbols</a></h5>
+<h5><a class="toc-backref" href="#toc-entry-14" role="doc-backlink">variant shape symbols</a></h5>
<p>Mathematical notation uses variant shapes of some Greek letters as
additional symbols. There are separate code points for the symbol variants
in Unicode but not in the LGR font encoding used for Greek in 8-bit TeX.
@@ -1282,7 +1198,7 @@ The variations have no syntactic meaning in Greek text.</p>
</section>
</section>
<section id="diacritics">
-<h4><a class="toc-backref" href="#toc-entry-14" role="doc-backlink">Diacritics</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-15" role="doc-backlink">Diacritics</a></h4>
<p>Greek diacritics via “named” macros:</p>
<pre class="literal-block">\DeclareTextAccentDefault{\accdasia}{LGR}
\DeclareTextAccentDefault{\accpsili}{LGR}
@@ -1312,7 +1228,7 @@ The variations have no syntactic meaning in Greek text.</p>
\DeclareTextAccentDefault{\accbrevebelow}{LGR} % BREVE BELOW</pre>
</section>
<section id="auxiliary-macros">
-<h4><a class="toc-backref" href="#toc-entry-15" role="doc-backlink">Auxiliary macros</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-16" role="doc-backlink">Auxiliary macros</a></h4>
<p><span class="docutils literal">\MakeUppercase</span> requires four internal commands:</p>
<pre class="literal-block">\DeclareTextAccentDefault{\LGR&#64;accdropped}{LGR}
\DeclareTextAccentDefault{\LGR&#64;accDialytika}{LGR}
@@ -1320,7 +1236,7 @@ The variations have no syntactic meaning in Greek text.</p>
\DeclareTextSymbolDefault{\LGR&#64;ypogegrammeni}{LGR}</pre>
</section>
<section id="semicolon-as-erotimatiko">
-<h4><a class="toc-backref" href="#toc-entry-16" role="doc-backlink">semicolon as erotimatiko</a></h4>
+<h4><a class="toc-backref" href="#toc-entry-17" role="doc-backlink">semicolon as erotimatiko</a></h4>
<p>The text command <span class="docutils literal">\textsemicolon</span> inserts <span class="docutils literal">\texterotimatiko</span>
in LGR font encoding and a “normal” semicolon else:</p>
<pre class="literal-block">\ProvideTextCommandDefault{\textsemicolon}{;}
@@ -1336,7 +1252,7 @@ in LGR font encoding and a “normal” semicolon else:</p>
</section>
</section>
<section id="todo">
-<h2><a class="toc-backref" href="#toc-entry-17" role="doc-backlink">TODO</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-18" role="doc-backlink">TODO</a></h2>
<ul>
<li><p>Load <span class="docutils literal">lgrenc.def</span> rsp. <span class="docutils literal"><span class="pre">tuenc-greek.def</span></span> after the common definitions
and after <span class="docutils literal"><span class="pre">puenc-greek.def</span></span>?</p>
@@ -1347,7 +1263,7 @@ last since its top-level definition will be set up to execute in that
encoding without any overhead.</p>
<p>…</p>
<p>For the same reason default declarations should never come last since
-they are implemented as a special encoding themselves (with the name ?).
+they are implemented as a special encoding themselves (with the name “?”).
Specifying them last would simply mean to make those encoding-specific
commands equally inefficient in all encodings.</p>
<p class="attribution">—source2e.pdf, chapter “ltoutenc.dtx”,
@@ -1355,6 +1271,93 @@ subsection “The order of declarations”.</p>
</blockquote>
</li>
</ul>
+</section>
+<section id="changelog">
+<h2><a class="toc-backref" href="#toc-entry-19" role="doc-backlink">Changelog</a></h2>
+<table class="borderless">
+<tbody>
+<tr><td><p>0.1</p></td>
+<td><p>2010-06-16</p></td>
+<td><p>initial version</p></td>
+</tr>
+<tr><td><p>0.2</p></td>
+<td><p>2012-06-27</p></td>
+<td><p>support for compound Unicode definitions outside LGR</p></td>
+</tr>
+<tr><td><p>0.3</p></td>
+<td><p>2013-05-03</p></td>
+<td><p>new accent macro names with <span class="docutils literal">lgrxenc.def</span> 0.7</p></td>
+</tr>
+<tr><td><p>0.4</p></td>
+<td><p>2013-05-28</p></td>
+<td><p>use <span class="docutils literal">lgrenc.def</span> from greek-fontenc.</p></td>
+</tr>
+<tr><td><p>0.5</p></td>
+<td><p>2013-09-11</p></td>
+<td><p>move to <a class="reference external" href="https://ctan.org/pkg/greek-fontenc">greek-fontenc</a>,</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>support XeTeX/LuaTeX, add breve below accents.</p></td>
+</tr>
+<tr><td><p>0.11</p></td>
+<td><p>2013-11-28</p></td>
+<td><p>compatibility with Xe/LuaTeX in 8-bit mode.</p></td>
+</tr>
+<tr><td><p>0.12</p></td>
+<td><p>2014-12-12</p></td>
+<td><p>fix auxiliary macro names,
+define symbol macros for breathing accents.</p></td>
+</tr>
+<tr><td><p>0.13</p></td>
+<td><p>2015-09-04</p></td>
+<td><p>Option <a class="reference internal" href="#normalize-symbols">normalize-symbols</a>: support for symbol variants.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Option <a class="reference internal" href="#keep-semicolon">keep-semicolon</a>: use semicolon as erotimatiko
+in LGR.</p></td>
+</tr>
+<tr><td><p>0.13.2</p></td>
+<td><p>2016-02-05</p></td>
+<td><p>Support for standard Unicode text font encoding “TU”
+(new in fontspec v2.5a).</p></td>
+</tr>
+<tr><td><p>0.13.4</p></td>
+<td><p>2019-07-11</p></td>
+<td><p>Auxiliary command for subscript iota.</p></td>
+</tr>
+<tr><td><p>0.14</p></td>
+<td><p>2020-02-28</p></td>
+<td><p>Update test for Unicode fonts.
+Rename <span class="docutils literal"><span class="pre">greek-euenc</span></span> to <span class="docutils literal"><span class="pre">tuenc-greek</span></span>.
+Don’t use <span class="docutils literal">\LastDeclaredEncoding</span>.</p></td>
+</tr>
+<tr><td><p>1.0</p></td>
+<td><p>2020-09-25</p></td>
+<td><p>Also set <span class="docutils literal">\encodingdefault</span> with <span class="docutils literal">\greekscript</span>.</p></td>
+</tr>
+<tr><td><p>2.0</p></td>
+<td><p>2020-10-30</p></td>
+<td><p>Load <span class="docutils literal"><span class="pre">tuenc-greek.def</span></span> with Xe/LuaTeX by default.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Load <span class="docutils literal"><span class="pre">puenc-greek.def</span></span> if used with <a class="reference external" href="https://ctan.org/pkg/hyperref">hyperref</a>.</p></td>
+</tr>
+<tr><td><p>2.2</p></td>
+<td><p>2023-02-28</p></td>
+<td><p>Don’t use <span class="docutils literal">\makeatother</span> in <span class="docutils literal">\AtBeginDocument</span>.</p></td>
+</tr>
+<tr><td><p>2.2.1</p></td>
+<td><p>2023-03-08</p></td>
+<td><p>Documentation update.</p></td>
+</tr>
+</tbody>
+</table>
<!-- References
- - - - - - - - - - -->
</section>
diff --git a/language/greek/greek-fontenc/tuenc-greek.def b/language/greek/greek-fontenc/tuenc-greek.def
index 156f9892ff..fc91f22b49 100644
--- a/language/greek/greek-fontenc/tuenc-greek.def
+++ b/language/greek/greek-fontenc/tuenc-greek.def
@@ -3,56 +3,23 @@
% Greek LICR definitions for XeTeX and LuaTeX
% *******************************************
%
-% :Copyright: © 2013 Günter Milde
+% :Version: 2.2.1 (changelog_)
+%
+% :Copyright: © 2013 -- 2023 Günter Milde
+%
% :Licence: This work may be distributed and/or modified under the
% conditions of the `LaTeX Project Public License`_, either
% version 1.3 of this license or any later version.
-% :Identification:
-% ::
-
-\ProvidesFile{tuenc-greek.def}
-[2023/02/28 2.2 Greek LICRs for XeTeX and LuaTeX]
-
+%
% :abstract:
% Support for Greek LICR macros and upcasing of text
% with XeTeX and LuaTeX. Extends tuenc.def_.
% Used by babel-greek_ and textalpha_.
%
-% **History**:
-% .. class:: borderless
-%
-% ====== =========== ========================================================
-% 0.1 2013-07-16 initial version
-% 0.1.1 2013-07-18 bugfix: wrong breathings psilioxia -> dasiaoxia
-% 0.1.2 2013-07-19 bugfix: Disable composite defs starting with char macro,
-% .. fix "hiatus" handling.
-% 0.1.3 2013-07-24 fix "input" path.
-% 0.1.4 2013-10-01 remove clashing defs for legacy characters with oxia,
-% .. fix upcasing of ``\finalsigma``.
-% 0.11.1 2013-12-01 fix identification.
-% 0.11.2 2014-09-08 ``\textKoppa`` macro
-% .. (Capital Koppa is not defined in LGR but Unicode).
-% 0.12 2014-12-12 Remove symbol macros for breathing accents.
-% 0.13 2015-08-07 ``\lccode``/``\uccode`` corrections from xgreek_.
-% .. LICR macros for symbol variants.
-% 0.13.3 2018-01-06 Documentation update.
-% 0.14 2020-02-28 Rename to ``tuenc-greek.def``. Use ``\UTFencname``.
-% 1.0 2020-09-25 New package version. No changes in this file.
-% 2.0 2020-10-13 Move common alias definitions to ``greek-fontenc.def``.
-% .. New compatiblity definitions.
-% .. Use ``\UnicodeEncodingName`` instead of ``\UTFencname``.
-% .. Make the file encoding-independent (required for input
-% in other encodings with `luainputenc`).
-% 2.2 2023-02-28 Add composite definitions for ``\~`` + literal char.
-% .. Fix order in expansion of combined accent macros.
-% .. Let ``\textautosigma`` select sigma/finalsigma
-% depending on context (with LaTeX >= 2022/06/01).
-% .. Skip `uccode` fixes when ignored by ``\MakeUppercase``.
-% .. Add ``\textbackepsilon`` (defined by hyperref for PU).
-% ====== =========== ========================================================
%
% .. contents::
%
+%
% Motivation
% ==========
%
@@ -63,6 +30,7 @@
% for Greek letters and symbols. It works independed of xunicode_ using the
% standard commands for `LaTeX2e font selection`_.
%
+%
% Requirements
% ============
%
@@ -74,8 +42,20 @@
% usage examples.
%
%
+% Implementation
+% ==============
+%
+% Identification
+% --------------
+%
+% ::
+
+\ProvidesFile{tuenc-greek.def}
+ [2023/03/08 2.2.1 Greek LICRs for XeTeX and LuaTeX]
+
+
% Greek Diacritics
-% ================
+% ----------------
%
% Define "named macros" for simple and combined diacritics.
%
@@ -132,7 +112,7 @@
% Common Definitions
-% ==================
+% ------------------
%
% Use the `common Greek font encoding definitions`_::
@@ -140,7 +120,7 @@
\input{greek-fontenc.def}
% Character Definitions
-% =====================
+% ---------------------
%
% Basic Latin
% ~~~~~~~~~~~
@@ -545,7 +525,12 @@
% while the standard short accent macro ``\~`` uses the COMBINING TILDE.
% Only <Greek letter> + COMBINING GREEK PERISPOMENI is considered
% equivalent to the pre-composed <Greek letter> WITH PERISPOMENI.
-% Composite definitions for ``\~`` select the pre-composed character::
+% Composite definitions for ``\~`` select the pre-composed character
+%
+% TODO: don't use literal Unicode characters if ``\inputencodingname``
+% is defined and not "lutf8" to prevent errors with legacy 8-bit documents
+% read with "luainputenc.sty" (cf. test-licr-input.tex).
+% ::
\DeclareUnicodeComposite{\~}{α}{"1FB6} % ᾶ
\DeclareUnicodeComposite{\~}{η}{"1FC6} % ῆ
@@ -591,7 +576,7 @@
% UPPERCASE
-% =========
+% ---------
%
% Greek letters drop diacritics (eccept dialytika and sub-iota) in UPPERCASE.
%
@@ -953,7 +938,46 @@
}%
}
+
+% Changelog
+% =========
+%
+% .. class:: borderless
+%
+% ====== =========== ========================================================
+% 0.1 2013-07-16 initial version
+% 0.1.1 2013-07-18 bugfix: wrong breathings psilioxia -> dasiaoxia
+% 0.1.2 2013-07-19 bugfix: Disable composite defs starting with char macro,
+% .. fix "hiatus" handling.
+% 0.1.3 2013-07-24 fix "input" path.
+% 0.1.4 2013-10-01 remove clashing defs for legacy characters with oxia,
+% .. fix upcasing of ``\finalsigma``.
+% 0.11.1 2013-12-01 fix identification.
+% 0.11.2 2014-09-08 ``\textKoppa`` macro
+% .. (Capital Koppa is not defined in LGR but Unicode).
+% 0.12 2014-12-12 Remove symbol macros for breathing accents.
+% 0.13 2015-08-07 ``\lccode``/``\uccode`` corrections from xgreek_.
+% .. LICR macros for symbol variants.
+% 0.13.3 2018-01-06 Documentation update.
+% 0.14 2020-02-28 Rename to ``tuenc-greek.def``. Use ``\UTFencname``.
+% 1.0 2020-09-25 New package version. No changes in this file.
+% 2.0 2020-10-13 Move common alias definitions to ``greek-fontenc.def``.
+% .. New compatiblity definitions.
+% .. Use ``\UnicodeEncodingName`` instead of ``\UTFencname``.
+% .. Make the file encoding-independent (required for input
+% in other encodings with `luainputenc`).
+% 2.2 2023-02-28 Add composite definitions for ``\~`` + literal char.
+% .. Fix order in expansion of combined accent macros.
+% .. Let ``\textautosigma`` select sigma/finalsigma
+% depending on context (with LaTeX >= 2022/06/01).
+% .. Skip `uccode` fixes when ignored by ``\MakeUppercase``.
+% .. Add ``\textbackepsilon`` (defined by hyperref for PU).
+% 2.2.1 2023-03-08 Documentation update.
+% ====== =========== ========================================================
+%
+%
% .. References
+% ----------
%
% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
% .. _babel-greek: https://ctan.org/pkg/babel-greek
diff --git a/language/greek/greek-fontenc/tuenc-greek.def.html b/language/greek/greek-fontenc/tuenc-greek.def.html
index 3ae33811f5..6edad88706 100644
--- a/language/greek/greek-fontenc/tuenc-greek.def.html
+++ b/language/greek/greek-fontenc/tuenc-greek.def.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="Docutils 0.20b.dev: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
-<meta name="dcterms.rights" content="© 2013 Günter Milde" />
+<meta name="dcterms.rights" content="© 2013 – 2023 Günter Milde" />
<title>tuenc-greek.def</title>
<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>
<style type="text/css">
@@ -792,17 +792,15 @@ mstyle.mathscr, mi.mathscr {
<h1 class="title">tuenc-greek.def</h1>
<p class="subtitle" id="greek-licr-definitions-for-xetex-and-luatex">Greek LICR definitions for XeTeX and LuaTeX</p>
<dl class="docinfo">
+<dt class="version">Version<span class="colon">:</span></dt>
+<dd class="version">2.2.1 (<a class="reference internal" href="#changelog">changelog</a>)</dd>
<dt class="copyright">Copyright<span class="colon">:</span></dt>
-<dd class="copyright">© 2013 Günter Milde</dd>
+<dd class="copyright">© 2013 – 2023 Günter Milde</dd>
<dt class="licence">Licence<span class="colon">:</span></dt>
<dd class="licence"><p>This work may be distributed and/or modified under the
conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
version 1.3 of this license or any later version.</p>
</dd>
-<dt class="identification">Identification<span class="colon">:</span></dt>
-<dd class="identification"><pre class="literal-block">\ProvidesFile{tuenc-greek.def}
-[2023/02/28 2.2 Greek LICRs for XeTeX and LuaTeX]</pre>
-</dd>
</dl>
<div class="topic abstract" role="doc-abstract">
<p class="topic-title">Abstract</p>
@@ -810,149 +808,40 @@ version 1.3 of this license or any later version.</p>
with XeTeX and LuaTeX. Extends <a class="reference internal" href="#tuenc-def">tuenc.def</a>.
Used by <a class="reference external" href="https://ctan.org/pkg/babel-greek">babel-greek</a> and <a class="reference external" href="textalpha.sty.html">textalpha</a>.</p>
</div>
-<dl>
-<dt><strong>History</strong>:</dt>
-<dd><table class="borderless">
-<tbody>
-<tr><td><p>0.1</p></td>
-<td><p>2013-07-16</p></td>
-<td><p>initial version</p></td>
-</tr>
-<tr><td><p>0.1.1</p></td>
-<td><p>2013-07-18</p></td>
-<td><p>bugfix: wrong breathings psilioxia -&gt; dasiaoxia</p></td>
-</tr>
-<tr><td><p>0.1.2</p></td>
-<td><p>2013-07-19
-..</p></td>
-<td><p>bugfix: Disable composite defs starting with char macro,
-fix “hiatus” handling.</p></td>
-</tr>
-<tr><td><p>0.1.3</p></td>
-<td><p>2013-07-24</p></td>
-<td><p>fix “input” path.</p></td>
-</tr>
-<tr><td><p>0.1.4</p></td>
-<td><p>2013-10-01
-..</p></td>
-<td><p>remove clashing defs for legacy characters with oxia,
-fix upcasing of <span class="docutils literal">\finalsigma</span>.</p></td>
-</tr>
-<tr><td><p>0.11.1</p></td>
-<td><p>2013-12-01</p></td>
-<td><p>fix identification.</p></td>
-</tr>
-<tr><td><p>0.11.2</p></td>
-<td><p>2014-09-08</p></td>
-<td><p><span class="docutils literal">\textKoppa</span> macro</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>(Capital Koppa is not defined in LGR but Unicode).</p></td>
-</tr>
-<tr><td><p>0.12</p></td>
-<td><p>2014-12-12</p></td>
-<td><p>Remove symbol macros for breathing accents.</p></td>
-</tr>
-<tr><td><p>0.13</p></td>
-<td><p>2015-08-07</p></td>
-<td><p><span class="docutils literal">\lccode</span>/<span class="docutils literal">\uccode</span> corrections from <a class="reference external" href="https://ctan.org/pkg/xgreek">xgreek</a>.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>LICR macros for symbol variants.</p></td>
-</tr>
-<tr><td><p>0.13.3</p></td>
-<td><p>2018-01-06</p></td>
-<td><p>Documentation update.</p></td>
-</tr>
-<tr><td><p>0.14</p></td>
-<td><p>2020-02-28</p></td>
-<td><p>Rename to <span class="docutils literal"><span class="pre">tuenc-greek.def</span></span>. Use <span class="docutils literal">\UTFencname</span>.</p></td>
-</tr>
-<tr><td><p>1.0</p></td>
-<td><p>2020-09-25</p></td>
-<td><p>New package version. No changes in this file.</p></td>
-</tr>
-<tr><td><p>2.0</p></td>
-<td><p>2020-10-13</p></td>
-<td><p>Move common alias definitions to <span class="docutils literal"><span class="pre">greek-fontenc.def</span></span>.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>New compatiblity definitions.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Use <span class="docutils literal">\UnicodeEncodingName</span> instead of <span class="docutils literal">\UTFencname</span>.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Make the file encoding-independent (required for input
-in other encodings with <cite>luainputenc</cite>).</p></td>
-</tr>
-<tr><td><p>2.2</p></td>
-<td><p>2023-02-28</p></td>
-<td><p>Add composite definitions for <span class="docutils literal">\~</span> + literal char.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Fix order in expansion of combined accent macros.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Let <span class="docutils literal">\textautosigma</span> select sigma/finalsigma
-depending on context (with LaTeX &gt;= 2022/06/01).</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Skip <cite>uccode</cite> fixes when ignored by <span class="docutils literal">\MakeUppercase</span>.</p></td>
-</tr>
-<tr><td><!-- -->
-</td>
-<td></td>
-<td><p>Add <span class="docutils literal">\textbackepsilon</span> (defined by hyperref for PU).</p></td>
-</tr>
-</tbody>
-</table>
-</dd>
-</dl>
<nav class="contents" id="contents" role="doc-toc">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#motivation" id="toc-entry-1">Motivation</a></p></li>
<li><p><a class="reference internal" href="#requirements" id="toc-entry-2">Requirements</a></p></li>
-<li><p><a class="reference internal" href="#greek-diacritics" id="toc-entry-3">Greek Diacritics</a></p></li>
-<li><p><a class="reference internal" href="#common-definitions" id="toc-entry-4">Common Definitions</a></p></li>
-<li><p><a class="reference internal" href="#character-definitions" id="toc-entry-5">Character Definitions</a></p>
+<li><p><a class="reference internal" href="#implementation" id="toc-entry-3">Implementation</a></p>
<ul>
-<li><p><a class="reference internal" href="#basic-latin" id="toc-entry-6">Basic Latin</a></p></li>
-<li><p><a class="reference internal" href="#latin-1-supplement" id="toc-entry-7">Latin 1 Supplement</a></p></li>
-<li><p><a class="reference internal" href="#ipa-extensions" id="toc-entry-8">IPA Extensions</a></p></li>
-<li><p><a class="reference internal" href="#greek-and-coptic" id="toc-entry-9">Greek and Coptic</a></p></li>
-<li><p><a class="reference internal" href="#greek-extended" id="toc-entry-10">Greek Extended</a></p>
+<li><p><a class="reference internal" href="#identification" id="toc-entry-4">Identification</a></p></li>
+<li><p><a class="reference internal" href="#greek-diacritics" id="toc-entry-5">Greek Diacritics</a></p></li>
+<li><p><a class="reference internal" href="#common-definitions" id="toc-entry-6">Common Definitions</a></p></li>
+<li><p><a class="reference internal" href="#character-definitions" id="toc-entry-7">Character Definitions</a></p>
<ul>
-<li><p><a class="reference internal" href="#perispomeni-and-tilde-accent" id="toc-entry-11">Perispomeni and tilde accent</a></p></li>
+<li><p><a class="reference internal" href="#basic-latin" id="toc-entry-8">Basic Latin</a></p></li>
+<li><p><a class="reference internal" href="#latin-1-supplement" id="toc-entry-9">Latin 1 Supplement</a></p></li>
+<li><p><a class="reference internal" href="#ipa-extensions" id="toc-entry-10">IPA Extensions</a></p></li>
+<li><p><a class="reference internal" href="#greek-and-coptic" id="toc-entry-11">Greek and Coptic</a></p></li>
+<li><p><a class="reference internal" href="#greek-extended" id="toc-entry-12">Greek Extended</a></p>
+<ul>
+<li><p><a class="reference internal" href="#perispomeni-and-tilde-accent" id="toc-entry-13">Perispomeni and tilde accent</a></p></li>
</ul>
</li>
-<li><p><a class="reference internal" href="#letterlike-symbols" id="toc-entry-12">Letterlike Symbols</a></p></li>
-<li><p><a class="reference internal" href="#ancient-greek-numbers" id="toc-entry-13">Ancient Greek Numbers</a></p></li>
+<li><p><a class="reference internal" href="#letterlike-symbols" id="toc-entry-14">Letterlike Symbols</a></p></li>
+<li><p><a class="reference internal" href="#ancient-greek-numbers" id="toc-entry-15">Ancient Greek Numbers</a></p></li>
</ul>
</li>
-<li><p><a class="reference internal" href="#uppercase" id="toc-entry-14">UPPERCASE</a></p>
+<li><p><a class="reference internal" href="#uppercase" id="toc-entry-16">UPPERCASE</a></p>
<ul>
-<li><p><a class="reference internal" href="#uc-lc-values" id="toc-entry-15">uc/lc values</a></p></li>
-<li><p><a class="reference internal" href="#uclclist" id="toc-entry-16">uclclist</a></p></li>
+<li><p><a class="reference internal" href="#uc-lc-values" id="toc-entry-17">uc/lc values</a></p></li>
+<li><p><a class="reference internal" href="#uclclist" id="toc-entry-18">uclclist</a></p></li>
+</ul>
+</li>
</ul>
</li>
+<li><p><a class="reference internal" href="#changelog" id="toc-entry-19">Changelog</a></p></li>
</ul>
</nav>
<section id="motivation">
@@ -971,8 +860,15 @@ Greek characters.</p>
<p>See <a class="reference external" href="test-tuenc-greek.tex">test-tuenc-greek.tex</a> and <a class="reference external" href="test-tuenc-greek.pdf">test-tuenc-greek.pdf</a> for setup and
usage examples.</p>
</section>
+<section id="implementation">
+<h2><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">Implementation</a></h2>
+<section id="identification">
+<h3><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Identification</a></h3>
+<pre class="literal-block">\ProvidesFile{tuenc-greek.def}
+ [2023/03/08 2.2.1 Greek LICRs for XeTeX and LuaTeX]</pre>
+</section>
<section id="greek-diacritics">
-<h2><a class="toc-backref" href="#toc-entry-3" role="doc-backlink">Greek Diacritics</a></h2>
+<h3><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Greek Diacritics</a></h3>
<p>Define “named macros” for simple and combined diacritics.</p>
<ul class="simple">
<li><p>Named accent macros can be used instead of the <span class="docutils literal">\&#64;tabacckludge</span> by
@@ -1014,29 +910,29 @@ character, discarded in favour of COMBINING COMMA ABOVE.</p>
\DeclareTextCommand{\accpsiliperispomeni}{\UnicodeEncodingName}[1]{#1\char&quot;0313\char&quot;0342}</pre>
</section>
<section id="common-definitions">
-<h2><a class="toc-backref" href="#toc-entry-4" role="doc-backlink">Common Definitions</a></h2>
+<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Common Definitions</a></h3>
<p>Use the <a class="reference external" href="greek-fontenc.def.html">common Greek font encoding definitions</a>:</p>
<pre class="literal-block">\renewcommand*{\LastDeclaredEncoding}{\UnicodeEncodingName}
\input{greek-fontenc.def}</pre>
</section>
<section id="character-definitions">
-<h2><a class="toc-backref" href="#toc-entry-5" role="doc-backlink">Character Definitions</a></h2>
+<h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Character Definitions</a></h3>
<section id="basic-latin">
-<h3><a class="toc-backref" href="#toc-entry-6" role="doc-backlink">Basic Latin</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">Basic Latin</a></h4>
<p>Compatibility def with LGR:</p>
<pre class="literal-block">\DeclareTextSymbol{\textsemicolon}\UnicodeEncodingName{&quot;003B} % ;</pre>
</section>
<section id="latin-1-supplement">
-<h3><a class="toc-backref" href="#toc-entry-7" role="doc-backlink">Latin 1 Supplement</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Latin 1 Supplement</a></h4>
<p>Distinguish MICRO SIGN from letter mu:</p>
<pre class="literal-block">\DeclareTextSymbol{\textmicro}\UnicodeEncodingName{&quot;00B5} % µ MICRO SIGN</pre>
</section>
<section id="ipa-extensions">
-<h3><a class="toc-backref" href="#toc-entry-8" role="doc-backlink">IPA Extensions</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">IPA Extensions</a></h4>
<pre class="literal-block">\DeclareTextSymbol{\textschwa}\UnicodeEncodingName{&quot;0259} % ə</pre>
</section>
<section id="greek-and-coptic">
-<h3><a class="toc-backref" href="#toc-entry-9" role="doc-backlink">Greek and Coptic</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">Greek and Coptic</a></h4>
<pre class="literal-block">% NR Unicode Name % babel name, % PU name
% 0370 GREEK CAPITAL LETTER HETA % Ͱ
% 0371 GREEK SMALL LETTER HETA % ͱ
@@ -1178,7 +1074,7 @@ TODO: implement autosigma for TU:</p>
<pre class="literal-block">\ProvideTextCommand{\textautosigma}{\UnicodeEncodingName}{\MakeLowercase{Σ}}</pre>
</section>
<section id="greek-extended">
-<h3><a class="toc-backref" href="#toc-entry-10" role="doc-backlink">Greek Extended</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">Greek Extended</a></h4>
<p>We skip definitions for characters “… WITH OXIA”, because they would
overwrite the definitions for “… WITH TONOS” in the <cite>Greek and Coptic</cite>
block.</p>
@@ -1390,7 +1286,7 @@ to the pre-composed character.</p>
\DeclareUnicodeComposite{\accoxia} {} {&quot;1FFD} % ´
\DeclareUnicodeComposite{\accdasia} {} {&quot;1FFE} % ῾</pre>
<section id="perispomeni-and-tilde-accent">
-<h4><a class="toc-backref" href="#toc-entry-11" role="doc-backlink">Perispomeni and tilde accent</a></h4>
+<h5><a class="toc-backref" href="#toc-entry-13" role="doc-backlink">Perispomeni and tilde accent</a></h5>
<p>XeTeX and LuaTeX (since 2022) convert letters followed by combining
characters to a pre-composed character, if there is an equivalent
pre-composed character.</p>
@@ -1398,7 +1294,10 @@ pre-composed character.</p>
while the standard short accent macro <span class="docutils literal">\~</span> uses the COMBINING TILDE.
Only &lt;Greek letter&gt; + COMBINING GREEK PERISPOMENI is considered
equivalent to the pre-composed &lt;Greek letter&gt; WITH PERISPOMENI.
-Composite definitions for <span class="docutils literal">\~</span> select the pre-composed character:</p>
+Composite definitions for <span class="docutils literal">\~</span> select the pre-composed character</p>
+<p>TODO: don’t use literal Unicode characters if <span class="docutils literal">\inputencodingname</span>
+is defined and not “lutf8” to prevent errors with legacy 8-bit documents
+read with “luainputenc.sty” (cf. test-licr-input.tex).</p>
<pre class="literal-block">\DeclareUnicodeComposite{\~}{α}{&quot;1FB6} % ᾶ
\DeclareUnicodeComposite{\~}{η}{&quot;1FC6} % ῆ
\DeclareUnicodeComposite{\~}{ι}{&quot;1FD6} % ῖ
@@ -1422,11 +1321,11 @@ implementation of <span class="docutils literal">\MakeUppercase</span>.)</p>
</section>
</section>
<section id="letterlike-symbols">
-<h3><a class="toc-backref" href="#toc-entry-12" role="doc-backlink">Letterlike Symbols</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-14" role="doc-backlink">Letterlike Symbols</a></h4>
<pre class="literal-block">\DeclareTextSymbol{\textohm}\UnicodeEncodingName{&quot;03A9} % OHM SIGN, use 03A9 Omega</pre>
</section>
<section id="ancient-greek-numbers">
-<h3><a class="toc-backref" href="#toc-entry-13" role="doc-backlink">Ancient Greek Numbers</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-15" role="doc-backlink">Ancient Greek Numbers</a></h4>
<p>TODO: map other chars to corresponding Greek letters.
See also the <a class="reference external" href="https://ctan.org/pkg/grnumalt">grnumalt</a> package.</p>
<pre class="literal-block">\DeclareTextSymbol{\textpentedeka }\UnicodeEncodingName{&quot;10144} % GREEK ACROPHONIC ATTIC FIFTY
@@ -1436,10 +1335,10 @@ See also the <a class="reference external" href="https://ctan.org/pkg/grnumalt">
</section>
</section>
<section id="uppercase">
-<h2><a class="toc-backref" href="#toc-entry-14" role="doc-backlink">UPPERCASE</a></h2>
+<h3><a class="toc-backref" href="#toc-entry-16" role="doc-backlink">UPPERCASE</a></h3>
<p>Greek letters drop diacritics (eccept dialytika and sub-iota) in UPPERCASE.</p>
<section id="uc-lc-values">
-<h3><a class="toc-backref" href="#toc-entry-15" role="doc-backlink">uc/lc values</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-17" role="doc-backlink">uc/lc values</a></h4>
<p>With the old <span class="docutils literal">\MakeUppercase</span> implementation, we can fix this using
<span class="docutils literal">\lccode</span> and <span class="docutils literal">\uccode</span> corrections from the <a class="reference external" href="https://ctan.org/pkg/xgreek">xgreek</a> package by
Apostolos Syropoulos:</p>
@@ -1766,7 +1665,7 @@ Apostolos Syropoulos:</p>
}</pre>
</section>
<section id="uclclist">
-<h3><a class="toc-backref" href="#toc-entry-16" role="doc-backlink">uclclist</a></h3>
+<h4><a class="toc-backref" href="#toc-entry-18" role="doc-backlink">uclclist</a></h4>
<p>The common Greek font encoding definitions in <a class="reference external" href="greek-fontenc.def.html">greek-fontenc.def</a> extend the
<cite>uclclist</cite> with Greek LICR macros. Here, we add Unicode-specific “<a class="reference external" href="greek-fontenc.def.html#mark-hiatus">hiatus</a>”
handling (copied from <a class="reference external" href="lgrenc.def.html">lgrenc.def</a> and changed
@@ -1790,9 +1689,129 @@ Latin transliteration to Unicode literals).</p>
}%
}%
}</pre>
-<!-- References -->
</section>
</section>
+</section>
+<section id="changelog">
+<h2><a class="toc-backref" href="#toc-entry-19" role="doc-backlink">Changelog</a></h2>
+<table class="borderless">
+<tbody>
+<tr><td><p>0.1</p></td>
+<td><p>2013-07-16</p></td>
+<td><p>initial version</p></td>
+</tr>
+<tr><td><p>0.1.1</p></td>
+<td><p>2013-07-18</p></td>
+<td><p>bugfix: wrong breathings psilioxia -&gt; dasiaoxia</p></td>
+</tr>
+<tr><td><p>0.1.2</p></td>
+<td><p>2013-07-19
+..</p></td>
+<td><p>bugfix: Disable composite defs starting with char macro,
+fix “hiatus” handling.</p></td>
+</tr>
+<tr><td><p>0.1.3</p></td>
+<td><p>2013-07-24</p></td>
+<td><p>fix “input” path.</p></td>
+</tr>
+<tr><td><p>0.1.4</p></td>
+<td><p>2013-10-01
+..</p></td>
+<td><p>remove clashing defs for legacy characters with oxia,
+fix upcasing of <span class="docutils literal">\finalsigma</span>.</p></td>
+</tr>
+<tr><td><p>0.11.1</p></td>
+<td><p>2013-12-01</p></td>
+<td><p>fix identification.</p></td>
+</tr>
+<tr><td><p>0.11.2</p></td>
+<td><p>2014-09-08</p></td>
+<td><p><span class="docutils literal">\textKoppa</span> macro</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>(Capital Koppa is not defined in LGR but Unicode).</p></td>
+</tr>
+<tr><td><p>0.12</p></td>
+<td><p>2014-12-12</p></td>
+<td><p>Remove symbol macros for breathing accents.</p></td>
+</tr>
+<tr><td><p>0.13</p></td>
+<td><p>2015-08-07</p></td>
+<td><p><span class="docutils literal">\lccode</span>/<span class="docutils literal">\uccode</span> corrections from <a class="reference external" href="https://ctan.org/pkg/xgreek">xgreek</a>.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>LICR macros for symbol variants.</p></td>
+</tr>
+<tr><td><p>0.13.3</p></td>
+<td><p>2018-01-06</p></td>
+<td><p>Documentation update.</p></td>
+</tr>
+<tr><td><p>0.14</p></td>
+<td><p>2020-02-28</p></td>
+<td><p>Rename to <span class="docutils literal"><span class="pre">tuenc-greek.def</span></span>. Use <span class="docutils literal">\UTFencname</span>.</p></td>
+</tr>
+<tr><td><p>1.0</p></td>
+<td><p>2020-09-25</p></td>
+<td><p>New package version. No changes in this file.</p></td>
+</tr>
+<tr><td><p>2.0</p></td>
+<td><p>2020-10-13</p></td>
+<td><p>Move common alias definitions to <span class="docutils literal"><span class="pre">greek-fontenc.def</span></span>.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>New compatiblity definitions.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Use <span class="docutils literal">\UnicodeEncodingName</span> instead of <span class="docutils literal">\UTFencname</span>.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Make the file encoding-independent (required for input
+in other encodings with <cite>luainputenc</cite>).</p></td>
+</tr>
+<tr><td><p>2.2</p></td>
+<td><p>2023-02-28</p></td>
+<td><p>Add composite definitions for <span class="docutils literal">\~</span> + literal char.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Fix order in expansion of combined accent macros.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Let <span class="docutils literal">\textautosigma</span> select sigma/finalsigma
+depending on context (with LaTeX &gt;= 2022/06/01).</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Skip <cite>uccode</cite> fixes when ignored by <span class="docutils literal">\MakeUppercase</span>.</p></td>
+</tr>
+<tr><td><!-- -->
+</td>
+<td></td>
+<td><p>Add <span class="docutils literal">\textbackepsilon</span> (defined by hyperref for PU).</p></td>
+</tr>
+<tr><td><p>2.2.1</p></td>
+<td><p>2023-03-08</p></td>
+<td><p>Documentation update.</p></td>
+</tr>
+</tbody>
+</table>
+<!-- References
+- - - - - - - - - - -->
+</section>
</main>
</body>
</html>
diff --git a/language/korean/kotex-oblivoir/README b/language/korean/kotex-oblivoir/README
index 0b7e92bc49..03e659a1ad 100644
--- a/language/korean/kotex-oblivoir/README
+++ b/language/korean/kotex-oblivoir/README
@@ -1,6 +1,7 @@
kotex-oblivoir
====================
+* 2023/03/08, version 3.2.1, memhangul-x, oblivoir-misc changed. babel package support.
* 2023/02/28, Version 3.2, obchaptertoc, oblivoir-misc, obmathleading, xob-fonts changed.
* 2022/11/04, memhangul-common.sty, a minor bug fixed, reported on KTUG, Version 3.1.5.1
% 2022/04/11, xob-font bug fixed, reported by Progress, Version 3.1.5
diff --git a/language/korean/kotex-oblivoir/doc/ChangeLog b/language/korean/kotex-oblivoir/doc/ChangeLog
index f104c1f23c..27fd908d5c 100644
--- a/language/korean/kotex-oblivoir/doc/ChangeLog
+++ b/language/korean/kotex-oblivoir/doc/ChangeLog
@@ -1,3 +1,10 @@
+2023-03-08 Kangsoo Kim
+
+ Version 3.2.1
+
+ * babel support (memhangul-x)
+ * oblivoir-misc
+
2023-02-28 Kangsoo Kim
Version 3.2
diff --git a/language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty b/language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
index 9712b947b7..d02172211f 100644
--- a/language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
+++ b/language/korean/kotex-oblivoir/tex/memhangul-common/oblivoir-misc.sty
@@ -6,6 +6,7 @@
%% 2022-03-01, 03-06
%% 2022-04-07, bugfix
%% 2023-02-14, tikzpagenodes-conflict fixed
+%% 2023-03-08, hverse environment
%%
\ProvidesPackage{oblivoir-misc}[2023/02/14 version0.4]
@@ -130,6 +131,44 @@
% }
}
}
+
+%%%%
+%%%% 2023-03-08, hverse
+%%%% write external file and read in.
+%%%%
+
+\tl_set:Nx \temp_filename_tl { \jobname.hverse }
+\ior_new:N \l_txp_file
+
+\skip_set:Nn \stanzaskip { .63\onelineskip }
+
+\NewDocumentEnvironment {hverse} {o}
+{
+ \exp_args:Nx \verbatimoutput {\temp_filename_tl}
+}
+{
+ \endverbatimoutput
+
+ \begin{verse}
+
+ \exp_args:NNx \ior_open:Nn \l_txp_file {\temp_filename_tl}
+
+ \ior_str_map_inline:Nn \l_txp_file
+ {
+ \tl_if_empty:nTF { ##1 }
+ {
+ \par\vskip\stanzaskip
+ }
+ {
+ ##1 \\
+ }
+ }
+ \ior_close:N \l_txp_file
+
+ \end{verse}
+}
+
+
\ExplSyntaxOff
diff --git a/language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty b/language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
index a94bce08e6..0f3f729e53 100644
--- a/language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
+++ b/language/korean/kotex-oblivoir/tex/memhangul-x/memhangul-x.sty
@@ -1,6 +1,6 @@
%% File `memhangul-x.sty`
%%
-%% (C) Copyright 2006-2021 Kangsoo Kim <modviv2k15 at gmail com>
+%% (C) Copyright 2006-2023 Kangsoo Kim <modviv2k15 at gmail com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,8 +14,8 @@
%% part of oblivoir v2
%%
\NeedsTeXFormat{LaTeX2e}
-\def\filedate{2021/09/21}
-\def\fileversion{11.12}
+\def\filedate{2023/03/08}
+\def\fileversion{23.03}
\ProvidesPackage{memhangul-x}[\filedate Hangul Typography for (x)oblivoir]
%\typeout{Hangul Typography for (x)oblivoir}
@@ -66,7 +66,11 @@
\newif\if@pdfbookmark{\@pdfbookmarkfalse}
\DeclareOption{pdfbookmark}{\@pdfbookmarktrue}
\newif\if@polyglos\@polyglosfalse
-\DeclareOption{polyglossia}{\@polyglostrue}
+\newif\if@babelhangul\@babelhangulfalse
+\newif\if@babelvacant\@babelvacantfalse
+\DeclareOption{polyglossia}{\@polyglostrue\@babelhangulfalse\@babelvacantfalse}
+\DeclareOption{babelhangul}{\@polyglostrue\@babelhangultrue\@babelvacantfalse}
+\DeclareOption{babelvacant}{\@polyglostrue\@babelhangultrue\@babelvacanttrue}
\ifxetex
%%% xetexko options
@@ -125,26 +129,73 @@
\ProcessOptions \relax
+\newif\if@@babelkorfontdeclared\@@babelkorfontdeclaredfalse
+
\if@polyglos
- \RequirePackage{polyglossia}
- \RequirePackage{xparse}
-%%% \sethangulfont{FONTNAME} or \sethangulfont[tt]{FONTNAME}[FEATURES]
- \NewDocumentCommand\sethangulfont{omo}{%
- \IfValueTF{#1}{%
- \IfValueTF{#3}{%
- \expandafter\newfontfamily\csname hangulfont#1\endcsname
- {#2}[#3]}{%
- \expandafter\newfontfamily\csname hangulfont#1\endcsname
- {#2}}%
- }%
- {%
- \IfValueTF{#3}{%
- \newfontfamily\hangulfont{#2}[#3]%
- }{%
- \newfontfamily\hangulfont{#2}%
- }%
+ \if@babelhangul
+ \if@babelvacant \else
+ \ifluatex
+ \RequirePackage{babel}
+ \AtEndPreamble{
+ \babelprovide[import, onchar=ids fonts]{korean}
+ \if@@babelkorfontdeclared\else
+ \babelfont[korean]{rm}{UnBatang}
+ \fi
+ }
+ \ProvideDocumentCommand\setobmainfont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont{rm}[#2]{#1}}%
+ {\babelfont{rm}{#1}}}
+ \ProvideDocumentCommand\setobsansfont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont{sf}[#2]{#1}}%
+ {\babelfont{sf}{#1}}}
+ \ProvideDocumentCommand\setobmonofont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont{tt}[#2]{#1}}%
+ {\babelfont{tt}{#1}}}
+ \ProvideDocumentCommand\setkomainfont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont[korean]{rm}[#2]{#1}}%
+ {\babelfont[korean]{rm}{#1}}%
+ \@@babelkorfontdeclaredtrue
+ }
+ \ProvideDocumentCommand\setkosansfont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont[korean]{sf}[#2]{#1}}%
+ {\babelfont[korean]{sf}{#1}}}
+ \ProvideDocumentCommand\setkomonofont{mo}{%
+ \IfValueTF{#2}{%
+ \babelfont[korean]{tt}[#2]{#1}}%
+ {\babelfont[korean]{tt}{#1}}}
+ \else\ifxetex
+ \RequirePackage{fontspec}
+ \setmainfont{UnBatang}
+ \XeTeXlinebreaklocale="ko"
+ \fi
+ \fi
+ \fi
+\else
+ \RequirePackage{polyglossia}
+ \RequirePackage{xparse}
+ %%% \sethangulfont{FONTNAME} or \sethangulfont[tt]{FONTNAME}[FEATURES]
+ \NewDocumentCommand\sethangulfont{omo}{%
+ \IfValueTF{#1}{%
+ \IfValueTF{#3}{%
+ \expandafter\newfontfamily\csname hangulfont#1\endcsname
+ {#2}[#3]}{%
+ \expandafter\newfontfamily\csname hangulfont#1\endcsname
+ {#2}}%
}%
+ {%
+ \IfValueTF{#3}{%
+ \newfontfamily\hangulfont{#2}[#3]%
+ }{%
+ \newfontfamily\hangulfont{#2}%
+ }%
+ }%
}
+ \fi
\else
\ifluatex
\@ifpackageloaded{luatexko}{}{\RequirePackage{luatexko}}
diff --git a/language/korean/kotex-oblivoir/tex/oblivoir-xl.cls b/language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
index 4c87c9d62a..6a884288f6 100644
--- a/language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
+++ b/language/korean/kotex-oblivoir/tex/oblivoir-xl.cls
@@ -1,6 +1,6 @@
%% File `oblivoir-xl.cls`
%%
-%% (C) Copyright 2006-2022 Kangsoo Kim <modviv2k15 at gmail dot com>
+%% (C) Copyright 2006-2023 Kangsoo Kim <modviv2k15 at gmail dot com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,8 +14,7 @@
%% depends upon Dohyun Kim's xetexko and the author's memhangul-x.
%%
\ProvidesClass{oblivoir-xl}
- [2022/04/07 v0.8.8 article-like class to typeset Korean]
-%\typeout{A variant of oblivoir class for Lua- or XeLaTeX.}
+ [2023/03/08 v3.2.1 memoir-based class to typeset Korean]
\providecommand\@DisabledOption[1]{%
\typeout{[#1] option is deprecated}}
@@ -37,6 +36,9 @@
\DeclareOptionX{nokorean}{\nokoreantrue}
\newif\if@polyglossia\@polyglossiafalse
\DeclareOptionX{polyglossia}{\@polyglossiatrue}
+\newif\if@babelhangul\@babelhangulfalse
+\DeclareOptionX{babelhangul}{\PassOptionsToPackage{\CurrentOption}{memhangul-x}} %%2023-03
+\DeclareOptionX{babelvacant}{\PassOptionsToPackage{\CurrentOption}{memhangul-x}} %%2023-03
\newif\iftwosidedoc\twosidedocfalse
\DeclareOptionX{twoside}{\twosidedoctrue}
\newif\ifopenrightdoc\openrightdocfalse
@@ -514,6 +516,7 @@
\endinput
%%% ChangeLog:
+%%% 2023-03-08 : polyglossia, babel, babelvacant added.
%%% 2015-10-19 : fix conflicts with etextools package.
%%%% 2015-08-01 : drop etex.sty
%%% 2015-07-27 : fix nokorean bug
diff --git a/language/korean/kotex-oblivoir/tex/oblivoir.cls b/language/korean/kotex-oblivoir/tex/oblivoir.cls
index e514073a2e..6ccea1b70c 100644
--- a/language/korean/kotex-oblivoir/tex/oblivoir.cls
+++ b/language/korean/kotex-oblivoir/tex/oblivoir.cls
@@ -10,7 +10,7 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2006/05/20 or later.
%%
-\ProvidesClass{oblivoir}[2023/02/28 v3.2]
+\ProvidesClass{oblivoir}[2023/03/09 v3.2.1]
\RequirePackage{xkeyval}
\RequirePackage{xparse}
@@ -66,5 +66,6 @@
\endinput
%%% Recent Changes:
+%%% v3.2.1: 2023-03-08, memhangul-x
%%% v3.1.5: 2022-04-11, xob-font \setmainhangulfont problem
%%%
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 343bb1b759..49f51d34a3 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2023-06-01 pre-release 1
+Release 2023-06-01 pre-release 2
Overview
--------
diff --git a/macros/latex-dev/base/alltt.dtx b/macros/latex-dev/base/alltt.dtx
index 908fe92400..548b91bcea 100644
--- a/macros/latex-dev/base/alltt.dtx
+++ b/macros/latex-dev/base/alltt.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/alltt.ins b/macros/latex-dev/base/alltt.ins
index f46404bcf4..3f40ddc0f0 100644
--- a/macros/latex-dev/base/alltt.ins
+++ b/macros/latex-dev/base/alltt.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index e8d8da01e4..b5a773fce8 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 d574da1576..9199195161 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/cfgguide.tex b/macros/latex-dev/base/cfgguide.tex
index 53f53d90b4..e0f76b74fb 100644
--- a/macros/latex-dev/base/cfgguide.tex
+++ b/macros/latex-dev/base/cfgguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -41,7 +41,7 @@
\author{\copyright~Copyright 1998, 2001, 2003 \LaTeX\ Project Team.\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{cfgguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 468b66433b..218b2b9db7 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -6,10 +6,27 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+2023-01-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltpara.dtx (subsection{Providing hooks for paragraphs}):
+ Backout \parskip at top of minipage if it shouldn't be there
+ but is due to whatsits (gh/989)
+
+2023-01-16 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltnews.cls:
+ Added full release date yyyy-mm-dd to _all_ ltnews issues.
+ Added \publicationday{<day>} to specify day in a month in ltnews<n>.tex.
+ <day> defaults to 01.
+
================================================================================
All changes above are only part of the development branch for the next release.
================================================================================
+2023-01-19 Josef Friedrich <josef@friedrich.rocks>
+
+ * ltluatex.dtx:
+ Remove unused local variable tex_setattribute (gh/978)
2022-11-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -196,7 +213,7 @@ All changes above are only part of the development branch for the next release.
* doc.dtx
recast Package Option declarations using \DeclareKeys
-
+
2022-06-10 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* cmfonts.fdd
diff --git a/macros/latex-dev/base/classes.dtx b/macros/latex-dev/base/classes.dtx
index 188679d4d9..e16dc657a1 100644
--- a/macros/latex-dev/base/classes.dtx
+++ b/macros/latex-dev/base/classes.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/classes.ins b/macros/latex-dev/base/classes.ins
index 1f7b331691..50a51ea666 100644
--- a/macros/latex-dev/base/classes.ins
+++ b/macros/latex-dev/base/classes.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index 30f8f4f5c0..39f29d0e8b 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.pdf b/macros/latex-dev/base/clsguide.pdf
index 709334dd02..ab8af60728 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 0ed5e60817..ce2c1dcf81 100644
--- a/macros/latex-dev/base/clsguide.tex
+++ b/macros/latex-dev/base/clsguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -36,7 +36,7 @@
\author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{clsguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/cmextra.ins b/macros/latex-dev/base/cmextra.ins
index a2befb3aef..0fa45183fc 100644
--- a/macros/latex-dev/base/cmextra.ins
+++ b/macros/latex-dev/base/cmextra.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/cmfonts.ins b/macros/latex-dev/base/cmfonts.ins
index 55af4759c5..af5ac7e5f8 100644
--- a/macros/latex-dev/base/cmfonts.ins
+++ b/macros/latex-dev/base/cmfonts.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index 255f6af9ad..6274984a6d 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 eb8b6a1618..1b614ae415 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/cyrguide.tex b/macros/latex-dev/base/cyrguide.tex
index 7304a586e4..394cd59e20 100644
--- a/macros/latex-dev/base/cyrguide.tex
+++ b/macros/latex-dev/base/cyrguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -34,7 +34,7 @@
\author{\copyright~Copyright 1998--1999,\\ Vladimir Volovich,
Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{cyrguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf
index 5d573b35df..93037436a6 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.pdf b/macros/latex-dev/base/doc.pdf
index cce65ca48d..796e6319f2 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.dtx b/macros/latex-dev/base/docstrip.dtx
index de20073c48..be373499e6 100644
--- a/macros/latex-dev/base/docstrip.dtx
+++ b/macros/latex-dev/base/docstrip.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/docstrip.ins b/macros/latex-dev/base/docstrip.ins
index e2187594a4..79d4c429dd 100644
--- a/macros/latex-dev/base/docstrip.ins
+++ b/macros/latex-dev/base/docstrip.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -52,7 +52,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index 661da9efd5..a489d9b28a 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/ec.ins b/macros/latex-dev/base/ec.ins
index 47823e7edf..15a7c3848c 100644
--- a/macros/latex-dev/base/ec.ins
+++ b/macros/latex-dev/base/ec.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index 07fc3f5113..0c2ed52b02 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/encguide.tex b/macros/latex-dev/base/encguide.tex
index 3c95cf30cc..1a0978267e 100644
--- a/macros/latex-dev/base/encguide.tex
+++ b/macros/latex-dev/base/encguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/exscale.dtx b/macros/latex-dev/base/exscale.dtx
index bc884c4db0..89890a4198 100644
--- a/macros/latex-dev/base/exscale.dtx
+++ b/macros/latex-dev/base/exscale.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/exscale.ins b/macros/latex-dev/base/exscale.ins
index d202aad7cf..ae75460ee5 100644
--- a/macros/latex-dev/base/exscale.ins
+++ b/macros/latex-dev/base/exscale.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index a5f1195be7..8dd6ce4286 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.dtx b/macros/latex-dev/base/fix-cm.dtx
index 5f8983ed34..9e39cd192b 100644
--- a/macros/latex-dev/base/fix-cm.dtx
+++ b/macros/latex-dev/base/fix-cm.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/fix-cm.ins b/macros/latex-dev/base/fix-cm.ins
index b688cd66cf..68c6792412 100644
--- a/macros/latex-dev/base/fix-cm.ins
+++ b/macros/latex-dev/base/fix-cm.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index 0f14974f3a..f3eb096139 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 b2e74d07e7..d92d3d71bb 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/fntguide.tex b/macros/latex-dev/base/fntguide.tex
index 65467339f1..33bbed3ba3 100644
--- a/macros/latex-dev/base/fntguide.tex
+++ b/macros/latex-dev/base/fntguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
@@ -46,7 +46,7 @@
Team.\thanks{Thanks to Arash Esbati for documenting the
newer NFSS features of 2020}\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{fntguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/fontdef.dtx b/macros/latex-dev/base/fontdef.dtx
index 06af8feefd..5e88e55079 100644
--- a/macros/latex-dev/base/fontdef.dtx
+++ b/macros/latex-dev/base/fontdef.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/format.ins b/macros/latex-dev/base/format.ins
index 369f01a7c5..74cd78ff4a 100644
--- a/macros/latex-dev/base/format.ins
+++ b/macros/latex-dev/base/format.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
@@ -88,7 +88,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 2015-2022
+Copyright (C) 2015-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
@@ -123,7 +123,7 @@ extension .ins) which are part of the distribution.
This is a generated file.
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/graphpap.dtx b/macros/latex-dev/base/graphpap.dtx
index 78bb688f83..6b7bc8b822 100644
--- a/macros/latex-dev/base/graphpap.dtx
+++ b/macros/latex-dev/base/graphpap.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/graphpap.ins b/macros/latex-dev/base/graphpap.ins
index d82cbd6670..43ba83aae3 100644
--- a/macros/latex-dev/base/graphpap.ins
+++ b/macros/latex-dev/base/graphpap.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index 3f3b067639..c5d07452ce 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/idx.tex b/macros/latex-dev/base/idx.tex
index bc0dd71021..04c8ef6959 100644
--- a/macros/latex-dev/base/idx.tex
+++ b/macros/latex-dev/base/idx.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ifthen.dtx b/macros/latex-dev/base/ifthen.dtx
index d36042990d..aefc4a7666 100644
--- a/macros/latex-dev/base/ifthen.dtx
+++ b/macros/latex-dev/base/ifthen.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ifthen.ins b/macros/latex-dev/base/ifthen.ins
index 88047e94f0..697a4a38b3 100644
--- a/macros/latex-dev/base/ifthen.ins
+++ b/macros/latex-dev/base/ifthen.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index 1702b8105b..d09c30cace 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.dtx b/macros/latex-dev/base/inputenc.dtx
index e056f8ffd7..02956a8c07 100644
--- a/macros/latex-dev/base/inputenc.dtx
+++ b/macros/latex-dev/base/inputenc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/inputenc.ins b/macros/latex-dev/base/inputenc.ins
index adacf9efce..3857827070 100644
--- a/macros/latex-dev/base/inputenc.ins
+++ b/macros/latex-dev/base/inputenc.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index dce32355a2..4c305b8bc1 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/lablst.tex b/macros/latex-dev/base/lablst.tex
index 0821b0e4f0..b0a3ac1ab6 100644
--- a/macros/latex-dev/base/lablst.tex
+++ b/macros/latex-dev/base/lablst.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf
index e0895befef..14ffd31d47 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/latex209.dtx b/macros/latex-dev/base/latex209.dtx
index 768f7237a5..b84564bb55 100644
--- a/macros/latex-dev/base/latex209.dtx
+++ b/macros/latex-dev/base/latex209.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/latex209.ins b/macros/latex-dev/base/latex209.ins
index f530347a3c..0c90fa36ea 100644
--- a/macros/latex-dev/base/latex209.ins
+++ b/macros/latex-dev/base/latex209.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/latexrelease.dtx b/macros/latex-dev/base/latexrelease.dtx
index 132a2548e4..4abde253e1 100644
--- a/macros/latex-dev/base/latexrelease.dtx
+++ b/macros/latex-dev/base/latexrelease.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/latexrelease.ins b/macros/latex-dev/base/latexrelease.ins
index b5e97a9479..61315f8e07 100644
--- a/macros/latex-dev/base/latexrelease.ins
+++ b/macros/latex-dev/base/latexrelease.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index a0111a19a8..ce0a066012 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.dtx b/macros/latex-dev/base/latexsym.dtx
index 62fb097c0d..e4e1559e27 100644
--- a/macros/latex-dev/base/latexsym.dtx
+++ b/macros/latex-dev/base/latexsym.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/latexsym.ins b/macros/latex-dev/base/latexsym.ins
index 468afddd67..12d658bca9 100644
--- a/macros/latex-dev/base/latexsym.ins
+++ b/macros/latex-dev/base/latexsym.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
@@ -87,7 +87,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index b9d8779f70..2b3650506a 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.err b/macros/latex-dev/base/lb2.err
index 46958ae3a5..d2ea742f82 100644
--- a/macros/latex-dev/base/lb2.err
+++ b/macros/latex-dev/base/lb2.err
@@ -363,10 +363,15 @@ Bafög-Ausgabe (Softcover) die inhaltlich identisch ist:
)
\end{verbatim}
-
\begin{list}{}{\setlength\leftmargin{0cm}\setlength\rightmargin{3cm}}
\item[]
+Beide Ausgaben sind nur noch antiquarisch erhältlich. Das englische
+Original "`The \LaTeX{} Companion"' existiert in der dritten Ausgabe
+(Erscheinungsdatum Mai 2023).
+
+\item[]
+
Diese Errata-Datei (\texttt{\jobname.err}) ist Teil der
\LaTeX-Distribution und die neuste Version findet man auf der \LaTeX{}
Project Webseite unter
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index 0c85e7c769..d5d94cd6d8 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 4052c260c8..3e3c36d3d0 100644
--- a/macros/latex-dev/base/letter.dtx
+++ b/macros/latex-dev/base/letter.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/letter.ins b/macros/latex-dev/base/letter.ins
index c078dc59ce..c522f39e59 100644
--- a/macros/latex-dev/base/letter.ins
+++ b/macros/latex-dev/base/letter.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index 46adfcc798..fb5d1b851e 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.err b/macros/latex-dev/base/lgc2.err
index 45b440a7f4..cb1a382348 100644
--- a/macros/latex-dev/base/lgc2.err
+++ b/macros/latex-dev/base/lgc2.err
@@ -330,6 +330,26 @@
)
\end{verbatim}
+Reprinted by Lehmanns in 2022:
+
+\begin{verbatim}
+@book(Lehmanns:GMRRV2022,
+ author = {Michel Goossens and Frank Mittelbach and Sebastian Rahtz
+ and Denis Roegel and Herbert Vo{\ss}},
+ title = {The {\LaTeX} Graphics Companion},
+ edition = 2,
+ series = {Tools and Techniques for Computer Typesetting},
+ publisher = {Lehmanns Media},
+ address = {Köln},
+ year = {2022},
+ isbn = {978-3-96543-303-8 (softcover), 978-3-96543-299-4 (ebook)},
+ originalyear = {2007},
+ pagenums = {976},
+ bibliography = {yes},
+ index = {yes},
+)
+\end{verbatim}
+
\begin{list}{}{\setlength\leftmargin{0cm}\setlength\rightmargin{3cm}}
\item[]
@@ -378,7 +398,7 @@ Good luck!
Contest period ends & Winner \\[4pt]
2008/05 & Milan Vujtek & 16 suggestions\\
2010/05 & & \\
-\ldots & contest no longer open
+\ldots & -- contest no longer open --
\end{tabular}
\end{center}
\end{list}
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index c60439b2de..161aa93503 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 ecb66844e2..4b4c6fa326 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/ltalloc.dtx b/macros/latex-dev/base/ltalloc.dtx
index 4530d4b07b..c3498fb9c7 100644
--- a/macros/latex-dev/base/ltalloc.dtx
+++ b/macros/latex-dev/base/ltalloc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltbibl.dtx b/macros/latex-dev/base/ltbibl.dtx
index 4c219657b8..8e34ca685a 100644
--- a/macros/latex-dev/base/ltbibl.dtx
+++ b/macros/latex-dev/base/ltbibl.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltboxes.dtx b/macros/latex-dev/base/ltboxes.dtx
index b82f5bdb8e..ff1717caa9 100644
--- a/macros/latex-dev/base/ltboxes.dtx
+++ b/macros/latex-dev/base/ltboxes.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index 63c42f6cd0..f6d5994d3f 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx
index 30a1908c47..78a5a389ae 100644
--- a/macros/latex-dev/base/ltcmd.dtx
+++ b/macros/latex-dev/base/ltcmd.dtx
@@ -2,7 +2,7 @@
%
% Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle
% Copyright (C) 2004-2008 Frank Mittelbach, The LaTeX3 Project
-% Copyright (C) 2009-2022
+% Copyright (C) 2009-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index b324da26c9..0dc121d2ce 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 42222eb416..c67f46be25 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/ltcntrl.dtx b/macros/latex-dev/base/ltcntrl.dtx
index 5ebe256c75..52dcdbf983 100644
--- a/macros/latex-dev/base/ltcntrl.dtx
+++ b/macros/latex-dev/base/ltcntrl.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltcounts.dtx b/macros/latex-dev/base/ltcounts.dtx
index ffe2265ac3..69025fa479 100644
--- a/macros/latex-dev/base/ltcounts.dtx
+++ b/macros/latex-dev/base/ltcounts.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index c604bd9620..209c4e0fba 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltdirchk.dtx b/macros/latex-dev/base/ltdirchk.dtx
index 16a2ed9e68..6e02929754 100644
--- a/macros/latex-dev/base/ltdirchk.dtx
+++ b/macros/latex-dev/base/ltdirchk.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/lterror.dtx b/macros/latex-dev/base/lterror.dtx
index b302a9a74c..77672168ce 100644
--- a/macros/latex-dev/base/lterror.dtx
+++ b/macros/latex-dev/base/lterror.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltexpl.dtx b/macros/latex-dev/base/ltexpl.dtx
index aab189bec2..92e6de52cb 100644
--- a/macros/latex-dev/base/ltexpl.dtx
+++ b/macros/latex-dev/base/ltexpl.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2022
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index e031f84227..c0f1ed5dbe 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 ddc060fcc0..c24b2321a9 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/ltfilehook.dtx b/macros/latex-dev/base/ltfilehook.dtx
index c8503de891..d43ffc857d 100644
--- a/macros/latex-dev/base/ltfilehook.dtx
+++ b/macros/latex-dev/base/ltfilehook.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2020-2022
+% Copyright (C) 2020-2023
% Frank Mittelbach, Phelype Oleinik & LaTeX Team
%
% This file is part of the LaTeX base system.
diff --git a/macros/latex-dev/base/ltfiles.dtx b/macros/latex-dev/base/ltfiles.dtx
index d99dfdcd48..042565299a 100644
--- a/macros/latex-dev/base/ltfiles.dtx
+++ b/macros/latex-dev/base/ltfiles.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltfiles.dtx}
- [2022/05/27 v1.2r LaTeX Kernel (File Handling)]
+ [2023/01/05 v1.2s LaTeX Kernel (File Handling)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfiles.dtx}
@@ -417,6 +417,16 @@
\ignorespaces}
% \end{macrocode}
%
+% Provide a global definition for \cs{do} as well, so that it is
+% already defined in the preamble and not late as
+% \verb=\begin{document}= overwriting some definition given by the
+% unsuspecting user in the preamble.
+% \changes{v1.2s}{2023/01/05}{\cs{do} now with default definition in
+% the kernel (gh/975)}
+% \begin{macrocode}
+\let\do\noexpand
+% \end{macrocode}
+%
% The \hook{begindocument} hook already existed in the kernel since
% 1994 under the name \cs{atbegindocumenthook} the
% additional ones are originally from the \pkg{etoolbox}
diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx
index a19ffa8305..9fa6bbc856 100644
--- a/macros/latex-dev/base/ltfinal.dtx
+++ b/macros/latex-dev/base/ltfinal.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfloat.dtx b/macros/latex-dev/base/ltfloat.dtx
index 8b5b92759a..7247824548 100644
--- a/macros/latex-dev/base/ltfloat.dtx
+++ b/macros/latex-dev/base/ltfloat.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfntcmd.dtx b/macros/latex-dev/base/ltfntcmd.dtx
index 64064abcb5..bb6dbfe75c 100644
--- a/macros/latex-dev/base/ltfntcmd.dtx
+++ b/macros/latex-dev/base/ltfntcmd.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfssaxes.dtx b/macros/latex-dev/base/ltfssaxes.dtx
index 843e8b544c..9e68b38654 100644
--- a/macros/latex-dev/base/ltfssaxes.dtx
+++ b/macros/latex-dev/base/ltfssaxes.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2022
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfssbas.dtx b/macros/latex-dev/base/ltfssbas.dtx
index cc43622a4b..019fca9aba 100644
--- a/macros/latex-dev/base/ltfssbas.dtx
+++ b/macros/latex-dev/base/ltfssbas.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfsscmp.dtx b/macros/latex-dev/base/ltfsscmp.dtx
index 09f43a0d94..7bdfe2fd3e 100644
--- a/macros/latex-dev/base/ltfsscmp.dtx
+++ b/macros/latex-dev/base/ltfsscmp.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfssdcl.dtx b/macros/latex-dev/base/ltfssdcl.dtx
index 49041605e9..c3a743d249 100644
--- a/macros/latex-dev/base/ltfssdcl.dtx
+++ b/macros/latex-dev/base/ltfssdcl.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfssini.dtx b/macros/latex-dev/base/ltfssini.dtx
index 12e3b6289b..7b43f0228b 100644
--- a/macros/latex-dev/base/ltfssini.dtx
+++ b/macros/latex-dev/base/ltfssini.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltfsstrc.dtx b/macros/latex-dev/base/ltfsstrc.dtx
index 699fd2c594..be0e6c68cf 100644
--- a/macros/latex-dev/base/ltfsstrc.dtx
+++ b/macros/latex-dev/base/ltfsstrc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index 4b4b85023e..d2bd8ee0a1 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 17e5d3a514..e9954e43f7 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 cfa1454775..1255c63a8c 100644
--- a/macros/latex-dev/base/lthooks.dtx
+++ b/macros/latex-dev/base/lthooks.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2020-2022
+% Copyright (C) 2020-2023
% Frank Mittelbach, Phelype Oleinik & LaTeX Team
%
% This file is part of the LaTeX base system.
diff --git a/macros/latex-dev/base/lthyphen.dtx b/macros/latex-dev/base/lthyphen.dtx
index b7cede1175..88d30c9cca 100644
--- a/macros/latex-dev/base/lthyphen.dtx
+++ b/macros/latex-dev/base/lthyphen.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltidxglo.dtx b/macros/latex-dev/base/ltidxglo.dtx
index 395fe83975..a2dc6b873e 100644
--- a/macros/latex-dev/base/ltidxglo.dtx
+++ b/macros/latex-dev/base/ltidxglo.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltkeys.dtx b/macros/latex-dev/base/ltkeys.dtx
index edf12f7cb2..80c36d5cd9 100644
--- a/macros/latex-dev/base/ltkeys.dtx
+++ b/macros/latex-dev/base/ltkeys.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2021-2022
+% Copyright (C) 2021-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltlength.dtx b/macros/latex-dev/base/ltlength.dtx
index f979dd4e23..10e4b671c8 100644
--- a/macros/latex-dev/base/ltlength.dtx
+++ b/macros/latex-dev/base/ltlength.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltlists.dtx b/macros/latex-dev/base/ltlists.dtx
index d0413dad08..afde14e070 100644
--- a/macros/latex-dev/base/ltlists.dtx
+++ b/macros/latex-dev/base/ltlists.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltlogos.dtx b/macros/latex-dev/base/ltlogos.dtx
index 56453f73db..7589cf36e1 100644
--- a/macros/latex-dev/base/ltlogos.dtx
+++ b/macros/latex-dev/base/ltlogos.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltluatex.dtx b/macros/latex-dev/base/ltluatex.dtx
index 6c66a96be0..135cb63009 100644
--- a/macros/latex-dev/base/ltluatex.dtx
+++ b/macros/latex-dev/base/ltluatex.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2015-2022
+% Copyright (C) 2015-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -28,7 +28,7 @@
\ProvidesFile{ltluatex.dtx}
%</driver>
%<*tex>
-[2022/10/03 v1.2a
+[2023/01/19 v1.2b
%</tex>
%<plain> LuaTeX support for plain TeX (core)
%<*tex>
@@ -968,10 +968,10 @@ local luatexbase = luatexbase
%
% Some Lua best practice: use local versions of functions where possible.
% \changes{v1.1u}{2021/08/11}{Define missing local function}
+% \changes{v1.2b}{2023/01/19}{Remove unused local variable tex_setattribute}
% \begin{macrocode}
local string_gsub = string.gsub
local tex_count = tex.count
-local tex_setattribute = tex.setattribute
local tex_setcount = tex.setcount
local texio_write_nl = texio.write_nl
local flush_list = node.flush_list
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index c99840f04b..855095c6ef 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 3204fd93a2..54c2703531 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 1203c72f0e..cf70d21cae 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/ltmath.dtx b/macros/latex-dev/base/ltmath.dtx
index 60394460f5..746a3077fb 100644
--- a/macros/latex-dev/base/ltmath.dtx
+++ b/macros/latex-dev/base/ltmath.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltmiscen.dtx b/macros/latex-dev/base/ltmiscen.dtx
index 69a7ac6963..801d1e6862 100644
--- a/macros/latex-dev/base/ltmiscen.dtx
+++ b/macros/latex-dev/base/ltmiscen.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews.cls b/macros/latex-dev/base/ltnews.cls
index 9271b56f1c..f55165d436 100644
--- a/macros/latex-dev/base/ltnews.cls
+++ b/macros/latex-dev/base/ltnews.cls
@@ -429,6 +429,30 @@
\newcommand{\@year}{\ClassError{ltnews}
{No \protect\publicationyear~given}\@eha}
+\newcommand{\publicationday}{\renewcommand{\@day}}
+\newcommand{\@day}{01} % most releases happen on 1st of a month
+
+\newcommand{\publicationdate}{%
+ % support draft ltnews, \publicationyear{2023 --- DRAFT ...}
+ \expandafter\@gobblenonyear\@year\@nil
+ -\@julianmonthtonum\@month-\two@digits\@day}
+
+\newcommand{\@julianmonthtonum}[1]{\@nameuse{@juliantonum#1}}
+\def\@juliantonumJanuary {01}
+\def\@juliantonumFebruary {02}
+\def\@juliantonumMarch {03}
+\def\@juliantonumApril {04}
+\def\@juliantonumMay {05}
+\def\@juliantonumJune {06}
+\def\@juliantonumJuly {07}
+\def\@juliantonumAugust {08}
+\def\@juliantonumSeptember{09}
+\def\@juliantonumOctober {10}
+\def\@juliantonumNovember {11}
+\def\@juliantonumDecember {12}
+
+\long\def\@gobblenonyear#1#2#3#4#5\@nil{#1#2#3#4}
+
\newcommand{\publicationissue}{\renewcommand{\@issue}}
\newcommand{\@issue}{\ClassError{ltnews}
{No \protect\publicationissue~given}\@eha}
@@ -449,7 +473,8 @@
\twocolumn[{%
\parbox[t][7\baselineskip]{\textwidth}{%
\@titlefont\@title\\[\medskipamount]
- \normalfont\normalsize\issuename~\@issue, \@month~\@year
+ \normalfont\normalsize\issuename~\@issue,
+ \@month~\@year~(\publicationdate)%
}%
}]%
\thispagestyle{titlepage}
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 3185ce2fc0..bc1b2d7b36 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 9a8de244c2..d239fc274f 100644
--- a/macros/latex-dev/base/ltnews.tex
+++ b/macros/latex-dev/base/ltnews.tex
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% Copyright (C) 2006, 2009, 2011, 2014 Heiko Oberdiek
-% Copyright (C) 2014-2022
+% Copyright (C) 2014-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -113,22 +113,11 @@
\renewcommand{\@evenfoot}{\@indiciafont\@indicia\hfill --\thepage}%
}
-\newcommand*{\MonthJanuary}{01}
-\newcommand*{\MonthFebruary}{02}
-\newcommand*{\MonthMarch}{03}
-\newcommand*{\MonthApril}{04}
-\newcommand*{\MonthMay}{05}
-\newcommand*{\MonthJune}{06}
-\newcommand*{\MonthJuly}{07}
-\newcommand*{\MonthAugust}{08}
-\newcommand*{\MonthSeptember}{09}
-\newcommand*{\MonthOctober}{10}
-\newcommand*{\MonthNovember}{11}
-\newcommand*{\MonthDecember}{12}
\newcommand*{\printissue}{%
Issue %
\texorpdfstring{\number\value{issue}}{\theissue}, %
- \texorpdfstring{\@month\space\@year}{\@year/\@nameuse{Month\@month}}%
+ \texorpdfstring{\@month\space\@year\space(\publicationdate)}
+ {\@year/\@julianmonthtonum{\@month}}%
}
\let\l@part\l@section
\let\l@section\l@subsection
@@ -303,6 +292,7 @@
\loop
\ifnum\value{issue}<\lastissue
\stepcounter{issue}%
+ \publicationday{01}%
\input{ltnews\theissue}%
\repeat
\stepcounter{issue}%
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 8bc64afa46..618176aa56 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/ltnews01.tex b/macros/latex-dev/base/ltnews01.tex
index 08ac57d27d..55c6b20dd6 100644
--- a/macros/latex-dev/base/ltnews01.tex
+++ b/macros/latex-dev/base/ltnews01.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index 6410f6c49a..423dd7db37 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/ltnews02.tex b/macros/latex-dev/base/ltnews02.tex
index 1d875dcd03..58856fe97b 100644
--- a/macros/latex-dev/base/ltnews02.tex
+++ b/macros/latex-dev/base/ltnews02.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index e6faf40788..a43f3c2ffc 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/ltnews03.tex b/macros/latex-dev/base/ltnews03.tex
index 93f0963426..96a5bec428 100644
--- a/macros/latex-dev/base/ltnews03.tex
+++ b/macros/latex-dev/base/ltnews03.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index fdea7fa928..95683443c7 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/ltnews04.tex b/macros/latex-dev/base/ltnews04.tex
index 527024fa18..ab49d7ade3 100644
--- a/macros/latex-dev/base/ltnews04.tex
+++ b/macros/latex-dev/base/ltnews04.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index f45d499a6a..91ba9c3669 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/ltnews05.tex b/macros/latex-dev/base/ltnews05.tex
index d13f469dd6..cdfe8bc072 100644
--- a/macros/latex-dev/base/ltnews05.tex
+++ b/macros/latex-dev/base/ltnews05.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index 8fa7fd39ab..57c9abe6a9 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/ltnews06.tex b/macros/latex-dev/base/ltnews06.tex
index ac32eab8d1..3d5cadb745 100644
--- a/macros/latex-dev/base/ltnews06.tex
+++ b/macros/latex-dev/base/ltnews06.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index deb8285b1d..a587a13ac7 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/ltnews07.tex b/macros/latex-dev/base/ltnews07.tex
index 56cfd76661..43cf204fed 100644
--- a/macros/latex-dev/base/ltnews07.tex
+++ b/macros/latex-dev/base/ltnews07.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index 2127ebe3a2..c57077ac14 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/ltnews08.tex b/macros/latex-dev/base/ltnews08.tex
index 68cd1247e6..f1386a5332 100644
--- a/macros/latex-dev/base/ltnews08.tex
+++ b/macros/latex-dev/base/ltnews08.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index d731efbd39..7dff0aaeb5 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/ltnews09.tex b/macros/latex-dev/base/ltnews09.tex
index af14a53e34..26eccedd1e 100644
--- a/macros/latex-dev/base/ltnews09.tex
+++ b/macros/latex-dev/base/ltnews09.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 5d2967891b..9911e7cc2e 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/ltnews10.tex b/macros/latex-dev/base/ltnews10.tex
index c6a77e6e36..b011eacf7e 100644
--- a/macros/latex-dev/base/ltnews10.tex
+++ b/macros/latex-dev/base/ltnews10.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index 364f3ab434..9d35abb5ea 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/ltnews11.tex b/macros/latex-dev/base/ltnews11.tex
index b4f6d19910..07dbd64240 100644
--- a/macros/latex-dev/base/ltnews11.tex
+++ b/macros/latex-dev/base/ltnews11.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index 7cccdcc6a4..71aa27bcfc 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/ltnews12.tex b/macros/latex-dev/base/ltnews12.tex
index b7a01bc208..38ea9122a0 100644
--- a/macros/latex-dev/base/ltnews12.tex
+++ b/macros/latex-dev/base/ltnews12.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index 5aa1175b0c..1940689968 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/ltnews13.tex b/macros/latex-dev/base/ltnews13.tex
index 0cbbe49a5d..e489b4ff27 100644
--- a/macros/latex-dev/base/ltnews13.tex
+++ b/macros/latex-dev/base/ltnews13.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index 02063e4e90..66821fc4d0 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/ltnews14.tex b/macros/latex-dev/base/ltnews14.tex
index b5fa7cb019..44cc44647e 100644
--- a/macros/latex-dev/base/ltnews14.tex
+++ b/macros/latex-dev/base/ltnews14.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index 1ff4a5662e..0dfe862498 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/ltnews15.tex b/macros/latex-dev/base/ltnews15.tex
index 3b1ea3f89c..b95801dd6e 100644
--- a/macros/latex-dev/base/ltnews15.tex
+++ b/macros/latex-dev/base/ltnews15.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index 04f5796d12..0c8934029d 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/ltnews16.tex b/macros/latex-dev/base/ltnews16.tex
index 7f7183ac0e..7edf8a7f53 100644
--- a/macros/latex-dev/base/ltnews16.tex
+++ b/macros/latex-dev/base/ltnews16.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index a601da8823..2d5500ff62 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/ltnews17.tex b/macros/latex-dev/base/ltnews17.tex
index 4dab20f53f..e18e4660eb 100644
--- a/macros/latex-dev/base/ltnews17.tex
+++ b/macros/latex-dev/base/ltnews17.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index 89350a011c..b88c8a5401 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/ltnews18.tex b/macros/latex-dev/base/ltnews18.tex
index 04491760b2..8c70621534 100644
--- a/macros/latex-dev/base/ltnews18.tex
+++ b/macros/latex-dev/base/ltnews18.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index aa27ba08dc..b6a132732e 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/ltnews19.tex b/macros/latex-dev/base/ltnews19.tex
index 43d388b29b..7e9492a8f2 100644
--- a/macros/latex-dev/base/ltnews19.tex
+++ b/macros/latex-dev/base/ltnews19.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -36,6 +36,7 @@
\usepackage{lmodern,url}
+\publicationday{24}
\publicationmonth{September}
\publicationyear{2009}
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index 402394cc48..3c79e0d9be 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/ltnews20.tex b/macros/latex-dev/base/ltnews20.tex
index 89d166b49c..aeab3fae60 100644
--- a/macros/latex-dev/base/ltnews20.tex
+++ b/macros/latex-dev/base/ltnews20.tex
@@ -36,6 +36,7 @@
\usepackage{lmodern,url}
+\publicationday{27}
\publicationmonth{June}
\publicationyear{2011}
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index e4ea9cc255..c6528cfbea 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 5ee6bfc24d..625a3af16e 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/ltnews22.tex b/macros/latex-dev/base/ltnews22.tex
index 8d1c91acfa..dfc2e2326a 100644
--- a/macros/latex-dev/base/ltnews22.tex
+++ b/macros/latex-dev/base/ltnews22.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2015-2022
+% Copyright (C) 2015-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index c2caca4c16..2d591ff424 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/ltnews23.tex b/macros/latex-dev/base/ltnews23.tex
index 29241766ca..ee75a6463e 100644
--- a/macros/latex-dev/base/ltnews23.tex
+++ b/macros/latex-dev/base/ltnews23.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2015-2022
+% Copyright (C) 2015-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index 3c5ede15d2..bea89f1051 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/ltnews24.tex b/macros/latex-dev/base/ltnews24.tex
index 13d2fc8519..6a50ef902c 100644
--- a/macros/latex-dev/base/ltnews24.tex
+++ b/macros/latex-dev/base/ltnews24.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2015-2022
+% Copyright (C) 2015-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index 885993792d..aa027c430c 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/ltnews25.tex b/macros/latex-dev/base/ltnews25.tex
index 5a9f480718..0676220a2e 100644
--- a/macros/latex-dev/base/ltnews25.tex
+++ b/macros/latex-dev/base/ltnews25.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2016-2022
+% Copyright (C) 2016-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index 299a726a8e..fe7d100e0d 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/ltnews26.tex b/macros/latex-dev/base/ltnews26.tex
index 94b4c4818b..9fbb6716b1 100644
--- a/macros/latex-dev/base/ltnews26.tex
+++ b/macros/latex-dev/base/ltnews26.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017-2022
+% Copyright (C) 2017-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index cc8f3e4896..29da354bf3 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/ltnews27.tex b/macros/latex-dev/base/ltnews27.tex
index 03c8c04205..917bf1cc10 100644
--- a/macros/latex-dev/base/ltnews27.tex
+++ b/macros/latex-dev/base/ltnews27.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017-2022
+% Copyright (C) 2017-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -35,6 +35,7 @@
\usepackage{lmodern,url,hologo}
+\publicationday{15}
\publicationmonth{April}
\publicationyear{2017}
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index 9366cf0426..ee61704ae6 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 28bfe0577c..3c3b92da97 100644
--- a/macros/latex-dev/base/ltnews28.tex
+++ b/macros/latex-dev/base/ltnews28.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017-2022
+% Copyright (C) 2017-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index 8dbbb56102..807dc2f7c2 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/ltnews29.tex b/macros/latex-dev/base/ltnews29.tex
index c06d4de347..999836b01d 100644
--- a/macros/latex-dev/base/ltnews29.tex
+++ b/macros/latex-dev/base/ltnews29.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2018-2022
+% Copyright (C) 2018-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index 7a217b657a..0e1203352a 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 c4a8f385eb..878583bfb2 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/ltnews31.tex b/macros/latex-dev/base/ltnews31.tex
index 8bb6e638b5..1dff72986c 100644
--- a/macros/latex-dev/base/ltnews31.tex
+++ b/macros/latex-dev/base/ltnews31.tex
@@ -119,6 +119,7 @@
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\publicationday{02}
\publicationmonth{February}
\publicationyear{2020}
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index 2e8fc1b80b..35069ceab5 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 05ed870d0b..e42df53c30 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 5648f3e89e..0707a1e9a2 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/ltnews34.tex b/macros/latex-dev/base/ltnews34.tex
index 04d1c25bc7..517856834a 100644
--- a/macros/latex-dev/base/ltnews34.tex
+++ b/macros/latex-dev/base/ltnews34.tex
@@ -116,6 +116,7 @@
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}
+\publicationday{15}
\publicationmonth{November}
\publicationyear{2021}
diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf
index 2bab979d1a..bef895d098 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/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf
index 575e2b9feb..acd22fa631 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 a9216f04fd..3b13c3e619 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/ltnews37.tex b/macros/latex-dev/base/ltnews37.tex
index 4ce8fcccc9..a1197e1052 100644
--- a/macros/latex-dev/base/ltnews37.tex
+++ b/macros/latex-dev/base/ltnews37.tex
@@ -122,6 +122,7 @@
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}
+% \publicationday{01} % change this if it's not released on 1st of a month
\publicationmonth{June}
\publicationyear{2023 --- DRAFT version for upcoming release}
@@ -144,6 +145,106 @@
\section{Introduction}
+\section{New functionality offered as part of the
+ \enquote{\LaTeX{} Tagged PDF} project}
+
+We have now enabled new automatic tagging functionality for additional
+\LaTeX{} elements, among them most display environments, standard
+sectioning commands and content, figure and table listings. This can
+be activated through
+\begin{verbatim}
+\DocumentMetadata{testphase=phase-III}
+\end{verbatim}
+At this point in time tagging support is only available for a
+restricted set of documents, i.e., those that use one of the basic
+document classes (\texttt{article}, \texttt{report}, and
+\texttt{book}) and only use commands and environments described in
+Lamport's \LaTeX{} manual.
+
+Using other document classes or adding additional packages in the
+preamble may work (or may partially work) but at this stage it is not
+very likely, at least not for packages or classes that excessively
+alter internals of \LaTeX{}.
+
+Also note that there are still several environments and commands
+described in the \LaTeX{} manual that do not have tagging support yet,
+notably tabulars, floats, \texttt{tabbing} and the various math
+environment. They will get this support as part of \texttt{phase-III}
+between now and the June release.
+
+A prototype for math tagging (including support for the \pkg{amsmath}
+environments) is already available, but it is mainly intended for
+experimentation and feedback and the resulting tagging is by no means
+the way we envision it to be eventually. If you like to try it out use
+the following line:
+\begin{verbatim}
+\DocumentMetadata{testphase={phase-III,math}}
+\end{verbatim}
+Note that the math tagging code at this point in time will clash with
+packages that redefine the \texttt{\$} (which then may lead to strange
+errors) and that packages that use math mode for non-mathematical
+constructs may result in surprising output as far as tagging is
+concerned. Feedback on which packages fail with the code in one or the
+other way would be appreciated.
+
+The \texttt{latex-lab} bundle contains various
+(still untagged) documentation files about the new code that can
+be accessed with \verb|texdoc -l latex-lab|.
+
+Feedback is welcome!
+Please use \url{https://github.com/latex3/latex2e/discussions/1010}.
+
+\section{Documentation improvements}
+
+
+\subsection{Displaying the exact release dates for \LaTeX{}}
+
+In some situations it is necessary to find out the exact release dates
+for older version of the \LaTeX{} format, for example, when you need
+to use different code in a package depending on the availablilty of a
+certain feature and you therefore want to use
+\cs{IfFormatAtLeastTF}\texttt\{\meta{date}\texttt\} or the
+rather horrible construction \verb/\@ifl@t@r\fmtversion{/\meta{date}\texttt\},
+if you
+want to cater for formats that are older than 2020.
+
+Or you know that your package is definitely not going to work with a
+format before a certain \meta{date}, in which case you could use
+\verb/\NeedsTeXFormat{LaTeX2e}[/\meta{date}\texttt] to ensure that any
+ user is alerted if their format is too old.
+
+The big problem is to know the exact \meta{date} to put into such
+commands and in the past that was not that easy to find. You could have
+looked in the the file \file{changes.txt}, but that is hidden somewhere
+in your installation and if you try
+\verb*/texdoc -l changes.txt/ you get more than thirty results and the
+right file is by no means the first.
+
+Yukai Chou (\textsf{@muzimuzhi}) kindly provided a patch for this, so that we now have
+the exact dates for each \LaTeX{} format listed in an easy to remember
+place: in \file{ltnews.pdf} and that file conveniently also contains all major
+features and changes to \LaTeX{} over the years\Dash one of which is
+most likely the reason you need the \meta{date} date in the first
+place.
+
+It is given in parentheses in the newsletter title, thus this
+newsletter tells you that on
+%
+\makeatletter
+\mbox{\expandafter\@gobblenonyear\@year\@nil
+ -\@julianmonthtonum\@month-\two@digits\@day}
+\makeatother
+%
+the command
+\cs{NewEnvironmentCopy}, a new \texttt{shipout} hook, etc.\ was made
+available. And looking into \file{ltnews.pdf} you can now easily find
+out that the \LaTeX3 programming layer was added on 2020-02-02
+(because the date was so nice) and not on the first of the month.
+%
+\githubissue{982}
+
+
+
\section{New or improved commands}
@@ -190,6 +291,21 @@ following output:
\githubissue{943}
+\subsection{Default definition for \cs{do}}
+
+The command \cs{do} with its nice public name is in reality an
+internal command inherited from plain \TeX{} for list
+processing. However, it only got a definition when
+\verb=\begin{document}= was executed, with a result that a user
+definition in the preamble was unconditionally overwritten at this
+point. To properly alert the user that this command is not freely
+available we now already provide a definition in the format so that
+\cs{newcommand} and friends produce a proper error message instead of
+providing a definition that doesn't last.
+%
+\githubissue{975}
+
+
\subsection{\pkg{doc}: Support the \pkg{upquote} package}
The default quote and backquote characters in typewriter fonts are
@@ -318,6 +434,25 @@ the previous release, but only now documented in a newletter.
\githubissue{967}
+\subsection{Improve spacing at top of \env{minipages}}
+
+A list and several other document elements add some vertical space in
+front of them. However this should not happen at the beginning of a
+box (such as a \env{minipage}) and normally it doesn't, because
+\TeX{} automatically drops such spaces at the start of a vertical
+list. However, if there is some invisible material, such as a
+\cs{color} command, some \pkg{hyperref} anchor, a \cs{write} or
+something else, then the list is no longer empty and \TeX{} no longer
+drops spaces, hence the difference.
+
+With the new paragraph handling introduced in 2021 it is now finally
+possible to detect and avoid this problem and apply appropriate
+counter measures so that from now on the spacing will be always
+correct.
+%
+\githubissue{989}
+
+
\section{Changes to packages in the \pkg{amsmath} category}
@@ -326,6 +461,19 @@ the previous release, but only now documented in a newletter.
\section{Changes to packages in the \pkg{tools} category}
+\subsection{Fix handling of nested \env{multicols}}
+
+If \env{multicols} environments have been nested into each other (the
+inner one boxed) it could fail if the boxed environment appeared near a
+page break. The problem was that the output routine was called while
+the \cs{hsize} was still altered to fit the column width of the inner
+\env{multicols} --- thereby messing up the placement of columns of the
+page. This has now been fixed.
+%
+\githubissue{1002}
+
+
+
%\medskip
\begin{thebibliography}{9}
diff --git a/macros/latex-dev/base/ltoutenc.dtx b/macros/latex-dev/base/ltoutenc.dtx
index 4dac4e1548..1d257805a4 100644
--- a/macros/latex-dev/base/ltoutenc.dtx
+++ b/macros/latex-dev/base/ltoutenc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltoutenc.ins b/macros/latex-dev/base/ltoutenc.ins
index 8ff0f02608..2f0c39517f 100644
--- a/macros/latex-dev/base/ltoutenc.ins
+++ b/macros/latex-dev/base/ltoutenc.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/ltoutput.dtx b/macros/latex-dev/base/ltoutput.dtx
index 1cbc7ab0b1..29024dd4d6 100644
--- a/macros/latex-dev/base/ltoutput.dtx
+++ b/macros/latex-dev/base/ltoutput.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltpage.dtx b/macros/latex-dev/base/ltpage.dtx
index 1d514fc7c7..1a6586d067 100644
--- a/macros/latex-dev/base/ltpage.dtx
+++ b/macros/latex-dev/base/ltpage.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltpageno.dtx b/macros/latex-dev/base/ltpageno.dtx
index 8142639633..6c02d0fa7f 100644
--- a/macros/latex-dev/base/ltpageno.dtx
+++ b/macros/latex-dev/base/ltpageno.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltpar.dtx b/macros/latex-dev/base/ltpar.dtx
index 50ff57183c..31d863610b 100644
--- a/macros/latex-dev/base/ltpar.dtx
+++ b/macros/latex-dev/base/ltpar.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index 0537eb4ec9..7813560129 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 bbd4a35c70..fec25ce942 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 9296f2b2cd..7c96c72fc7 100644
--- a/macros/latex-dev/base/ltpara.dtx
+++ b/macros/latex-dev/base/ltpara.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: ltpara.dtx (C) Copyright 2020-2021
+%% File: ltpara.dtx (C) Copyright 2020-2023
% Frank Mittelbach, LaTeX Team
%
% It may be distributed and/or modified under the conditions of the
@@ -14,8 +14,8 @@
%%% From File: ltpara.dtx
%
% \begin{macrocode}
-\def\ltparaversion{v1.0k}
-\def\ltparadate{2022/05/13}
+\def\ltparaversion{v1.0l}
+\def\ltparadate{2023/01/30}
% \end{macrocode}
%<*driver>
\documentclass{l3doc}
@@ -729,6 +729,8 @@
% for error recovery and so altering \cs{tex_everypar:D} all the
% time should be a tiny bit faster.
% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2023/06/01}
+%<latexrelease> {\g_@@_standard_everypar_tl}{minipage~ fix}
\tl_new:N \g_@@_standard_everypar_tl
% \end{macrocode}
% Here is now its definition:
@@ -769,7 +771,28 @@
% \begin{macrocode}
\group_begin:
\tex_everypar:D {}
- \skip_zero:N \tex_parskip:D
+% \end{macrocode}
+% There has been a long-standing problem with \LaTeX's minipages in
+% that invisible material at the beginning of a minipage (such as a
+% \cs{color} setting) would result in \cs{parskip} being added in
+% front of the first paragraph---something that is not done by
+% \TeX{} if a vertical list is completely empty. As this is
+% happening on a very low-level in the engine it wasn't really
+% possible to find out if this \cs{parskip} was added or if a space
+% we see in front of the current point is legitimate. However, with
+% the new paragraph handling we are in a better position: while we
+% still don't know if there is such a space or not, we do know
+% if we have just created an empty paragraph. Thus, if we now set
+% \cs{parskip} to \texttt{-}\cs{parskip} the two will cancel each other
+% if present and if the first was ignored because the vertical list
+% was empty, then the second will be ignored too because it is
+% still empty. Of course, we don't want to cancel always but only
+% at the start of a minipage and that is signaled with the
+% \texttt{@minipage} switch.
+% \changes{v1.0l}{2023/01/30}{Backout \cs{parskip} at top of minipage (gh/989)}
+% \begin{macrocode}
+ \skip_set:Nn \tex_parskip:D
+ { \if@minipage -\tex_parskip:D \else: \c_zero_skip \fi: }
\tex_noindent:D
\group_end:
% \end{macrocode}
@@ -800,6 +823,43 @@
\@@_handle_indent:
% \the \everypar % <--- done differently below
}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2021/06/01}
+%<latexrelease> {\g_@@_standard_everypar_tl}{minipage~ fix}
+%<latexrelease>
+%<latexrelease>\tl_gset:Nn \g_@@_standard_everypar_tl {
+%<latexrelease> \box_gset_to_last:N \g_para_indent_box
+%<latexrelease> \group_begin:
+%<latexrelease> \tex_par:D
+%<latexrelease> \group_end:
+%<latexrelease> \tex_everypar:D { \msg_error:nnnn { hooks }{ para-mode }{before}{vertical} }
+%<latexrelease> \@kernel@before@para@before
+%<latexrelease> \hook_use:n {para/before}
+%<latexrelease> \group_begin:
+%<latexrelease> \tex_everypar:D {}
+%<latexrelease> \skip_zero:N \tex_parskip:D
+%<latexrelease> \tex_noindent:D
+%<latexrelease> \group_end:
+%<latexrelease> \tex_everypar:D{\g_@@_standard_everypar_tl}
+%<latexrelease> \@kernel@before@para@begin
+%<latexrelease> \hook_use:n {para/begin}
+%<latexrelease> \if_mode_horizontal: \else:
+%<latexrelease> \msg_error:nnnn { hooks }{ para-mode }{begin}{vertical} \fi:
+%<latexrelease> \@@_handle_indent:
+%<latexrelease>}
+% \end{macrocode}
+% We also have to add the \cs{everypar} toks register at the
+% end. In case of rollback this is already allocated and we have to
+% find out the correct number (hope this is correctly done)
+% \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
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltpictur.dtx b/macros/latex-dev/base/ltpictur.dtx
index 453ec6149e..926fd5c692 100644
--- a/macros/latex-dev/base/ltpictur.dtx
+++ b/macros/latex-dev/base/ltpictur.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltplain.dtx b/macros/latex-dev/base/ltplain.dtx
index ee1cf0a161..1bdff344f7 100644
--- a/macros/latex-dev/base/ltplain.dtx
+++ b/macros/latex-dev/base/ltplain.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltsect.dtx b/macros/latex-dev/base/ltsect.dtx
index 71ab1ee89d..5a03fd4977 100644
--- a/macros/latex-dev/base/ltsect.dtx
+++ b/macros/latex-dev/base/ltsect.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf
index 5c4df6d628..79b27f4984 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 6d28fe7faf..131c5251a0 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/ltshipout.dtx b/macros/latex-dev/base/ltshipout.dtx
index 7aa07f754b..1b3cabcfc8 100644
--- a/macros/latex-dev/base/ltshipout.dtx
+++ b/macros/latex-dev/base/ltshipout.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%%
-%% Copyright (C) 2020-2022
+%% Copyright (C) 2020-2023
%% Frank Mittelbach, LaTeX Team
%%
%
diff --git a/macros/latex-dev/base/ltspace.dtx b/macros/latex-dev/base/ltspace.dtx
index 30bda278fb..672ab92729 100644
--- a/macros/latex-dev/base/ltspace.dtx
+++ b/macros/latex-dev/base/ltspace.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/lttab.dtx b/macros/latex-dev/base/lttab.dtx
index e32153f31c..e76325d82b 100644
--- a/macros/latex-dev/base/lttab.dtx
+++ b/macros/latex-dev/base/lttab.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/lttextcomp.dtx b/macros/latex-dev/base/lttextcomp.dtx
index 8f5ec0d200..3602e0a6b0 100644
--- a/macros/latex-dev/base/lttextcomp.dtx
+++ b/macros/latex-dev/base/lttextcomp.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2022
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltthm.dtx b/macros/latex-dev/base/ltthm.dtx
index d0d04d9669..b321c7ac2b 100644
--- a/macros/latex-dev/base/ltthm.dtx
+++ b/macros/latex-dev/base/ltthm.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index eae29f0f01..da131765ac 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -115,7 +115,7 @@
{2023-06-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-1}
+\def\patch@level{-2}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index 122feaff59..ccdd69abd9 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/ltx3info.tex b/macros/latex-dev/base/ltx3info.tex
index 13231da818..096fa2db9a 100644
--- a/macros/latex-dev/base/ltx3info.tex
+++ b/macros/latex-dev/base/ltx3info.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltxcheck.tex b/macros/latex-dev/base/ltxcheck.tex
index 7f4b925b79..d219d2ebc2 100644
--- a/macros/latex-dev/base/ltxcheck.tex
+++ b/macros/latex-dev/base/ltxcheck.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltxdoc.dtx b/macros/latex-dev/base/ltxdoc.dtx
index 6863349be3..78b6de4bcc 100644
--- a/macros/latex-dev/base/ltxdoc.dtx
+++ b/macros/latex-dev/base/ltxdoc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index 0e75ce008e..188d833aeb 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/ltxref.dtx b/macros/latex-dev/base/ltxref.dtx
index 596eb2fd74..dcfebf0e7e 100644
--- a/macros/latex-dev/base/ltxref.dtx
+++ b/macros/latex-dev/base/ltxref.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/makeindx.dtx b/macros/latex-dev/base/makeindx.dtx
index fb6c474659..b91d3a6c44 100644
--- a/macros/latex-dev/base/makeindx.dtx
+++ b/macros/latex-dev/base/makeindx.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/makeindx.ins b/macros/latex-dev/base/makeindx.ins
index 0fe55ed039..1c5f6edcb9 100644
--- a/macros/latex-dev/base/makeindx.ins
+++ b/macros/latex-dev/base/makeindx.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index 8ebcab2ea6..8d714a1cf1 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/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index 0778d8eb49..d484bf783b 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/modguide.tex b/macros/latex-dev/base/modguide.tex
index 3474d8a5fc..332b609ab3 100644
--- a/macros/latex-dev/base/modguide.tex
+++ b/macros/latex-dev/base/modguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -42,7 +42,7 @@
\author{\copyright~Copyright 1995, \LaTeX\ Project Team.\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
texttt{modguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/newdc.ins b/macros/latex-dev/base/newdc.ins
index eeec6479eb..277e8ea21f 100644
--- a/macros/latex-dev/base/newdc.ins
+++ b/macros/latex-dev/base/newdc.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/newlfont.dtx b/macros/latex-dev/base/newlfont.dtx
index 86c0d47ab6..0b35eddd80 100644
--- a/macros/latex-dev/base/newlfont.dtx
+++ b/macros/latex-dev/base/newlfont.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/nfssfont.dtx b/macros/latex-dev/base/nfssfont.dtx
index 51d7834aa3..556ce5f76d 100644
--- a/macros/latex-dev/base/nfssfont.dtx
+++ b/macros/latex-dev/base/nfssfont.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/nfssfont.ins b/macros/latex-dev/base/nfssfont.ins
index a181c61972..21a13f70a8 100644
--- a/macros/latex-dev/base/nfssfont.ins
+++ b/macros/latex-dev/base/nfssfont.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index 601fa1592e..cb2d37b3c3 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/olddc.ins b/macros/latex-dev/base/olddc.ins
index 707fb207e6..320b3a4b0e 100644
--- a/macros/latex-dev/base/olddc.ins
+++ b/macros/latex-dev/base/olddc.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/oldlfont.dtx b/macros/latex-dev/base/oldlfont.dtx
index b7c9abc3eb..33ae5e6fd9 100644
--- a/macros/latex-dev/base/oldlfont.dtx
+++ b/macros/latex-dev/base/oldlfont.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/preload.dtx b/macros/latex-dev/base/preload.dtx
index 3b75df38fd..d26bdaa9ed 100644
--- a/macros/latex-dev/base/preload.dtx
+++ b/macros/latex-dev/base/preload.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/proc.dtx b/macros/latex-dev/base/proc.dtx
index 135c67bc0b..bbbf71162f 100644
--- a/macros/latex-dev/base/proc.dtx
+++ b/macros/latex-dev/base/proc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/proc.ins b/macros/latex-dev/base/proc.ins
index 16f60195e5..056816e99e 100644
--- a/macros/latex-dev/base/proc.ins
+++ b/macros/latex-dev/base/proc.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index 97cc3e82c8..dc5c8e3a67 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.dtx b/macros/latex-dev/base/slides.dtx
index 5ea9e58d9c..a918c337dd 100644
--- a/macros/latex-dev/base/slides.dtx
+++ b/macros/latex-dev/base/slides.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/slides.ins b/macros/latex-dev/base/slides.ins
index 8c9862c2d5..3acb556b96 100644
--- a/macros/latex-dev/base/slides.ins
+++ b/macros/latex-dev/base/slides.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
@@ -96,7 +96,7 @@ extension .ins) which are part of the distribution.
This is a generated file.
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
@@ -138,7 +138,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index c18411078c..49a2fbf7be 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 8115e6ae86..4707b8a219 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 d956472b5d..f84a84ea72 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 797304e8d6..873daebb4d 100644
--- a/macros/latex-dev/base/source2e.tex
+++ b/macros/latex-dev/base/source2e.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/syntonly.dtx b/macros/latex-dev/base/syntonly.dtx
index ae4d4cd1f8..2b0049b696 100644
--- a/macros/latex-dev/base/syntonly.dtx
+++ b/macros/latex-dev/base/syntonly.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/syntonly.ins b/macros/latex-dev/base/syntonly.ins
index 5812ef2fd6..8ccaf254d1 100644
--- a/macros/latex-dev/base/syntonly.ins
+++ b/macros/latex-dev/base/syntonly.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 1993-2022
+Copyright (C) 1993-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index ef69d1da2e..24da1cf460 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/testpage.tex b/macros/latex-dev/base/testpage.tex
index e199a2bb71..7eae6c142c 100644
--- a/macros/latex-dev/base/testpage.tex
+++ b/macros/latex-dev/base/testpage.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/tlc2.err b/macros/latex-dev/base/tlc2.err
index 8925a8bee1..5b01ff0513 100644
--- a/macros/latex-dev/base/tlc2.err
+++ b/macros/latex-dev/base/tlc2.err
@@ -1,4 +1,4 @@
-\newcommand\erratafiledate{2022-01-03}
+\newcommand\erratafiledate{2023-01-08}
\def\comando#1{\texttt{\string#1}}
@@ -359,7 +359,7 @@ you own by changing the configuration in the file \texttt{\jobname.cfg}.
\end{center}
Any mistake found and reported is a gain for all readers of our book.
-For this reason Addison-Wesley and the authors offer a prize (for 6
+For this reason Addison-Wesley and the authors offer a prize (for 5
periods) to the eligible person who finds the largest
number of bugs during that period (in case of a draw a random choice
will be made between all those with the largest number of findings).
@@ -385,7 +385,7 @@ Contest period ends & Winner \\[4pt]
2005/10 & Daniel Alonso i Alemany & 13 suggestions\\
2006/04 & Michael Schutte & 2 suggestions\\
2008/05 & Brooks Moses & 1 suggestion \\
-\ldots & -- final draw eventually --
+ & -- final draw was 2008/05 --
\end{tabular}
\end{center}
\end{list}
@@ -2185,6 +2185,8 @@ Change: ``The unaccented ASCII Latin letters and Arabic
|\dag| and |\ddag| are |\mathord|s not |\mathbin| as claimed in table
8.13.
+ Frank: This is actually correct nowadays (maybe it wasn't in 2008)
+
\seriouserroronpage{529}{table 8.12, l.3}{JGr}{2004/06/10}{2}
\verb=\mathring{x}= is missing its accent.
@@ -2202,6 +2204,9 @@ Change: ``The unaccented ASCII Latin letters and Arabic
aren't (as claimed in legend) synonyms of |\dagger|
and |\ddagger| respectively.
+ Frank: This is actually correct nowadays (maybe it wasn't in 2008)
+
+
\erroronpage{531}{table 8.15}{BMo/FMi}{2004/05/21}{2}
The commands starting with |\var...| are only partially in blue to
indicate their relationship with those commands missing the ``var'' in their
@@ -2236,10 +2241,6 @@ Change: ``The unaccented ASCII Latin letters and Arabic
Various deviations from alphabetical sort order of the table
entries.
-\erroronpage{553}{para 3, l.1}{EOl}{2022/01/02}{}
- Missing letter: ``sup\u{p}ressing''
-
-
\iffalse % more blue align stuff
\erroronpage{534}{page}{FMi}{2004/04/23}{}
Printing problem: blue color not properly aligned (horizontally).
@@ -2332,6 +2333,10 @@ Plural: ``Clearly, 8 bits \u{are} not sufficient\ldots''
respectively %(ref: TB 14-3-252-259)
+\erroronpage{553}{para 3, l.1}{EOl}{2022/01/02}{}
+ Missing letter: ``sup\u{p}ressing''
+
+
\seriouserroronpage{553}{para 4}{UFi}{2004/06/03}{2}
Replace with: ``Another popular shorthand is |"-|, which indicates a
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index 067c94c0c6..e21a6fb104 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/tulm.ins b/macros/latex-dev/base/tulm.ins
index a50060b201..85970a5133 100644
--- a/macros/latex-dev/base/tulm.ins
+++ b/macros/latex-dev/base/tulm.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 2016-2022
+%% Copyright (C) 2016-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 2016-2022
+Copyright (C) 2016-2023
The LaTeX Project and any individual authors listed elsewhere
in this file.
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index 57ead84747..d2c4ec94d0 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/unpack.ins b/macros/latex-dev/base/unpack.ins
index 21ba62a33a..5baa2b5447 100644
--- a/macros/latex-dev/base/unpack.ins
+++ b/macros/latex-dev/base/unpack.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 1993-2022
+%% Copyright (C) 1993-2023
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf
index a390a49de9..3149112b43 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-historic.tex b/macros/latex-dev/base/usrguide-historic.tex
index ce35aaa77c..40865a2be9 100644
--- a/macros/latex-dev/base/usrguide-historic.tex
+++ b/macros/latex-dev/base/usrguide-historic.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -36,7 +36,7 @@
\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{usrguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index 263df7df63..c4953d7e33 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 7234ac821c..f06850afaa 100644
--- a/macros/latex-dev/base/usrguide.tex
+++ b/macros/latex-dev/base/usrguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2020-2022
+% Copyright (C) 2020-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -36,7 +36,7 @@
\title{\LaTeX\ for authors --- current version}
\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
All rights reserved.%
- \footnote{This file may distributed and/or modified under the
+ \footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{usrguide.tex} for full details.}%
diff --git a/macros/latex-dev/base/utf8ienc.dtx b/macros/latex-dev/base/utf8ienc.dtx
index a2b25fd3ab..f1623ee0e6 100644
--- a/macros/latex-dev/base/utf8ienc.dtx
+++ b/macros/latex-dev/base/utf8ienc.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2022
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index 4459986064..d211ec2de1 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 1bf17cd5bd..a7e1a07aec 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/latex-lab/README.md b/macros/latex-dev/required/latex-lab/README.md
index 54e693484b..53461372a3 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 2023-05-01 pre-release 0
+Release 2023-06-01 pre-release 2
## Overview
@@ -38,5 +38,5 @@ The license is LPPL 1.3c.
This README file is
-Copyright (C) 2021-2022
+Copyright (C) 2021-2023
The LaTeX Project
diff --git a/macros/latex-dev/required/latex-lab/blocks-code.pdf b/macros/latex-dev/required/latex-lab/blocks-code.pdf
new file mode 100644
index 0000000000..300f15ecbf
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/blocks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/blocks-code.tex b/macros/latex-dev/required/latex-lab/blocks-code.tex
new file mode 100644
index 0000000000..f71342d6f5
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/blocks-code.tex
@@ -0,0 +1,4 @@
+% this will typeset documentation + code
+
+\AtBeginDocument{\AlsoImplementation}
+\input{latex-lab-block-tagging.dtx}
diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.pdf b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
new file mode 100644
index 0000000000..ccff6f95eb
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.tex b/macros/latex-dev/required/latex-lab/blocks-doc.tex
new file mode 100644
index 0000000000..39a93479a1
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/blocks-doc.tex
@@ -0,0 +1,4 @@
+% this will typeset documentation + code
+
+\AtBeginDocument{\OnlyDescription}
+\input{latex-lab-block-tagging.dtx}
diff --git a/macros/latex-dev/required/latex-lab/changes.txt b/macros/latex-dev/required/latex-lab/changes.txt
index b4b4df9811..853a06dc5f 100644
--- a/macros/latex-dev/required/latex-lab/changes.txt
+++ b/macros/latex-dev/required/latex-lab/changes.txt
@@ -1,3 +1,41 @@
+2023-03-08 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex-lab-block-tagging.dtx:
+ Added the support for tagging display blocks and corresponding environments
+ such as lists, quotes, verbatim, theorem-like envs, ...
+
+2023-03-07 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * tagpdf updated
+ * improved glyphtounicode support for luatex and math
+ * adapted toc and sec tagging code to new two-level paragraph handling
+ and block tagging code
+
+2023-02-16 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * latex-lab-sec-tagging.dtx: first, simple tagging of sectioning commands
+ * latex-lab-toc-tagging-functions.dtx, latex-lab-toc-kernel-changes.dtx,
+ latex-lab-toc-kernel-changes.dtx: Tagging of table of contents and similar
+ lists
+ * tagpdf and pdfmanagement updated in texmf tree.
+
+
+2023-02-04 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * latex-lab-footnotes.dtx: improve tagging of footnotes
+
+2022-12-11 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * latex-lab-mathcapture.dtx
+ New file to implement grabbing of math mode context
+
+2022-04-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * documentmeta-support.dtx:
+ updated documentation
+ * moved output patches from pdfresources to latex-lab-new-or-1
+ * reorganized new-or: number subfiles as new-or-1, new-or-2 and load all with new-or.
+
2022-07-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* latex-lab-footnotes.dtx (subsection{Document-level commands}):
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 7d3e1d002f..f088c780ad 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 cfe8aee9a0..7f9430fe29 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 23053a484a..eb99fbd3a9 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: documentmetadata-support.dtx
-% Copyright (C) 2021-2022 The LaTeX Project
+% Copyright (C) 2021-2023 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -18,8 +18,8 @@
% for those people who are interested or want to report an issue.
%
% \begin{macrocode}
-\def\documentmetadatasupportversion{1.0b}
-\def\documentmetadatasupportdate{2022-14-04}
+\def\documentmetadatasupportversion{1.0c}
+\def\documentmetadatasupportdate{2023-01-07}
% \end{macrocode}
%
%
@@ -64,13 +64,19 @@
% While the underlying functionality is still under
% development (e.g., further keys will be added over time and keys
% marked temporary may vanish again) the code for
-% \cs{DocumentMetadata} is place in a separate bundle, so that it
+% \cs{DocumentMetadata} is placed in a separate bundle, so that it
% is easier to update it without the need to build a full \LaTeX{}
% release. Over time the functionality will move fully into the
% kernel.
+%
+% \cs{DocumentMetadata} also loads and activates
+% the new PDF management code from \pkg{pdfmanagement-testphase}.
+% As this forces the loading of the \pkg{l3backend} files, a backend
+% that can't be detected automatically like |dvipdfmx|,
+% must be set in the first \cs{DocumentMetadata}.
%
% From a process perspective \cs{DocumentMetadata} loads the
-% \pkg{pdfmanagement} code the first time it is called and then
+% \pkg{pdfmanagement-testphase} code the first time it is called and then
% redefines itself to only manage key/value pairs in case it is
% called more than once. In particular, this means that a document
% without a \cs{DocumentMetadata} declaration has no code available
@@ -84,10 +90,12 @@
%
%
% Currently the following keys are implemented for \cs{DocumentMetadata}:
+% \DescribeMkey{backend}
% \DescribeMkey{colorprofiles}
% \DescribeMkey{debug}
% \DescribeMkey{lang}
% \DescribeMkey{pdfstandard}
+% \DescribeMkey{xmp}
% \DescribeMkey{pdfversion}
% \DescribeMkey{testphase}
% \DescribeMkey{uncompress}
@@ -110,15 +118,34 @@
% \item[\texttt{pdfstandard}] Choice key to set the pdf standard.
% Currently |A-1b|, |A-2a|, |A-2b|, |A-2u|, |A-3a|, |A-3b|, |A-3u| and |A-4| are accepted as
% values. The casing is irrelevant, |a-1b| works too.
-% The underlying code to ensure the requirements (as far as they
-% can be ensured) is still incomplete, but a color profile is included and the
-% \texttt{/OutputIntent} is set. The |u| variants for example do not force unicode,
-% but they will pass the information to hyperref and hyperxmp. The |a| variants
-% do \emph{not} enforce (or even test) a tagged pdf yet. The |A-4| support is
-% currently incomplete.
+% Note that using these
+% key doesn't mean that the document actually follows the standard. \LaTeX{}
+% can neither ensure nor check all requirements of a standard, and not everything
+% it can do theoretically has already been implemented.
+% When setting an A-standard a color profile is included and the
+% \texttt{/OutputIntent} is set and javascript action in hyperref are suppressed.
+% The |u| variants do not enforce unicode,
+% but they will pass the information to hyperref. The |a| variants
+% do \emph{not} enforce (or even test) a tagged pdf yet.
+%
+% Starting with version 0.95s of \pkg{pdfmanagement-testphase}
+% it is also possible to use the values
+% |X-4|, |X-4p|, |X-5g|, |X-5n|, |X-5pg|, |X-6|, |X-6n|, |X-6p|, |UA-1| for
+% a PDF/X and PDF/UA standard. These keys currently set \emph{only} the relevant
+% XMP-metadata.
+%
+% |pdfstandard| can be used more than once to set overlapping standards, e.g:\\
+% |pdfstandard=A-2b,pdfstandard=X-4,pdfstandard=UA-1|
+%
+% If XMP-metadata are added (see the following key \texttt{xmp}
+% the needed conformance marker for the standards are set.
+%
% More information can be found in the documentation
-% of \pkg{l3pdfmeta}.
+% of \pkg{l3pdfmeta}.
%
+% \item[\texttt{xmp}] A boolean, if set to false no XMP metadata are added to the PDF.
+% The initial value is true. Details are described in the documentation of \pkg{l3pdfmeta}.
+%
% \item[\texttt{colorprofiles}] This allows to load icc-colorprofiles. Details
% are described in the documentation of \pkg{l3pdfmeta}.
%
@@ -137,6 +164,16 @@
% additionally activate tagging of paragraphs with
% |\tagpdfsetup{paratagging}|. In the upcoming months it will
% also enable automatic tagging of other basic document elements.
+% \item[\texttt{new-or-1}] This patches a few commands related
+% to the output routine. The patches are needed for the tagging
+% of paragraphs, for the tagging of header and footer and
+% to allow the PDF management to insert code which avoids that
+% links happening at page breaks spills into the header and footer.
+% This code is automatically loaded if the \texttt{testphase} values
+% \texttt{phase-I}, \texttt{phase-II} or \texttt{new-or} are used.%
+% \item[\texttt{new-or}] This loads more changes to the output routine required for the
+% tagging. It is not compatible with every class! The code is also loaded by the
+% \texttt{phase-II} value.
% \end{description}
% The |testphase| key can only be used in the first \cs{DocumentMetadata}.
%
diff --git a/macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex b/macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex
new file mode 100644
index 0000000000..2b5c1d979d
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex
@@ -0,0 +1,141 @@
+% A subset of glyhtounicode-cmr.tex
+%
+% Copyright (c) 2008, Han The Thanh <thanh@river-valley.org>
+% Copyright (c) 2014, Peter Selinger <selinger@mathstat.dal.ca>
+% Copyright (c) 2018, Ross Moore <ross.moore@mq.edu.au>
+%
+
+%% Glyphs from the cmex fonts:
+
+\pdfglyphtounicode{angbracketleftBig}{27E8 FE02}
+\pdfglyphtounicode{angbracketleftBigg}{27E8 FE04}
+\pdfglyphtounicode{angbracketleftbig}{27E8 FE01}
+\pdfglyphtounicode{angbracketleftbigg}{27E8 FE03}
+\pdfglyphtounicode{angbracketrightBig}{27E9 FE02}
+\pdfglyphtounicode{angbracketrightBigg}{27E9 FE04}
+\pdfglyphtounicode{angbracketrightbig}{27E9 FE01}
+\pdfglyphtounicode{angbracketrightbigg}{27E9 FE03}
+\pdfglyphtounicode{arrowbt}{2193}
+\pdfglyphtounicode{arrowdblbt}{21D3}
+\pdfglyphtounicode{arrowdbltp}{21D1}
+\pdfglyphtounicode{arrowhookleft}{21AA}
+\pdfglyphtounicode{arrowhookright}{21A9}
+\pdfglyphtounicode{arrowtp}{2191}
+\pdfglyphtounicode{arrowvertex}{23D0}
+\pdfglyphtounicode{arrowvertexdbl}{20E6}% was {ED12}% PUA
+\pdfglyphtounicode{backslashBig}{005C FE02}
+\pdfglyphtounicode{backslashBigg}{005C FE04}
+\pdfglyphtounicode{backslashbig}{005C FE01}
+\pdfglyphtounicode{backslashbigg}{005C FE03}
+\pdfglyphtounicode{braceex}{23AA}
+\pdfglyphtounicode{bracehtipdownleft}{23DF}% was {ED17}% PUA
+\pdfglyphtounicode{bracehtipdownright}{23DF}% was {ED18}% PUA
+\pdfglyphtounicode{bracehtipupleft}{23DE}% was {ED19}% PUA
+\pdfglyphtounicode{bracehtipupright}{23DE}% was {ED1A}% PUA
+\pdfglyphtounicode{braceleftBig}{007B FE02}
+\pdfglyphtounicode{braceleftBigg}{007B FE04}
+\pdfglyphtounicode{braceleftbig}{007B FE01}
+\pdfglyphtounicode{braceleftbigg}{007B FE03}
+\pdfglyphtounicode{braceleftbt}{23A9}
+\pdfglyphtounicode{braceleftmid}{23A8}
+\pdfglyphtounicode{bracelefttp}{23A7}
+\pdfglyphtounicode{bracerightBig}{007D FE02}
+\pdfglyphtounicode{bracerightBigg}{007D FE04}
+\pdfglyphtounicode{bracerightbig}{007D FE01}
+\pdfglyphtounicode{bracerightbigg}{007D FE03}
+\pdfglyphtounicode{bracerightbt}{23AD}
+\pdfglyphtounicode{bracerightmid}{23AC}
+\pdfglyphtounicode{bracerighttp}{23AB}
+\pdfglyphtounicode{bracketleftBig}{005B FE02}
+\pdfglyphtounicode{bracketleftBigg}{005B FE04}
+\pdfglyphtounicode{bracketleftbig}{005B FE01}
+\pdfglyphtounicode{bracketleftbigg}{005B FE03}
+\pdfglyphtounicode{bracketleftbt}{23A3}
+\pdfglyphtounicode{bracketleftex}{23A2}
+\pdfglyphtounicode{bracketlefttp}{23A1}
+\pdfglyphtounicode{bracketrightBig}{005D FE02}
+\pdfglyphtounicode{bracketrightBigg}{005D FE04}
+\pdfglyphtounicode{bracketrightbig}{005D FE01}
+\pdfglyphtounicode{bracketrightbigg}{005D FE03}
+\pdfglyphtounicode{bracketrightbt}{23A6}
+\pdfglyphtounicode{bracketrightex}{23A5}
+\pdfglyphtounicode{bracketrighttp}{23A4}
+\pdfglyphtounicode{ceilingleftBig}{2308 FE02}
+\pdfglyphtounicode{ceilingleftBigg}{2308 FE04}
+\pdfglyphtounicode{ceilingleftbig}{2308 FE01}
+\pdfglyphtounicode{ceilingleftbigg}{2308 FE03}
+\pdfglyphtounicode{ceilingrightBig}{2309 FE02}
+\pdfglyphtounicode{ceilingrightBigg}{2309 FE04}
+\pdfglyphtounicode{ceilingrightbig}{2309 FE01}
+\pdfglyphtounicode{ceilingrightbigg}{2309 FE03}
+\pdfglyphtounicode{circledotdisplay}{2A00 FE02}
+\pdfglyphtounicode{circledottext}{2A00 FE01}
+\pdfglyphtounicode{circlemultiplydisplay}{2A02 FE02}
+\pdfglyphtounicode{circlemultiplytext}{2A02 FE01}
+\pdfglyphtounicode{circleplusdisplay}{2A01 FE02}
+\pdfglyphtounicode{circleplustext}{2A01 FE01}
+\pdfglyphtounicode{contintegraldisplay}{222E FE02}
+\pdfglyphtounicode{contintegraltext}{222E FE01}
+\pdfglyphtounicode{coproductdisplay}{2210 FE02}
+\pdfglyphtounicode{coproducttext}{2210 FE01}
+\pdfglyphtounicode{floorleftBig}{230A FE02}
+\pdfglyphtounicode{floorleftBigg}{230A FE04}
+\pdfglyphtounicode{floorleftbig}{230A FE01}
+\pdfglyphtounicode{floorleftbigg}{230A FE03}
+\pdfglyphtounicode{floorrightBig}{230B FE02}
+\pdfglyphtounicode{floorrightBigg}{230B FE04}
+\pdfglyphtounicode{floorrightbig}{230B FE01}
+\pdfglyphtounicode{floorrightbigg}{230B FE03}
+\pdfglyphtounicode{hatwide}{02C6 FE01}
+\pdfglyphtounicode{hatwider}{02C6 FE02}
+\pdfglyphtounicode{hatwidest}{02C6 FE03}
+\pdfglyphtounicode{integraldisplay}{222B FE02}
+\pdfglyphtounicode{integraltext}{222B FE01}
+\pdfglyphtounicode{intersectiondisplay}{22C2 FE02}
+\pdfglyphtounicode{intersectiontext}{22C2 FE01}
+\pdfglyphtounicode{logicalanddisplay}{22C0 FE02}
+\pdfglyphtounicode{logicalandtext}{22C0 FE01}
+\pdfglyphtounicode{logicalordisplay}{22C1 FE02}
+\pdfglyphtounicode{logicalortext}{22C1 FE01}
+\pdfglyphtounicode{mapsto}{21A6}
+\pdfglyphtounicode{parenleftBig}{0028 FE02}
+\pdfglyphtounicode{parenleftBigg}{0028 FE04}
+\pdfglyphtounicode{parenleftbig}{0028 FE01}
+\pdfglyphtounicode{parenleftbigg}{0028 FE03}
+\pdfglyphtounicode{parenleftbt}{239D}
+\pdfglyphtounicode{parenleftex}{239C}
+\pdfglyphtounicode{parenlefttp}{239B}
+\pdfglyphtounicode{parenrightBig}{0029 FE02}
+\pdfglyphtounicode{parenrightBigg}{0029 FE04}
+\pdfglyphtounicode{parenrightbig}{0029 FE01}
+\pdfglyphtounicode{parenrightbigg}{0029 FE03}
+\pdfglyphtounicode{parenrightbt}{23A0}
+\pdfglyphtounicode{parenrightex}{239F}
+\pdfglyphtounicode{parenrighttp}{239E}
+\pdfglyphtounicode{productdisplay}{220F FE02}
+\pdfglyphtounicode{producttext}{220F FE01}
+\pdfglyphtounicode{radicalBig}{221A FE02}
+\pdfglyphtounicode{radicalBigg}{221A FE04}
+\pdfglyphtounicode{radicalbig}{221A FE01}
+\pdfglyphtounicode{radicalbigg}{221A FE03}
+\pdfglyphtounicode{radicalbt}{23B7}% was {221A}
+\pdfglyphtounicode{radicaltp}{231C}% was {ED6A}% PUA
+\pdfglyphtounicode{radicalvertex}{20D3}% was {ED6B}% PUA
+\pdfglyphtounicode{slashBig}{002F FE02}
+\pdfglyphtounicode{slashBigg}{002F FE04}
+\pdfglyphtounicode{slashbig}{002F FE01}
+\pdfglyphtounicode{slashbigg}{002F FE03}
+\pdfglyphtounicode{summationdisplay}{2211 FE02}
+\pdfglyphtounicode{summationtext}{2211 FE01}
+\pdfglyphtounicode{tie}{2040}
+\pdfglyphtounicode{tildewide}{02DC FE01}
+\pdfglyphtounicode{tildewider}{02DC FE02}
+\pdfglyphtounicode{tildewidest}{02DC FE03}
+\pdfglyphtounicode{uniondisplay}{22C3 FE02}
+\pdfglyphtounicode{unionmultidisplay}{2A04 FE02}
+\pdfglyphtounicode{unionmultitext}{2A04 FE01}
+\pdfglyphtounicode{unionsqdisplay}{2A06 FE02}
+\pdfglyphtounicode{unionsqtext}{2A06 FE01}
+\pdfglyphtounicode{uniontext}{22C3 FE01}
+\pdfglyphtounicode{vextenddouble}{20E6}% was {ED79}% PUA
+\pdfglyphtounicode{vextendsingle}{20D3}%%% was {23D0}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
new file mode 100644
index 0000000000..e1f95730fa
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
@@ -0,0 +1,131 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-amsmath.dtx
+%
+% Copyright (C) 2022,2023 The LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-amsmath.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-amsmath} code\thanks{}}
+% \author{\LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\class[1]{\texttt{#1.cls}}
+% \providecommand\pkg[1]{\texttt{#1}}
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% This file implements adaptations to the \pkg{amsmath} package needed for
+% the tagging project.
+%
+% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex }
+%
+% \section{The Implementation}
+%
+% \begin{macrocode}
+%<@@=math>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{File declaration}
+% \begin{macrocode}
+\ProvidesFile{latex-lab-amsmath.ltx}
+ [2023-01-05 v0.1a amsmath adaptions]
+% \end{macrocode}
+% \subsection{Tagpdf support}
+% To make the code independent from tagging being loaded and active
+% we load the \pkg{tagpdf-base} package:
+%
+% \begin{macrocode}
+\RequirePackage{tagpdf-base}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \subsection{\cs{intertext}}
+% The \cs{intertext} command errors with active tagging as it is processed twice
+% which leads to duplicated structures.
+% \begin{macrocode}
+\AddToHook{package/amsmath/after}
+ {
+ \def\intertext@{%
+ \def\intertext##1{%
+ \ifvmode\else\\\@empty\fi
+ \noalign{%
+ \penalty\postdisplaypenalty\vskip\belowdisplayskip
+ \vbox{
+% \end{macrocode}
+% Stop tagging when measuring:
+% \begin{macrocode}
+ \ifmeasuring@\tag_stop:\fi
+ \normalbaselines
+ \ifdim\linewidth=\columnwidth
+ \else \parshape\@ne \@totalleftmargin \linewidth
+ \fi
+% \end{macrocode}
+% End the previous mc:
+% \begin{macrocode}
+ \tag_mc_end_push:
+% \end{macrocode}
+% We are already in a par so we change now to Span:
+% \begin{macrocode}
+ \tagpdfsetup{paratag=Span}%
+ \noindent\ignorespaces##1\par
+% \end{macrocode}
+% Restart the MC
+% \begin{macrocode}
+ \tag_mc_begin_pop:n{}}%
+ \penalty\predisplaypenalty\vskip\abovedisplayskip%
+ }%
+ }}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
new file mode 100644
index 0000000000..765870ac61
--- /dev/null
+++ 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-block-tagging.dtx b/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx
new file mode 100644
index 0000000000..1a1dce3a64
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx
@@ -0,0 +1,3821 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-block-tagging.dtx (C) Copyright 2021-2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+%<*driver>
+\documentclass{l3doc}
+\usepackage{amstext}
+\EnableCrossrefs
+\CodelineIndex
+
+\usepackage{todonotes}
+
+\begin{document}
+ \DocInput{latex-lab-block-tagging.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+
+\def\ltblocksversion{v0.8a}
+\def\ltblocksdate{2023/03/08}
+
+%
+% \title{Prototype reimplementation of \LaTeXe{}'s block environments using templates}
+% \author{\LaTeX{} Project\thanks{Initial reimplementation of lists done by Bruno
+% Le Floch, generalized second version with tagging support by Frank Mittelbach.}}
+% \date{\ltblocksversion\ \ltblocksdate}
+%
+% \maketitle
+%
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+% \providecommand\hook[1]{\texttt{#1}}
+% \providecommand\struct[1]{\texttt{<#1>}}
+%
+% \NewDocElement[envlike, idxtype=objecttype, idxgroup=object types,
+% printtype=\textit{objecttype}] {ObjectType}{objecttype}
+%
+% \NewDocElement[envlike, idxtype=template, idxgroup=templates,
+% printtype=\textit{templ.}] {Template}{template}
+%
+% \NewDocElement[envlike, idxtype=instance, idxgroup=instances,
+% printtype=\textit{inst.}] {Instance}{instance}
+%
+%
+% \newcommand\valuefrom[1]{\textrm{value from }\texttt{#1}}
+% \newcommand\key[1]{\texttt{#1}}
+%
+%
+% \NewDocumentCommand\fmi{sO{}m}
+% {\IfBooleanTF{#1}{\todo[inline,#2]{#3}}^^A
+% {\todo[#2]{#3}}}
+%
+% \NewDocumentCommand\ufi{sO{}m}
+% {\IfBooleanTF{#1}{\todo[inline,#2]{UFi:#3}}^^A
+% {\todo[#2]{UFi:#3}}}
+% \makeatletter
+% \renewenvironment{TemplateInterfaceDescription}[1]
+% {
+% \subsubsection{The~object~type~`#1'}
+% \begingroup
+% \@beginparpenalty\@M
+% \description
+% \def\TemplateArgument##1##2{\item[Arg:~##1]##2\par}
+% \def\TemplateSemantics
+% {
+% \enddescription\endgroup
+% \subsubsection*{Semantics:}
+% }
+% }
+% {
+% \par\bigskip
+% }
+% \renewenvironment{TemplateDescription}[2]
+% {\subsubsection{The \texttt{#1} template `#2'}^^A
+% \paragraph*{Attributes:}^^A
+% \begingroup
+% \@beginparpenalty\@M
+% \description
+% \def\TemplateKey##1##2##3##4{^^A
+% \item[\texttt{##1}~(\textit{\mdseries##2})]##3^^A
+% \ifx\TemplateKey##4\TemplateKey\else
+% \hfill\penalty500\hbox{}\hfill Default:~\texttt{##4}^^A
+% \nobreak\hskip-\parfillskip\hskip0pt\relax
+% \fi
+% \par
+% }^^A
+% \def\TemplateSemantics{^^A
+% \enddescription\endgroup
+% \paragraph*{Semantics~\&~Comments:}^^A
+% }^^A
+% }
+% { \par \bigskip }
+% \makeatother
+%
+%
+% \begin{abstract}
+% \end{abstract}
+%
+%
+% \tableofcontents
+% \medskip
+%
+%
+% \begin{documentation}
+%
+%
+%
+% \section{Introduction}
+%
+% The list implementation in \LaTeXe{} serves a dual purpose: it
+% implements real lists such as \env{itemize} or \env{enumerate},
+% but it is also used as the basis for vertical blocks, i.e., to specify
+% the vertical spacing and paragraph handling after such block, e.g.,
+% in environments like \env{center}, \env{quote}, \env{verbatim}, or in
+% the theorem environments. They are all implemented as
+% \enquote{trivial} lists with a single (hidden) item.
+%
+% While this was convenient to get a consistent layout using a single
+% implementation it is not adequate if it comes to interpreting the
+% structure of a document, because environments based on \env{trivlist}
+% should not advertise themselves as being a \enquote{list} --- after all,
+% from a semantic point of view they aren't lists.
+%
+% The approach taking here is therefore to offer separate object
+% types: \xt{block} (horizontally or vertically oriented data that
+% needs some handling at the start and the end), \xt{para} (that deals
+% with different paragraph layouts), \xt{list} (that handles list
+% related parameters, and \xt{item} (for item layouts and handling), to address
+% the independent aspects and also offer the object type \xt{blockenv}
+% that ties them together as necessary.
+%
+% For example, a \env{quote} environment would make use of a (display)
+% \xt{block} and some \xt{para} handling while an standard
+% \env{enumerate} would make use of a display \xt{block}, a \xt{list},
+% and an \xt{item} and \xt{para} instance.
+% An inline list (like \env{enumerate*} from the \pkg{enumitem}
+% package) would be using the same \xt{list} instance but a different
+% (horizontally oriented) \xt{block}.
+%
+%
+% \section{Object types and templates for blocks and lists}
+%
+% \subsection{Object types}
+%
+% \begin{TemplateInterfaceDescription}{block}
+% \TemplateArgument{1}{key/value list to alter the default block parameters}
+% \TemplateSemantics
+% Handle the layout aspects of a block of data. In case of a
+% \enquote{display} block (i.e., vertically oriented) the spacing
+% and page breaking as well as the handling if the block starts a
+% paragraph or ends one, that is, if text is immediately following
+% the block without being separated by an empty line, then this
+% text is considered to be in the same paragraph as the block.
+%
+% In case of a horizontally oriented block it covers any special
+% handling at the start and end of the block, e.g, extra spacing,
+% prohibitying or encuraging line breaks, and so forth.
+% \end{TemplateInterfaceDescription}
+%
+% \begin{TemplateInterfaceDescription}{para}
+% \TemplateArgument{1}{key/value list to alter the default item parameters}
+% \TemplateSemantics
+% Sets up paragraph-specific parameters for H\&J, e.g., to
+% implement justification variations, the behavior of \verb=\\=
+% etc. The instances are used in higher-level templates, e.g., in a
+% \xt{block}.
+% \end{TemplateInterfaceDescription}
+%
+% \begin{TemplateInterfaceDescription}{list}
+% \TemplateArgument{1}{key/value list to alter the default item parameters}
+% \TemplateSemantics
+% Handle the aspects related to list design, e.g., the use and
+% formatting of counters, etc.
+%
+% Note that this does not cover block-related aspects, i.e., a list
+% instance could be used both for a display list or for an inline line.
+% \end{TemplateInterfaceDescription}
+%
+% \begin{TemplateInterfaceDescription}{item}
+% \TemplateArgument{1}{key/value list to alter the default item parameters}
+% \TemplateSemantics
+% A sub-type used as part of \xt{list} to easily cover alternative layout
+% for list items.
+% \end{TemplateInterfaceDescription}
+%
+%
+% \begin{TemplateInterfaceDescription}{blockenv}
+% \TemplateArgument{1}{key/value list to alter the default item parameters}
+% \TemplateSemantics
+% This object type is used to implement document-level
+% environments. It defines a \xt{block} instance to handle the
+% layout at the \enquote{edge} of the environment data, possibly
+% some paragraph setup through a \xt{para} instance, potentially an
+% \enquote{inner} instance for more complicated environments (such
+% as lists), and possibly some additional setup code for certain
+% environments.
+%
+% It also defines how the \xt{blockenv} behaves with respect to
+% nesting, e.g., does it change when nested and if so how many
+% levels of nesting are supported, etc.
+%
+% Finally, the object type defines how it appears in a tagged PDF
+% document, what tag names are used, how they are rolemapped and
+% whether it adds additional attributes, etc.
+% \end{TemplateInterfaceDescription}
+%
+%
+%
+% \subsection{Templates}
+%
+%
+% \begin{TemplateDescription}{blockenv}{display}
+%
+% \TemplateKey{env-name}{tokenlist}
+% {Name of the environment used only in tracing}{}
+% \TemplateKey{tag-name}{tokenlist}
+% {Name of the tag in the PDF. If not explicitly given
+% the name is defined by the \key{tagging-recipe}}{}
+% \TemplateKey{tag-class}{tokenlist}
+% {An explicit tag class attribute}{}
+% \TemplateKey{tagging-recipe}{tokenlist}
+% {Defines the way tagging is done. Currently the values
+% \texttt{basic}, \texttt{standard}, and \texttt{list}
+% are supported}{standard}
+% \TemplateKey{level-increase}{boolean}{Does this \xt{blockenv}
+% increase the block level if it is nested in an outer block?}{true}
+% \TemplateKey{setup-code}{tokenlist}
+% {Initial setup code. This is
+% executed after legacy defaults (from \cs{@listi},
+% \cs{@listii}, etc.) are used but before the block instance is called}{}
+% \TemplateKey{block-instance}{tokenlist}{Part of the name of the
+% \xt{block} instance that is called. The full name has
+% a \texttt{-}\meta{level} appended}{displayblock}
+% \TemplateKey{para-instance}{tokenlist}{}{}
+% \TemplateKey{inner-level-counter}{tokenlist}{Name of an existing (!) counter
+% that is incremented and used to determine final name
+% of the \key{inner-instance} or empty if always the
+% same inner instance should be used}{}
+% \TemplateKey{max-inner-levels}{tokenlist}{Maximum number of nested
+% environments of this kind. Only relevant if there is a
+% \key{inner-level-counter} specified}{4}
+% \TemplateKey{inner-instance-type}{tokenlist}{Opject type of the
+% inner instance}{list}
+% \TemplateKey{inner-instance}{tokenlist}{Name of the inner instance
+% (if any).}{}
+% \TemplateKey{para-flattened}{boolean}{\emph{describe}}{false}
+% \TemplateKey{final-code}{tokenlist}{Final setup code}{\cs{ignorespaces}}
+%
+% \TemplateSemantics
+%
+% This \xt{blockenv} template supports the legacy list setting that
+% are found in many document classes in the macros \cs{@listi},
+% \cs{@listii}, up to \cs{@listvi}. It also uses the counter
+% \cs{@listdepth} to track nesting of block, again mainly to
+% support legacy setups (internally it gives it a more appropriate
+% name but it remains accessible through the \LaTeXe{} name).
+%
+%
+% It first checks that nothing is too deeply nested.
+% If the level should increase then the increments the
+% \cs{@listdepth} counter and
+% calls the corresponding \cs{@list...} macro to update the legacy
+% defaults. If \key{level-increase} is set to false this is bypassed.
+%
+% It then sets up the
+% tagging via the \key{tagging-recipe} setting and executes any
+% code in \key{setup-code}.
+%
+% Afterwards it calls the appropriate \xt{block} instance based on
+% \key{block-instance} and current level, e.g.,
+% \texttt{displayblock-1}. Then it sets up paragraph parameters if
+% a \key{para-instance} was specified (otherwise they stay as
+% they are).
+%
+% If a \key{inner-instance} was specified this is called next,
+% or more precisely: if no \key{inner-level-counter} was
+% specified the instance \key{inner-instance} is
+% called.
+%
+% Otherwise, the \key{inner-level-counter} is incremented and the
+% instance with the name
+% \key{inner-instance}\texttt{-}\key{inner-level-counter} is
+% called.
+%
+% Finally, the \key{final-code} is executed (by default
+% \cs{ignorespaces}).
+%
+%
+% \end{TemplateDescription}
+%
+% The maximum number of \xt{blockenv}s that can be nested into each
+% other is is restricted by the \LaTeX{} counter
+% \texttt{maxblocklevels} with a default value of \texttt{6}. If this
+% value is increased then it is necessary to provide additional
+% instances, e.g., \texttt{displayblock-7}, etc. Decreasing is, of
+% course, always possible, then some of the instances defined are not
+% used and instead the user gets an error that there is too much
+% nesting going on.
+%
+% If the key \key{level-increase} is set to \texttt{false} then such
+% an environment doesn't alter the nesting level and therefore you can
+% nest those environments as often as you like (a typical example
+% would be \env{flushleft} anywhere in the nesting hierarchy, that
+% would have no effect on hitting the boundary).
+%
+%
+% \begin{TemplateDescription}{block}{display}
+%
+% \TemplateKey{heading}{tokenlist}{\emph{not really used yet}}{}
+% \TemplateKey{beginsep}{skip}{}{\cs{topsep}}
+% \TemplateKey{begin-par-skip}{skip}{}{\cs{partopsep}}
+% \TemplateKey{par-skip}{skip}{}{\cs{parsep}}
+% \TemplateKey{end-skip}{skip}{}{\valuefrom{beginsep}}
+% \TemplateKey{end-par-skip}{skip}{}{\valuefrom{begin-par-skip}}
+% \TemplateKey{beginpenalty}{integer}{}{\cs{@beginparpenalty}}
+% \TemplateKey{endpenalty}{integer}{}{\cs{@endparpenalty}}
+% \TemplateKey{leftmargin}{length}{}{\cs{leftmargin}}
+% \TemplateKey{rightmargin}{length}{}{\cs{rightmargin}}
+% \TemplateKey{parindent}{length}{}{\cs{listparindent}}
+%
+% \TemplateSemantics
+%
+% 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
+% level instead.
+%
+% The names of the keys need further thoughts and some
+% decision. Right now it is a mixture of those with hyphens and
+% those that match legacy register names (the way \pkg{enumitem}
+% did its keys).
+%
+% Also \key{parindent} conflicts with \key{indent-width}!
+%
+% \end{TemplateDescription}
+%
+%
+% \begin{TemplateDescription}{para}{std}
+%
+% \TemplateKey{indent-width}{length}{}{\cs{parindent}}
+% \TemplateKey{start-skip}{skip}{}{0pt}
+% \TemplateKey{left-skip}{skip}{}{0pt}
+% \TemplateKey{right-skip}{skip}{}{0pt}
+% \TemplateKey{end-skip}{skip}{}{\cs{@flushglue}}
+% \TemplateKey{fixed-word-spaces}{boolean}{}{false}
+% \TemplateKey{final-hyphen-demerits}{integer}{}{5000}
+% \TemplateKey{cr-cmd}{tokenlist}{}{\cs{@normalcr}}
+% \TemplateKey{para-class}{tokenlist}{}{justify}
+%
+% \TemplateSemantics
+%
+%
+% \end{TemplateDescription}
+%
+%
+%
+% \begin{TemplateDescription}{list}{std}
+%
+% \TemplateKey{counter}{tokenlist}
+% {Counter name to be used in a numbered list or empty,
+% if the list is unnumbered}{}
+% \TemplateKey{item-label}{tokenlist}
+% {Label \enquote{string} for a fixed label or as
+% generated from the current \key{counter} value}{}
+% \TemplateKey{start}{integer}
+% {Start value for the counter if the list is numbered,
+% otherwise irrelevant}{1}
+% \TemplateKey{resume}{boolean}
+% {Should a numbered list be resumed from the last instance?}{false}
+% \TemplateKey{item-instance}{instance}
+% {Instance of type \texttt{item} to be used to format
+% the label string}{basic}
+% \TemplateKey{item-skip}{skip}{The space in front of an item in the
+% list.\fmi{May need to be on a different template level}}{\cs{itemsep}}
+% \TemplateKey{item-indent}{length}{Horizontal displacement of the item.}{0pt}
+% \TemplateKey{item-penalty}{integer}
+% {Penalty for breaking before an
+% item (except the first)}{\cs{@itempenalty}}
+% \TemplateKey{label-width}{length}
+% {Width reserved for the formatted item label}{\cs{labelwidth}}
+% \TemplateKey{label-sep}{length}
+% {Horizontal separation between label and following text}{\cs{labelsep}}
+% \TemplateKey{legacy-support}{boolean}
+% {Is formatting the label via \cs{makelabel} supported?}{false}
+%
+% \TemplateSemantics
+%
+%
+% \end{TemplateDescription}
+%
+%
+% \begin{TemplateDescription}{item}{std}
+%
+% \TemplateKey{counter-label}{function{1}}{\emph{unused}}{\cs{arabic}\{\#1\}}
+% \TemplateKey{counter-ref}{function{1}}{\emph{unused}}{\valuefrom{counter-label}}
+% \TemplateKey{label-ref}{function{1}}{\emph{unused}}{\#1}
+% \TemplateKey{label-autoref}{function{1}}{\emph{unused}}{item~\#1}
+% \TemplateKey{label-format}{function{1}}
+% {Formatting of the label, questionable the way it is used}{\#1}
+% \TemplateKey{label-strut}{boolean}{Add a \cs{strut} to the label?}{false}
+% \TemplateKey{label-align}{choice}
+% {Supported values \texttt{left},\texttt{center},
+% \texttt{right}, and \texttt{parleft}. \emph{Only partly implemented}}{right}
+% \TemplateKey{label-boxed}{boolean}
+% {Should the label be boxed?}{true}
+% \TemplateKey{next-line}{boolean}{}{false}
+% \TemplateKey{text-font}{tokenlist}{\emph{unused}}{}
+% \TemplateKey{compatibility}{boolean}{}{true}
+%
+% \TemplateSemantics
+%
+% This template is only rudimentary implemented at the moment. It
+% probably needs other keys and the existing ones need a proper
+% implementation.
+%
+% \end{TemplateDescription}
+%
+%
+% \section{Tagging support}
+%
+% \subsection{Paragraph tags}
+%
+% Paragraphs in \LaTeX{} can be nested, e.g., you can have a paragraph
+% containing a display quote, which in turn consists of more than one
+% (sub)paragraph, followed by some more text which all belongs to the
+% same outer paragraph.
+%
+% In the PDF model and in the HTML model that is not supported --- a
+% limitation that conflicts with real live, given that such
+% constructs are quite normal in spoken and written language.
+%
+% The approach we take to resolve this is to model such \enquote{big}
+% paragraphs with a structure named \struct{text-unit} and use \struct{text} (rollmapped to \struct{P})
+% only for (portions of) the actual paragraph text in a way that the
+% \struct{text}s are not nested. As a result we have for a simple
+% paragraph the structures
+% \begin{tabbing}
+% \hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\= \kill
+% \> \struct{text-unit}\\
+% \>\> \struct{text}\\
+% \>\>\> The paragraph text \ldots\\
+% \>\> \struct{/text}\\
+% \> \struct{/text-unit}
+% \end{tabbing}
+% The \struct{text-unit} structure is rollmapped to \struct{Part} or possibly to
+% \struct{Div} so we get a valid PDF, but processors who care can identify
+% the complete paragraphs by looking for \struct{text-unit} tags.
+%
+% In the case of an element, such as a display quote or a display list
+% inside the paragraph, we then have
+% \begin{tabbing}
+% \hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\= \kill
+% \> \struct{text-unit}\\
+% \>\> \struct{text}\\
+% \>\>\> 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\\
+% \>\> \struct{/display element structure}\\
+% \>\> \struct{text}\\
+% \>\>\> \ldots{} continuing the outer paragraph text\\
+% \>\> \struct{/text}\\
+% \> \struct{/text-unit}
+% \end{tabbing}
+% In other words such a display block is always embedded in a
+% \struct{text-unit} structure, possibly preceded by a \struct{text}\ldots\struct{/text} block
+% and possibly followed by one, though both such blocks are optional.
+%
+% Thus an \env{itemize} environment that has some introductory text
+% but no text immediately following the list
+% would be tagged as follows:
+% \begin{tabbing}
+% \hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\= \kill
+% \> \struct{text-unit}\\
+% \>\> \struct{text}\\
+% \>\>\> The intro text for the \env{itemize} environment \ldots\\
+% \>\> \struct{/text}\\
+% \>\> \struct{itemize}\\
+% \>\>\> \struct{LI}\\
+% \>\>\>\> \struct{Lbl} label \struct{/Lbl}\\
+% \>\>\>\> \struct{LBody}\\
+% \>\>\>\>\> The text of the first item involving \struct{text-unit} as necessary \ldots\\
+% \>\>\>\> \struct{/LBody}\\
+% \>\>\> \struct{/LI}\\
+% \>\>\> \struct{LI}\\
+% \>\>\>\> The second item \ldots{}\\
+% \>\>\> \struct{/LI}\\
+% \>\>\> \ldots{} further items \ldots\\
+% \>\> \struct{/itemize}\\
+% \> \struct{/text-unit}
+% \end{tabbing}
+% The \struct{itemize} is rollmapped to \struct{L}.
+%
+% For some display blocks, such as centered text, we use a simpler
+% strategy. Such blocks still ensure that they are inside a \struct{text-unit}
+% structure but their body uses simple \struct{text} blocks and not
+% \struct{text-unit}\struct{text} inside, e.g., the input
+% \begin{verbatim}
+% This is a paragraph with some
+% \begin{center}
+% centered lines
+%
+% with a paragraph break between them
+% \end{center}
+% followed by some more text.
+% \end{verbatim}
+% will be tagged as follows:
+% \begin{tabbing}
+% \hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\=\hspace*{1em}\= \kill
+% \> \struct{text-unit}\\
+% \>\> \struct{text}\\
+% \>\>\> This is a paragraph with some\\
+% \>\> \struct{/text}\\
+% \>\> \struct{text /O /Layout /TextAlign/Center}\\
+% \>\>\> centered lines\\
+% \>\> \struct{/text}\\
+% \>\> \struct{text /O /Layout /TextAlign/Center}\\
+% \>\>\> with a paragraph break between them\\
+% \>\> \struct{/text}\\
+% \>\> \struct{text}\\
+% \>\>\> followed by some more text.\\
+% \> \struct{/text-unit}
+% \end{tabbing}
+%
+%
+% \subsection{Tagging recipes}
+%
+% There are a number of different tagging recipes that implement
+% different tagging approaches. They are selected through the
+% \key{tagging-recipe} of the \xt{blockenv} template. Currently the
+% following values are implemented:
+% \begin{description}
+% \item[\texttt{basic}]
+% This recipe does the following:
+% \begin{itemize}
+% \item
+% Ensure that the \xt{blockenv} is inside a \struct{text-unit}
+% structure, if necessary, start one.
+% \item
+% If inside a \struct{text-unit}\struct{text}, then close the \struct{/text} but
+% leave the \struct{text-unit} open.
+%
+% \item
+% Text inside the body of the environment starts with
+% \struct{text-unit}\struct{text} if \key{para-flattened} is set to \texttt{false},
+% otherwise just with \struct{text}.
+%
+% \item
+% At the end of the environment close \struct{/text} and possibly an
+% inner \struct{/text-unit} if open.
+%
+% \item
+% Then look if the environment is followed by an empty line
+% (\cs{par}). If so, close the outer \struct{/text-unit} and start any
+% following text with \struct{text-unit}\struct{text}. Otherwise,
+% don't and following text restarts with a just a \struct{text} (and no
+% paragraph indentation)
+% \end{itemize}
+%
+%
+% \item[\texttt{standard}]
+% This recipe is like the \texttt{basic} one as far as handling
+% \struct{text-unit} and \struct{text} is concerned. In addition
+% \begin{itemize}
+% \item
+% it starts an inner tagging structure (i.e., which is therefore a
+% child of the outer \struct{text-unit}).
+% \item
+% By default this structure is a \struct{Figure} unless overwritten
+% by the key \key{tag-name}. If that key is used, a suitable
+% rollmap needs to be provided for the name given.
+% \item
+% At the end of the environment that inner structure is closed
+% again so that we are back on the \struct{text-unit} level from the outside.
+% \item
+% Then the lookahead for an empty line is done as described previously.
+% \end{itemize}
+%
+%
+%
+% \item[\texttt{list}]
+% This recipe is like the \texttt{standard} one except that
+% \begin{itemize}
+% \item
+% the inner structure is a list (\struct{L}).
+% \item
+% Furthermore everything is set up so that we have list items
+% (\struct{LI}) with suitable substructures (\struct{Lbl} for the item
+% labels and \struct{LBody} for the item bodies).
+% \item
+% If the key \key{tag-name} is specified, this is used as the tag
+% name for the whole list instead of \struct{L}. Of course, it
+% should then have a suitable rollmap.
+% \item
+% If the key \key{tag-class} is specified then this is used as the
+% class attribute. Again, this requires a suitable setup on the outside.
+% \item
+% At the end of the environment the \struct{/LBody}, \struct{/LI}, and
+% \struct{/L} (or the tag name used) are closed.
+% \item
+% Then the lookahead for an empty line is done as described previously.
+% \end{itemize}
+%
+%
+% \end{description}
+%
+%
+%
+%
+%
+%
+% \end{documentation}
+%
+% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
+%
+%
+%
+% \begin{implementation}
+%
+% \section{The Implementation}
+%
+%
+% \begin{macrocode}
+%<*package>
+%<@@=block>
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\ProvidesPackage {latex-lab-testphase-block-tagging}
+ [\ltblocksdate\space \ltblocksversion\space
+ blockenv implementation]
+% \end{macrocode}
+%
+% We make use of templates:
+% \begin{macrocode}
+\RequirePackage{xtemplate}
+% \end{macrocode}
+% Generell kernel changes, also loaded by the sec and toc code.
+% \begin{macrocode}
+\RequirePackage{latex-lab-kernel-changes}
+% \end{macrocode}
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \ufi{this variable(s) must be declared:}
+% \begin{macrocode}
+\tl_new:N \l_@@_item_align_tl
+\tl_new:N\l_@@_legacy_env_params_tl
+% \end{macrocode}
+
+% \subsection{Handling \cs{par} after the end of the list}
+%
+% An empty line (or a \cs{par}) after a list has semantic meaning as
+% it defines whether then following text is logically within the same
+% paragraph as the list (no empty line) or whether it starts a new
+% paragraph and the paragraph containing the list ends at the end of
+% the list (empty line after the list).
+% This is handled by \LaTeX{} using a legacy flag called
+% \texttt{@endpe} and set of commands inside the
+% generic \cs{end} (calling \cs{@doendpe}) and as part of the list
+% environments identifying themselves as \enquote{paragraph ending
+% environments} (by setting this flag).
+%
+% For the reimplementation of the list environments including support
+% of tagging we need to augment that mechanism slightly and add some
+% kernel hook(s) to add the tagging code if needed.
+%
+%
+%
+%
+% \begin{macro}{\@doendpe}
+% The original \LaTeXe{} command is augmented to allow for tagging.
+% \begin{macrocode}
+\def\@doendpe{\@endpetrue
+ \def\par
+ {
+ \@restorepar
+ \clubpenalty\@clubpenalty
+% \end{macrocode}
+% At this point we add the tagging code that closes an open
+% \struct{text-unit}, \struct{text} tag combination,
+% if necessary:
+% \begin{macrocode}
+ \__kernel_displayblock_doendpe:
+% \end{macrocode}
+%
+% The standard \cs{par} command (\cs{par_end:}) acts on
+% \texttt{@endpe} and attempts to close a still open \texttt{text-unit}
+% and this would be wrong if it was already closed above. So we
+% have to reset the switch to false first.
+% \begin{macrocode}
+ \@endpefalse
+ \everypar{}
+ \par
+ }
+ \everypar{{\setbox\z@\lastbox}
+ \everypar{}
+ \@endpefalse
+ }
+}
+% \end{macrocode}
+%
+% By default we don't do any tagging:
+% \begin{macrocode}
+\cs_new_eq:NN \__kernel_displayblock_doendpe: \prg_do_nothing:
+% \end{macrocode}
+% 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\@endpefalse{\global\let\if@endpe\iffalse}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Object and template interfaces}
+%
+%
+% \begin{objecttype}{blockenv, block, para, list, item}
+% All object types expect a single
+% key--value argument used to tweak template parameters specific to a
+% given use in the document. This section is devoted to template
+% interfaces, and the template code is covered later.
+% \begin{macrocode}
+\DeclareObjectType{blockenv}{1}
+\DeclareObjectType{block}{1}
+\DeclareObjectType{para}{1}
+\DeclareObjectType{list}{1}
+\DeclareObjectType{item}{1}
+% \end{macrocode}
+% \end{objecttype}
+%
+%
+%
+% \begin{template}{blockenv display}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface{blockenv}{display}{1}
+{
+ env-name : tokenlist ,
+ tag-name : tokenlist ,
+ tag-class : tokenlist ,
+ tagging-recipe : tokenlist = standard,
+ level-increase : boolean = true ,
+ setup-code : tokenlist ,
+ block-instance : tokenlist = displayblock ,
+ para-instance : tokenlist ,
+ inner-level-counter : tokenlist,
+ max-inner-levels : tokenlist = 4,
+ inner-instance-type : tokenlist = list ,
+ inner-instance : tokenlist ,
+ para-flattened : boolean = false ,
+ final-code : tokenlist = \ignorespaces ,
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+% \begin{template}{block display}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface{block}{display}{1}
+{
+ heading : tokenlist = , %??
+ beginsep : skip = \topsep ,
+ begin-par-skip : skip = \partopsep ,
+ par-skip : skip = \parsep ,
+ end-skip : skip = \KeyValue{beginsep} , % conflict with name below
+ end-par-skip : skip = \KeyValue{begin-par-skip} ,
+ beginpenalty : integer = \UseName{@beginparpenalty} ,
+ endpenalty : integer = \UseName{@endparpenalty} ,
+ leftmargin : length = \leftmargin ,
+ rightmargin : length = \rightmargin ,
+ parindent : length = \listparindent ,
+% font : tokenlist % maybe add? (or more general for fonts and color)
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+% \begin{template}{para std}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface{para}{std}{1}
+{
+ indent-width : length = \parindent ,
+ start-skip : skip = 0pt ,
+ left-skip : skip = 0pt ,
+ right-skip : skip = 0pt ,
+ end-skip : skip = \@flushglue ,
+ fixed-word-spaces : boolean = false ,
+ final-hyphen-demerits : integer = 5000 ,
+ cr-cmd : tokenlist = \@normalcr ,
+ para-class : tokenlist = justify ,
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+% \begin{template}{list std}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface{list}{std}{1} % optional
+{
+ counter : tokenlist = ,
+ item-label : tokenlist = ,
+ start : integer = 1 ,
+ resume : boolean = false ,
+ item-instance : instance{item} = basic ,
+ item-skip : skip = \itemsep ,
+ item-penalty : integer = \UseName{@itempenalty} ,
+ item-indent : length = 0pt , % was \itemindent
+ label-width : length = \labelwidth ,
+ label-sep : length = \labelsep ,
+ legacy-support : boolean = false ,
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+% \begin{template}{item std}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface{item}{std}{1}
+ {
+ counter-label : function{1} = \arabic{#1} ,
+ counter-ref : function{1} = \KeyValue{counter-label} ,
+ label-ref : function{1} = #1 ,
+ label-autoref : function{1} = item~#1 ,
+ label-format : function{1} = #1 ,
+ label-strut : boolean = false ,
+ label-align : choice {left,center,right,parleft} = right ,
+ label-boxed : boolean = true ,
+ next-line : boolean = false ,
+ text-font : tokenlist ,
+ compatibility : boolean = true ,
+ }
+% \end{macrocode}
+% \end{template}
+%
+%
+%
+%
+%
+%
+% \subsection{Useful helper commands}
+%
+% This section collects \pkg{expl3} commands that will be useful.
+%
+% \begin{macro}{\@@_skip_set_to_last:N,\@@_skip_remove_last:}
+% Set a skiip register to the value of an immediately preceding
+% skip or zero if there was none
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_skip_set_to_last:N #1 {
+ \skip_set:Nn #1 { \tex_lastskip:D }
+}
+% \end{macrocode}
+% Remove a skip previous skip if it is directly in front (not
+% allowed in unrestricted vertical mode).
+% \begin{macrocode}
+\cs_new_eq:NN \@@_skip_remove_last: \tex_unskip:D
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tl_if_novalue:nTF}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_if_novalue:nTF { o }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tag_if_active:T}
+% If tagging support is not loaded then we shouldn't try to execute
+% any tagging related commands. Eventually this can go once the
+% basic support is available in the kernel.
+% \fmi{can vanish one day}
+% \begin{macrocode}
+\cs_if_exist:NF \tag_if_active:T
+ { \cs_new_eq:NN \tag_if_active:T \use_none:n }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Debugging}
+%
+%
+% \begin{variable}{\g_@@_debug_bool}
+%
+% \begin{macrocode}
+\bool_new:N \g_@@_debug_bool
+% \end{macrocode}
+% \end{variable}
+%
+%
+% \begin{macro}{\@@_debug:n,\@@_debug_typeout:n}
+%
+% \begin{macrocode}
+\cs_new_eq:NN \@@_debug:n \use_none:n
+\cs_new_eq:NN \@@_debug_typeout:n \use_none:n
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\block_debug_on:,\block_debug_off:,
+% \@@_debug_gset:}
+% \begin{macrocode}
+\cs_new_protected:Npn \block_debug_on:
+ {
+ \bool_gset_true:N \g_@@_debug_bool
+ \@@_debug_gset:
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \block_debug_off:
+ {
+ \bool_gset_false:N \g_@@_debug_bool
+ \@@_debug_gset:
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_debug_gset:
+ {
+ \cs_gset_protected:Npx \@@_debug:n ##1
+ { \bool_if:NT \g_@@_debug_bool {##1} }
+ \cs_gset_protected:Npx \@@_debug_typeout:n ##1
+ { \bool_if:NT \g_@@_debug_bool { \typeout{==>~ ##1} } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DebugBlocksOn,\DebugBlocksOff}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \DebugBlocksOn { \block_debug_on: }
+\cs_new_protected:Npn \DebugBlocksOff { \block_debug_off: }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DebugBlocksOff
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Implementation of the document-level block environments}
+%
+% Most such environments are pretty simple: they take an option
+% argument and call a \texttt{blockenv} instance to do the work. At
+% the end of environment we call \cs{endblockenv} to finish.
+%
+%
+% \subsubsection{Displayblock environments}
+%
+%
+% There are two basic block environment which are similar to
+% \LaTeXe{}'s \env{trivlist} except that there aren't degenerated
+% lists and thus have no hidden \cs{item} inside.
+%
+%
+% \begin{environment}{displayblock}
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{displayblock}{ !O{} }
+ { \UseInstance{blockenv}{displayblock} {#1} }
+ { \endblockenv }
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+%
+% \begin{environment}{displayblockflattened}
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{displayblockflattened}{ !O{} }
+ { \UseInstance{blockenv}{displayblockflattened} {#1} }
+ { \endblockenv }
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+%
+%
+%
+%
+%
+% \begin{environment}{center,flushleft,flushright}
+%
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{center} { !O{} }
+ { \UseInstance{blockenv}{center}{#1} }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{flushright} { !O{} }
+ { \UseInstance{blockenv}{flushright}{#1} }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{flushleft} { !O{} }
+ { \UseInstance{blockenv}{flushleft}{#1} }
+ { \endblockenv }
+}
+% \end{macrocode}
+%
+%
+% \end{environment}
+%
+%
+%
+%
+% \subsubsection{Display quote environments}
+%
+%
+% \begin{environment}{quote,quotation}
+%
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{quote}{ !O{} }
+ { \UseInstance{blockenv}{quote} {#1} }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{quotation}{ !O{} }
+ { \UseInstance{blockenv}{quotation} {#1} }
+ { \endblockenv }
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+%
+%
+%
+% \subsubsection{Verbatim environments}
+%
+%
+% \begin{environment}{verbatim,verbatim*}
+%
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{verbatim}{ !O{} }
+ { \UseInstance{blockenv}{verbatim} {#1}
+ \@xverbatim
+ }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{verbatim*}{ !O{} }
+ { \UseInstance{blockenv}{verbatim} {#1}
+ \@setupverbvisiblespace\frenchspacing\@vobeyspaces
+ \@sxverbatim
+ }
+ { \endblockenv }
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \paragraph{Helper commands for verbatim}
+%
+%
+% \begin{macro}{\legacyverbatimsetup}
+%
+% \begin{macrocode}
+%<@@=>
+\def\legacyverbatimsetup{%
+ \language\l@nohyphenation
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \let\do\@makeother \dospecials
+ \obeylines \verbatim@font \@noligs
+ \everypar \expandafter{\the\everypar \unpenalty}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \tl_set:Nn \l__tag_para_main_tag_tl {codeline}
+ \tagtool{paratag=Code}% oder faster: \tl_set:Nn\l__tag_para_tag_tl{Code}
+ \@setupverbinvisiblespace
+ \frenchspacing \@vobeyspaces
+}
+%<@@=block>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setupverbinvisiblespace}
+% In the \pdfTeX{} engine we need to use \cs{pdffakespace} chars
+% for the invisible spaces.
+% \begin{macrocode}
+\newcommand\@setupverbinvisiblespace{}
+\tag_if_active:T {
+ \bool_if:NF\g__tag_mode_lua_bool
+ {
+ \renewcommand\@setupverbinvisiblespace{\def\@xobeysp{\nobreakspace\pdffakespace}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{Standard list environments}
+%
+%
+% \begin{environment}{itemize,enumerate,description}
+%
+% For the standard lists everything is managed by the blockenv instance.
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{itemize}{!O{}}
+ { \UseInstance{blockenv}{itemize} {#1} }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{enumerate}{!O{}}
+ { \UseInstance{blockenv}{enumerate} {#1} }
+ { \endblockenv }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \RenewDocumentEnvironment{description}{!O{}}
+ { \UseInstance{blockenv}{description} {#1} }
+ { \endblockenv }
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+%
+%
+%
+% \begin{environment}{list}
+%
+% The legacy 2e list environment is more complicated as we have to get the
+% extra arguments accounted for.
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{list}{O{} m m }
+ {
+% \end{macrocode}
+% We do this by storing them away and then call the list
+% instance. Inside this instance the \texttt{setup-code} key
+% contains \cs{legacylistsetupcode}, which makes use of the stored values.
+% \begin{macrocode}
+ \tl_set:Nn \@itemlabel {#2}
+ \tl_set:Nn \l_@@_legacy_env_params_tl {#3}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \UseInstance{blockenv}{list} {#1}
+ }
+ { \endblockenv }
+}
+% \end{macrocode}
+%
+% Again something that should probably elsewhere: the rolemapping.
+% \begin{macrocode}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=list,role=L}}
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \begin{variable}{\l_@@_env_params_tl}
+% Declare the variable for the parameter argument; \cs{@itemlabel}
+% is already declared in \LaTeXe{}.
+% \begin{macrocode}
+\tl_new:N \l_@@_env_params_tl
+% \end{macrocode}
+% \end{variable}
+%
+%
+% \begin{macro}{\legacylistsetupcode}
+%
+% And here is the extra code for use in the list instance setup
+% inside the key \texttt{setup-code}.
+% \begin{macrocode}
+\cs_new:Npn \legacylistsetupcode {
+% \end{macrocode}
+% Reset values to defaults:
+% \begin{macrocode}
+ \dim_zero:N \listparindent
+ \dim_zero:N \rightmargin
+ \dim_zero:N \itemindent
+% \end{macrocode}
+%
+% By default a \env{list} environment is not numbered:
+% \begin{macrocode}
+ \tl_set:Nn \@listctr {}
+ \legacy_if_set_false:n { @nmbrlist } % needed if lists are nested
+% \end{macrocode}
+% By default there is a simple definition for \cs{makelabel}. It can be
+% overwritten in the second mandatory argument to the list
+% environment (stored in \cs{l_@@_legacy_env_params_tl}) and
+% is used if the instance sets the compatibility key to true.
+% \begin{macrocode}
+ \let\makelabel\@mklab % TODO: customize
+% \end{macrocode}
+% Now we use the argument with parameter settings to update some or
+% all of the above defaults:
+% \begin{macrocode}
+ \l_@@_legacy_env_params_tl
+% \end{macrocode}
+% As we don't know much about this list we can only make a guess about
+% the nature of the list and the setting of the tag name (default
+% \texttt{list} rolemapped to \texttt{L}) and any tag attributes
+% may have to be overwritten in the optional key/value argument. But we do have some hints to play with.
+% \begin{macrocode}
+ \legacy_if:nTF { @nmbrlist }
+ { \tl_set:Nn \l__tag_L_attr_class_tl {enumerate} } % numbered list
+ { \tl_if_empty:NTF \@itemlabel
+ { \tl_set:Nn \l__tag_L_attr_class_tl {list} } % no label
+ { \tl_set:Nn \l__tag_L_attr_class_tl {itemize} } % unnumbered, unordered
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{environment}{trivlist}
+%
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentEnvironment{trivlist}{ !O{} }
+ { \list[#1]{}
+ {
+ \dim_zero:N \leftmargin
+ \dim_zero:N \labelwidth
+ \cs_set_eq:NN \makelabel \use:n
+ }
+ }
+ { \endblockenv }
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsubsection{Theorem-like environments}
+%
+% Theorem-like environments are defined in \LaTeX{} with the help of
+% \cs{newtheorem} declarations. Internally they use a list with a
+% single item. For now we keep this approach and only add appropriate
+% tagging support wihtin the internal commands.
+%
+%
+% \begin{macro}{\@begintheorem,\@opargbegintheorem}
+%
+% We use \struct{theorem-like} as the structure name and rollmap it
+% to a list (\struct{L}).
+% \begin{macrocode}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=theorem-like,role=L}}
+}
+% \end{macrocode}
+%
+% With that done, we only have to tell the \env{trivlist} what
+% \key{tag-name} it should use.
+% \begin{macrocode}
+\def\@begintheorem#1#2{\trivlist[tag-name=theorem-like]%
+ \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@opargbegintheorem#1#2#3{\trivlist[tag-name=theorem-like]
+ \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% \subsection{Implementation of templates}
+%
+%
+% \subsubsection{Implementation of blockenv templates \ldots}
+%
+%
+%
+% \begin{macro}{\g_block_nesting_depth_int}
+% \LaTeXe{} already has a counter to record the nesting depth of
+% blocks, but we want our own name because it isn't really tied to
+% \enquote{lists} any more. However, \cs{@listdepth} is really part
+% of the legacy interface (for example \env{minipage} alters it to
+% point to a different counter) so that we are stuck with using at
+% least indirectly for now and the following line makes this look
+% like an L3 integer variable but internally expands to \cs{@listdepth}:
+% \begin{macrocode}
+\cs_new:Npn \g_block_nesting_depth_int { \@listdepth } % a fake int
+ % for now
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{template}{blockenv display}
+%
+% \begin{macrocode}
+\DeclareTemplateCode{blockenv}{display}{1}
+{
+ env-name = \l_@@_env_name_tl ,
+ tag-name = \l_@@_tag_name_tl ,
+ tag-class = \l_@@_tag_class_tl ,
+ tagging-recipe = \l_@@_tagging_recipe_tl ,
+ level-increase = \l_@@_level_incr_bool ,
+ setup-code = \l_@@_setup_code_tl ,
+ block-instance = \l_@@_block_instance_tl ,
+ para-instance = \l_@@_para_instance_tl ,
+ inner-level-counter = \l_@@_inner_level_counter_tl ,
+ max-inner-levels = \l_@@_max_inner_levels_tl ,
+ inner-instance-type = \l_@@_inner_instance_type_tl ,
+ inner-instance = \l_@@_inner_instance_tl ,
+ para-flattened = \l__tag_para_flattened_bool ,
+ final-code = \l_@@_final_code_tl ,
+}
+{
+ \@@_debug_typeout:n{\l_@@_env_name_tl -env-start}
+%
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{blockenv}{display}{#1} }
+%
+% \end{macrocode}
+% We need to know later if we haved nested blockenvs inside
+% a flattened environment. Whenever we start a new blockenv we
+% increment \cs{\l_@@_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
+% and \texttt{1} means this is the first blockenv requesting
+% flattening. In either case we have to make sure that the blockenv
+% 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_incr:N \l_@@_flattened_level_int
+ }
+ {
+ \bool_if:NT \l__tag_para_flattened_bool
+ {
+ \int_incr:N \l_@@_flattened_level_int
+ }
+ }
+%
+ \tl_if_empty:NF \l_@@_inner_level_counter_tl
+ {
+ \int_compare:nNnTF \l_@@_inner_level_counter_tl >
+ { \l_@@_max_inner_levels_tl - 1 }
+ { \@toodeep }
+ { \int_incr:N \l_@@_inner_level_counter_tl } % not clean "o"?
+ }
+% \end{macrocode}
+% Legacy defaults are only roped in if the list level changes. For
+% display blocks that remain on the same level the current values
+% are kept.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_level_incr_bool
+ {
+ \int_compare:nNnTF \g_block_nesting_depth_int >
+ { \c@maxblocklevels - 1 }
+ { \@toodeep }
+ {
+ \int_gincr:N \g_block_nesting_depth_int
+% \end{macrocode}
+% If there are no legacy defaults for that level then the next line
+% does nothing, i.e., the current values (from the last level
+% become the defaults for the next.
+% \begin{macrocode}
+ \use:c { @list \int_to_roman:n { \g_block_nesting_depth_int } }
+ }
+ }
+% \end{macrocode}
+% If we are doing tagging we load one of the available recipes for
+% tagging, which alters various kernel hooks to add appropriate
+% tagging structures.
+% \begin{macrocode}
+ \tag_if_active:T { \use:c { @@_recipe_ \l_@@_tagging_recipe_tl : } }
+% \end{macrocode}
+% Then run the setup code if any is given in the instance.
+% \begin{macrocode}
+ \l_@@_setup_code_tl
+% \end{macrocode}
+% Next call a block instance at the appropriate level passing it
+% any key/value list provided in the optional argument (keys that
+% are not recognized are ignored---currently with an
+% error).
+% \begin{macrocode}
+ \@@_debug_typeout:n{use~ instance:~
+ \l_@@_block_instance_tl - \int_use:N \g_block_nesting_depth_int }
+ \UseInstance{block}
+ { \l_@@_block_instance_tl - \int_use:N
+ \g_block_nesting_depth_int }
+ {#1}
+% \end{macrocode}
+% After the block instance call the para and then inner (list)
+% instance if either or both are
+% specified (which may not be the case).
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_para_instance_tl
+ {
+ \@@_debug_typeout:n{use~ para~ instance:~ \l_@@_para_instance_tl }
+% \end{macrocode}
+% For now we don't offer to alter instance parameters here so we
+% pass an empty argument.
+% \begin{macrocode}
+ \UseInstance{para}{ \l_@@_para_instance_tl } {}
+ }
+% \end{macrocode}
+% In the inner instance may have its own levels or none depending
+% on which the instance name differs. Again we pass it the optional
+% key/value list.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_inner_instance_tl
+ {
+ \@@_debug_typeout:n{use~ instance:~ \l_@@_inner_instance_tl
+ \tl_if_empty:NF \l_@@_inner_level_counter_tl
+ { - \int_use:N \l_@@_inner_level_counter_tl }}
+ \UseInstance{ \l_@@_inner_instance_type_tl }
+ { \l_@@_inner_instance_tl
+ \tl_if_empty:NF \l_@@_inner_level_counter_tl
+ { - \int_use:N \l_@@_inner_level_counter_tl } % not clean
+ % use "o"?
+ }
+ {#1}
+ }
+% \end{macrocode}
+% We finish off with \cs{l_@@_final_code_tl} which defaults to
+% \cs{ignorespaces} so that spaces between \verb=\begin{...}= and
+% the start of the text are ignored.
+% \begin{macrocode}
+ \l_@@_final_code_tl
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+% \begin{macro}{\l_@@_flattened_level_int}
+% Count the levels of nested blockenvs starting with the first that
+% is \enquote{flattened}.
+% \begin{macrocode}
+\int_new:N \l_@@_flattened_level_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@maxblocklevels}
+% A counter to increase or decrease the number of supported
+% level. If increased, one needs to suply additional level instances.
+% \begin{macrocode}
+\newcounter{maxblocklevels}
+\setcounter{maxblocklevels}{6}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endblockenv}
+% The code executed when a blockenv ends is 99\% the same for all
+% blockenvs (at least up to now). Small differences exist, though. They
+% are accounted for first in the conditionals.
+%
+% We make this a public command so that new block environments can
+% be set up without the need to resort to L3 layer
+% programming.\fmi{name is bad}
+% \begin{macrocode}
+\cs_new:Npn \endblockenv {
+ \@@_debug_typeout:n{blockenv~ common~ ending \on@line}
+% \end{macrocode}
+% If this block was incrementing the level we have to decrement it
+% now again:
+% \begin{macrocode}
+ \bool_if:NT \l_@@_level_incr_bool
+ { \int_gdecr:N \g_block_nesting_depth_int }
+% \end{macrocode}
+% If this block was a list and there are still \cs{item} labels to
+% be placed we move to horizontal mode to get them typeset.
+% \begin{macrocode}
+ \legacy_if:nT { @inlabel }
+ {
+ \mode_leave_vertical:
+ \legacy_if_gset_false:n { @inlabel }
+ }
+% \end{macrocode}
+% In a pure ``displayblock'' scenario \texttt{@newlist} will be
+% always false and the code bypassed, but we may have an outer list
+% followed immediately by a displayblock (with the \cs{item} missing)
+% \begin{macrocode}
+ \legacy_if:nT { @newlist }
+ {
+ \@noitemerr
+ \legacy_if_gset_false:n { @newlist }
+ }
+ \mode_if_horizontal:TF
+ { \@@_skip_remove_last: \@@_skip_remove_last: \par }
+ { \@inmatherr{\end{\@currenvir}} }
+% \end{macrocode}
+% Once we are back in vertical mode we can add the appropriate
+% closing tagging structure(s), if we are doing tagging.
+% \begin{macrocode}
+ \__kernel_displayblock_end:
+% \end{macrocode}
+% What to do in terms of vertical spacing in different situations
+% is still somewhat open to debate, right now this is more or less
+% implementing what \LaTeXe{} list environment have been
+% doing.\fmi{some redesign/extensions here?}
+% \begin{macrocode}
+% \@@_debug_typeout:n{@noparlist =
+% \legacy_if:nTF { @noparlist }{true}{false}}
+ \legacy_if:nF { @noparlist }
+ {
+ \@@_skip_set_to_last:N \l_tmpa_skip
+ \dim_compare:nNnT \l_tmpa_skip > \c_zero_dim
+ {
+ \skip_vertical:n { - \l_tmpa_skip }
+ \skip_vertical:n { \l_tmpa_skip + \parskip - \@outerparskip }
+ }
+ \addpenalty \@endparpenalty
+ \addvspace \l_@@_topsepadd_skip
+% \end{macrocode}
+% \LaTeXe{} triggered the paragraph handling after a list at this
+% point here, i.e., only if the list didn't start a paragraph. One
+% can make a case for that, but it can be somewhat surprising to
+% the user and there is a good argument that even such a list could
+% be followed expanatory text that is part of the same paragraph
+% and doesn't start a new one.\fmi{decide which logic we want to
+% use! If the old logic is used we need to close the text-unit
+% ourselves in the true branch}
+% \begin{macrocode}
+% \legacy_if_gset_true:n { @endpe }
+ }
+% \end{macrocode}
+% So this is for now always done. Probably \cs{l_@@_topsepadd_skip} above
+% should be added only if the paragraph ends here and not if it
+% continues, so this need some further cleanup.\fmi{decide}
+% \begin{macrocode}
+ \legacy_if_gset_true:n { @endpe }
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\__kernel_displayblock_end:}
+% The kernel hook for tagging at the end of the block.
+% \begin{macrocode}
+\cs_new:Npn \__kernel_displayblock_end: {
+ \@@_debug_typeout:n{\detokenize{__kernel_displayblock_end:}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+%
+% \subsubsection{Implementation of para templates \ldots}
+%
+% \begin{template}{para std}
+%
+% \begin{macrocode}
+\DeclareTemplateCode{para}{std}{1}
+{
+ indent-width = \parindent ,
+ start-skip = \l__par_start_skip , % name??
+ left-skip = \leftskip ,
+ right-skip = \rightskip ,
+ end-skip = \parfillskip ,
+ fixed-word-spaces = \l__par_fixed_word_spaces_bool , % name??
+ final-hyphen-demerits = \finalhyphendemerits ,
+ cr-cmd = \\ ,
+ para-class = \l_tag_para_attr_class_tl ,
+}
+{
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{para}{std}{#1} }
+ \skip_set:Nn \@rightskip \rightskip
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+%
+%
+%
+% \subsubsection{Implementation of block templates \ldots}
+%
+%
+%
+%
+%
+% \begin{template}{block display}
+%
+% \begin{macrocode}
+\DeclareTemplateCode{block}{display}{1}
+{
+ heading = \l_@@_heading_tl ,
+ beginsep = \topsep ,
+ begin-par-skip = \partopsep ,
+ par-skip = \parsep ,
+ end-skip = \l_@@_botsep_skip ,
+ end-par-skip = \l_@@_parbotsep_skip ,
+ beginpenalty = \@beginparpenalty ,
+ endpenalty = \@endparpenalty ,
+ rightmargin = \rightmargin ,
+ leftmargin = \leftmargin ,
+ parindent = \listparindent ,
+}
+{
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{block}{display}{#1} }
+% \end{macrocode}
+% \fmi{generalize heading usage (or drop?)}
+% \begin{macrocode}
+ \tl_if_blank:oF \l_@@_heading_tl
+ { \mode_leave_vertical: \textbf{\l_@@_heading_tl} } % TODO customize
+% \end{macrocode}
+% The code largely follows the logic of \LaTeXe{}'s \env{trivlist}
+% implementation as far as it applicable for the \enquote{display
+% block} but coded using the L3 programming layer. However, we keep
+% all the legacy variables (e.g., \texttt{@noskipsec}) if there is
+% some chance that they are set in classes or packages.
+% \begin{macrocode}
+ \legacy_if:nT { @noskipsec } { \mode_leave_vertical: }
+ \skip_set:Nn \l_@@_topsepadd_skip { \topsep }
+ \mode_if_vertical:TF
+ {
+ \skip_add:Nn \l_@@_topsepadd_skip { \partopsep }
+% \end{macrocode}
+% At this point it is safe to add tagging structure(s) so we have
+% a kernel-owned hook here for tagging. This is used to possibly
+% start a paragraph structure (to surround the block, for example,
+% in case of lists) and possibly do some other preparation for
+% tagging the block.
+% \begin{macrocode}
+ \__kernel_displayblock_beginpar_vmode:
+ }
+ {
+% \end{macrocode}
+% If we are in horizontal mode then the displayblock has to return
+% to vertical mode now (after removing any immediately preceding
+% skip or kern. But before we actually issue the\cs{par} we execute
+% a kernel hook in which we can add tagging code. This hook is
+% \enquote{weird} because by default it does nothing, but if
+% tagging is wanted it takes an argument and grabs the following
+% \cs{par} in order to put tagging code before and after the \cs{par}.
+% \begin{macrocode}
+ \@@_skip_remove_last: \@@_skip_remove_last:
+ \__kernel_displayblock_beginpar_hmode:w \par
+ }
+% \end{macrocode}
+% Now we are back to legacy list implementation \ldots
+% \begin{macrocode}
+ \legacy_if:nTF { @inlabel }
+ {
+ \legacy_if_set_true:n { @noparitem }
+ \legacy_if_set_true:n { @noparlist }
+ }
+ {
+ \legacy_if:nT { @newlist } { \@noitemerr }
+ \legacy_if_set_false:n { @noparlist }
+ \skip_set_eq:NN \l_@@_effective_top_skip \l_@@_topsepadd_skip
+ }
+ \skip_add:Nn \l_@@_effective_top_skip { \parskip }
+% \end{macrocode}
+% Next lines set some paragraph defaults, this may get overwritten
+% if there is a \key{para-instance} specified on the \xt{blockenv}.
+% \begin{macrocode}
+ \skip_zero:N \leftskip
+ \skip_set_eq:NN \rightskip \@rightskip
+ \skip_set_eq:NN \parfillskip \@flushglue
+% \end{macrocode}
+% The next lines establish a parshape which is retained across
+% paragraphs be executing \cs{para_end:} within a group and thus
+% reestablishing the parshape for the next paragraph again. In case
+% a list got started \cs{par} is ignored until we have seen an
+% \cs{item} (or we have executed \cs{par} one thousand times.
+% \begin{macrocode}
+ \int_zero:N \par@deathcycles
+ \@setpar
+ {
+ \legacy_if:nTF { @newlist }
+ {
+ \int_incr:N \par@deathcycles
+ \int_compare:nNnTF \par@deathcycles > { 1000 }
+ { \@noitemerr
+ { \para_end: }
+ }
+ }
+ {
+ { \para_end: }
+ }
+ }
+ \skip_set_eq:NN \@outerparskip \parskip
+ \skip_set_eq:NN \parskip \parsep
+ \dim_set_eq:NN \parindent \listparindent
+ \dim_add:Nn \linewidth { - \rightmargin - \leftmargin }
+ \dim_add:Nn \@totalleftmargin { \leftmargin }
+ \tex_parshape:D 1 ~ \@totalleftmargin \linewidth
+% \end{macrocode}
+% This is the point where we are ready to add the tagging structure
+% for the block, e.g., an \verb=<L>=, a \verb=<Figure>= or some
+% other structure.
+% \begin{macrocode}
+ \__kernel_displayblock_begin:
+% \end{macrocode}
+% Finally, we have to output the vertical separation and penalty at
+% the start of the block and make corrections for a change in
+% \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},
+% \texttt{minipage}, and \texttt{@nobreak}.
+% \begin{macrocode}
+ \legacy_if:nTF { @noparitem }
+ {
+ \legacy_if_set_false:n { @noparitem }
+ \hbox_gset:Nn \g_@@_labels_box
+ {
+ \skip_horizontal:n { - \leftmargin }
+ \hbox_unpack_drop:N \g_@@_labels_box
+ \skip_horizontal:n { \leftmargin }
+ }
+% \end{macrocode}
+% \fmi{document 2e logic used here}
+% \begin{macrocode}
+ \legacy_if:nF { @minipage } % Why this chunk of code?
+ {
+ \@@_skip_set_to_last:N \l_@@_tmpa_skip
+ \skip_vertical:n { - \l_@@_tmpa_skip }
+ \skip_vertical:n { \l_@@_tmpa_skip + \@outerparskip - \parskip }
+ }
+ }
+ {
+ \legacy_if:nTF { @nobreak }
+ { \addvspace{\skip_eval:n{\@outerparskip-\parskip}} }
+ {
+ \addpenalty \@beginparpenalty
+ \addvspace \l_@@_effective_top_skip
+ \addvspace{-\parskip}
+ }
+ }
+}
+% \end{macrocode}
+%
+%
+% Extra keys to support enumitem conventions:
+% \begin{macrocode}
+\keys_define:nn { template/block/display }
+{
+ ,topsep .skip_set:N = \topsep
+ ,partopsep .skip_set:N = \partopsep
+ ,listparindent .skip_set:N = \listparindent
+}
+% \end{macrocode}
+% \end{template}
+%
+%
+%
+% \begin{macro}{\__kernel_displayblock_begin:,
+% \__kernel_displayblock_beginpar_hmode:w,
+% \__kernel_displayblock_beginpar_vmode:}
+% The internal kernel hooks for tagging.
+% \begin{macrocode}
+\cs_new:Npn \__kernel_displayblock_begin: {
+ \@@_debug_typeout:n{\detokenize{__kernel_displayblock_begin:}}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \__kernel_displayblock_beginpar_hmode:w {
+ \@@_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_hmode:w}}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \__kernel_displayblock_beginpar_vmode: {
+ \@@_debug_typeout:n{\detokenize{__kernel_displayblock_beginpar_vmode:}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{Implementation of list templates \ldots}
+%
+%
+%
+% \begin{macro}{\@itemlabel,\@listctr}
+% Both \cs{@itemlabel} and \cs{@listctr} from the \LaTeXe{} list
+% implementation are used (or set) by various packages. We
+% therefore use them too, so that these packages have a fighting
+% chance to work with the new tagging-aware implementation for
+% \env{list}.
+% \begin{macrocode}
+\tl_new:N \@itemlabel % should have a top-level definition
+\tl_new:N \@listctr % should have a top-level definition
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+% \begin{template}{list std}
+%
+% This template implements numbered and unnumbered lists and can
+% be combined with display blocks or with inline blocks.
+% \begin{macrocode}
+\DeclareTemplateCode{list}{std}{1}
+{
+ counter = \l_@@_counter_tl,
+ item-label = \l_@@_item_label_tl,
+ start = \l_@@_counter_start_int ,
+ resume = \l_@@_resume_bool ,
+ item-instance = \@@_item_instance:n ,
+ item-skip = \itemsep ,
+% item-par-skip = \parsep ,
+ item-penalty = \@itempenalty ,
+ item-indent = \itemindent ,
+ label-width = \labelwidth ,
+ label-sep = \labelsep ,
+ legacy-support = \l_@@_legacy_support_bool , % FMi questionable
+}
+{
+ \@@_debug_typeout:n{template:list:std}
+%
+ \tl_if_empty:nF {#1} { \SetTemplateKeys{list}{std}{#1} }
+% \end{macrocode}
+% Has this list a counter name defined in the instance?
+% \begin{macrocode}
+ \tl_if_empty:NTF \l_@@_counter_tl
+ {
+% \end{macrocode}
+% If not we check if \cs{@listctr} has a non-empty value to be used
+% for the list counter.
+%
+% We better test for blank not empty in case somebody had defined
+% \cs{@listctr} using \cs{renewcommand} or \cs{cs_set:Npn}.
+% \begin{macrocode}
+ \tl_if_blank:oF \@listctr
+ {
+% \end{macrocode}
+% In that case \texttt{@nmbrlist} should have been set too, for
+% example, through \cs{usecounter}, so we do not set it
+% explicitly. However, we check if we should resume a previous list.
+% \begin{macrocode}
+ \bool_if:NF \l_@@_resume_bool
+ {
+ \int_gset:cn{ c@ \@listctr }
+ { \l_@@_counter_start_int - 1 }
+ }
+ }
+% \end{macrocode}
+% If \cs{@listctr} is not set then we have definitely an unnumbered list.
+% \begin{macrocode}
+ { \@nmbrlistfalse }
+ }
+% \end{macrocode}
+% If a counter is set in the list instance we use that
+% one. This should be the name of a \LaTeX{} counter that is
+% already allocated externally---no runtime check is made for this:
+% if it is not declared one will get \enquote{no such counter}
+% error when the list is used.
+% \begin{macrocode}
+ {
+ \@nmbrlisttrue
+ \tl_set_eq:NN \@listctr \l_@@_counter_tl
+ \bool_if:NF \l_@@_resume_bool
+ {
+ \int_gset:cn{ c@ \@listctr }
+ { \l_@@_counter_start_int - 1 }
+ }
+ }
+% \end{macrocode}
+% Does the current instance has an item label representation? This
+% would be possible whether or not we have a numbered list. If yes,
+% then we use this for \cs{@itemlabel}, otherwise we expect that
+% \cs{@itemlabel} is provided from the outside, e.g., as part of
+% the \env{list} environment argument.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_item_label_tl
+ {
+ \tl_set_eq:NN \@itemlabel \l_@@_item_label_tl
+ }
+% \end{macrocode}
+% finally, we signal that we are at the start of a new list (which
+% effects how the first \cs{item} is handled and how \cs{par}
+% commands are interpreted.
+% \begin{macrocode}
+ \legacy_if_gset_true:n { @newlist }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@@_debug_typeout:n{template:list:std~end}
+}
+% \end{macrocode}
+%
+%
+% Extra keys to support enumitem conventions:
+% \begin{macrocode}
+\keys_define:nn { template/list/std }
+{
+ ,nosep .code:n =
+ \dim_zero:N \itemsep
+ \dim_zero:N \parsep
+ \dim_zero:N \topsep
+ \dim_zero:N \l_@@_botsep_skip
+ \dim_zero:N \l_@@_parbotsep_skip
+ ,midsep .skip_set:N = \topsep
+}
+% \end{macrocode}
+%
+% \end{template}
+%
+%
+% \subsubsection{Implementation of \cs{item} template(s)}
+%
+%
+%
+% \begin{template}{item std}
+% The item template has one hidden key \texttt{label} which is not available on the
+% template for setting because it is only used to receive any
+% optional data passed to the \cs{item} command. We therefore
+% declare it with \cs{keys_define:nn} and ensure that the optional
+% argument data to \cs{item} (if it is not a key/value list
+% already) is passed to this \texttt{label} key.
+% \begin{macrocode}
+\keys_define:nn { template/item/std }
+ { label .tl_set:N = \l_@@_label_given_tl }
+% \end{macrocode}
+%
+% \fmi{alignment is mostly wrong (test short medium and multiline
+% labels)}
+% \begin{macrocode}
+\DeclareTemplateCode{item}{std}{1}
+ {
+ counter-label = \@@_counter_label:n ,
+ counter-ref = \@@_counter_ref:n ,
+% \end{macrocode}
+% \fmi{next set of key not yet used}
+% \begin{macrocode}
+ label-ref = \@@_label_ref:n ,
+ label-autoref = \@@_label_autoref:n ,
+ label-format = \@@_label_format:n ,
+ label-strut = \l_@@_label_strut_bool ,
+ label-boxed = \l_@@_label_boxed_bool ,
+ next-line = \l_@@_next_line_bool ,
+ text-font = \l_@@_text_font_tl ,
+ compatibility = \l_@@_item_compatibility_bool ,
+% \end{macrocode}
+% This probably needs a different implementation (and needs completing)\fmi{complete}
+% \begin{macrocode}
+ label-align = {
+ left = \tl_set:Nn \l_@@_item_align_tl { \relax \hss } ,
+ center = \tl_set:Nn \l_@@_item_align_tl { \hss \hss } ,
+ right = \tl_set:Nn \l_@@_item_align_tl { \hss \relax } ,
+ parleft = \NOT_IMPLEMENTED ,
+ } ,
+ }
+% \end{macrocode}
+% Then typeset the label at its natural width by applying
+% \cs{@@_make_label_box:n} to the label given or to a label constructed
+% from the counter. If it is boxed and reasonably short, add padding to
+% make it at least of size \tn{labelwidth}, then add another layer of
+% box. This way, when we unpack it in \cs{g_@@_labels_box} it correctly
+% remains boxed in those cases. Afterwards, in the \texttt{nextline}
+% case add \tn{newline} if the label did not fit in the allotted space.
+% \begin{macrocode}
+ {
+ \@@_debug_typeout:n{template:item:std}
+% \end{macrocode}
+%
+% First deal with the key--value input, which in particular may
+% provide a value for the label (the usual optional argument of
+% \cs{item}). For this we set \cs{l_@@_label_given_tl} to
+% \cs{c_novalue_tl} so that we can identify if an optional argument
+% was given.
+% \begin{macrocode}
+ \tl_set_eq:NN \l_@@_label_given_tl \c_novalue_tl
+ \tl_if_empty:nF{#1}{ \SetTemplateKeys{item}{std}{#1} }
+% \end{macrocode}
+% If no optional argument was given then \cs{l_@@_label_given_tl}
+% is still equal to \cs{c_novalue_tl} and so we can distinuish
+% that from \verb=\item[]=.
+%
+% \begin{macrocode}
+ \tl_if_novalue:oTF \l_@@_label_given_tl
+ {
+% \end{macrocode}
+% The rest of the code for this template needs work and is both
+% incomplete and partly wrong.\fmi{fix}
+% \begin{macrocode}
+ \tl_if_blank:oF \@listctr { \@kernel@refstepcounter \@listctr }
+ \bool_if:NTF \l_@@_item_compatibility_bool % not sure that conditional
+ % makes sense
+ { \@@_make_label_box:n { \MakeLinkTarget[\@listctr]{}\@itemlabel } } % TODO ?
+ { \@@_make_label_box:n { \MakeLinkTarget[\@listctr]{}\@@_counter_label:n { \@listctr } } }
+ }
+ {
+ \@@_debug_typeout:n{item~ with~ optional}
+ \@@_make_label_box:n { \l_@@_label_given_tl } }
+ \bool_if:nT
+ {
+ \l_@@_label_boxed_bool
+ && \dim_compare_p:n { \box_wd:N \l_@@_one_label_box <= \linewidth } % TODO: is \linewidth correct?
+ }
+ {
+ \dim_compare:nNnT
+ { \box_wd:N \l_@@_one_label_box } < \labelwidth
+ {
+ \hbox_set_to_wd:Nnn \l_@@_one_label_box { \labelwidth }
+ {
+ \exp_after:wN \use_i:nn \l_@@_item_align_tl
+% \end{macrocode}
+% FMi: \LaTeXe{} keeps the label boxed inside (not unboxed). This
+% means that the content stays rigid and does not vary based on
+% glue setting in the line with the label.
+% There are cases where we do want the unboxed version (I think
+% enumitem offers that in some cases too) but it should probably
+% not the default.
+% \begin{macrocode}
+% \hbox_unpack_drop:N \l_@@_one_label_box %TODO: customize?
+ \box_use_drop:N \l_@@_one_label_box
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \exp_after:wN \use_ii:nn \l_@@_item_align_tl
+ }
+ }
+ \hbox_set:Nn \l_@@_one_label_box
+ { \box_use_drop:N \l_@@_one_label_box }
+ }
+ \dim_compare:nNnTF { \box_wd:N \l_@@_one_label_box } > \labelwidth
+ { \bool_set_true:N \l_@@_long_label_bool }
+ { \bool_set_false:N \l_@@_long_label_bool }
+ \hbox_gset:Nn \g_@@_labels_box
+ {
+ \hbox_unpack_drop:N \g_@@_labels_box
+ \skip_horizontal:n { \itemindent - \labelsep - \labelwidth }
+ \hbox_unpack_drop:N \l_@@_one_label_box
+ \skip_horizontal:n { \labelsep }
+ \bool_if:NT \l_@@_next_line_bool
+ { \bool_if:NT \l_@@_long_label_bool { \nobreak \hfil \break } }
+ % version of \newline inside an hbox that will be unpacked
+ }
+ % \skip_set_eq:NN \parsep \l_@@_item_parsep_skip TODO??? FMi
+ % what's that?
+ \dim_set_eq:NN \parindent \listparindent
+% \end{macrocode}
+% Placing the list label(s) is done when the paragraph for the
+% \cs{item} is started, which executes \cs{@@_item_everypar:}
+% inside \hook{para/begin}. By default this command does nothing, now we
+% change it to attach the pending label or labels.
+% \begin{macrocode}
+ \cs_set_eq:NN \@@_item_everypar: \@@_item_everypar_std:
+ }
+% \end{macrocode}
+% \end{template}
+%
+%
+%
+%
+% \begin{variable}{\l_@@_one_label_box, \g_@@_labels_box}
+% Each label is typeset in \cs{l_@@_one_label_box} to be measured.
+% Once this is ready, it is put (boxed or unboxed) in
+% \cs{g_@@_labels_box}, together with any pending labels (for the case
+% where a list begins just after \tn{item}). This is an analogue of
+% \LaTeXe{}'s \tn{@labels}, but it is always unboxed before use, to
+% support both boxed and unboxed labels.
+% \begin{macrocode}
+\box_new:N \l_@@_one_label_box
+\box_new:N \g_@@_labels_box
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_long_label_bool}
+% Track whether the \cs{l_@@_one_label_box} is larger than
+% \tn{labelwidth}.
+% \begin{macrocode}
+\bool_new:N \l_@@_long_label_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_make_label_box:n, \@@_label_format:x}
+% Make one label, wrapped in \cs{@@_label_format:n}, with an
+% appropriate \tn{strut} and possibly \tn{makelabel} in compatibility
+% mode (used for the \env{list} environment).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_label_box:n #1
+ {
+ \hbox_set:Nn \l_@@_one_label_box
+ {
+% \end{macrocode}
+% If we do tagging then the contents of this box may need to be
+% wrapped into a structure, e.g., \verb=<Lbl>=.
+% \begin{macrocode}
+ \__kernel_list_label_begin:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@@_label_format:n
+ {
+ \bool_if:NT \l_@@_label_strut_bool { \strut }
+ \bool_if:NTF \l_@@_legacy_support_bool
+ \makelabel
+ \use:n
+ {#1}
+ }
+% \end{macrocode}
+% And what gets opened also needs closing:
+% \begin{macrocode}
+ \__kernel_list_label_end:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_list_label_begin:,
+% \__kernel_list_label_end:}
+% If we aren't doing tagging the kernel hooks do nothing.
+% \begin{macrocode}
+\cs_new_eq:NN \__kernel_list_label_begin: \prg_do_nothing:
+\cs_new_eq:NN \__kernel_list_label_end: \prg_do_nothing:
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_item_everypar:, \@@_item_everypar_std:}
+% The \cs{@@_item_everypar:} command is executed as part of \hook{para/begin}
+% but most of the time does nothing, i.e., it has the following
+% default definition.
+% \begin{macrocode}
+\cs_new_eq:NN \@@_item_everypar: \prg_do_nothing:
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{para/begin}[lists]{\@@_item_everypar:}
+% \end{macrocode}
+%
+% Note that we have to make sure that the above code is executed
+% after the hook chunk from \texttt{tagpdf} because the latter uses
+% \texttt{@inlabel} to make a decision.
+%
+% By the end of the day both should probably move into the kernel
+% hook instead!
+% \begin{macrocode}
+\DeclareHookRule{para/begin}{lists}{after}{tagpdf}
+% \end{macrocode}
+%
+%
+% What follows is the version that resets various legacy booleans and puts
+% the label box in the right place and finally resets itself to do
+% nothing next time. \cs{@@_item_everypar:} is set to this by the
+% item template so that the next paragraph start runs the code below.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_item_everypar_std: {
+ \@@_debug_typeout:n{item~ everypar \on@line }
+ \legacy_if_set_false:n { @minipage }
+ \legacy_if_gset_false:n { @newlist }
+ \legacy_if:nT { @inlabel }
+ {
+ \legacy_if_gset_false:n { @inlabel }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \box_if_empty:NT \g_para_indent_box { \kern - \itemindent }
+ \para_omit_indent:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \box_use_drop:N \g_@@_labels_box
+% \end{macrocode}
+% After the labels are placed we start a paragraph structure (if
+% appropriate). This is handled in the following kernel hook:
+% \begin{macrocode}
+ \__kernel_list_label_after:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \penalty \c_zero_int
+ }
+ \legacy_if:nTF { @nobreak }
+ {
+ \legacy_if_gset_false:n { @nobreak }
+ \int_set:Nn \clubpenalty { 10000 }
+ }
+ {
+ \int_set_eq:NN \clubpenalty \@clubpenalty
+% \end{macrocode}
+% Once the label(s) are typeset and we are past any special
+% \texttt{@nobreak} handling we reset \cs{@@_item_everypar:} to do
+% nothing.
+% \begin{macrocode}
+ \cs_set_eq:NN \@@_item_everypar: \prg_do_nothing:
+ }
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_list_label_after:}
+%
+% \begin{macrocode}
+\cs_new_eq:NN \__kernel_list_label_after: \prg_do_nothing:
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_tmpa_skip}
+% \begin{macrocode}
+\skip_new:N \l_@@_tmpa_skip
+% \end{macrocode}
+% \end{variable}
+%
+%
+%
+%
+%
+%
+%
+% \begin{variable}{\l_@@_topsepadd_skip, \l_@@_effective_top_skip}
+% Variables equivalent to \LaTeXe{}'s \tn{@topsepadd} and \tn{@topsep}.
+% Roughly equal to a mixture of \texttt{topsep}, \texttt{partopsep},
+% and various \texttt{parskip} at different nesting levels in lists.
+% The code is really elaborate when \texttt{@inlabel} is true.
+% \begin{macrocode}
+\skip_new:N \l_@@_topsepadd_skip
+\skip_new:N \l_@@_effective_top_skip
+% \end{macrocode}
+% \end{variable}
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \begin{macro}{\item}
+% Here we already have all the building blocks. Complain in math
+% mode. Distingusih 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
+% upcoming item: it will be actually inserted only once some later
+% material triggers \tn{everypar}.
+% \begin{macrocode}
+\AddToHook{begindocument/before}{
+ \RenewDocumentCommand{\item}{ ={label}o }
+ {
+ \@inmatherr \item
+% \end{macrocode}
+% TODO: Test for being outside of a list needs updating!
+% \begin{macrocode}
+ \tl_if_empty:oTF \@@_item_instance:n %%FMi?
+ { \msg_error:nnn { @@ } { item-in-nonlist } { \item[{#1}] } }
+ {
+ \legacy_if:nTF { @newlist }
+ { \__kernel_list_item_begin: }
+ { \@@_inter_item: }
+% \end{macrocode}
+% To avoid unnecessary key/val processing we make a quick check if
+% there was an optional argument.
+% \begin{macrocode}
+ \tl_if_novalue:nTF {#1} % avoids reparsing label={}
+ { \@@_item_instance:n { } }
+ { \@@_item_instance:n {#1} }
+% \end{macrocode}
+% Set the legacy switch that signals that we have a pending item label:
+% \begin{macrocode}
+ \legacy_if_gset_true:n { @inlabel }
+ \ignorespaces
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_inter_item:}
+% Between items. If the previous item had no content then we need to
+% trigger \tn{everypar}. Otherwise we simply close the previous item
+% with \tn{par} after removing some horizontal space. Between items,
+% there is a penalty and some space.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_inter_item: {
+ \legacy_if:nT { @inlabel }
+ { \indent \par } % case of \item\item
+% \end{macrocode}
+% \cs{par} may have a strange definition and may not get us back to
+% vertical mode in one go, so we better do not treat the next line
+% as an else case to the above conditional (for now).
+% \begin{macrocode}
+ \mode_if_horizontal:T { \@@_skip_remove_last:
+ \@@_skip_remove_last: \par }
+% \end{macrocode}
+% End any LI-tag, then start the next LI-tag (if doing tagging):
+% \begin{macrocode}
+ \__kernel_list_item_end:
+ \__kernel_list_item_begin:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \addpenalty \@itempenalty
+ \addvspace \itemsep
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_list_item_begin:,
+% \__kernel_list_item_end:}
+%
+% \begin{macrocode}
+\cs_new_eq:NN \__kernel_list_item_begin: \prg_do_nothing:
+\cs_new_eq:NN \__kernel_list_item_end: \prg_do_nothing:
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+%
+%
+% \subsection{Tagging recipes}
+%
+% \begin{macro}{\@@_recipe_basic:}
+% The \texttt{basic} recipe simply ensures that the block is inside
+% a \texttt{text-unit} structure and if necessary starts one. When the
+% block ends and is followed by a blank line the \texttt{text-unit}
+% structure is closed too, otherwise it remains open and further
+% text starts with just a \struct{text} structure.
+%
+% There is otherwise no inner structure so
+% \cs{__kernel_displayblock_begin:} and
+% \cs{__kernel_displayblock_end:} do nothing---blockenvs with inner
+% structure use the \texttt{standard} or \texttt{list} recipe instead.
+% \begin{macrocode}
+\cs_new:Npn \@@_recipe_basic: {
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \@@_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \@@_beginpar_vmode:
+ \let \__kernel_displayblock_begin: \prg_do_nothing:
+ \let \__kernel_displayblock_end: \prg_do_nothing:
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_recipe_standard:}
+% The \texttt{standard} recipe does the following:
+% \begin{itemize}
+% \item surround the block with a \texttt{text-unit}-structure if not already in a
+% a \texttt{text-unit}. In the latter case end the
+% MC and the \struct{text} but leave the \texttt{text-unit} open.
+%
+% If we are producing flattened paragraphs, just close any
+% \struct{text} but do not open a \texttt{text-unit}.
+%
+% \item Then open an new (inner) structure (by default
+% \texttt{Figure} but typically the one specified on the instance).
+% \item At the end of the block close the the inner structure
+% (\texttt{Figure} or explicit one)
+% but leave the \texttt{text-unit} open to be either continued or closed due to a
+% following \cs{par}.
+% \end{itemize}
+% \begin{macrocode}
+\cs_new:Npn \@@_recipe_standard:
+{
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \@@_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \@@_beginpar_vmode:
+ \cs_set_eq:NN \__kernel_displayblock_begin: \@@_inner_begin:
+ \cs_set_eq:NN \__kernel_displayblock_end: \@@_inner_end:
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \tl_if_empty:NTF \l_@@_tag_name_tl
+ { \tl_set:Nn \l_@@_tag_inner_tag_tl {Figure} }
+ { \tl_set_eq:NN \l_@@_tag_inner_tag_tl \l_@@_tag_name_tl }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\l_@@_tag_inner_tag_tl}
+% \begin{macrocode}
+\tl_new:N \l_@@_tag_inner_tag_tl
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_recipe_list:}
+% The \texttt{list} recipe does the following.
+% \begin{itemize}
+% \item It opens a \struct{text-unit}-structure or keeps the current one open (only
+% closing the MC).
+% \item It then starts a new structure rollmapped to L-structure
+% and arranges for handling list items, e.g., Li, Lbl and LBody
+% structures.
+% \item At the end it closes open list structures as needed but
+% keeps the \struct{text-unit}-structure open to continue the paragraph after the
+% list, if necessary.
+% \end{itemize}
+% \begin{macrocode}
+\cs_new:Npn \@@_recipe_list:
+{
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w
+ \@@_beginpar_hmode:N
+ \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode:
+ \@@_beginpar_vmode:
+ \cs_set_eq:NN \__kernel_displayblock_begin: \@@_list_begin:
+ \cs_set_eq:NN \__kernel_displayblock_end: \@@_list_end:
+% \end{macrocode}
+% The next two lines could be done globally, because they are only
+% called if we do have \cs{item}s, i.e., if we are in a list. It is
+% therefore also not necessary to reset them in other recipes
+% (right now---this may change if we get more templates (like
+% inline lists)).
+% \begin{macrocode}
+ \cs_set_eq:NN \__kernel_list_item_begin: \@@_list_item_begin:
+ \cs_set_eq:NN \__kernel_list_item_end: \@@_list_item_end:
+% \end{macrocode}
+% Handle the tag name and attribute classess using the key values
+% from the current list instance.
+% \begin{macrocode}
+ \tl_if_empty:NTF \l_@@_tag_name_tl
+ { \tl_set:Nn \l__tag_L_tag_tl {L} }
+ { \tl_set_eq:NN \l__tag_L_tag_tl \l_@@_tag_name_tl }
+ \tl_if_empty:NTF \l_@@_tag_class_tl
+ { \tl_set:Nn \l__tag_L_attr_class_tl {} }
+ { \tl_set_eq:NN \l__tag_L_attr_class_tl \l_@@_tag_class_tl }
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \subsection{Blockenv instances}
+%
+%
+% \subsubsection{Basic instances}
+%
+% \begin{instance}{blockenv displayblock}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{displayblock}{display}
+{
+ env-name = displayblock,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{blockenv displayblockflattened}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{displayblockflattened}{display}
+{
+ env-name = displayblockflattened,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{blockenv center}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{center}{display}
+{
+ env-name = center,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = center ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \begin{instance}{blockenv flushleft}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{flushleft}{display}
+{
+ env-name = flushleft,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = raggedright ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{blockenv flushright}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{flushright}{display}
+{
+ env-name = flushleft,
+ tag-name = ,
+ tag-class = ,
+ tagging-recipe = basic,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ para-flattened = true ,
+ para-instance = raggedleft ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \subsubsection{Blockquote instances}
+%
+% \begin{instance}{blockenv quotation}
+%
+% \begin{macrocode}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=quote,role=BlockQuote}}
+ \tagpdfsetup{add-new-tag={tag=quotation,role=BlockQuote}}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{quotation}{display}
+{
+ env-name = quotation,
+ tag-name = quotation,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = quotationblock ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{blockenv quote}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{quote}{display}
+{
+ env-name = quote,
+ tag-name = quote,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = quoteblock ,
+ inner-instance = ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+% An alternative setup for quotations, using the displayblock instance and
+% just overwrite a bit in the setup code.\fmi{I guess the setup
+% code is still executed too early, have to check.}
+% This would be less flexible but would ensure visual consistency,
+% because the displayblock settings are used throughout.
+% \begin{macrocode}
+% \DeclareInstance{blockenv}{quotation}{display}
+% {
+% env-name = quotation,
+% tag-name = ,
+% tag-class = ,
+% tagging-recipe = blockquote,
+% inner-level-counter = ,
+% level-increase = true,
+% setup-code = \setlength\rightmargin{\leftmargin}
+% \setlength\parsep{1.5em} ,
+% block-instance = displayblock ,
+% inner-instance = ,
+% }
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \DeclareInstance{blockenv}{quote}{display}
+% {
+% env-name = quote,
+% tag-name = ,
+% tag-class = ,
+% tagging-recipe = blockquote,
+% inner-level-counter = ,
+% level-increase = true,
+% setup-code = \setlength\rightmargin{\leftmargin} ,
+% block-instance = displayblock ,
+% inner-instance = ,
+% }
+% \end{macrocode}
+%
+%
+% \subsubsection{Verbatim instances}
+%
+% \begin{instance}{blockenv verbatim}
+%
+% \begin{macrocode}
+\tag_if_active:T {
+ \tagpdfsetup{add-new-tag={tag=verbatim,role=P}}
+ \tagpdfsetup{add-new-tag={tag=codeline,role=Sub}}
+% \end{macrocode}
+% Possible alternative for PDF 1.7:
+% \begin{macrocode}
+% \tagpdfsetup{add-new-tag={tag=verbatim,role=Div}}
+% \tagpdfsetup{add-new-tag={tag=codeline,role=P}}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{verbatim}{display}
+{
+ env-name = verbatim,
+ tag-name = verbatim,
+ tag-class = ,
+ tagging-recipe = standard,
+ inner-level-counter = ,
+ level-increase = false,
+ setup-code = ,
+ block-instance = displayblock ,
+ inner-instance = ,
+ final-code = \legacyverbatimsetup ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \subsubsection{Standard list instances}
+%
+% \begin{instance}{blockenv itemize}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{itemize}{display}
+{
+ env-name = itemize,
+ tag-name = itemize,
+ tag-class = itemize,
+ tagging-recipe = list,
+ inner-level-counter = \@itemdepth,
+ level-increase = true,
+ max-inner-levels = 4,
+ setup-code = ,
+ block-instance = list ,
+ inner-instance = itemize ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \begin{instance}{blockenv enumerate}
+%
+% \begin{macrocode}
+\DeclareInstance{blockenv}{enumerate}{display}
+{
+ env-name = enumerate,
+ tag-name = enumerate,
+ tag-class = enumerate,
+ tagging-recipe = list,
+ level-increase = true,
+ setup-code = ,
+ block-instance = list ,
+ inner-level-counter = \@enumdepth,
+ max-inner-levels = 4,
+ inner-instance = enum ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \begin{instance}{blockenv description}
+%
+% \begin{macrocode}
+
+\DeclareInstance{blockenv}{description}{display}
+{
+ env-name = description,
+ tag-name = description,
+ tag-class = description,
+ tagging-recipe = list,
+ inner-level-counter = ,
+ level-increase = true,
+ setup-code = ,
+ block-instance = list ,
+ inner-instance = description ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \begin{instance}{blockenv list}
+% The general (legacy) \env{list} environment does some of its
+% setup in the \texttt{setup-code} key.
+% \begin{macrocode}
+\DeclareInstance{blockenv}{list}{display}
+{
+ env-name = list,
+ tag-name = list,
+ tag-class = ,
+ tagging-recipe = list,
+ level-increase = true,
+ setup-code = \legacylistsetupcode ,
+ block-instance = list ,
+ inner-level-counter = ,
+ inner-instance = legacy ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+%
+% \subsection{Block instances}
+%
+% \subsubsection{Displayblock instances}
+%
+% We provide 6 nesting levels (as in \LaTeXe{}). If you want to
+% provide more you need to change the \texttt{maxblocklevels}
+% counter, offer further \texttt{displayblock-xx} instances but
+% also define further (legacy) \cs{list\meta{romannumeral}} commands
+% for the defaults. If not, then the settings from the previous
+% level are reused automatically---which may or may not be good enough).
+% \begin{macrocode}
+\setcounter{maxblocklevels}{6}
+% \end{macrocode}
+%
+% \begin{instance}{block displayblock-0,
+% block displayblock-1,
+% block displayblock-2,
+% block displayblock-3,
+% block displayblock-4,
+% block displayblock-5,
+% block displayblock-6 }
+%
+% Here we need level zero as well in case a flattened displayblock
+% (like the center env) it is used on top-level.
+% \begin{macrocode}
+\DeclareInstance{block}{displayblock-0}{display}
+ {
+ leftmargin = 0pt ,
+ parindent = 0pt ,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstanceCopy{block}{displayblock-1}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-2}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-3}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-4}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-5}{displayblock-0}
+\DeclareInstanceCopy{block}{displayblock-6}{displayblock-0}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \subsubsection{Quote/quotationblock instances}
+%
+% Quote and quotation are not flattened, i.e., they change levels,
+% thus they start with level 1 not 0.
+%
+% \begin{instance}{block quoteblock-1,
+% block quoteblock-2,
+% block quoteblock-3,
+% block quoteblock-4,
+% block quoteblock-5,
+% block quoteblock-6 }
+% Default layout is to indent equaly from both side.
+% \begin{macrocode}
+\DeclareInstance{block}{quoteblock-1}{display}
+ { rightmargin = \KeyValue{leftmargin} }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstanceCopy{block}{quoteblock-2}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-3}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-4}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-5}{quoteblock-1}
+\DeclareInstanceCopy{block}{quoteblock-6}{quoteblock-1}
+% \end{macrocode}
+% \end{instance}
+%
+% \begin{instance}{block quotationblock-1,
+% block quotationblock-2,
+% block quotationblock-3,
+% block quotationblock-4,
+% block quotationblock-5,
+% block quotationblock-6 }
+% Quotation additionally changes the parindent.
+% \begin{macrocode}
+\DeclareInstance{block}{quotationblock-1}{display}
+ { parindent = 1.5em , rightmargin = \KeyValue{leftmargin} }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstanceCopy{block}{quotationblock-2}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-3}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-4}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-5}{quotationblock-1}
+\DeclareInstanceCopy{block}{quotationblock-6}{quotationblock-1}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \subsubsection{Block instances for the standard lists}
+%
+% \begin{instance}{block list-1,
+% block list-2,
+% block list-3,
+% block list-4,
+% block list-5,
+% block list-6 }
+% The block instances for the various list environments use the
+% same underlying instance (well by default) and nothing nothing
+% needs to be set up specifically (because that is already done in
+% the legacy \cs{list\meta{romannumeral}} unless a
+% different layout is wanted.
+% \begin{macrocode}
+\DeclareInstance{block}{list-1}{display}{
+% heading = ,
+% beginsep = \topsep ,
+% begin-par-skip = \partopsep ,
+% par-skip = \parsep ,
+% end-skip = \KeyValue{beginsep} ,
+% end-par-skip = \KeyValue{begin-par-skip} ,
+% beginpenalty = \UseName{@beginparpenalty} ,
+% endpenalty = \UseName{@endparpenalty} ,
+% leftmargin = \leftmargin ,
+% rightmargin = \rightmargin ,
+% parindent = \listparindent ,
+}
+\DeclareInstance{block}{list-2}{display}{}
+\DeclareInstance{block}{list-3}{display}{}
+\DeclareInstance{block}{list-4}{display}{}
+\DeclareInstance{block}{list-5}{display}{}
+\DeclareInstance{block}{list-6}{display}{}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \subsection{List instances for the standard lists}
+%
+% For all list instances we have to say what kind of label we want
+% (\texttt{label-instance}) and how it should beformatted.
+%
+% \begin{instance}{list itemize-1,
+% list itemize-2,
+% list itemize-3,
+% list itemize-4}
+% For \env{itemize} environments this is all we need to do and we
+% refer back to the external definitions rather than defining the
+% \texttt{item-label} code in the instance to ensure that old
+% documents still work.
+%
+% \begin{macrocode}
+\DeclareInstance{list}{itemize-1}{std}{ item-label = \labelitemi }
+\DeclareInstance{list}{itemize-2}{std}{ item-label = \labelitemii }
+\DeclareInstance{list}{itemize-3}{std}{ item-label = \labelitemiii }
+\DeclareInstance{list}{itemize-4}{std}{ item-label = \labelitemiv }
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{list enumerate-1,
+% list enumerate-2,
+% list enumerate-3,
+% list enumerate-4}
+% \env{enumerate} environments are similar, except that we also
+% have to say which counter to use on every level.
+% \begin{macrocode}
+\DeclareInstance{list}{enum-1}{std}
+ { item-label = \labelenumi , counter = enumi }
+\DeclareInstance{list}{enum-2}{std}
+ { item-label = \labelenumii , counter = enumii }
+\DeclareInstance{list}{enum-3}{std}
+ { item-label = \labelenumiii , counter = enumiii }
+\DeclareInstance{list}{enum-4}{std}
+ { item-label = \labelenumiv , counter = enumiv }
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \begin{instance}{list legacy}
+% For the legacy \env{list} environment there is only one instance
+% which is reused on all levels. This is done this way one because
+% the legacy \env{list} environment sets all its
+% parameters through its arguments. So this instances shouldn't
+% really be touched. It sets the \texttt{legacy-support} key to
+% true, which means that the list code uses \cs{makelabel} for
+% formatting the label
+% \begin{macrocode}
+\DeclareInstance{list}{legacy}{std} {
+ item-instance = basic ,
+ legacy-support = true ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \begin{instance}{list description}
+% The \env{description} lists also use only a single list instance
+% with only one key not using the default:
+% \begin{macrocode}
+\DeclareInstance{list}{description}{std} { item-instance = description }
+% \end{macrocode}
+% \end{instance}
+%
+%
+% \subsection{Item instances}
+%
+%
+% \begin{instance}{item basic, item description}
+% There two item instances set up: \texttt{description} for use
+% with the \env{description} environment and \texttt{basic} for use
+% with all other lists (up to now).
+% \begin{macrocode}
+\DeclareInstance{item}{basic}{std}
+ {
+ label-align = right ,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{item}{description}{std}
+ {
+ label-format = \normalfont\bfseries #1 ,
+ }
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+% \subsection{Para instances}
+%
+% \begin{macrocode}
+\tag_if_active:T
+{
+ \tagpdfsetup
+ {
+ newattribute = {justify} {/O /Layout /TextAlign/Justify},
+ newattribute = {center} {/O /Layout /TextAlign/Center},
+ newattribute = {raggedright}{/O /Layout /TextAlign/Start},
+ newattribute = {raggedleft} {/O /Layout /TextAlign/End},
+ }
+}
+% \end{macrocode}
+%
+% \begin{instance}{para center}
+% \begin{macrocode}
+\DeclareInstance{para}{center}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \@flushglue ,
+ right-skip = \@flushglue ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = center ,
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{para}{raggedright}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \z@skip ,
+ right-skip = \@flushglue ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = raggedright ,
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{para}{raggedleft}{std}
+{
+ indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \@flushglue ,
+ right-skip = \z@skip ,
+ end-skip = \z@skip ,
+ final-hyphen-demerits = 0 ,
+ cr-cmd = \@centercr ,
+ para-class = raggedleft ,
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareInstance{para}{justify}{std}
+{
+% indent-width = 0pt ,
+ start-skip = 0pt ,
+ left-skip = \z@skip ,
+ right-skip = \z@skip ,
+ end-skip = \@flushglue ,
+ final-hyphen-demerits = 5000 ,
+ cr-cmd = \@normalcr ,
+ para-class = justify ,
+}
+% \end{macrocode}
+% \end{instance}
+%
+%
+%
+%
+% \begin{macrocode}
+\DeclareRobustCommand\centering {\UseInstance{para}{center}{}}
+\DeclareRobustCommand\raggedleft {\UseInstance{para}{raggedleft}{}}
+\DeclareRobustCommand\raggedright{\UseInstance{para}{raggedright}{}}
+\DeclareRobustCommand\justifying {\UseInstance{para}{justify}{}}
+
+\justifying
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{Tagging support}
+%
+% In this section we provide code to the various kernel hooks to support
+% the tagging of the different displayblock environments.
+%
+%
+%
+% All of the following definitions should only be made if tagging
+% is active!
+% \begin{macrocode}
+\tag_if_active:T {
+% \end{macrocode}
+%
+% \begin{macro}{\@@_beginpar_vmode:}
+% When a block starts out in vertical mode, i.e., is not yet part of
+% a paragraph, we have to start a paragraph
+% structure. However, this is not the case if we are already
+% flattening paragraphs, thus in this case we do nothing.
+% We also do nothing if \texttt{@endpe} is currently true, because
+% that means we are right now just after the end of a
+% \texttt{blockenv} and in the process of looking if we have to end
+% the current \texttt{text-unit}, i.e., it is already open.
+% \begin{macrocode}
+ \cs_set:Npn \@@_beginpar_vmode: {
+ \@@_debug_typeout:n
+ { @endpe = \legacy_if:nTF { @endpe }{true}{false}
+ \on@line }
+ \legacy_if:nTF { @endpe }
+ {
+ \legacy_if_gset_false:n { @endpe }
+ }
+% \end{macrocode}
+% We test for \texttt{<2} because the first flattened environment
+% has to surround itself with a \texttt{text-unit}. Only any inner ones
+% then have to avoid adding another \texttt{text-unit}.
+% \begin{macrocode}
+ {
+% \typeout{-->G1~ (\int_use:N \l_@@_flattened_level_int)}
+ \int_compare:nNnT \l_@@_flattened_level_int < 2
+ {
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tagstructbegin{tag=\l__tag_para_main_tag_tl}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_beginpar_hmode:N}
+% If the block is already part of a part of a paragraph, i.e., when it has
+% some text directly in front, then the first thing to
+% do is to return to vertical mode. However, that should be done
+% without inserting a paragraph end tag, so before calling \cs{par}
+% to do its normal work, we disable paragraph tagging and
+% restarting afterwards again. The argument to this config point
+% simply gobbles the \cs{par} following it in the code above (which
+% is used when there is no tagging going on.
+% \begin{macrocode}
+ \cs_set:Npn \@@_beginpar_hmode:N #1
+ {
+ \tag_mc_end:
+ \int_gincr:N \g__tag_para_end_int
+ \@@_debug_typeout:n{increment~ /P \on@line }
+ \bool_if:NT \l__tag_para_show_bool
+ { \tag_mc_begin:n{artifact}
+ \rlap{\color_select:n{red}\tiny\ \int_use:N\g__tag_para_end_int}
+ \tag_mc_end:
+ }
+ \tag_struct_end:
+ \tagpdfparaOff \par \tagpdfparaOn
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\__kernel_displayblock_doendpe:}
+% If a display block ends and is followed by a blank line we have to end the
+% enclosing paragraph tagging structure.
+% \begin{macrocode}
+\cs_set:Npn \__kernel_displayblock_doendpe: {
+ \bool_if:NT \l__tag_para_bool
+ {
+% \end{macrocode}
+% Given that restoring \cs{par} through the legacy \LaTeXe{} method
+% can take a few iterations (for example, in case of nested lists,
+% e.g., \verb=...\end{itemize} \item ...\par= it can happen that
+% \cs{__kernel_displayblock_doendpe:} is called while
+% \texttt{@endpe} is already handled and then we should not attempt
+% to close a \texttt{text-unit} structure. So we need to check for this.
+% \begin{macrocode}
+ \legacy_if:nT { @endpe }
+ {
+% \end{macrocode}
+% If the display block currently ending was \enquote{flattened}
+% (i.e., uses simplified paragraphs that are not tagged by a
+% combination of \texttt{text-unit} followed by \struct{text}, but simply
+% with a \struct{text},
+% then we don't have to do anything, because the \struct{text} is already closed.
+% \begin{macrocode}
+ \@@_debug_typeout:n
+ { flattened= \bool_if:NTF
+ \l__tag_para_flattened_bool {true}{false}
+ \on@line }
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \@@_debug_typeout:n{Structure-end~
+ \l__tag_para_main_tag_tl\space after~ list \on@line }
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end: %text-unit
+ }
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{para/begin}
+%
+% Paragraph tagging is mainly done using the paragraph hooks (will
+% get moved eventually). The default hook setting is not good
+% enough when lists get suppported: we need to delay starting the
+% paragraph tagging if we still have to place the list label.
+% We therefore remove the existing hook data and replace it with an
+% augmented version (this will get combined eventually).
+% \begin{macrocode}
+\RemoveFromHook{para/begin}[tagpdf]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{para/begin}[tagpdf]{
+ \bool_if:NT \l__tag_para_bool {
+% \end{macrocode}
+% if we are still waiting to typeset the list label we do nothing
+% (the paragraph tagging then happens when the list is finally
+% typeset).
+% \begin{macrocode}
+ \legacy_if:nF { @inlabel }
+ {
+% \end{macrocode}
+% Otherwise, we start a \struct{text} tag structure but only if we are not
+% starting a paragraph immediately \emph{after} a list, in which
+% case we only start a new MC (because the \struct{text} tag is still open from
+% before the list --- one of the reasons why lists are always put
+% \enquote{inside} paragraphs.
+% \begin{macrocode}
+ \@@_debug_typeout:n
+ { @endpe = \legacy_if:nTF { @endpe }{true}{false}
+ \on@line }
+ \legacy_if:nF { @endpe }
+ {
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl}
+ }
+ }
+ \int_gincr:N \g__tag_para_begin_int
+ \@@_debug_typeout:n{increment~ P \on@line }
+ \tag_struct_begin:n
+ {
+ tag=\l__tag_para_tag_tl
+ ,attribute-class=\l_tag_para_attr_class_tl
+ }
+ \__tag_check_para_begin_show:nn {green}{\PARALABEL}
+ \tag_mc_begin:n {}
+ }
+ }
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tag_if_active:T {
+% \tagpdfsetup{add-new-tag={tag=text-unit,role=Part}}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RemoveFromHook{para/end}[tagpdf]
+\AddToHook{para/end}
+ {
+ \bool_if:NT \l__tag_para_bool
+ {
+ \int_gincr:N \g__tag_para_end_int
+ \@@_debug_typeout:n{increment~ /P \on@line }
+ \tag_mc_end:
+ \__tag_check_para_end_show:nn {red}{}
+ \tag_struct_end:
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end:
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\PARALABEL{NP-}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\para_end:}
+% If we see a \cs{par} in vmode and a \texttt{text-unit} is still open
+% we need to close that. For this we check if a request for
+% \text{@endpe} was made (but the \cs{par} redefinition got lost
+% due to (bad?) coding).
+% \begin{macrocode}
+\cs_set_protected:Npn \para_end: {
+ \scan_stop:
+ \mode_if_horizontal:TF {
+ \mode_if_inner:F {
+ \tex_unskip:D
+ \hook_use:n{para/end}
+ \@kernel@after@para@end
+ \mode_if_horizontal:TF {
+ \if_int_compare:w 11 = \tex_lastnodetype:D
+ \tex_hskip:D \c_zero_dim
+ \fi:
+ \tex_par:D
+ \hook_use:n{para/after}
+ \@kernel@after@para@after
+ }
+ { \msg_error:nnnn { hooks }{ para-mode }{end}{horizontal} }
+ }
+ }
+ {
+ \__kernel_endpe_vmode: % should do nothing if no tagging
+ \tex_par:D
+ }
+}
+\cs_set_eq:NN \par \para_end:
+\cs_set_eq:NN \@@par \para_end:
+\cs_set_eq:NN \endgraf \para_end:
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\begin}
+% We need to do a little more than canceling \texttt{@endpe} now.
+% \begin{macrocode}
+\DeclareRobustCommand*\begin[1]{%
+ \UseHook{env/#1/before}%
+ \@ifundefined{#1}%
+ {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
+ {\def\reserved@a{\def\@currenvir{#1}%
+ \edef\@currenvline{\on@line}%
+ \@execute@begin@hook{#1}%
+ \csname #1\endcsname}}%
+ \@ignorefalse
+ \begingroup
+ \__kernel_endpe_vmode:
+ \reserved@a}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_endpe_vmode:}
+% Close an open \texttt{text-unit} if \texttt{@endpe} is true and we
+% are in vmode. Used in \cs{para_end:} and \cs{begin}.
+% \begin{macrocode}
+\cs_new:Npn \__kernel_endpe_vmode: {
+ \if@endpe \ifvmode
+ \bool_if:NT \l__tag_para_bool
+ {
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tag_struct_end:
+ }
+ \@endpefalse
+ }
+ \fi \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_list_label_after:}
+% If starting the text-unit/text tags got delayed because of a pending label we
+% have to do it after the label got typeset
+% \begin{macrocode}
+\cs_set:Npn \__kernel_list_label_after: {
+ \bool_if:NT \l__tag_para_bool
+ {
+ \bool_if:NF \l__tag_para_flattened_bool
+ {
+% \typeout{-->G3}
+ \int_gincr:N \g__tag_para_main_begin_int
+ \tag_struct_begin:n{tag=\l__tag_para_main_tag_tl}
+ }
+ \int_gincr:N \g__tag_para_begin_int
+ \@@_debug_typeout:n{increment~ P \on@line }
+ \tag_struct_begin:n {
+ tag=\l__tag_para_tag_tl
+ ,attribute-class=\l_tag_para_attr_class_tl
+ }
+ \bool_if:NT \l__tag_para_show_bool
+ {
+ \tag_mc_begin:n {artifact}
+ \llap {\color_select:n {blue}\tiny Li-\int_use:N \g__tag_para_begin_int \ }
+ \tag_mc_end:
+ }
+ \tag_mc_begin:n {tag=P}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_inner_begin:}
+% Start a block that has an inner structure if it isn't also a list.
+% \begin{macrocode}
+\cs_new:Npn \@@_inner_begin: {
+ \tagstructbegin{tag=\l_@@_tag_inner_tag_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_inner_end:}
+% End a block (which isn't also a list).
+% \begin{macrocode}
+\cs_new:Npn \@@_inner_end: {
+ \@@_debug_typeout:n{block-end \on@line}
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \@@_debug_typeout:n{close~ /text-unit \on@line}
+ \tagstructend
+ }
+ \tagstructend % end inner structure
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% \subsubsection{List tags}
+%
+%
+% \begin{macrocode}
+\tl_new:N \l__tag_L_tag_tl
+\tl_set:Nn \l__tag_L_tag_tl {L}
+
+\tl_new:N\l__tag_L_attr_class_tl
+\tl_set:Nn \l__tag_L_attr_class_tl {list}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tag_if_active:T
+{
+ \tagpdfsetup
+ {
+ % default if unknown
+ newattribute = {list}{/O /List /ListNumbering/None},
+ newattribute = {itemize}{/O /List /ListNumbering/Unordered},
+ newattribute = {enumerate}{/O /List /ListNumbering/Ordered},
+ newattribute = {description}{/O /List /ListNumbering/Description},
+ }
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\LItag{LI}
+% \end{macrocode}
+%
+% \begin{macro}{\@@_list_begin:}
+% Start a list \ldots
+% \begin{macrocode}
+\cs_set:Npn \@@_list_begin: {
+ \tagstructbegin
+ {
+ tag=\l__tag_L_tag_tl
+ ,attribute-class=\l__tag_L_attr_class_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_list_item_begin:}
+% Start tagging a list item.
+% \begin{macrocode}
+\cs_set:Npn \@@_list_item_begin: { \tagstructbegin{tag=\LItag} }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\__kernel_list_label_begin:}
+% A list label needs a \texttt{Lbl} structure tag and an MC.
+% \begin{macrocode}
+\cs_set:Npn \__kernel_list_label_begin: {
+%
+% FMi: this needs a different logic to decide when to make the label
+% an artifact (after cleaning up the the \item code ), therefore
+% disabled for now
+% \tl_if_empty:oTF \@itemlabel
+% {
+% \tag_mc_begin:n {artifact}
+% }
+% {
+ \tagstructbegin{tag=Lbl}
+ \tagmcbegin{tag=Lbl}
+% }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\__kernel_list_label_end:}
+% And when we are done with the label we have to close the MC and
+% the \texttt{Lbl} structure. We then start the \texttt{LBody}. The
+% material inside will be \enquote{paragraph} text and the tagging
+% for that is handled by the normal para tagging.
+% \begin{macrocode}
+\cs_set:Npn \__kernel_list_label_end: {
+ \tagmcend % end mc-Lbl or artifact
+% FMi: unconditionally for now
+% \tl_if_empty:oF \@itemlabel
+ \tagstructend % end Lbl
+ \tagstructbegin{tag=\LBody}
+}
+\def\LBody{LBody}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_list_item_end:}
+% When a list item ends we have to close \texttt{LBody} and
+% \texttt{LI} but also a \struct{text} in the special case that the
+% item material ends in a list (identifiable via \texttt{@endpe}).
+% \begin{macrocode}
+\cs_set:Npn \@@_list_item_end: {
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tagstructend % text-unit
+% \@@_debug_typeout:n{Structure-end~ P~ at~ item-end \on@line }
+ }
+ \tagstructend \tagstructend % end LBody, LI
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_list_end:}
+% Finally, at the list end we have to close the open
+% \texttt{LBody}, \texttt{LI}, \texttt{L}, and possibly a
+% \struct{text} if the last item ends with a list.
+% \begin{macrocode}
+\cs_set:Npn \@@_list_end: {
+ \legacy_if:nT { @endpe }
+ {
+ \int_gincr:N \g__tag_para_main_end_int
+ \tagstructend % text-unit
+ \@@_debug_typeout:n{Structure-end~ P~ at~ list-end \on@line }
+ }
+ \tagstructend\tagstructend % end LBody, LI
+ \tagstructend % end L
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% End of tagging related declarations.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{block-tagging-latex-lab-testphase.ltx}
+ [\ltblocksdate\space \ltblocksversion\space
+ blockenv implementation]
+\RequirePackage{latex-lab-testphase-block-tagging}
+%</latex-lab>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+%
+% \section{Documentation from first prototype implementations}
+%
+%
+% \subsection{Open questions}
+% \begin{itemize}
+% \item Existing questions --- moved to issues ---
+% \end{itemize}
+%
+% \subsection{Code cleanup}
+% \begin{itemize}
+% \item Actually implement what's announced.
+%
+% \item Encapsulate most uses of \cs[no-index]{legacy_if\dots} into
+% commands with \texttt{expl3} syntax: we cannot rename these booleans
+% for compatibility reasons but we can make the code cleaner
+% nevertheless. --- made issue ---
+%
+% \item The \tn{topsep} and \tn{partopsep} business is tricky to
+% reproduce exactly (see \tn{@topsepadd} and \tn{@topsep}) because of
+% how it accumulates when lists are nested immediately.
+%
+% \end{itemize}
+%
+%
+%
+% \subsection{Tasks}
+% \begin{itemize}
+%
+% \item Change author to LaTeX Team once it's nice enough to deserve
+% that label.
+%
+% \item Reproducing exactly the standard layouts and examples in the
+% \pkg{enumitem} documentation.
+%
+% \item Hooks, but do not duplicate those that already exist as
+% environment hooks. Hence, mostly around items.
+%
+% \item Customization and interaction with LDB:
+% \begin{itemize}
+% \item Allow arbitrary nesting depth with automatically defined
+% styles for labels, counters etc.
+% \item Adapt everything to font size! (e.g. footnotes).
+% \item How to model the inheritance from trivlist to list to
+% enumerate?
+% \end{itemize}
+%
+% \item Add key--value settings mimicking \pkg{enumitem}'s ability to
+% set any four of five horizontal parameters and deduce the fifth by
+% $\cs{leftmargin} + \cs{itemindent} = \cs{labelindent} +
+% \cs{labelwidth} + \cs{labelsep}$.
+%
+% \item Provide good ways to customize how overlong labels are dealt with.
+%
+% \item Use the \texttt{.aux} file.
+% \begin{itemize}
+% \item Implement the \tn{ref} styles that \pkg{enumitem} provides.
+% \item Reverse enumerations, important in publication lists and the
+% like. Somehow avoid needing 3 compilations for references to
+% reverse enumerations to settle?
+% \item Ability to calculate \tn{labelwidth} from the label contents.
+% Share calculated parameters between multiple environments (cf.\
+% \texttt{resume} option).
+% \end{itemize}
+%
+% \item Related to grabbing the whole list environment, and input syntax
+% variations:
+% \begin{itemize}
+% \item Other layouts: tabular (see \pkg{listliketab} vs
+% \pkg{typed-checklist}), multicolumn and horizontally numbered (see
+% \pkg{tasks}), inline lists, runin lists in the easy case where
+% there is no intervening \tn{par}.
+% \item Formatting the item text in a
+% box or similar (requires grabbing the whole list).
+% \item Filtering which items to show: hide certain items according to
+% criteria (useful together with list reuse), see
+% \pkg{typed-checklist}.
+% \item Shorthands \tn{iitem} for automatic nested lists, or \cs{1},
+% \cs{2} etc from \pkg{outlines}.
+% \item Support markdown input like \pkg{asciilist}.
+% \end{itemize}
+%
+% \item Check interaction with \texttt{babel} options such as
+% \texttt{french} or \texttt{accadian} (see FrenchItemizeSpacing)
+%
+% \item RTL and vertical typesetting.
+% \end{itemize}
+%
+% \section{Plan of attack of first prototype}
+%
+% Typesetting list environments involves a rather large number of
+% parameters. They can be affected by the context such as the total
+% list nesting level, the nesting level of the given type of list, and
+% the font size. An environment like \texttt{enumerate} has two main
+% aspects.
+% \begin{itemize}
+% \item It has a certain layout in the page, with vertical and
+% horizontal spacing around it. This type of layout is shared with
+% environments such as \texttt{quote}, \texttt{flushright}, or
+% \texttt{tabbing}. This common layout is implemented in \LaTeXe{}
+% through \cs{trivlist} (or \cs{list}).
+% \item It defines how each \cs{item} should be typeset: how to
+% construct the label, in particular the \texttt{counter} name, and
+% how to format the content of the item.
+% \end{itemize}
+%
+% This suggests defining two object types, \xt{block} and \xt{item}
+% covering these two aspects.\footnote{Possibly also \xt{endblock} to
+% deal with decorations at the end?} While the \xt{item} type will
+% perhaps have a single template, one could typeset a \xt{block} object
+% in several ways, for instance the standard \LaTeXe{} way or a fancy
+% colored box.
+%
+% The \xt{general} \xt{block} template should receive the following
+% parameters. The \xt{plain} \xt{block} template is a restricted
+% template that freezes all item-related parameters to dummy values
+% (\texttt{counter}, \texttt{start}, \texttt{resume},
+% \texttt{label-width}, \texttt{label-sep} and all \texttt{item-*}).
+% The \xt{list} \xt{block} template is a restricted template\footnote{A
+% better approach could be to have a notion of inheritance for object
+% types, so that we end up with two different \emph{object types}. Then
+% we can implement other template for the list object type: \xt{table}
+% for lists typeset as rows/columns of a table, \xt{inline} for lists
+% typeset in horizontal mode within a paragraph, and \xt{runin} for
+% run-in lists.} that omits the \texttt{heading} parameter and whose
+% default for \texttt{item-instance} is non-empty.
+% \begin{itemize}
+% \item Structural parameters: the \texttt{heading} to place before,
+% \texttt{counter} name, \texttt{start} value, whether to
+% \texttt{resume} a previous list, and the \texttt{item-instance} (an
+% \xt{item} instance) to use when typesetting items.
+% \item Vertical spacing and penalties: \texttt{beginpenalty},
+% \texttt{beginsep}, \texttt{begin-par-skip}, \texttt{item-penalty},
+% \texttt{item-skip}, \texttt{item-par-skip}, \texttt{endpenalty},
+% \texttt{end-skip}, \texttt{end-par-skip}.
+% \item Horizontal spacing: \texttt{rightmargin}, \texttt{leftmargin},
+% \texttt{parindent}, \texttt{item-indent}, \texttt{label-width},
+% \texttt{label-sep}.
+% \end{itemize}
+% A \docclass should edit these templates (or define restricted
+% templates) to set up default values that depend on \tn{g_block_nesting_depth_int},
+% namely how many lists are nested overall.\footnote{Does
+% \pkg{xtemplate} provide a way to specify default values that are only
+% evaluated once an instance is used?} The document class should then
+% set up an instance of these templates for each environment, with
+% appropriate settings such as a \texttt{heading}, a suitable
+% \texttt{item-instance}, or making \texttt{margin-right} equal to
+% \texttt{margin-left} in a \texttt{quote} environment.
+%
+% The \xt{inline-list} \xt{block} template receives many fewer
+% parameters. Note that \texttt{beginsep}, \texttt{item-skip},
+% \texttt{end-skip} are now \emph{horizontal} skips.
+% \begin{itemize}
+% \item Structural parameters: \texttt{counter}, \texttt{start},
+% \texttt{resume}, \texttt{item-instance}.
+% \item Spacing and penalties: \texttt{beginpenalty},
+% \texttt{beginsep}, \texttt{item-penalty}, \texttt{item-skip},
+% \texttt{endpenalty}, \texttt{end-skip}.
+% \item Horizontal spacing: \texttt{label-width}, \texttt{label-sep}.
+% \end{itemize}
+%
+% The \xt{std} \xt{item} template should receive the following
+% parameters. They depend on the type of list and its nesting level
+% among lists of such type, but typically not on the total nesting
+% level.
+% \begin{itemize}
+% \item Counter name (\texttt{counter}), shared with the parent
+% \xt{list} \xt{block} template, but needed for incrementing.
+% \item Label construction: a function \texttt{counter-label} that
+% produces the label from the counter name, used if \tn{item} is given
+% without argument.
+% \item References: a function \texttt{counter-ref} for how the label
+% should be referred to when it is constructed from the counter,
+% \texttt{label-ref} and \texttt{label-autoref} used when \tn{item}
+% has an optional argument.
+% \item Label formatting: \texttt{label-format} function,
+% \texttt{label-strut} boolean.
+% \item Label alignment (\texttt{label-align}, \texttt{label-boxed},
+% \texttt{next-line}).
+% \item Content parameters: \texttt{text-font}.
+% \item A \texttt{compatibility} boolean that controls for instance
+% whether \tn{makelabel} is used.
+% \end{itemize}
+% The \docclass should set up an instance such as \xt{enumiii} for each
+% environment and nesting level.\footnote{This should be made easily
+% extendible to deeper levels.}
+%
+% A given environment will adjust some nesting levels, then call the
+% \xt{block} instance appropriate to the environment type, passing it
+% the \xt{item} instance appropriate to the environment and depth.
+% Additional context-dependence could be provided by \pkg{l3ldb}, but
+% the main context-dependence should not rely on it for simplicity
+% reasons and incidentally because \pkg{l3ldb} is not yet available.
+%
+%
+% \Finale
+%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf b/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf
new file mode 100644
index 0000000000..92be446ea7
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.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 6fe7ff6955..29261a594b 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: latex-lab-footnotes.dtx
-% Copyright (C) 2022 The LaTeX Project
+% Copyright (C) 2022-2023 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -53,19 +53,19 @@
% offering configurable methods for layout and functionality
% adjustments that avoid overwriting each other when used in
% classes as well as in packages (as far as possible --- obviously
-% some adjustments are mutally exclusive). This is achieved by
-% providing a a larger number of hooks (for areas where different
+% some adjustments are mutually exclusive). This is achieved by
+% providing a larger number of hooks (for areas where different
% packages/classes can easily coexist with their adjustments) and a
% number of configuration points to which only one class or package
-% can write to successfully (in case of multiple changes the the
+% can write to successfully (in case of multiple changes the
% last one wins). The latter are for special functionality, e.g.,
% if footnote text is typeset as a single paragraph, it can't be configured
% the same time to be typeset vertically with one footnote below
% each other.
%
% The interfaces are set up to support tagged PDF, but in order
-% for this to work, all packages altering the fontnote setup should
-% use the inferfaces provided here and not do it through the
+% for this to work, all packages altering the footnote setup should
+% use the interfaces provided here and not do it through the
% legacy methods (though there is some support for the latter as
% well, but if will not work in a cases).
%
@@ -81,7 +81,7 @@
% that was used by most document classes,
% but \cs{@makefntext} had to be defined in the class itself because
% the format didn't provide a default. As a result you will find
-% definitions for the latter in all document classes and defintions
+% definitions for the latter in all document classes and definitions
% for \cs{@makefnmark} only in very few.
%
% Furthermore, to enable special footnote layouts or provide
@@ -114,7 +114,7 @@
%
% In contrast the hooks are of interest to many classes to provide
% their layout alterations in a way that it works smoothly with
-% other packages handling aspects of foonote formatting.
+% other packages handling aspects of footnote formatting.
%
%
% \subsection{Formatting the mark in the main text}
@@ -140,7 +140,7 @@
%
% Executed at the very beginning of \cs{footnotemark}. Currently
% there are two packages (\pkg{bibarts} and \pkg{chextras}) that
-% prepend material at this point (not ncessarily correctly, e.g.,
+% prepend material at this point (not necessarily correctly, e.g.,
% they do not all check that they are in horizontal mode).
%
% This hook is paired with hook \hook{fnmark/after}.
@@ -163,15 +163,15 @@
% \item[\hook{fnmark/begin}]
%
% This hook is executed directly in front of the typeset mark.
-% This is the place where \pkg{hyperref} adds part of its code,
-% i.e., after the \cs{nobreak} mentioned above. With a closer
-% integration of \pkg{hyperref} this hook may not be necessary at
-% all.
+% This is the place where \pkg{hyperref} would have added
+% part of its code, i.e., after the \cs{nobreak} mentioned above.
+% With the integration of hyperlinks in the tagging code
+% this hook may not be necessary at all.
%
% \item[\hook{fnmark/end}]
%
% This hook is executed directly after the typeset mark. It is
-% used by \pkg{hyperref}, \pkg{memhfixc}, \pkg{scrlttr2}, and
+% used by \pkg{memhfixc}, \pkg{scrlttr2}, and
% \pkg{footmisc}. Used, for example, to implement support for
% multiple marks in succession.
%
@@ -227,9 +227,9 @@
% \item[\cs{@footnotetext@cfgpointiii} (no argument)]
%
% By default this configuration point adds a strut to the
-% footnote material. so that consecutive footnotes are properly
+% footnote material so that consecutive footnotes are properly
% spaced vertically. In some use cases this is not appropriate
-% (e.g., when running all footnotes s a single paragraph) and so
+% (e.g., when running all footnotes as a single paragraph) and so
% this configuration point can cancel the action or do something
% else instead.
%
@@ -261,17 +261,18 @@
%
% If tagging is produced this configuration point is also
% responsible for surrounding the mark with the appropriate tags
-% marking the mark as an Lbl. It does this using the command \cs{tag@FELbl}.
+% marking the mark as an Lbl. It does this using the command
+% \cs{tag@FENoteLbl}.
%
% \item[\cs{@makefntext@cfgpointii} (1 argument)]
%
% This configuration point manages the formatting of the footnote
-% text once the mark has been typeset.
+% text once the mark has been typeset.
%
% If tagging is produced this configuration point is also
% responsible for surrounding the mark with the appropriate tags
% marking the mark as an MC of type FENote. It does this using
-% the command \cs{tag@FENote}.
+% the command \cs{tag@FENotetext}.
%
% \end{description}
%
@@ -335,7 +336,7 @@
%
% At the very end of \cs{footnotetext} we execute the hook
% \hook{fntext/after} which is a reversed hook paired with
-% \hook{fntext/before}. Some packages, e.g., \pkg{linuex}, have
+% \hook{fntext/before}. Some packages, e.g., \pkg{linguex}, have
% code in that position.
%
% \end{description}
@@ -346,7 +347,7 @@
% \subsubsection{Additional configuration possibilities}
%
% The formatting of the footnote mark in front of the footnote
-% texts is influenced by the setting of the dimen parameter
+% text is influenced by the setting of the dimen parameter
% \cs{footnotemargin}. By default its value is 1.8em in the current
% text font (or \texttt{-}\cs{maxdimen} when the para option is
% chosen). The following rules apply:
@@ -381,7 +382,247 @@
% \end{itemize}
%
%
-% \section{Tagging support}
+% \section{Tagging and hyperlinking support}
+%
+% Footnotes consist of a \emph{footnotemark} (short: mark) that is typically placed in the text
+% as a superscript number like this\footnotemark[1], and a \emph{footnotetext}
+% (short: note) that is placed at the bottom of the page.
+% The \emph{footnotetext} normally repeats at the begin the mark as a visual clue.
+%
+% Tagging (and hyperlinking) has to connect the mark with the note.
+% For the tagging code, we assume that every mark has exactly one associated note,
+% and that every note is associated to at least one mark
+% and can have more associated marks.
+%
+% The mark doesn't need to be visible, e.g. the typesetted
+% mark\textsuperscript{1--3} denotes three marks, where the second is invisible.
+% Tagging should produce here probably three \texttt{Lbl} structures
+% (one without content), and an artifact for the range marker.
+% If such a range is used, links can only point to the notes 1 and 3 and
+% one has to suppress the linking for the second mark.
+% This means that links and tagging are also related
+% to the actual formatting of the footnote mark.
+% In the following this problem is mostly ignored for now, but
+% should not be forgotten and handled later.
+%
+% \subsection{Technical details for the tagging}
+%
+% The \emph{footnotemark} should create a \texttt{/Lbl} structure\footnote{to make it easier
+% to identify the role we use \texttt{/footnotemark} which we rolemap to \texttt{/Lbl}} that should contain a \texttt{/Ref} entry pointing
+% to the structure of the \emph{footnotetext}.
+%
+% The \emph{footnotetext} should create a \texttt{/FENote}\footnote{We tag it as \texttt{/footnote} and role map it.}
+% structure with a \texttt{/Ref}
+% entry pointing to the structures of \emph{all} marks related to the note.
+% The mark at the begin of the
+% note is in a \texttt{/Lbl}\footnote{We tag it as \texttt{/footnotelabel}.}
+% structure but has to fulfil no special requirements.
+%
+% Structure objects and the underlying properties used by the tagging
+% code are initialized when the structure is opened. This means that one can not
+% directly add data to a future structure
+% but as structure objects are written at the end of the document it is
+% possible to update \texttt{/Ref} entries in an end document hook.
+%
+%
+% So tagging has to solve two problems:
+% \begin{itemize}
+% \item the mark and the footnote text must be surrounded by the correct structure
+% and marked content commands. This is not trivial
+% as there are various layouts (bottom, marginpar, minipage) and the tagging
+% from the automatic paratagging must be taken into account if one want to avoid
+% faulty nesting.
+%
+% \item It must detect which marks are related to which notes
+% so that it can setup the \texttt{/Ref} cross-references.
+% \end{itemize}
+%
+%
+% \subsection{Requirements for links}
+%
+% Links should go from the mark to the note. Sometimes it has been requested
+% that links go back too, but as there
+% can be more than one mark connected to a note it is not clear how to decide to which mark it should go.
+% Using the keys from the PDF viewer to go back is normally better.
+%
+% Links are closely related to the references stored in the \texttt{/Ref}
+% entry of a mark and so are handled in the code together with them.
+% But there are subtle technical differences to take care of
+% as links and destinations are whatsits and so must be created at the correct time.
+%
+% It should be possible to suppress the links both globally and locally.\footnote{
+% Currently hyperref only offers the option to suppress the
+% footnote links globally
+% with the option \texttt{hyperfootnotes=false}. To suppress them locally
+% only the \texttt{NoHyper} environment is provided.}
+%
+%
+% \subsection{The algorithmus to connect marks and notes}
+%
+%
+% The connection is made by comparing the value of \cs{@thefnmark}.
+%
+% The standard mark commands (\cs{footnotemark} and \cs{footnote})
+% store the current value of \cs{@thefnmark}
+% with their own structure number as a key in a property.
+%
+% A following \cs{footnotetext} compares its own \cs{@thefnmark} with the values in
+% the prop. If there is a match it stores the structure numbers and removes the entries
+% from the properties (so in a normal document the property will never contain more than
+% a few entries).
+%
+% This works well as long as the \cs{footnotemark} commands are issued before the \cs{footnotetext} and
+% as long as nothing unusual is done to \cs{@thefnmark}.
+% It also works if a document uses more than one footnote series as long as they have distinct numbering
+% systems, but in case a distinction is needed it is possible to define
+% a new data structure and to switch locally to use this
+% container. The following three commands are used for this.
+%
+% The default property uses the name \texttt{default}
+%
+% \begin{function}{\fnote_new:nn}
+% \begin{syntax}
+% \cs{fnote_new:nn}\Arg{name}\Arg{key/value option}
+% \end{syntax}
+%
+% This commands set up the needed data structure. Currently this only
+% consists of a property which is used to store and manage the mark values.
+% There are no options yet.
+% \end{function}
+%
+% \begin{function}{\fnote_mark_gput:nn,\fnote_mark_gput:no,\fnote_mark_gput:oo}
+% \begin{syntax}
+% \cs{fnote_mark_gput:nn}\Arg{mark}\Arg{footnote type name}
+% \end{syntax}
+% This command stores the current structure number as key and the \meta{mark} as
+% value in the property associated with the \meta{footnote type name}
+% \end{function}
+%
+% \begin{function}{\fnote_mark_gpop:nnN}
+% \begin{syntax}
+% \cs{fnote_mark_gpop:nnN}\Arg{mark}\Arg{footnote type name}\meta{sequence}
+% \end{syntax}
+% This command stores the keys/structure numbers whose value are \meta{mark} in the
+% property associated with \meta{footnote type name} in the \meta{sequence}
+% and then remove them from the property. The content of the sequence can then be
+% used to create link targets and references.
+% \end{function}
+%
+%
+% \subsubsection{\cs{footref}}
+%
+% \cs{footref} use internally the same command to set the mark as \cs{footnotemark}, it only
+% defines \cs{@thefnmark} differently. This \cs{@thefnmark} is not suitable for the method described
+% above, as it contains a reference command it can't be used to match a note, also \cs{footref} can
+% be used after the note has already been set. \cs{footref} disables therefore the automatic detection.
+%
+% Instead the \cs{label} command is (currently with the help of a hook from the \texttt{nameref} package)
+% extended in the \cs{footnotetext} command to also store the structure number and \cs{footref} retrieves this
+% 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
+% be possible to change this, but it is not clear if it actually matters and so it worth the additional coding
+% and processing.
+%
+% \subsubsection{\cs{footnotemark} after \cs{footnotetext}}
+%
+% The automatic detection doesn't work if a \cs{footnotemark} is issued after
+% the \cs{footnotetext} it refers to. There will be no error, but neither the link nor
+% the \texttt{/Ref} will connect both.
+%
+% The simple way to handle this is to use a label and \cs{footref}:
+%
+% \begin{verbatim}
+% \footnotetext{\label{fn:a}text} ... \footref{fn:a}
+% \end{verbatim}
+%
+% An alternative would be to extend the syntax of \cs{footnotemark} and
+% \cs{footnotetext} to allow to add a label which can then be used.
+% For example
+%
+% \begin{verbatim}
+% \footnotetext[label=fn:a]{text} ... \footnotemark[label=fn:a]
+% \end{verbatim}
+%
+% As both have already an optional argument, that requires the optional argument extension.
+%
+%
+% \subsection{Links}
+%
+% The structure numbers detected for the \texttt{/Ref} are also used for links:
+% even if tagging is not activated the tagging commands are defined through
+% the \pkg{tagpdf-base} package
+% and the structure commands increase the structure counter and this info can be used.
+%
+% A \cs{footnotetext} creates a bunch of destinations (in most cases this sums up to
+% two destinations): one for every structure number in the \texttt{/Ref} (used as target
+% by the mark commands) and one for the structure number of the footnotetest itself
+% (used as target by \cs{footref}s commands).
+%
+% \subsection{Implementation details}
+%
+% \subsection{Handling the mark}
+%
+% The mark in the text is handled by redefining the kernel configuration point
+% \cs{@kernel@process@makefnmark} to \cs{tag@FEMark}.
+% It takes one argument, \cs{@makefnmark}, the command which formats the
+% mark, and surrounds it by link and tagging commands.
+% At the point where \cs{@kernel@process@makefnmark} is issued \cs{@thefnmark} has already been
+% defined and can be used to setup the reference detections.
+%
+%
+% \subsection{Handling the footnotetext}
+%
+% The main part is done by redefining \cs{@kernel@process@footnotetext}. This configuration point takes two arguments, \cs{@footnotetext@cfgpoint} (by default \verb+\insert\footins+) and as second argument lots of code related to typesetting the notemark and the footnote text with the actual content of the footnote text somewhere in the middle.
+%
+% The redefinition of \cs{@kernel@process@footnotetext} surrounds the content with the structure command
+% and tries to detect to which mark the note is related.
+%
+% The actual typesetting of the note text is done
+% by \cs{@makefntext}/\cs{fnote_makefntext:n}. In the new implementation this contains two configuration
+% points, \cs{@makefntext@cfgpoint} and \cs{@makefntext@cfgpointii}. These are redefined to add the tagging commands around note mark and note text.
+%
+% \subsection{Footnotes in minipages}
+%
+% In minipages the \cs{footnote} command uses a special marker
+% (small italic letters by default) and puts the
+% footnote text at the bottom of the box. The \cs{footnotemark}
+% command uses the standard footnote counter and marker (and so typically
+% creates a superscript number).
+% It is meant to be used with a \cs{footnotetext} \emph{outside}
+% the minipage to create a footnote mark which refers to a footnote text
+% at the bottom of the page.
+% This means to repeat a footnote marker in a minipage you should use the \cs{footref} command.
+%
+% Tagging works quite similar to normal footnotes if the new definition is used
+% and if the minipage code is changed to use the new configuration point.
+% The main problem here is currently the tagging of the minipage itself.
+%
+% \section{TODOs}
+%
+% \begin{itemize}
+%
+% \item tagging destroys footnotes directly following the text with pdflatex.
+%
+% \item there is a dependency on nameref as it provides the hook in \cs{label}
+% used by the \cs{footref} code.
+%
+% \item there is a dependency to etoolbox as we patch \cs{\@iiiminipage}
+%
+% \item Special formatting of footnote marks in the text, e.g. if ranges or commas are
+% used require special care as they should normally mark up such text as artifacts and
+% perhaps have to insert empty structures to represent an invisible mark. This must be coordinated
+% with the relevant packages and classes.
+%
+% \item manyfoot doesn't work correctly and must be analyzed.
+%
+% \item Check if additional kernel configuration points are needed/possible
+% to avoid the redefinitions of \cs{@makefntext@cfgpoint} and \cs{@makefntext@cfgpointii}.
+%
+% \item \pkg{memoir} is not supported at all and errors when the code tries to patch
+% \cs{@makefntext}.
+% \end{itemize}
%
% \emph{To be documented}
%
@@ -403,46 +644,171 @@
% \subsection{File declaration}
% \begin{macrocode}
\ProvidesFile{latex-lab-footnotes.ltx}
- [2022-07-22 v0.6b changes to the footnote interfaces]
+ [2023-02-04 v0.7 changes to the footnote interfaces]
% \end{macrocode}
%
+% \subsection{code not fully handled yet}
% \begin{macrocode}
-
+%
% latex.ltx
+% not looked at yet
+% \@mpfootnotetext is probably no longer needed, or only to support other
+% classes and package. See below about the minipage code.
+%
+% \long\def\@mpfootnotetext#1{%
+% \global\setbox\@mpfootins\vbox{%
+% \unvbox\@mpfootins
+% \reset@font\footnotesize
+% \hsize\columnwidth
+% \@parboxrestore
+% \def\@currentcounter{mpfootnote}%
+% \protected@edef\@currentlabel
+% {\csname p@mpfootnote\endcsname\@thefnmark}%
+% \color@begingroup
+% \@makefntext{%
+% \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+% \par
+% \color@endgroup}}
+% ========
+% used by the minipage footnote code.
+%
+% \def\@mpfn{footnote}
+% \def\thempfn{\thefootnote}
+% =========
+% this perhaps need some configuration options.
+%
+%\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+%
+% =========
+%% alterations not covered:
+%
+% ./arabtex/afoot.sty --- too different (and probably too old)
+%
+% =====
+% alterations of footnotetext not covered:
+%
+% ./revtex4-1/revtex4-1.cls ./revtex/ltxutil.sty ./revtex/revtex4-2.cls ... (need analysis)
+% ./bigfoot/bigfoot.sty
+%
+% memoir needs checking too
+%
+% =====
+%
+% use of kerns to mark h-mode positions (unit sp)
+%
+% 1 = CJK
+% 2 = CJK
+% 3 = multiple footnotes (footmisc, koma, eledmac, tufte, memoir,
+% parnotes, sidenotes)
+% 3 = outer kern in letter spacing (letterspace)
+% 3 = beginning of list (examdesign.cls)
+% 4 = CJK pigin
+% 5 = CJK ruby
- % not looked at yet
-
-\long\def\@mpfootnotetext#1{%
- \global\setbox\@mpfootins\vbox{%
- \unvbox\@mpfootins
- \reset@font\footnotesize
- \hsize\columnwidth
- \@parboxrestore
- \def\@currentcounter{mpfootnote}%
- \protected@edef\@currentlabel
- {\csname p@mpfootnote\endcsname\@thefnmark}%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \par
- \color@endgroup}}
-
-
-\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
-
-
-
-\def\@mpfn{footnote}
-\def\thempfn{\thefootnote}
-
-
-
+% 1-4 = polyglossia for korean
+%
+% \end{macrocode}
%-------------------------------------
-
-
+% \begin{macrocode}
\ExplSyntaxOn
+% \end{macrocode}
+% \subsection{Temporary variables}
+% \begin{macrocode}
+\prop_new:N \l_@@_tmpa_prop
+\tl_new:N \l_@@_tmpa_tl
+% \end{macrocode}
+% \subsection{Public variables}
+%
+% A footnote mark will store its structure number (key) and the
+% expanded \cs{@thefnmark} in this prop so
+% that a following note can retrieve this info
+% if needed. It is possible to use more than one footnote series (type)
+% if needed (if different footnotes/note use the same
+% numbering system).
+% If this command is changed an accompanying property must be created
+% \begin{NOTE}{UF}
+% TODO: interface to create the property.\\
+% TODO: check and decide about the name of the tl
+% \end{NOTE}
+% \begin{macro}{\l_fnote_type_tl}
+% \begin{macrocode}
+\tl_new:N \l_fnote_type_tl
+\tl_set:Nn \l_fnote_type_tl {default}
+% \end{macrocode}
+% \end{macro}
+% It must be possible to suppress the hyperlinking, both locally
+% and globally. hyperref's hyperfootnotes option should set the boolean.
+% \begin{macro}{\l_fnote_link_bool}
+% \begin{macrocode}
+\bool_new:N \l_fnote_link_bool
+\bool_set_true:N \l_fnote_link_bool
+% \end{macrocode}
+% \end{macro}
+% A hyperlink should have an changeable link type. This can
+% be e.g. used to change the color or the border.
+% \begin{macro}{\l_fnote_link_type_tl}
+% \begin{macrocode}
+\tl_new:N \l_fnote_link_type_tl
+\tl_set:Nn \l_fnote_link_type_tl {link}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Internal variables}
+%
+% \begin{macro}{\l_@@_linktarget_tl}
+% This command stores the name of a linktarget/destination
+% when needed
+% \begin{macrocode}
+\tl_new:N \l_@@_linktarget_tl
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\l_@@_currentlabel_tl}
+% This command is used to pass a label name around.
+% \begin{macrocode}
+\tl_new:N \l_@@_currentlabel_tl
+% \end{macrocode}
+% \end{macro}
-
+% \begin{macro}{\l_@@_currentrefs_seq}
+% This sequence stores the list of reference of a note
+% \begin{macrocode}
+\seq_new:N \l_@@_currentrefs_seq
+% \end{macrocode}
+% \end{macro}
+%
+% The connection between the mark(s) in the text and the note
+% is either deduced automatically or done through an label.
+% The default is automatic, but we must be able to suppress it. For this we use a boolean.
+% \begin{macro}{\l_@@_autodetect_bool}
+% \begin{macrocode}
+\bool_new:N \l_@@_autodetect_bool
+\bool_set_true:N \l_@@_autodetect_bool
+% \end{macrocode}
+% \end{macro}
+% This is used to pass the structure number of the note around, e.g.
+% to a label inside the note.
+% \begin{macrocode}
+\tl_new:N \l_@@_currentstruct_tl
+\tl_set:Nn \l_@@_currentstruct_tl {1}
+% \end{macrocode}
+%
+%
+% \subsection{Variants}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \ref_label:nn { Vn }
+\cs_generate_variant:Nn \ref_value:nn { Vn }
+\cs_generate_variant:Nn \prop_gput:Nnn {cxn}
+\cs_generate_variant:Nn \hook_gput_code:nnn{nne}
+\cs_generate_variant:Nn \tag_struct_use:n {e}
+% \end{macrocode}
+%
+% \subsection{Updating \cs{@thefnmark}}
+% \begin{macro}{\fnote_step_fnmark:nn}
+% This command updates \cs{@thefnmark}. The first argument
+% is an optional integer expression, the second a counter name.
+% If the optional argument is not given it steps the counter.
+% \begin{macrocode}
\cs_new_protected:Npn \fnote_step_fnmark:nn #1#2 {
\tl_if_novalue:nTF {#1}
{
@@ -463,7 +829,12 @@
\group_end:
}
}
-
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fnote_set_fnmark:nn}
+% This is similar to the previous command, but it doesn't step the
+% counter but use the current value.
+% \begin{macrocode}
\cs_new_protected:Npn \fnote_set_fnmark:nn #1#2 {
\tl_if_novalue:nTF {#1}
{
@@ -476,25 +847,40 @@
\group_end:
}
}
-
-%-------------------------------------
-
-% the debugging code is just temp
-\bool_new:N \g_fnote_debug_bool
-\bool_gset_true:N \g_fnote_debug_bool % for now we have debugging turned on by default
-
-%-------------------------------------
-
-
-
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Hooks}
+%
+% Hooks in the footnotemark command.
+% \begin{macrocode}
\NewMirroredHookPair{fnmark/before}{fnmark/after}
\NewHook{fnmark}
\NewHook{fnmark/begin}
\NewHook{fnmark/end}
-
-
-\cs_new:Npn \@@_debug_footnotemark: {
- \bool_if:NT \g_fnote_debug_bool
+% \end{macrocode}
+% Hooks in the footnotetext command
+% \begin{macrocode}
+\NewMirroredHookPair{fntext/before}{fntext/after}
+\NewHook{fntext}
+\NewHook{fntext/para}
+\NewHook{fntext/begin}
+\NewHook{fntext/end}
+% \end{macrocode}
+%
+% \subsection{Debugging code}
+% the debugging code is just temporary
+%
+% For now we have debugging turned on by default
+% \begin{macrocode}
+\bool_new:N \g_fnote_debug_bool
+\bool_gset_true:N \g_fnote_debug_bool
+% \end{macrocode}
+% We log the hooks in the footnote mark command, but only once
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_debug_footnotemark:
+ {
+ \bool_if:NT \g_fnote_debug_bool
{
\LogHook{fnmark/before}
\LogHook{fnmark}
@@ -503,9 +889,38 @@
\LogHook{fnmark/after}
\cs_gset_eq:NN \@@_debug_footnotemark: \prg_do_nothing:
}
-}
-
-
+ }
+% \end{macrocode}
+% Similar for the footnotetext
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_debug_footnotetext:
+ {
+ \bool_if:NT \g_fnote_debug_bool
+ {
+ \cs_log:N\@footnotetext@cfgpoint
+ \cs_log:N\@footnotetext@cfgpointii
+ \cs_log:N\@footnotetext@cfgpointiii
+ \cs_log:N\@footnotetext@cfgpointiv
+ \cs_log:N\@makefntext@cfgpoint
+ \cs_log:N\@makefntext@cfgpointii
+ \LogHook{fntext/before}
+ \LogHook{fntext}
+ \LogHook{fntext/para}
+ \LogHook{fntext/begin}
+ \LogHook{fntext/end}
+ \LogHook{fntext/after}
+% \end{macrocode}
+% Show the info only once (if at all).
+% \begin{macrocode}
+ \cs_gset_eq:NN \@@_debug_footnotetext: \prg_do_nothing:
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{The new \cs{@footnotemark} command}
+% \begin{macro}{\fnote_footnotemark:}
+% This is the main command which will replace \cs{@footnotemark}.
+% \begin{macrocode}
\cs_new_protected:Npn \fnote_footnotemark: {
\@@_debug_footnotemark:
%-------
@@ -535,17 +950,20 @@
% \end{macrocode}
% If a footnote mark is placed by its own then it should finish by
% executing \hook{fnmark/end}, resetting the space factor, and
-% finishing with \hook{fnmark/after}. However, inf a complete
+% finishing with \hook{fnmark/after}. However, in a complete
% footnote these actions have to happen only after we have handled
-% the footnote text (e.g., by placing it into an \cs{insert}. In
+% the footnote text (e.g., by placing it into an \cs{insert}). In
% such a situation \cs{_@@_footmark_finish:} below does nothing
% and the action is carried out later.
% \begin{macrocode}
\@@_footnotemark_finish:
}
-
-
-\cs_new:Npn \@@_finish: {
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_finish:,\@@_footnotemark_finish:}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_finish: {
% hyperref.sty
% memhfixc.sty --- could move fnmark/after
% scrlttr2.cls --- could vanish if footmisc uses a hook
@@ -561,57 +979,30 @@
%-------
}
-
\cs_new_eq:NN \@@_footnotemark_finish: \@@_finish:
-
-
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@kernel@process@makefnmark}
% Not a public config point but the kernel hook to add tagging
+% \begin{macrocode}
\def \@kernel@process@makefnmark { }
-
-
-% alterations not covered:
+% \end{macrocode}
+% \end{macro}
%
-% ./arabtex/afoot.sty --- too different (and probably too old)
-
-
-% Provide the name \LaTeXe{} is used to.
-
+% \begin{macro}{\@footnotemark}
+% At last provide the name \LaTeXe{} is used to.
+% \begin{macrocode}
\cs_set_eq:NN \@footnotemark \fnote_footnotemark:
-
-
-
-%-------------------------------------
-
-\NewMirroredHookPair{fntext/before}{fntext/after}
-\NewHook{fntext}
-\NewHook{fntext/para}
-\NewHook{fntext/begin}
-\NewHook{fntext/end}
-
-
-\cs_new:Npn \@@_debug_footnotetext: {
- \bool_if:NT \g_fnote_debug_bool
- {
- \cs_log:N\@footnotetext@cfgpoint
- \cs_log:N\@footnotetext@cfgpointii
- \cs_log:N\@footnotetext@cfgpointiii
- \cs_log:N\@footnotetext@cfgpointiv
- \cs_log:N\@makefntext@cfgpoint
- \cs_log:N\@makefntext@cfgpointii
- \LogHook{fntext/before}
- \LogHook{fntext}
- \LogHook{fntext/para}
- \LogHook{fntext/begin}
- \LogHook{fntext/end}
- \LogHook{fntext/after}
% \end{macrocode}
-% Show the info only once (if at all).
+% \end{macro}
+%
+%
+% \subsection{The new \cs{@footnotetext} command}
+%
+%
+% \begin{macro}{\fnote_footnotetext:n}
% \begin{macrocode}
- \cs_gset_eq:NN \@@_debug_footnotetext: \prg_do_nothing:
- }
- }
-
\cs_new_protected:Npn \fnote_footnotetext:n #1 {
\@@_debug_footnotetext:
%-------
@@ -690,55 +1081,75 @@
\UseHook{fntext/after}
%-------
}
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext@cfgpoint}
% default for config point (1 arg)
+% \begin{macrocode}
\cs_new_protected:Npn \@footnotetext@cfgpoint { \insert\footins }
-
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@footnotetext@cfgpointii}
% default for config point (1 arg)
+% \begin{macrocode}
\cs_new_protected:Npn \@footnotetext@cfgpointii { \@makefntext }
-
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext@cfgpointiii}
% default for config point (0 args)
+% \begin{macrocode}
\cs_new_protected:Npn \@footnotetext@cfgpointiii { \rule\z@\footnotesep }
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext@cfgpointiv}
% default for config point (0 args)
+% \begin{macrocode}
\cs_new_protected:Npn \@footnotetext@cfgpointiv { \@finalstrut\strutbox }
-
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@kernel@process@footnotetext}
% kernel hook for tagging (2 args)
+% \begin{macrocode}
\cs_new_protected:Npn \@kernel@process@footnotetext {}
-
+% \end{macrocode}
+% \end{macro}
+%
% Provide the name \LaTeXe{} is used to and do this unconditionally
% (no patching of class code if any). This means that if a class provides it own
% definition that gets lost and if necessary needs to be handled
-% with firstaid (or updating of the class.
-
-\AddToHook{begindocument}{
- \cs_set_eq:NN \@footnotetext \fnote_footnotetext:n
-}
-
-% alterations not covered:
+% with firstaid (or updating of the class).
+% \begin{macrocode}
+\AddToHook{begindocument}
+ {
+ \cs_set_eq:NN \@footnotetext \fnote_footnotetext:n
+ }
+% \end{macrocode}
%
-% ./revtex4-1/revtex4-1.cls ./revtex/ltxutil.sty ./revtex/revtex4-2.cls ... (need analysis)
-% ./bigfoot/bigfoot.sty
-
-
-
-% \footnotemargin is the logic implemented by footmisc. Perhaps we
+% \subsection{The new \cs{@makefntext} command}
+%
+% \cs{footnotemargin} is the logic implemented by footmisc. Perhaps we
% don't want to do this like that in the kernel but for now I have
% used this interface unchanged.
-
-
+% \begin{macrocode}
\newdimen\footnotemargin
\footnotemargin\maxdimen % no value given
-\AtBeginDocument{
- \ifdim \footnotemargin=\maxdimen
- \setlength\footnotemargin{1.8em}
- \fi
-}
-
+\AtBeginDocument
+ {
+ \ifdim \footnotemargin=\maxdimen
+ \setlength\footnotemargin{1.8em}
+ \fi
+ }
+% \end{macrocode}
+% \begin{macro}{\fnote_makefntext:n}
+% \begin{macrocode}
\cs_new_protected:Npn \fnote_makefntext:n #1 {
% \end{macrocode}
% Some classes in their redefinition for \cs{@makefntext} have
@@ -765,36 +1176,45 @@
\@makefntext@cfgpointii
{ #1 }
}
-
-
-
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext@cfgpoint}
% default for config point (1 arg)
+% \begin{macrocode}
\cs_new_protected:Npn \@makefntext@cfgpoint { \noindent }
-
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext@cfgpointii}
% default for config point (1 arg)
+% \begin{macrocode}
\cs_new_protected:Npn \@makefntext@cfgpointii #1 { #1 }
% \end{macrocode}
+% \end{macro}
%
+% \subsubsection{Making documents use the new \cs{@makefntext}}
%
+% If the definition for \cs{@makefntext} is that of the standard
+% classes then replace it with \cs{fnote_makefntext:n}, otherwise
+% try to patch the definition.
%
-% If the definition for \cs{@makefntext} is that of the standard
-% classes then replace it with \cs{fnote_makefntext:n}, otherwise
-% try to patch the definition.
+% Here is the definition the way it is in
+% \texttt{classes.dtx}. Notice that (for saving space) there is no
+% space after \texttt{em} to terminate the assignment. We need to
+% mimic that, otherwise a test would return false even if the
+% definition has not been modified.
%
-% Here is the the definition the way it is in
-% \texttt{classes.dtx}. Notice that (for saving space) there is no
-% space after \texttt{em} to terminate the assignment. We need to
-% mimic that, otherwise a test would return false even if the
-% definition has not been modified.
%
+% \begin{macro}{\old@std@class@makefntext}
% \begin{macrocode}
\newcommand\old@std@class@makefntext[1]{%
\parindent 1em%
\noindent
\hb@xt@1.8em{\hss\@makefnmark}#1}
-
% \end{macrocode}
+% \end{macro}
+%
% Here is the messy code for patching. Note that this is only there
% to help classes along that aren't updated yet so it does some
% minimal patching to hopefully add configuration points in the
@@ -822,7 +1242,6 @@
% \cs{@makefnmark} without surrounding it in a box and if that
% fails it gives up with an \cs{ERROR} (which needs to get a proper definition).
% \begin{macrocode}
-
\tl_new:N \l_@@_patch_tl
\cs_new_eq:NN \@@_tmp:w \ERROR
@@ -853,6 +1272,7 @@
%\begin{verbatim}
% AAA \@makefntext@processX { \hbox BBB }
%\end{verbatim}
+%
% \begin{macrocode}
\cs_new:Npn \@@_patch_hbox:w #1 \hbox #2 #
{ \exp_stop_f: #1 \@makefntext@processX { \hbox #2 } }
@@ -869,25 +1289,27 @@
% different structure so this is a simple reshuffling. Would be
% better if we can patch the right structure in directly, but I'm
% not a patch person, so this is the simple way out for now:
-%
+%
% \begin{macrocode}
\cs_new:Npn \@makefntext@processX #1#2{\@makefntext@cfgpoint{#1{#2}}}
% \end{macrocode}
+%
% At \verb=\begin{document}= check if the current definition is
% that of the standard classes and if so replace it by
% \cs{fnote_makefntext:n} otherwise try and patch the definition
% using the approach above.
% \begin{macrocode}
-\AddToHook{begindocument}{
- \cs_if_eq:NNTF \@makefntext \old@std@class@makefntext
- {
- \cs_set_eq:NN \@makefntext \fnote_makefntext:n
- }
- {
- \@@_patch:
- }
-}
+\AddToHook{begindocument}
+ {
+ \cs_if_eq:NNTF \@makefntext \old@std@class@makefntext
+ {
+ \cs_set_eq:NN \@makefntext \fnote_makefntext:n
+ }
+ {
+ \@@_patch:
+ }
+ }
% possibly add the following to check for multiple \hbox in
@@ -898,63 +1320,112 @@
%
% \end{macrocode}
%
+% \subsection{Document-level commands}
%
+% \begin{macro}{\footnotetext}
+% \begin{macrocode}
+\DeclareDocumentCommand\footnotetext {om}
+ {
+ \fnote_set_fnmark:nn {#1} \@mpfn
+ \@footnotetext {#2}
+ }
+% \end{macrocode}
+% \end{macro}
%
%
-% \subsection{Document-level commands}
-%
-% \changes{v0.6b}{2022/07/22}{Make mandatory arguments of \cs{footnote}
-% and \cs{footnotetext} long (gh863)}
+% \begin{macro}{\footnote}
% \begin{macrocode}
+\DeclareDocumentCommand\footnote {om}
+ {
+ \fnote_step_fnmark:nn {#1} \@mpfn
+ \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing:
+ \@footnotemark
+ \cs_set_eq:NN \@@_footnotemark_finish: \@@_finish:
+ \@footnotetext {#2}
+ \@@_footnotemark_finish:
+ }
+% \end{macrocode}
+% \end{macro}
+%
-\DeclareDocumentCommand\footnotetext {o+m} {
- \fnote_set_fnmark:nn {#1} \@mpfn
- \@footnotetext {#2}
-}
-
-
-%-------------------------------------
-
-
-\DeclareDocumentCommand\footnote {o+m} {
- \fnote_step_fnmark:nn {#1} \@mpfn
- \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing:
- \@footnotemark
- \cs_set_eq:NN \@@_footnotemark_finish: \@@_finish:
- \@footnotetext {#2}
- \@@_footnotemark_finish:
-}
-
-%-------------------------------------
-
-
-\DeclareDocumentCommand\footnotemark {o} {
- \fnote_step_fnmark:nn {#1} { footnote }
- \@footnotemark
-}
-
-
-%-------------------------------------
-
-\DeclareDocumentCommand\footref {m}{%
- \begingroup
- \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
- \endgroup
- \@footnotemark
-}
-
+% \begin{macro}{\footnotemark}
+% \begin{macrocode}
+\DeclareDocumentCommand\footnotemark {o}
+ {
+ \fnote_step_fnmark:nn {#1} { footnote }
+ \@footnotemark
+ }
% \end{macrocode}
-%
+% \end{macro}
+
+% \begin{macro}{\footref}
+% \cs{footref} used the starred \cs{ref} in \cs{@thefnmark}
+% as the linking is handled by the tagging code inside
+% the \cs{@footnotemark}.
+% \cs{footref} should not try to link to its related related
+% note automatically but should instead use the label.
+% This is passed to \cs{@footnotemark} through
+% \cs{l__fnote_currentlabel_tl}.
+%
% \begin{macrocode}
-%<@@=>
+\DeclareDocumentCommand\footref {m}
+ {
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref*{#1}}%
+ \endgroup
+ \bool_set_false:N \l_@@_autodetect_bool
+ \tl_set:Nn \l_@@_currentlabel_tl {#1}
+ \@footnotemark
+ \bool_set_true:N \l_@@_autodetect_bool
+ }
% \end{macrocode}
+% \end{macro}
%
%
+% \subsection{Firstaid for packages and classes}
%
+% \subsection{Kernel patches}
+% Tagging of footnotes in minipages require a change in the minipage commands
+% We define at first a local configuration command for minipage footnotes.
%
+% TODO remove the dependency to etoolbox, and need for the patch.
+% \begin{macrocode}
+\cs_new_protected:Npn \@mpfootnotetext@cfgpoint #1
+ {
+ \global\setbox\@mpfootins\vbox{%
+ \unvbox\@mpfootins
+ #1
+ }
+ }
+% \end{macrocode}
+% Then we patch \cs{@iiiminipage}
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+\ExplSyntaxOff
+\patchcmd\@iiiminipage
+ {\let\@footnotetext\@mpfootnotetext}
+ {\let\@footnotetext@cfgpoint\@mpfootnotetext@cfgpoint}
+ {}{\ERROR}
+\ExplSyntaxOn
+% \end{macrocode}
%
+% \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
+% 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.
%
-% \subsection{Firstaid for packages and classes}
+% \begin{macrocode}
+\AddToHook{class/memoir/before}
+ { \let\new@std@class@makecol\@makecol }
+\AddToHook{class/memoir/after}
+ {
+ \cs_set_eq:NN \@footnotemark \fnote_footnotemark:
+ \cs_set_eq:NN \@makefntext\old@std@class@makefntext
+ \cs_set_eq:NN \@makecol\new@std@class@makecol
+ }
+% \end{macrocode}
%
% \subsubsection{\pkg{setspace}}
%
@@ -967,156 +1438,410 @@
% \end{macrocode}
%
%
-%
-%
% \subsubsection{\pkg{hyperref}}
%
-% Prevent hyperref from redefining footnote stuff --- this is a
-% temp solution.
+% hyperref has a hook which allows to disable its footnote
+% related patches. As we will handle links directly in the code
+% this is used.
+%
% \begin{macrocode}
-\AddToHook{package/hyperref/after}{
- \let\H@@footnotetext\fnote_footnotetext:n
- \let\H@@footnotemark\fnote_footnotemark:
- \let \@footnotetext \fnote_footnotetext:n
- \let \@footnotemark \fnote_footnotemark:
-}
-
-
-
+\def\hyper@nopatch@footnote{}
% \end{macrocode}
-%
-% \subsection{Stuff that needs cleanup and documentation}
-%
+% We use the hyperref commands for now for links. To avoid
+% to have to test for hyperref we provide dummies.
+% TODO consider to use specials to get similar spacing.
% \begin{macrocode}
-
-
-%-------------------------------------
-
-% use of kerns to mark h-mode positions (unit sp)
+\AtBeginDocument
+ {
+ \providecommand\hyper@linkstart{\@gobbletwo}
+ \providecommand\hyper@linkend{\@empty}
+ }
+% \end{macrocode}
%
-% 1 = CJK
-% 2 = CJK
-% 3 = multiple footnotes (footmisc, koma, eledmac, tufte, memoir,
-% parnotes, sidenotes)
-% 3 = outer kern in letter spacing (letterspace)
-% 3 = beginning of list (examdesign.cls)
-% 4 = CJK pigin
-% 5 = CJK ruby
-
-% 1-4 = polyglossia for korean
-
-%-------------------------------------
-
-
-
-%-------------------------------------
-% Tagging
-%-------------------------------------
-
-% hyperref support only when loaded (improve integration)
-
-\newcounter{absfootnote}
-\AddToHook{fnmark/begin}{\stepcounter{absfootnote}} % too simple (fails with opt args)
-
-
-
-% this is rubbish and should be handled better:
-
-\cs_new_protected:Npn \tag_if_loaded:TF { \cs_if_exist:NTF \tag_struct_begin:n }
-
-
-
-\cs_new_protected:Npn \tag@FEMark #1 {
- \tag_if_loaded:TF
+% It must be possible to suppress the hyperlinking, both locally
+% and globally. hyperref should set the boolean \cs{l_fnote_link_bool}.
+% For now we test for the hyperref boolean (so it can be suppressed only globally).
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \@ifpackageloaded{hyperref}
{
- \tag_mc_end_push:
- \exp_args:Nx
- \tag_struct_begin:n{tag=Lbl,ref=fn.\the\c@absfootnote}
- \tag_mc_begin:n{tag=Lbl}
- \IfPackageLoadedTF{hyperref}{ \hyper@linkstart
- {link}{fn.\the\c@absfootnote} }{}
- #1
- \IfPackageLoadedTF{hyperref}{ \hyper@linkend }{}
- \tag_mc_end:
- \tag_struct_end:
- \tag_mc_begin_pop:n{}
+ \legacy_if:nF{Hy@hyperfootnotes}{\bool_set_false:N \l_fnote_link_bool}
}
- { #1 }
-}
-
-% to be done next round around:
+ {
+ \bool_set_false:N \l_fnote_link_bool
+ }
+ }
+% \end{macrocode}
%
-% \the\c@absfootnote should be replaced directly by some command with default meaning
-% \the\c@absfootnote so that the actual reference can be changed from the outside.
+% \subsection{Tagging and hyperlink code}
+% \subsubsection{Rolemap for structure tags}
+% We use role-mapping to get more speaking names
+% in the PDF and so ease debugging. These names are already
+% provided by tagpdf directly.
+%
+% \subsubsection{Extending the label system}
+% For \cs{footref} and (perhaps later for labeled footnotes)
+% we must extend the label system.
+% Beside the normal values we also need the structure number of the note.
+% We use the \pkg{nameref} hook until latex provides a hook for its label.
+% At first we define a suitable attribute, it uses as value the structure
+% number of the note as stored in \cs{l__fnote_currentstruct_tl}
+% \begin{macrocode}
+\ref_attribute_gset:nnnn {fnote/struct}{1}{now}{\l_@@_currentstruct_tl}
+% \end{macrocode}
%
-% there are several instances that are curently hardwired.
-
-\cs_set_eq:NN \@kernel@process@makefnmark \tag@FEMark
-
-
-
-% kernel hook for tagging (2 args)
-\cs_set:Npn \@kernel@process@footnotetext #1#2 {
- \tag_if_loaded:TF
+% We add a hook to the \pkg{nameref} hook. By default it does nothing
+% \begin{macro}{\@@_label_hook:}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_label_hook: {}
+\AddToHook{begindocument/before}
+ {
+ \RequirePackage{nameref}
+ \g@addto@macro\label@hook
+ {
+ \@@_label_hook:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% Inside a footnotetext we change the hook to store the structure number too.
+% nameref provides the name of label in \cs{label@name}.
+% \begin{macrocode}
+\AddToHook{fntext/begin}
+ {
+ \cs_set_protected:Npn \@@_label_hook:
{
- \tag_mc_end_push:
- \tag_struct_begin:n { tag=FENote,label=fn.\the\c@absfootnote }
- #1 {#2}
- \tag_struct_end:
- \tag_mc_begin_pop:n{}
+ \ref_label:Vn \label@name {fnote/struct}
}
- { #1 {#2} }
-}
-
-
+ }
+% \end{macrocode}
+%
+% \subsubsection{Storing and retrieving reference data}
+% To establish the connection between a mark and a note
+% the mark has to store its representation, and the
+% note has to analyse the stored representations to get
+% the structure numbers of its mark. This is done
+% with the public function to allow similar systems (e.g.
+% tabular notes, other footnote series) to make use of this.
+%
+%
+% \begin{macro}{\fnote_new:nn}
+% This sets up a new footnote type, the first argument
+% is the name, the second is meant for options. Currently
+% it does nothing at all.
+% It is not necessary to setup every footnote like
+% command as its own type!
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \fnote_new:nn #1 #2 % #1 name, #2 options
+ {
+ \prop_new:c { g_@@_currentmarks_ #1 _prop }
+ }
-\cs_set:Npn \@makefntext@cfgpoint #1 {
- \noindent
- \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_end_push: }
- \tag@FELbl { #1 }
-}
+\fnote_new:nn {default}{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fnote_mark_gput:nn}
+% This commands takes as argument the representation of the mark
+% (e.g. \cs{@thefnmark} and the type (typically default should work)
+% \begin{macrocode}
+\cs_new_protected:Npn \fnote_mark_gput:nn #1 #2 % #1 the representation of the mark, #2 type
+ {
+ \prop_gput:cxn { g_@@_currentmarks_ #2 _prop }
+ { \tag_get:n{struct_num} }
+ { #1 }
+ }
-\cs_set:Npn \@makefntext@cfgpointii #1 {
- \tag@FENote { #1 }
- \cs_if_exist:NT \tag_struct_begin:n { \tag_mc_begin_pop:n{} }
-}
+\cs_generate_variant:Nn \fnote_mark_gput:nn {no,oo}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fnote_mark_gpop:nnN}
+% This commands takes as argument the representation of the mark
+% (e.g. the content of\cs{@thefnmark}), the series (typically default should work)
+% and a sequence into which every structure number in the property
+% is stored that has the same value as the mark
+% \begin{macrocode}
+\cs_new_protected:Npn \fnote_mark_gpop:nnN #1 #2 #3
+ {
+ \seq_clear:N #3
+ \prop_set_eq:Nc \l_@@_tmpa_prop { g_@@_currentmarks_ #2 _prop }
+ \prop_map_inline:Nn \l_@@_tmpa_prop
+ {
+ \tl_if_eq:nnT {#1} { ##2 }
+ {
+% \end{macrocode}
+% store the key (the structure number) in the seq
+% \begin{macrocode}
+ \seq_put_right:Nn #3 { ##1 }
+% \end{macrocode}
+% remove entry as used from the global prop
+% \begin{macrocode}
+ \prop_gremove:cn { g_@@_currentmarks_ #2 _prop } {##1}
+ }
+ }
+ }
+\cs_generate_variant:Nn\fnote_mark_gpop:nnN {ooN}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Enabling tagging and links for the mark command}
+% To handle the mark in the text, we define a special command
+% which will surround \cs{@makefntext}.
+% At this time \cs{@thefnmark} is already set.
+% \begin{macrocode}
+\cs_new_protected:Npn \tag@FEMark #1 %#1 content
+ {
+% \end{macrocode}
+% end an open mc and start the structure.
+% \begin{macrocode}
+ \tag_mc_end_push:
+ \tag_struct_begin:n { tag=footnotemark }
+% \end{macrocode}
+% The associated note is either auto detected
+% or given by the user.
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_autodetect_bool
+ {
+% \end{macrocode}
+% For the auto detecting we store the structure number
+% and \cs{@thefnmark} inside a prop and set
+% the target name of the link to the current structure number.
+% TODO: this should be usable for other footnote types
+% which means the name of the prop shouldn't be fix.
+% \begin{macrocode}
+ \fnote_mark_gput:oo {\@thefnmark}{\l_fnote_type_tl}
+ \tl_set:Nx \l_@@_linktarget_tl {footnote*.\tag_get:n{struct_num}}
+ }
+% \end{macrocode}
+% If there is no autodetecting we need some id,
+% currently it is called \cs{l__fnote_currentlabel_tl}.
+% the Ref is set by looking at the label value.
+% We must also add the current structure number to the \ref of the FEnote.
+% Both must be delayed as we don't know if the objects of the FEnote and the mark
+% have already been created.
+% \begin{macrocode}
+ {
+ \hook_gput_code:nne {tagpdf/finish/before} {tagpdf/footnote}
+ {
+ \exp_not:N\fnote_gput_refs:ee
+ { \tag_get:n{struct_num} }
+ { \ref_value:Vn\l_@@_currentlabel_tl {fnote/struct} }
+ }
+% \end{macrocode}
+% in this case we set the name of the linktarget in the note
+% to the structure number of the text mark.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_linktarget_tl {footnote*.\ref_value:Vn\l_@@_currentlabel_tl {fnote/struct}}
+ }
+% \end{macrocode}
+% And now the actual content
+% \begin{macrocode}
+ \tag_mc_begin:n{tag=Lbl}
+ %
+ \bool_if:NTF \l_fnote_link_bool
+ {
+ \exp_args:No
+ \hyper@linkstart
+ { \l_fnote_link_type_tl }
+ { \l_@@_linktarget_tl }
+ #1
+ \hyper@linkend
+ }
+ { #1 }
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+% \end{macrocode}
+% At last set the kernel command to this one
+% \begin{macrocode}
+\cs_set_eq:NN \@kernel@process@makefnmark \tag@FEMark
+% \end{macrocode}
+% \subsubsection{The footnote text}
-\cs_new_protected:Npn \tag@FELbl #1 {
- \tag_if_loaded:TF
- {
- % target should perhaps be raised ...
- \IfPackageLoadedTF{hyperref}{ \hypertarget{fn.\the\c@absfootnote}{} }{}
- %\tag_struct_begin:n { tag=FENote,label=fn.\the\c@absfootnote } %alternativ location for structure
- \tag_struct_begin:n { tag=Lbl }
- \tag_mc_begin:n { tag=Lbl }
- #1
- \tag_mc_end:
- \tag_struct_end:
- }
- { #1 }
-}
+% We need a public command to append values to the Ref keys
+% \begin{macro}{\@@_gput_ref:nn,\fnote_gput_refs:nn,\fnote_gput_refs:ee}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_gput_ref:nn #1 #2 %#1 the structure number receiving the ref #2
+ {
+ \tag_if_active:T
+ {
+ \tag_struct_gput:nne {#1}{ref}{\tag_struct_object_ref:e { #2 }}
+ }
+ }
+\cs_new_protected:Npn \fnote_gput_refs:nn #1 #2 % pair of numbers
+ {
+ \@@_gput_ref:nn {#1}{#2}
+ \@@_gput_ref:nn {#2}{#1}
+ }
+\cs_generate_variant:Nn \fnote_gput_refs:nn {ee}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_dflt_struct_tl
+\tl_set:Nn \l_@@_dflt_struct_tl {1}
+% \end{macrocode}
+% kernel hook for tagging (2 args)
+% this sets the structure around the whole text
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \tag@FENote #1#2 % #1 config point, \insert\footins #2 content
+ {
+ \tag_mc_end_push:
+% \end{macrocode}
+% test if a footnote is allowed, if not move up to the document structure.
+% \begin{macrocode}
+ \tag_check_child:nnTF {FENote}{pdf2}
+ {
+ \tag_struct_begin:n { tag=footnote }
+ }
+ {
+ \tag_struct_begin:n { tag=footnote,parent=\l_@@_dflt_struct_tl }
+ }
+% \end{macrocode}
+% Store the current structure number for labels.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_currentstruct_tl { \tag_get:n{struct_num} }
+% \end{macrocode}
+% We want to move the label structure here. So we provide a container
+% It number is |\l__fnote_currentstruct_tl| plus 1.
+% \begin{macrocode}
+ \tag_struct_begin:n { tag=footnotelabel }\tag_struct_end:
+% \end{macrocode}
+% after we have opened the structure we can use the structure number to
+% try to detect the connected marks. As with the marks we assume that sometimes
+% no auto detection is done.
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_autodetect_bool
+ {
+% \end{macrocode}
+% find open marks with identical \cs{@thefnmark}
+% \begin{macrocode}
+ \fnote_mark_gpop:ooN { \@thefnmark }{ \l_fnote_type_tl } \l_@@_currentrefs_seq
+% \end{macrocode}
+% Then we store the object numbers of the marks in the /Ref of the FENote structure:
+% and the number of the FEnote into the marks structure:
+% \begin{macrocode}
+ \seq_map_inline:Nn \l_@@_currentrefs_seq
+ {
+ \fnote_gput_refs:ee {##1}{ \l_@@_currentstruct_tl }
+ }
+ }
+% \end{macrocode}
+% If no auto detection is done
+% \begin{NOTE}{UF}
+% TODO: decide what to do here: some label in the optional argument?
+% or refer to \cs{footref}
+% \end{NOTE}
+% \begin{macrocode}
+ {%no auto
-\cs_new_protected:Npn \tag@FENote #1 {
- \tag_if_loaded:TF
- {
- \tag_mc_begin:n{tag=FENote}
- #1
+ }
+% \end{macrocode}
+% This finish the setup of the tagging structure.
+% Now we process the text. The destinations for the links are set with the label
+% so that we can be sure that we are in hmode.
+% \begin{macrocode}
+ #1 {#2}
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+% \end{macrocode}
+% At last set the kernel command to this one
+% \begin{macrocode}
+\cs_set_eq:NN \@kernel@process@footnotetext \tag@FENote
+% \end{macrocode}
+%
+% \cs{@makefntext@cfgpoint} is the configuration point responsible for
+% typesetting the mark in the note. We use it to surround
+% the mark with the needed tagging commands.
+%
+% TODO check if this should/can be kernel configuration points
+% or if an additional kernel configuration points are needed.
+% If yes, what about the paragraph start and the paratagging??
+%
+% \begin{macrocode}
+\cs_set_protected:Npn \@makefntext@cfgpoint #1 %#1 code that typesets the mark.
+ {
+ \noindent
+ \tag_mc_end_push:
+ \tag@FENoteLbl { #1 }
+ \tag_mc_begin_pop:n{}
+ }
+% \end{macrocode}
+% \cs{tag@FENoteLbl} creates the label in the note on the bottom.
+% It also adds link targets for the hyperlinking.
+%
+% \begin{macro}{\tag@FENoteLbl}
+% \begin{macrocode}
+\cs_new_protected:Npn \tag@FENoteLbl #1
+ {
+% \end{macrocode}
+% We create a link target for every related mark. The name is footnote* + structure number
+% of the mark. We also add a link target for the current structure (for footref)
+% \begin{macrocode}
+ %\seq_show:N\l_@@_currentrefs_seq
+ \seq_map_inline:Nn\l_@@_currentrefs_seq {\MakeLinkTarget*{footnote*.##1}}
+ \MakeLinkTarget*{footnote*.\l_@@_currentstruct_tl}
+% \end{macrocode}
+% now we add the tagging commands. We move the structure of the label to
+% to the container at the begin of the note.
+% \begin{NOTE}{UF}
+% check if the NonStruct is really needed. Perhaps we can simply move the mc.
+% \end{NOTE}
+% \begin{macrocode}
+ \tag_struct_begin:n { tag=NonStruct,parent=\l_@@_currentstruct_tl +1 }
+ \tag_mc_begin:n { tag=Lbl }
+ #1
\tag_mc_end:
- %\tag_struct_end: %alternative location for structure end but ends inside a P
- }
- { #1 }
-}
-
+ \tag_struct_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \cs{@makefntext@cfgpointii} is the
+% configuration point around the actual note text.
+%
+% TODO check if this should/can be kernel configuration points
+% \begin{macrocode}
+\cs_set_protected:Npn \@makefntext@cfgpointii #1
+ {
+ \tag_mc_end_push:
+ \tag@FENotetext { #1 }
+ \tag_mc_begin_pop:n{}
+ }
+% \end{macrocode}
+% \begin{macro}{\tag@FENotetext}
+%
+% This command currently only adds an MC chunk,
+%
+% TODO Should it set a mc or could it rely on the content?
+% \begin{macrocode}
+\cs_new_protected:Npn \tag@FENotetext #1
+ {
+ \tag_mc_begin:n{}
+ #1
+ \tag_mc_end:
+ }
+% \end{macrocode}
+% \end{macro}
%-------------------------------------
-
+% \begin{macrocode}
\ExplSyntaxOff
%</kernel>
% \end{macrocode}
-%
+% \begin{macrocode}
+%<@@=>
+% \end{macrocode}
%
% \section{Reimplementing the \pkg{footmisc} package}
%
@@ -1571,7 +2296,10 @@
\ifFN@multiplefootnote
\providecommand*{\multiplefootnotemarker}{3sp}
- \providecommand*{\multfootsep}{,}
+% we tag the separator as artifact
+ \ExplSyntaxOn
+ \providecommand*{\multfootsep}{\tag_mc_end_push:\tag_mc_begin:n{artifact},\tag_mc_end:\tag_mc_begin_pop:n{}}
+ \ExplSyntaxOff
\AddToHook{fnmark} {\FN@mf@check}
\AddToHook{fnmark/end} {\FN@mf@prepare}
%
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 45ac1cce92..de5dbb1e21 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-mathpkg.dtx b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx
new file mode 100644
index 0000000000..14d8e94362
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx
@@ -0,0 +1,102 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-mathpkg.dtx
+%
+% Copyright (C) 2022,2023 The LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-mathpkg.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-mathpkg} code\thanks{}}
+% \author{\LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\class[1]{\texttt{#1.cls}}
+% \providecommand\pkg[1]{\texttt{#1}}
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% This file implements adaptions to various math packages needed for
+% the tagging project.
+%
+% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex }
+%
+% \section{The Implementation}
+%
+% \begin{macrocode}
+%<@@=math>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{File declaration}
+% \begin{macrocode}
+\ProvidesFile{latex-lab-mathpkg.ltx}
+ [2023-01-05 v0.1a mathpkg adaptions]
+% \end{macrocode}
+% \subsection{Tagpdf support}
+% To make the code independent from tagging being loaded and active
+% we load the \pkg{tagpdf-base} package:
+%
+% \begin{macrocode}
+\RequirePackage{tagpdf-base}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\AddToHook{package/breqn/after}{
+ \RegisterMathEnvironment{dmath}
+ \RegisterMathEnvironment{dgroup*}
+ \AddToHook{env/dmath/begin}{\tagpdfparaOff}
+ \AddToHook{env/dgroup*/begin}{\tagpdfparaOff}
+}
+% \end{macrocode}
+%
+% Force loading of \pkg{amsmath} before \pkg{cases}.
+% \begin{macrocode}
+\AddToHook {package/cases/before}{\RequirePackage{amsmath}}
+\AddToHook{package/cases/after}{
+ \RegisterMathEnvironment{subnumcases}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+% \subsection{Wrapper files for testphase key}
+% \Finale
+%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
new file mode 100644
index 0000000000..219b39d6cb
--- /dev/null
+++ 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-mathtagging.dtx b/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx
new file mode 100644
index 0000000000..61818bde15
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx
@@ -0,0 +1,1277 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-mathtagging.dtx
+%
+% Copyright (C) 2022-2023 The LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%
+\def\ltmathtaggingdate{2023-03-08}
+\def\ltmathtaggingversion{v0.5a}
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+
+\usepackage{todonotes}
+
+\begin{document}
+ \DocInput{latex-lab-mathtagging.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-mathtagging} code\thanks{}}
+% \author{Frank Mittelbach, Joseph Wright, \LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\class[1]{\texttt{#1.cls}}
+% \providecommand\pkg[1]{\texttt{#1}}
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% ^^A \car {...} for marginal comments
+% ^^A \car*{...} for longer inline comments
+%
+% \NewDocumentCommand\car{sO{}m}
+% {\IfBooleanTF{#1}{\todo[inline,color=blue!10,#2]{#3}}^^A
+% {\todo[color=blue!10,#2]{#3}}}
+%
+% \NewDocumentCommand\fmi{sO{}m}
+% {\IfBooleanTF{#1}{\todo[inline,#2]{#3}}^^A
+% {\todo[#2]{#3}}}
+%
+%
+%
+% \begin{abstract}
+% This is an experimental prototype. It captures math material
+% (basically okay, but the interfaces for packages aren't yet
+% there) and tags the material (which is not yet anywhere near the
+% final state). That part is provided for experimentation and to
+% gather feedback, etc.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% \car*{Todo: update all the documentation! Both here and
+% (what little there is!) in the implementation section.}
+%
+% This file implements capture of all math mode material at the outer
+% level, i.e., a formula is captured in its entirety with inner text
+% blocks (possibly containing further math) absorbed as part of the
+% formula. For example,
+%\begin{verbatim}
+% \[ a \in A \text{ for all $a<5$} \]
+%\end{verbatim}
+% would only result in a single capture of the tokens
+% ``\verb*/a \in A \text{ for all $a<5$}/''.
+%
+% \subsection{Code level interfaces}
+%
+% \begin{function}{\math_register_env:n, \math_register_env:nn}
+% \begin{syntax}
+% \cs{math_register_env:n} \Arg{env}
+% \cs{math_register_env:nn} \Arg{env} \Arg{options}
+% \end{syntax}
+% Registers the \meta{env} as a math environment which should be captured
+% and made available. This is necessary for all top-level math mode
+% environments: low-level errors may result if these are not correct
+% set up. One or more key--value \meta{options} may also be given:
+% \begin{itemize}
+% \item[\texttt{arg-spec}] The argument specification taken by the
+% beginning of the environment; this is used to remove non-mathematical
+% material.
+% \end{itemize}
+% \end{function}
+%
+% \begin{function}{\math_processor:n}
+% \begin{syntax}
+% \cs{math_processor:n} \Arg{tokens}
+% \end{syntax}
+% Declares that the captured math content should be passed to the
+% \meta{tokens}, which will receive the environment type as |#1| and
+% the content as |#2|.
+% \end{function}
+%
+% \subsection{Document level interfaces}
+%
+% \begin{function}{\RegisterMathEnvironment}
+% \begin{syntax}
+% \cs{RegisterMathEnvironment} \oarg{options} \Arg{env}
+% \end{syntax}
+% Registers the \meta{env} as a math environment which should be captured
+% and made available. This is necessary for all top-level math mode
+% environments: low-level errors may result if these are not correct
+% set up. One or more key--value \meta{options} may also be given:
+% \begin{itemize}
+% \item[\texttt{arg-spec}] The argument specification taken by the
+% beginning of the environment; this is used to remove non-mathematical
+% material.
+% \end{itemize}
+% \end{function}
+%
+% \section{Known current bugs, etc.}
+% \car*{New Section, now with subsections.\\
+% As indicated, these lists are probably incomplete.\\
+% Some of these have been addressed in a more recent branch.}
+%
+% \subsection{Capture/grabbing problems}
+%
+% \begin{enumerate}
+% \item Incorrect grabbing of |$|-math when there is also
+% explicit |$|-math within a \textit{text environment}
+% that is itself within the math that should all be grabbed.
+% \item Similar incorrect grabbing with |$$| also.
+% \item The grabbing, for all the display environments (and |\) \]|), needs
+% to deal with nesting: \pkg{amsmath} contains code for this.
+% \item
+% \end{enumerate}
+%
+% \subsection{Other problems}
+%
+% \begin{enumerate}
+% \item
+% The presence of \cs{m@th} in association with \cs{ensuremath}
+% does not necessarily indicate fakemath. This is because
+% wanting mathsurround to be zero is very reasonable and common,
+% \emph{even when the math is genuine} (and hence needs to be collected).
+% \item User-defined environments can create problems; but this area, of
+% new, copied and changed environments, has not yet been developed.
+%
+% \car*{Joseph wrote, inter alia:\\
+% My thinking [regarding] \cs{RegisterMathEnvironment}\\
+% - (New) Math environments should not be created-then-patched, but only
+% generated by a [(future)] dedicated command (\cs{DeclareMathEnviornment},
+% presumably)\\
+% - Math environments created with \pkg{ltcmd} [commands] should not be copied, . . .\\
+% - Package authors should be able to manually set up math environments with a public boolean.}
+%
+% \item
+% \end{enumerate}
+%
+%
+% \subsection{Other ToDos}
+%
+% \begin{enumerate}
+% \item Add (some of) the math display commands that were \enquote{lifted from
+% plain}, e.g., \cs{displaylines} \cs{eqalign}(??).
+% \item
+% \end{enumerate}
+%
+%
+% \car*{\cs{MaybeStop} (temporarily) not executed, as it is unknown on Chris' system.}
+% \iffalse
+% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex }
+% \else
+% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
+% \fi
+%
+% \section{The Implementation}
+%
+% \begin{macrocode}
+%<@@=math>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{File declaration}
+%
+% \car{Change description here?}
+% \begin{macrocode}
+\ProvidesFile{latex-lab-mathtagging.ltx}
+ [\ltmathtaggingdate\space
+ \ltmathtaggingversion\space
+ Grab all the math(s) and tag it (experiments)]
+% \end{macrocode}
+%
+% Temp loading \ldots
+% \begin{macrocode}
+\AddToHook{begindocument/before}{\RequirePackage{latex-lab-testphase-block-tagging}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \subsection{Setup}
+%
+% Loading \pkg{amsmath} is an absolute requirement: this avoids needing to
+% have conditional definitions and deals with how to define \cs{[}/\cs{]}
+% neatly.
+% \begin{macrocode}
+\tl_gput_right:Nn \@kernel@before@begindocument
+ { \RequirePackage { amsmath } }
+% \end{macrocode}
+%
+%
+% \subsection{Data structures}
+%
+%
+%
+% \begin{variable}{\l_@@_collected_bool}
+% Tracks whether math mode material has been collected, which happens inside
+% \pkg{amsmath} environments as well as those handled directly here.
+%
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_collected_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \car{Change first tl name below: `env' $=>$ `info'?\\
+% Or do we need an extra storage tl?}
+%
+% \begin{variable}{\g_@@_grabbed_env_tl, \g_@@_grabbed_math_tl}
+% \begin{macrocode}
+\tl_new:N \g_@@_grabbed_env_tl
+\tl_new:N \g_@@_grabbed_math_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \subsection{Interface commands}
+%
+% \begin{macro}
+% {\@@_process:nn, \@@_process:Vn, \@@_process_auxi:nn, \@@_process_auxii:nn}
+% A no-op place-holder; the internal wrapper means that it does not need to
+% be concerned with internals.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_process:nn #1#2
+ {
+ \legacy_if:nF { measuring@ }
+ {
+ \tl_if_in:nnF {#2} { \m@th }
+ { \tl_trim_spaces_apply:nN {#2} \@@_process_auxi:nn {#1} }
+ }
+ }
+\cs_generate_variant:Nn \@@_process:nn { V }
+\cs_new_protected:Npn \@@_process_auxi:nn #1#2
+ {
+ \tl_gset:Nn \g_@@_grabbed_env_tl {#2}
+ \tl_gset:Nn \g_@@_grabbed_math_tl {#1}
+ \@@_process_auxii:nn {#2} {#1}
+ }
+\cs_new_protected:Npn \@@_process_auxii:nn #1#2 { }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\math_processor:n}
+% A simple installer
+% \begin{macrocode}
+\cs_new_protected:Npn \math_processor:n #1
+ { \cs_set_protected:Npn \@@_process_auxii:nn ##1##2 {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Content grabbing}
+%
+% \begin{macro}{\@@_grab_dollar:w}
+% Grab up to a single |$|, for inline math mode, suppressing
+% any processing if the first token is \tn{m@th}.
+%
+% \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{macrocode}
+\cs_new_protected:Npn \@@_grab_dollar:w % $
+ #1 $
+ {
+% \end{macrocode}
+% \fmi{what's that test doing?}
+% \begin{macrocode}
+ \tl_if_blank:nF {#1}
+ {
+ \@@_process:nn { math } {#1} % $
+% fairly simple this one
+ \tagmcend %end P-chunk, in code: \tag_mc_end_push:
+ \@kernel@math@begin
+ #1 $
+ \@kernel@math@end
+ \tagmcbegin{} % restart P-chunk (whatsits in pdftex)
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_grab_dollardollar:w}
+% And for the classical \TeX{} display structure.
+% \begin{macrocode}
+
+\skip_new:N \l_@@_tmpa_skip
+
+\cs_new_protected:Npn \@@_grab_dollardollar:w % $$
+ #1 $$
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \@@_tag_dollardollar_display:nn { equation* }{#1}
+ #1
+ $$
+ }
+ }
+
+\cs_new_protected:Npn \@kernel@close@P {
+ \tagmcend %end P-chunk, in code: \tag_mc_end_push:
+ \int_gincr:N \g__tag_para_end_int
+ \bool_if:NT \l__tag_para_show_bool
+ { \tag_mc_begin:n{artifact}
+ \rlap{\color_select:n{red}\tiny\ \int_use:N\g__tag_para_end_int}
+ \tag_mc_end:
+ }
+ \tag_struct_end:
+}
+
+
+
+\cs_new_protected:Npn \@@_tag_dollardollar_display:nn #1#2 {
+ \@@_process:nn {#1} {#2}
+ \@kernel@close@P
+ \@kernel@math@begin
+% \skip_set:Nn \belowdisplayskip {-\belowdisplayskip}
+% \skip_set:Nn \belowdisplayshortskip {-\belowdisplayshortskip}
+% \int_set:Nn \postdisplaypenalty {10000}
+%%
+% \group_insert_after:N \@@_tag_dollardollar_display_end:
+}
+
+\cs_new_protected:Npn \@@_tag_dollardollar_display_end: {
+% \typeout{== tag dollarldollar display end}
+% \ShowTagging{struct-stack}
+ \tagpdfparaOff
+ \para_raw_end:
+ \tagpdfparaOn
+ \l_@@_tmpa_skip \lastskip
+ \@kernel@math@end
+ \penalty \postdisplaypenalty
+ \skip_vertical:n { -\l_@@_tmpa_skip }
+%
+ \@doendpe % this has no \end{...} to take care of it
+}
+
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_grab_inline:w}
+% Collect inline math content and deal with the need to move to math mode.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_inline:w % \(
+ #1 \)
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \@@_process:nn { math } {#1}
+ $ #1 $
+ }
+ \bool_set_false:N \l_@@_collected_bool
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_grab_eqn:w}
+% For the most common use of \cs{[}/\cs{]}: turn into an environment.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_eqn:w % \[
+ #1 \]
+ {
+% \typeout{collected? = \bool_if:NTF \l_@@_collected_bool {true}{false}}
+ \begin { equation* } #1 \end { equation* }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Marking math environments}
+%
+% A general mechanism for math mode environments that do not grab their
+% content (\emph{cf.}~most \pkg{amsmath} environments).
+%
+% \begin{variable}{\l_@@_env_name_tl}
+% To allow us to carry out \enquote{special effects}
+% \begin{macrocode}
+\tl_new:N \l_@@_env_name_tl
+% \end{macrocode}
+% \end{variable}
+%
+% Here we set up specialised handling of environments. The idea for the
+% \texttt{arg-spec} key is that if an environment takes arguments, we
+% don't worry during the main grabbing. Rather, we remove the arguments
+% from the grabbed content and forward only the payload. That is done by
+% (ab)using \pkg{ltcmd}.
+% \begin{macrocode}
+\keys_define:nn { @@ }
+ {
+ arg-spec .code:n =
+ {
+ \ExpandArgs { c } \DeclareDocumentCommand
+ { @@_env \l_@@_env_name_tl _aux: }
+ {#1}
+ { \@@_env_forward:w }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\math_register_env:nn}
+% \begin{macro}{\math_register_env:n}
+% \begin{macro}{\RegisterMathEnvironment}
+% Set up to capture environment content and make available.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \math_register_env:nn #1#2
+ {
+ \tl_set:Nn \l_@@_env_name_tl {#1}
+ \keys_set:nn { @@ } {#2}
+ \cs_gset_eq:cc { @@_env_ #1 _begin: } {#1}
+ \cs_gset_eq:cc { @@_env_ #1 _end: } { end #1 }
+%
+ \ExpandArgs { nnx } \RenewDocumentEnvironment {#1} { b }
+ {
+% \bool_set_true:N \exp_not:N \l_@@_collected_bool
+% \cs_if_exist:cTF { @@_env #1 _aux: }
+% {
+% \exp_not:c { @@_env #1 _aux: }
+% ####1 \exp_not:N \@@_env_end: {#1}
+% }
+% { \exp_not:N \@@_process:nn {#1} {####1} }
+ \exp_not:N \bool_if:NTF \exp_not:N \l_@@_collected_bool
+ {
+% \typeout{===>B1}
+ }
+ {
+% \typeout{===>B2}
+ \cs_if_exist:cTF { @@_env #1 _aux: }
+ {
+ \exp_not:c { @@_env #1 _aux: }
+ ####1 \exp_not:N \@@_env_end: {#1}
+ }
+ { \exp_not:N \@@_process:nn {#1} {####1} }
+ \exp_not:n { \@kernel@math@registered@begin }
+ \bool_set_true:N \exp_not:N \l_@@_collected_bool
+ }
+% \exp_not:N \tracingall
+ \exp_not:c { @@_env_ #1 _begin: }
+ ####1
+ \exp_not:c { @@_env_ #1 _end: }
+% \exp_not:c { @@_env_ #1 _end: }
+% \exp_not:N \tracingnone
+% \exp_not:n { \@kernel@math@registered@end }
+ }
+ {
+ }
+ }
+
+\cs_set_protected:Npn \__cs_tmp:w #1
+ {
+ \group_begin:
+ \exp_args:No \__cs_generate_internal_variant:n
+ { \tl_to_str:n {#1} }
+ \group_end:
+ }
+\__cs_tmp:w { nnxx }
+
+
+\cs_new_protected:Npn \math_register_halign_env:nn #1#2
+ {
+ \tl_set:Nn \l_@@_env_name_tl {#1}
+ \keys_set:nn { @@ } {#2}
+ \cs_gset_eq:cc { @@_env_ #1 _begin: } {#1}
+ \cs_gset_eq:cc { @@_env_ #1 _end: } { end #1 }
+%
+ \ExpandArgs { nnxx } \RenewDocumentEnvironment {#1} { b }
+ {
+% \bool_set_true:N \exp_not:N \l_@@_collected_bool
+% \cs_if_exist:cTF { @@_env #1 _aux: }
+% {
+% \exp_not:c { @@_env #1 _aux: }
+% ####1 \exp_not:N \@@_env_end: {#1}
+% }
+% { \exp_not:N \@@_process:nn {#1} {####1} }
+ \exp_not:N \bool_if:NTF \exp_not:N \l_@@_collected_bool
+ {
+% \typeout{===>B1}
+ }
+ {
+% \typeout{===>B2}
+ \cs_if_exist:cTF { @@_env #1 _aux: }
+ {
+ \exp_not:c { @@_env #1 _aux: }
+ ####1 \exp_not:N \@@_env_end: {#1}
+ }
+ { \exp_not:N \@@_process:nn {#1} {####1} }
+ \exp_not:n { \@kernel@math@registered@begin }
+ \bool_set_true:N \exp_not:N \l_@@_collected_bool
+ }
+% \exp_not:N \tracingall
+ \exp_not:c { @@_env_ #1 _begin: }
+ ####1
+% \exp_not:c { @@_env_ #1 _end: }
+% \exp_not:N \tracingnone
+ }
+ {
+ \exp_not:c { @@_env_ #1 _end: }
+ }
+ }
+
+\cs_new_protected:Npn \math_register_odd_env:nn #1#2
+ {
+ \tl_set:Nn \l_@@_env_name_tl {#1}
+ \keys_set:nn { @@ } {#2}
+ \cs_gset_eq:cc { @@_env_ #1 _begin: } {#1}
+ \cs_gset_eq:cc { @@_env_ #1 _end: } { end #1 }
+%
+ \ExpandArgs { nnxx } \RenewDocumentEnvironment {#1} { b }
+ {
+ \exp_not:N \bool_if:NTF \exp_not:N \l_@@_collected_bool
+ {
+% \typeout{===>B1}
+ }
+ {
+% \typeout{===>B2}
+ \cs_if_exist:cTF { @@_env #1 _aux: }
+ {
+ \exp_not:c { @@_env #1 _aux: }
+ ####1 \exp_not:N \@@_env_end: {#1}
+ }
+ { \exp_not:N \@@_process:nn {#1} {####1} }
+ \exp_not:n { \@kernel@math@registered@begin }
+ \bool_set_true:N \exp_not:N \l_@@_collected_bool
+ }
+% \exp_not:N \tracingall
+ \exp_not:c { @@_env_ #1 _begin: }
+ ####1
+ }
+ {
+ \exp_not:c { @@_env_ #1 _end: }
+% needed if we don't have $$...$$
+% \exp_not:n { \typeout{---> @kernel@math@registered@end }}
+ \exp_not:n { \@kernel@math@registered@end }
+ }
+ }
+
+
+% FMi: compare with block change!
+%
+% \DeclareRobustCommand*\begin[1]{%
+% \UseHook{env/#1/before}%
+% \@ifundefined{#1}%
+% {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
+% {\def\reserved@a{\def\@currenvir{#1}%
+% \edef\@currenvline{\on@line}%
+% \@execute@begin@hook{#1}%
+% \csname #1\endcsname}}%
+% \@ignorefalse
+% \begingroup
+% \@endpefalse % tmp!!! is it ok to drop this here?
+% \reserved@a}
+
+
+\cs_new:Npn \@kernel@math@registered@begin {
+% \ShowTagging{struct-stack}
+%\typeout{==>A1}\ShowTagging{struct-stack,mc-current}
+ \mode_if_vertical:TF
+ {
+% \legacy_if:nTF { @endpe }
+% { \legacy_if_set_false:n { @endpe } }
+% { \__block_list_beginpar_vmode: }
+%
+% \typeout{==>~ at:~ \g__tag_struct_tag_tl}
+%
+ \exp_args:Noo\str_if_eq:nnF \g__tag_struct_tag_tl { \l__tag_para_main_tag_tl } % needs correction!
+ {
+% \typeout{==>A2}
+ \__block_beginpar_vmode:
+ } % needs correction!
+ }
+ {
+% \typeout{==>A3}
+ \@kernel@close@P
+% \tagmcend % needs correction!
+ }
+ \@kernel@math@begin
+ \tagpdfparaOff
+% \typeout{==>MC1}\ShowTagging{mc-current}
+}
+
+\cs_new:Npn \@kernel@math@registered@end {
+% \typeout{==>MC2}\ShowTagging{mc-current}
+ \para_raw_end:
+ \tagpdfparaOn
+ \@kernel@math@end
+% \typeout{==>MC3}\ShowTagging{mc-current}
+ \@endpetrue
+}
+
+\cs_new_protected:Npn \math_register_env:n #1
+ { \math_register_env:nn {#1} { } }
+\NewDocumentCommand \RegisterMathEnvironment { O{} m }
+ { \math_register_env:nn {#2} {#1} }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_env_forward:w}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_env_forward:w #1 \@@_env_end: #2
+ { \@@_process:nn {#2} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Document commands}
+%
+% \car*{Add one more here: \texttt{displaymath}, which
+% is equivalent to \cs{[} , \cs{]}\\
+% and hence to the basic \texttt{equation*}.\\
+% Added in more recent branch.}
+%
+% \begin{macro}
+% {\equation, \@@_equation_begin:, \equation*, \@@_equation_star_begin:}
+% \begin{macro}
+% {\endequation, \@@_equation_end:, \endequation*, \@@_equation_star_end:}
+% These environments are not set up by \pkg{amsmath} to collect their body,
+% so we do that here. This has to be done \emph{after} we can be sure
+% \pkg{amsmath} is loaded.
+%
+% \car*{Note that with \pkg{amsmath} loaded, \texttt{equation*} and \texttt{equation}\\
+% are the two basics: they are used to define the other single-row\\
+% display environments, etc.}
+%
+% \begin{macrocode}
+\tl_gput_right:Nn \@kernel@before@begindocument
+ {
+ \math_register_env:n { equation }
+ \math_register_env:n { equation* }
+% at the moment register_env can only do display math
+% \math_register_env:n { math }
+ \RenewDocumentEnvironment{math} {b}{$#1$}{}
+% and this one doesn't work either
+% \math_register_env:n { displaymath }
+ \RenewDocumentEnvironment{displaymath} {b}{\[#1\]}{}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\(, \)}
+% If math mode has not been collected, we need to do that; otherwise, worry
+% about whether we are in math mode or not. The closing command here can only
+% occur inside a collected math block: otherwise it will be simply used as
+% a delimiter.
+% \begin{macrocode}
+\cs_gset_protected:Npn \( % \)
+ {
+ \bool_if:NTF \l_@@_collected_bool
+ {
+ \mode_if_math:TF
+ { \@badmath }
+ { $ }
+ }
+ {
+ \bool_set_true:N \l_@@_collected_bool
+ \@@_grab_inline:w
+ }
+ } % \(
+\cs_gset_protected:Npn \)
+ {
+ \mode_if_math:TF
+ { $ }
+ { \@badmath }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\[, \]}
+% Again, we need to watch for when \pkg{amsmath} is loaded after this code.
+% The flag usage here is to cover the case where \cs{[}/\cs{]} is hidden
+% inside another environment. In this case the grabbing happens on
+% the outer level and should not be repeated.
+% \begin{macrocode}
+\tl_gput_right:Nn \@kernel@before@begindocument
+ {
+ \cs_gset_protected:Npn \[ % \]
+ {
+ \bool_if:NTF \l_@@_collected_bool
+ { \begin { equation* } }
+ { \@@_grab_eqn:w }
+ } % \[
+ \cs_gset_protected:Npn \]
+ {
+ \bool_if:NTF \l_@@_collected_bool
+ { \end{ equation* } }
+ { \@badmath }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ensuremath}
+% A bit of nesting fun to make sure we collect only if required.
+% \fmi{why does ensuremath need handling at all?}
+%
+% \car{Indeed! Currently, this is setup to process the math that
+% it has anyways already captured as its argument; thus it is more
+% efficient than leaving the capture to be repeated by the \cs{everymath}}
+%
+% \begin{macrocode}
+%\cs_gset_protected:Npn \ensuremath #1
+% {
+% \mode_if_math:TF
+% {#1}
+% {
+% \bool_if:NTF \l_@@_collected_bool
+% { \@ensuredmath {#1} }
+% {
+% \bool_set_true:N \l_@@_collected_bool
+% \@@_process:nn { math } {#1}
+% \@ensuredmath {#1}
+% \bool_set_false:N \l_@@_collected_bool
+% }
+% }
+% }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{\cs{everymath} and \cs{everydisplay}}
+%
+% The business end for grabbing inline math and \enquote{raw} \TeX{}
+% display. Most display math mode is actually handled elsewhere, as we
+% have macro control.
+% \begin{macrocode}
+
+\tl_new:N\tmpmathcontent
+
+
+\def\@kernel@math@begin {
+% \typeout{==>~math~begin}
+% needs different handling if we support nesting
+ \tl_gset:Nx\tmpmathcontent
+ {\exp_not:N\begin{\g__math_grabbed_env_tl}
+ \space
+ \exp_not:V\g__math_grabbed_math_tl
+ \space
+ \exp_not:N\end{\g__math_grabbed_env_tl}
+ }
+ \tagstructbegin{tag=Formula,
+ AFinline-o=\tmpmathcontent,
+ title-o=\g__math_grabbed_env_tl,
+ actualtext=\tmpmathcontent
+% alt=\tmpmathcontent
+ }
+% inner formula if multiple parts (not really implemented yet)
+ \grabaformulapartandstart
+% the above does:
+% \tagstructbegin{tag=Formula}\tagmcbegin{}
+% or just
+% \tagmcbegin{}
+}
+\def\@kernel@math@end {
+% \typeout{==>~math~end}
+% \ShowTagging{struct-stack}
+ \tagmcend
+ \if@subformulas
+ \tagstructend
+ \else
+ \fi
+ \tagstructend
+% \ShowTagging{struct-stack}
+}
+
+\exp_args:No \tex_everymath:D
+ {
+ \tex_the:D \tex_everymath:D
+ \bool_if:NF \l_@@_collected_bool
+ {
+ \bool_set_true:N \l_@@_collected_bool
+ \@@_grab_dollar:w
+ }
+ }
+\exp_args:No \tex_everydisplay:D
+ {
+ \tex_the:D \tex_everydisplay:D
+ \iftrue % this may have to be a settable flag!
+% {
+% \typeout{==>~ in~ everydisplay}
+ \skip_set:Nn \belowdisplayskip {-\belowdisplayskip}
+ \skip_set:Nn \belowdisplayshortskip {-\belowdisplayshortskip}
+ \int_set:Nn \postdisplaypenalty {10000}
+%
+ \group_insert_after:N \@@_tag_dollardollar_display_end:
+% }
+ \fi
+ \bool_if:NF \l_@@_collected_bool
+ {
+ \bool_set_true:N \l_@@_collected_bool
+ \@@_grab_dollardollar:w
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Modifying kernel environments}
+%
+% We need to cover this even though it is, of course, not encouraged.
+% \begin{macrocode}
+\math_register_env:n { eqnarray }
+\math_register_env:n { eqnarray* }
+% \end{macrocode}
+%
+% Places where math mode is (ab)used.
+% \begin{macrocode}
+\clist_map_inline:nn
+ { tabular }
+ {
+ \AddToHook{ env / #1 / begin }
+ { \bool_set_true:N \l_@@_collected_bool }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_m@th:, \m@th}
+% Handle non-math use of math mode. At present nesting isn't supported as
+% \cs{m@th} pops up in a few places that \emph{are} math mode!
+% \begin{macrocode}
+\cs_new_eq:NN \@@_m@th: \m@th
+\cs_gset_protected:Npn \m@th
+ {
+ \bool_set_true:N \l_@@_collected_bool
+ \@@_m@th:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Modifying \pkg{amsmath}}
+%
+% \begin{macro}{\@@_amsmath_align@:nn}
+% \begin{macro}
+% {
+% \@@_amsmath_gather@:n ,
+% \@@_amsmath_multline@:n
+% }
+% \begin{macro}{\align@}
+% \begin{macro}{\gather@, \multline@}
+% Mark up all of the display environments as the content is captured anyway.
+% We then use an internal macro in each environment type to insert the
+% processing code. Each of these is slightly different, so we cannot use a
+% simple loop here. The test for \cs{split@tag} is required as the
+% \texttt{split} environment internally uses \texttt{gather} \emph{when not
+% within an \pkg{amsmath}} environment, for example inside \texttt{equation}.
+% Without the precaution, we'd get two copies of the grabbed math, the second
+% of which would start with \cs{split@tag}.
+% \begin{macrocode}
+
+
+
+\tl_gput_right:Nn \@kernel@before@begindocument {
+%
+\renewenvironment{gather*}{%
+ \start@gather\st@rredtrue
+}
+{%
+% this redirection doesn't work if we alter "gather"!
+ % \endgather
+% so replace it with its real meaning
+ \math@cr \black@\totwidth@ \egroup
+ $$\ignorespacesafterend
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\common@align@ending {
+ \math@cr \black@\totwidth@
+ \egroup
+ \ifingather@
+ \restorealignstate@
+ \egroup
+ \nonumber
+ \ifnum0=`{\fi\iffalse}\fi
+ \else
+ $$%
+ \fi
+ \ignorespacesafterend
+}
+\renewenvironment{alignat}{%
+ \start@align\z@\st@rredfalse
+}{%
+ \common@align@ending
+}
+\renewenvironment{alignat*}{%
+ \start@align\z@\st@rredtrue
+}{%
+ \common@align@ending
+}
+\renewenvironment{xalignat}{%
+ \start@align\@ne\st@rredfalse
+}{%
+ \common@align@ending
+}
+\renewenvironment{xalignat*}{%
+ \start@align\@ne\st@rredtrue
+}{%
+ \common@align@ending
+}
+\renewenvironment{xxalignat}{%
+ \start@align\tw@\st@rredtrue
+}{%
+ \common@align@ending
+}
+\renewenvironment{align}{%
+ \start@align\@ne\st@rredfalse\m@ne
+}{%
+ \common@align@ending
+}
+\renewenvironment{align*}{%
+ \start@align\@ne\st@rredtrue\m@ne
+}{%
+ \common@align@ending
+}
+\renewenvironment{flalign}{%
+ \start@align\tw@\st@rredfalse\m@ne
+}{%
+ \common@align@ending
+}
+\renewenvironment{flalign*}{%
+ \start@align\tw@\st@rredtrue\m@ne
+}{%
+ \common@align@ending
+}
+%
+\renewenvironment{multline*}{\start@multline\st@rredtrue}
+{%
+ \iftagsleft@ \@xp\lendmultline@ \else \@xp\rendmultline@ \fi
+ \ignorespacesafterend
+}
+% \end{macrocode}
+% Also for "false?"
+% \begin{macrocode}
+\def\measuring@true{\let\ifmeasuring@\iftrue\tag_stop:}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%
+ \math_register_halign_env:nn {align}{}
+ \math_register_halign_env:nn {align*}{}
+ \math_register_halign_env:nn {flalign}{}
+ \math_register_halign_env:nn {flalign*}{}
+ \math_register_halign_env:nn {gather}{}
+ \math_register_halign_env:nn {gather*}{}
+ \math_register_halign_env:nn {multline}{}
+ \math_register_halign_env:nn {multline*}{}
+ \math_register_halign_env:nn {xalignat}{}
+ \math_register_halign_env:nn {xalignat*}{}
+ \math_register_halign_env:nn {xxalignat}{}
+ %
+ \@namedef{maketag @ @ @} #1{%
+% \typeout{--->maketag @ @ @}
+ \ifmeasuring@
+ \hbox{\m@th\normalfont#1}%
+ \else
+ \tagmcend \tagstructbegin{tag=Lbl}%
+ \tagmcbegin{tag=Lbl}%
+ \hbox{\m@th\normalfont#1}%
+ \tagmcend \tagstructend \tagmcbegin{}%
+ \fi
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\intertext@{%
+ \def\intertext##1{%
+ \ifvmode\else\\\@empty\fi
+ \noalign{%
+% we have to flip the sign on the skip because we flipped it on the outside
+ \penalty\postdisplaypenalty\vskip-\belowdisplayskip
+ \vbox{
+% \end{macrocode}
+% Stop tagging when measuring:
+% \begin{macrocode}
+ \ifmeasuring@\tag_stop:\fi
+ \normalbaselines
+ \ifdim\linewidth=\columnwidth
+ \else \parshape\@ne \@totalleftmargin \linewidth
+ \fi
+% \end{macrocode}
+% End the previous mc:\fmi{if we use 2 levels of formulas this would
+% need changing}
+% \begin{macrocode}
+ \tag_mc_end_push:
+% \end{macrocode}
+% We are already in a par so we change now to Span:\fmi{not true any longer}
+% \begin{macrocode}
+ \tagpdfsetup{paratag=P}%
+ \tagpdfparaOn
+ \noindent\ignorespaces##1\par
+% \end{macrocode}
+% Restart the MC
+% \begin{macrocode}
+ \tag_mc_begin_pop:n{}}%
+ \penalty\predisplaypenalty\vskip\abovedisplayskip%
+ }%
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@namedef{math@cr @ @ @ gather}{%
+ \ifst@rred\nonumber\fi
+ &\relax
+ \make@display@tag
+%
+ \maybestartnewformulatag
+%
+ \ifst@rred\else\global\@eqnswtrue\fi
+ \global\advance\row@\@ne
+ \cr
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@namedef{math@cr @ @ @ align}{%
+ \ifst@rred\nonumber\fi
+ \if@eqnsw \global\tag@true \fi
+ \global\advance\row@\@ne
+ \add@amps\maxfields@
+ \omit
+ \kern-\alignsep@
+ \iftag@
+ \setboxz@h{\@lign\strut@{\make@display@tag}}%
+ \place@tag
+ \fi
+%
+ \maybestartnewformulatag
+%
+ \ifst@rred\else\global\@eqnswtrue\fi
+ \global\lineht@\z@
+ \cr
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\restore@math@cr{\@namedef{math@cr @ @ @}{
+%
+ \maybestartnewformulatag
+%
+ \cr}}
+\restore@math@cr
+% \end{macrocode}
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+
+% \begin{macro}{}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_split_at_nl_first:w #1 \\ #2 \\ #3 \s_stop
+ {
+ \quark_if_nil:nTF {#2}
+ { {#1} { } }
+ {
+ \@@_split_chk_if_begin:ww #1 \begin \q_nil \s_mark
+ #2 \\ #3 \s_stop
+ }
+ }
+\cs_new:Npn \@@_split_chk_if_begin:ww #1 \begin #2 #3 \s_mark
+ #4 \\ \q_nil \\ \s_stop
+ {
+ \quark_if_nil:nTF {#2}
+ { {#1} {#4} }
+ {
+ \exp_after:wN \@@_split_collect_one_end:w
+ \@@_split_cleanup_begin_q_nil:w #1 \begin{#2} #3 \\ #4 \s_stop
+ { } { 1 }
+ }
+ }
+\cs_new:Npn \@@_split_cleanup_begin_q_nil:w #1 \begin \q_nil {#1}
+\cs_new:Npn \@@_split_collect_one_end:w #1 \end #2 #3 \s_stop #4 #5
+ {
+ \exp_args:Nf \@@_split_check_count_begins:nnnn
+ { \@@_split_count_begins:n { #4 #1 } } {#5}
+ { #4 #1 \end{#2} } {#3}
+ }
+\cs_new:Npn \@@_split_count_begins:n #1
+ { \int_eval:n { 0 \@@_split_count_begins:w #1 \begin \q_nil } }
+\cs_new:Npn \@@_split_count_begins:w #1 \begin #2
+ { \quark_if_nil:nF {#2} { +1 \@@_split_count_begins:w } }
+\cs_new:Npn \@@_split_check_count_begins:nnnn #1 #2 #3 #4
+ {
+ \int_compare:nNnTF {#1} = {#2}
+ {
+ \exp_last_unbraced:Nf \@@_split_final_cleanup:nn
+ { \split:n { \@@_split_guard:n {#3} #4 } }
+ }
+ {
+ \exp_args:No \use_ii_i:nn
+ { \exp_after:wN { \int_value:w \int_eval:n { #2 + 1 } } }
+ { \@@_split_collect_one_end:w #4 \s_stop {#3} }
+ }
+ }
+\cs_new:Npn \@@_split_final_cleanup:nn #1 #2
+ {
+ \exp:w \@@_split_final_cleanup:w #1
+ \@@_split_guard:n \q_nil \s_mark { }
+ {#2}
+ }
+\cs_new:Npn \@@_split_final_cleanup:w #1 \@@_split_guard:n #2 #3 \s_mark #4
+ {
+ \quark_if_nil:nTF {#2}
+ { \exp_end: { #4 #1 } }
+ { \@@_split_final_cleanup:w #3 \s_mark { #4 #1 #2 } }
+ }
+\NewDocumentCommand \splitnl { mm +m }
+ {
+ \tl_set:Nf \l_tmpa_tl { \split:n {#3} }
+ \show \l_tmpa_tl
+ \exp_after:wN \__splitnl_aux:nnNN \l_tmpa_tl #1 #2
+ }
+
+
+\cs_new:Npn \split:n #1 {
+ \@@_split_at_nl_first:w #1 \\ \q_nil \\ \s_stop }
+
+\cs_new:Npn \@@_split_at_nl:NN #1#2 {
+ \tl_set:Nf \l_tmpa_tl {
+ \exp_after:wN \@@_split_at_nl_first:w #1 \\ \q_nil \\ \s_stop }
+ \exp_after:wN \@@_split_at_nl_aux:nnNN \l_tmpa_tl #1 #2
+}
+
+\cs_new_protected:Npn \@@_split_at_nl_aux:nnNN #1 #2 #3 #4
+ {
+ \tl_gset:Nn #4 {#1}
+ \tl_gset:Nn #3 {#2}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\maybestartnewformulatag}
+%
+% \begin{macrocode}
+
+\newif\if@subformulas
+\tl_new:N \result
+
+\cs_new_protected:Npn\grabaformulapartandstart {
+ \@@_split_at_nl:NN \g__math_grabbed_math_tl \result
+ \typeout{====>first-result=\meaning\result}
+ \typeout{====>first-tmpmathcontent=\meaning\g__math_grabbed_math_tl}
+ \tl_if_empty:NTF \g__math_grabbed_math_tl
+ {
+ \typeout{====>formula~ has~ no~ subparts}
+ \global\@subformulasfalse
+ }
+ {
+ \typeout{====>formula~ has~ subparts}
+ \global\@subformulastrue
+ \edef\resulttitle{\g__math_grabbed_env_tl\space (part)}
+ \tagstructbegin{tag=Formula,
+% \end{macrocode}
+% For now we don't put anything in /alt or /ActualText on subformulas
+% \begin{macrocode}
+% alt=\result,
+ title-o=\resulttitle
+ }
+ }
+ \tagmcbegin{}
+}
+
+\cs_new_protected:Npn\grabaformulapartandmayberestart {
+ \@@_split_at_nl:NN \g__math_grabbed_math_tl \result
+ \typeout{====>result=\meaning\result}
+ \typeout{====>tmpmathcontent=\meaning\g__math_grabbed_math_tl}
+% \tl_if_empty:NTF \g__math_grabbed_math_tl
+% {
+% \typeout{====>tmpmathcontent=empty}
+% }
+% {
+% \typeout{====>tmpmathcontent=not-empty}
+ \edef\resulttitle{\g__math_grabbed_env_tl\space (part)}
+ \tagstructbegin{tag=Formula,
+ alt=\result,
+ title-o=\resulttitle
+ }
+% }
+ \tagmcbegin{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macrocode}
+\def\maybestartnewformulatag {
+\if@subformulas
+ \ifmeasuring@\else
+%
+ \tl_if_empty:NF \g__math_grabbed_math_tl
+ {
+ \tagmcend
+ \tagstructend
+ \grabaformulapartandmayberestart
+ }
+ \fi
+\fi
+}
+% \end{macrocode}
+%
+% The breqn packages changes catcodes and that isn't yet covered
+% by our mechanism.
+% \begin{macrocode}
+%\AddToHook{package/breqn/after}{
+% \typeout{===>~ in~ hook}
+% \math_register_halign_env:nn {dmath}{}
+% \math_register_halign_env:nn {dgroup*}{}
+%}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+%
+%
+
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf
new file mode 100644
index 0000000000..270cf6d721
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.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
new file mode 100644
index 0000000000..c3f43243b1
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
@@ -0,0 +1,223 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-mathtools.dtx
+%
+% Copyright (C) 2022,2023 The LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-amsmath.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \texttt{latex-lab-mathtools} code\thanks{}}
+% \author{\LaTeX{} Project}
+%
+% \maketitle
+%
+% \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}}
+% \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}}
+% \providecommand\class[1]{\texttt{#1.cls}}
+% \providecommand\pkg[1]{\texttt{#1}}
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% This file implements adaptions to the \pkg{mathtools} package needed for
+% the tagging project.
+%
+% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex }
+%
+% \section{The Implementation}
+%
+% \begin{macrocode}
+%<@@=math>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{File declaration}
+% \begin{macrocode}
+\ProvidesFile{latex-lab-mathtools.ltx}
+ [2023-01-05 v0.1a mathtools adaptions]
+% \end{macrocode}
+% \subsection{Tagpdf support}
+% To make the code independent from tagging being loaded and active
+% we load the \pkg{tagpdf-base} package:
+%
+% \begin{macrocode}
+\RequirePackage{tagpdf-base}
+% \end{macrocode}
+%
+% \subsection{\cs{shortintertext}}
+% Similar to the \cs{intertext} command from amsmath,
+% \cs{shortintertext} errors with active tagging as it is processed twice
+% which leads to duplicated structures.
+% The fix is similar but is complicated as \pkg{mathtools} defines two version (and
+% an additional \cs{intertext} version) and package options to switch between the variants.
+%
+% At first we redefine all the internal commands
+% \begin{macrocode}
+\ExplSyntaxOn
+\tl_new:N\l_@@_mathtools_init_tl
+\AddToHook{package/mathtools/after}
+ {%
+ \cs_if_eq:NNTF\intertext@ \MT_intertext:
+ {
+ \tl_set:Nn \l_@@_mathtools_init_tl {\MT_orig_intertext_false:}
+ }
+ {
+ \tl_set:Nn \l_@@_mathtools_init_tl {\MT_orig_intertext_true:}
+ }
+ \cs_if_eq:NNTF\shortintertext@ \MT_shortintertext:n
+ {
+ \tl_put_right:Nn \l_@@_mathtools_init_tl
+ {\MT_orig_shortintertext_false:}
+ }
+ {
+ \tl_put_right:Nn \l_@@_mathtools_init_tl
+ {\MT_orig_shortintertext_true:}
+ }
+ \def\MT_intertext: {%
+ \def\intertext##1{%
+ \ifvmode\else\\\@empty\fi
+ \noalign{%
+ \penalty\postdisplaypenalty\vskip\belowdisplayskip
+ \vskip-\lineskiplimit % CCS
+ \vskip\normallineskiplimit % CCS
+ \vskip\l_MT_above_intertext_sep
+ \vbox{%
+% \end{macrocode}
+% Stop tagging when measuring:
+% \begin{macrocode}
+ \ifmeasuring@\tag_stop:\fi
+ \normalbaselines
+ \ifdim
+ \ifdim\@totalleftmargin=\z@
+ \linewidth
+ \else
+ -\maxdimen
+ \fi
+ =\columnwidth
+ \else \parshape\@ne \@totalleftmargin \linewidth
+ \fi
+% \end{macrocode}
+% End the previous mc:
+% \begin{macrocode}
+ \tag_mc_end_push:
+% \end{macrocode}
+% We are already in a par so we change now to Span:
+% \begin{macrocode}
+ \tagpdfsetup{paratag=Span}
+ \noindent\ignorespaces##1\par
+% \end{macrocode}
+% Restart the MC
+% \begin{macrocode}
+ \tag_mc_begin_pop:n{}}%
+ \penalty\predisplaypenalty\vskip\abovedisplayskip%
+ \vskip-\lineskiplimit % CCS
+ \vskip\normallineskiplimit % CCS
+ \vskip\l_MT_below_intertext_sep
+ }%
+ }%
+ \MH_let:NwN \shortintertext \shortintertext@
+ }
+% \end{macrocode}
+% \begin{macrocode}
+ \def\MT_orig_shortintertext:n #1{%
+ \ifvmode\else\\\@empty\fi
+ \noalign{%
+ \penalty\postdisplaypenalty\vskip\abovedisplayshortskip
+ \vbox{%
+ \ifmeasuring@\tag_stop:\fi
+ \normalbaselines
+ \MH_if_dim:w
+ \MH_if_dim:w \@totalleftmargin=\z@
+ \linewidth
+ \MH_else:
+ -\maxdimen
+ \MH_fi:
+ =\columnwidth
+ \MH_else:
+ \parshape\@ne \@totalleftmargin \linewidth
+ \MH_fi:
+ \tag_mc_end_push:
+ \tagpdfsetup{paratag=Span}
+ \noindent\ignorespaces#1\par
+ \tag_mc_begin_pop:n{}}
+ \penalty\predisplaypenalty\vskip\abovedisplayshortskip%
+ }%
+ }
+
+ \def\MT_shortintertext:n #1{%
+ \ifvmode\else\\\@empty\fi
+ \noalign{%
+ \penalty\postdisplaypenalty\vskip\abovedisplayshortskip
+ \vskip-\lineskiplimit
+ \vskip\normallineskiplimit
+ \vskip\l_MT_above_shortintertext_sep
+ \vbox{%
+ \ifmeasuring@\tag_stop:\fi
+ \normalbaselines
+ \MH_if_dim:w
+ \MH_if_dim:w \@totalleftmargin=\z@
+ \linewidth
+ \MH_else:
+ -\maxdimen
+ \MH_fi:
+ =\columnwidth
+ \MH_else:
+ \parshape\@ne \@totalleftmargin \linewidth
+ \MH_fi:
+ \tag_mc_end_push:
+ \tagpdfsetup{paratag=Span}
+ \noindent\ignorespaces#1\par
+ \tag_mc_begin_pop:n{}}%
+ \penalty\predisplaypenalty\vskip\abovedisplayshortskip%
+ \vskip-\lineskiplimit
+ \vskip\normallineskiplimit
+ \vskip\l_MT_below_shortintertext_sep
+ }%
+ }
+
+% \end{macrocode}
+% end hook
+% \begin{macrocode}
+ \l_@@_mathtools_init_tl
+}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
new file mode 100644
index 0000000000..1272745dd9
--- /dev/null
+++ 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-new-or-1.dtx b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
new file mode 100644
index 0000000000..b3e763ffdd
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx
@@ -0,0 +1,159 @@
+% \iffalse meta-comment
+%
+%% File: latex-lab-new-or-1.dtx (C) Copyright 2020-2022 Frank Mittelbach
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%<*driver>
+\documentclass{l3doc}
+
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-new-or-1.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \providecommand\hook[1]{\texttt{#1}}
+%
+%
+%
+% \title{Temporary output patches for tagging and better link support}
+% \author{Frank Mittelbach \and Ulrike Fischer}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This file contains a few patches of internal \LaTeX{} commands
+% to support paragraph tagging across
+% page boundaries (in \pdfTeX) and improve the behaviour of links across page breaks.
+%
+% Until this get properly integrated with the kernel code this has
+% to be taken as a prototype and code, interfaces as well as
+% behavior may change without notice and certainly without any
+% backwards compatibility!
+%
+%
+% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
+%
+%
+% \section{The Implementation}
+% \begin{macrocode}
+%<*code>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesPackage{latex-lab-testphase-new-or-1}
+ [2022-11-94 v0.1a Temporary output patches for tagging and better link support]
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%
+%
+% \subsection{Patching the OR}
+% This adds hooks around header and footer, in \cs{@makecol} and in multicol.
+% At first initialize some of the hooks. We use providecommand to avoid problems if
+% the kernel changes here and provides them directly.
+% \begin{macrocode}
+\providecommand\@kernel@before@head{}
+\providecommand\@kernel@before@foot{}
+\providecommand\@kernel@after@head{}
+\providecommand\@kernel@after@foot{}
+\providecommand\@mult@ptagging@hook{}% multicol
+% \end{macrocode}
+%
+% \begin{macrocode}
+
+\patchcmd\@outputpage
+ {\vfil\color@hbox\normalcolor\hb@xt@\textwidth{\@thehead}\color@endbox}
+ {\vfil\@kernel@before@head\color@hbox\normalcolor\hb@xt@\textwidth{\@thehead}\color@endbox\@kernel@after@head}
+ {\typeout{Patching header in \string\@outputpage}}{\PATCHerror }
+
+
+\patchcmd\@outputpage
+ {\color@hbox\normalcolor\hb@xt@\textwidth{\@thefoot}\color@endbox}
+ {\@kernel@before@foot\color@hbox\normalcolor\hb@xt@\textwidth{\@thefoot}\color@endbox\@kernel@after@foot}
+ {\typeout{Patching footer in \string\@outputpage}}{\PATCHerror }
+% \end{macrocode}
+%
+% \begin{macro}{\@makecol}
+% We have to patch \cs{@makecol} in two places:
+% \begin{itemize}
+% \item
+% update 255 up front to add missing tmb/tme if necessary
+% \item
+% update the \cs{footins} stream if that one got split
+% \end{itemize}
+%
+% We patch \cs{@makecol}, if new-or-2 is loaded too it will overwrite that again.
+% \begin{macrocode}
+ \providecommand\@kernel@before@footins{}
+ \providecommand\@kernel@before@cclv{}
+
+ \patchcmd\@makecol
+ {\vskip\skip\footins}
+ {\vskip\skip\footins\@kernel@before@footins}
+ {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
+
+%for some reason patching with etoolbox only works in this order ...
+
+ \pretocmd\@makecol{\@kernel@before@cclv}
+ {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{\pkg{multicol} adjustments}
+%
+% The patches for pkg{multicol} are fairly minimal:
+% \begin{itemize}
+% \item At the start of the environment anything already on the
+% page is picked up and stored in \cs{partial@page}, we may need to add
+% a TMB to that (it should have a proper TME). This has to happen
+% in the \enquote{main} stream context.
+% \item
+% \item
+% \end{itemize}
+%
+% \begin{macrocode}
+\AddToHook{package/multicol/after}
+ {% multicol needs later loading
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \patchcmd\page@sofar
+ {\setbox\z@\hbox{p}\global\dimen\tw@\dp\z@}%
+ {%
+ \setbox\z@\hbox{p}\global\dimen\tw@\dp\z@
+ \@mult@ptagging@hook
+ }%
+ {\typeout{Patching \string\page@sofar\space for tagging}}{\PATCHerror}%
+}
+% \end{macrocode}
+%
+% \subsection{Interrupt hooks}
+% This requires the l3pdfannot module!
+% We add the code here and not in hyperref, as it should also work with links
+% created directly with the l3pdfannot commands. The file is only
+% loaded by the pdfmanagement, so no need to test if the commands exist.
+% \begin{macrocode}
+\ExplSyntaxOn
+\def\@kernel@before@head{\pdfannot_link_off:}
+\def\@kernel@before@foot{\pdfannot_link_off:}
+\def\@kernel@after@head {\pdfannot_link_on:}
+\def\@kernel@after@foot {\pdfannot_link_on:}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</code>
+% \end{macrocode}
+%
+% \Finale
+%
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
new file mode 100644
index 0000000000..e9f69f428b
--- /dev/null
+++ 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.dtx b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
index 08b58a7286..74d56d687f 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: latex-lab-new-or.dtx
+%% File: latex-lab-new-or-2.dtx
% Copyright (C) 2022 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
@@ -22,14 +22,14 @@
\EnableCrossrefs
\CodelineIndex
\begin{document}
- \DocInput{latex-lab-new-or.dtx}
+ \DocInput{latex-lab-new-or-2.dtx}
\end{document}
%</driver>
%
% \fi
%
%
-% \title{The \texttt{latex-lab-new-or} code\thanks{}}
+% \title{The \texttt{latex-lab-testphase-new-or-2} code\thanks{}}
% \author{Frank Mittelbach, \LaTeX{} Project}
%
% \maketitle
@@ -128,8 +128,8 @@
%
% \subsection{File declaration}
% \begin{macrocode}
-\ProvidesFile{latex-lab-new-or.ltx}
- [2022-03-09 v0.1b changes to the output routine]
+\ProvidesPackage{latex-lab-testphase-new-or-2}
+ [2022-11-04 v0.1c changes to the output routine]
% \end{macrocode}
% \subsection{\cs{@makecol} reimplementation}
%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
index d12adaf15c..449f43110a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or.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-tagging.dtx b/macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.dtx
new file mode 100644
index 0000000000..dc90c76e99
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.dtx
@@ -0,0 +1,810 @@
+% \iffalse meta-comment
+%
+%% File: sec-tagging.dtx (C) Copyright 2022-2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-sec-tagging.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \textsf{sec-tagging} package\\
+% Changes related to the tagging of sectioning commands}
+% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
+% \date{v0.81 2023-02-12}
+%
+% \maketitle
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% The following code implements a first draft for the tagging of sectioning commands.
+% \end{abstract}
+%
+% \section{Limitations}
+%
+% Sectioning commands are in not defined by the format but by the classes.
+% Their implementation vary: some are defined with the help of \cs{@startsection},
+% some are like \cs{chapter} handcrafted,
+% some build with the help of extension packages or as in the KOMA classes
+% with class code that extends the \cs{@startsection} functionality.
+%
+% The following code can therefore currently be used \emph{only} with the standard classes
+% or with classes which do not overwrite the changed definitions.
+%
+%
+%
+% \section{Introduction}
+%
+% Tagging of sectioning commands consist of two parts:
+%
+% \begin{itemize}
+% \item The heading/title text of the section should be surrounded by a
+% heading tag, typically \texttt{Hn} with some value of \texttt{n}.
+% The number of the section command can optionally be put in a \texttt{Lbl}.
+% The number of the \texttt{Hn} tag should reflect the \enquote{natural} level.
+% So in an article \cs{section} will use \texttt{H1}, in a book \cs{chapter} will use
+% \texttt{H1} and \cs{section} \texttt{H2}.
+% Titles of \cs{part} are a bit out of this system as they are normally
+% not part of the hierarchy: often only some chapters are grouped under a part.
+% Their title is therefore tagged as \texttt{Title}.
+% \item
+% The whole section should normally be surrounded by
+% a \texttt{Sect} tag. Parts should be surrounded by \texttt{Part}.
+% It is a bit unclear if the headings should be inside or outside of these
+% structures---the best practice guide puts them outside---but on the whole
+% it sounds more logical to group the heading with the text inside the \texttt{Sect}.
+% For the part this is actually required, as there can be only one \texttt{Title}
+% in a structure, so the part title can't be at the same level as the
+% document \texttt{Title}.
+%
+% Starting such an enclosing \texttt{Sect} structure is rather easy,
+% but closing it requires code in various place,
+% for example the commands \cs{mainmatter}, \cs{backmatter},
+% \cs{frontmatter} and \cs{appendix} should typically close everything.
+% Following sectioning commands should close all previous structures
+% with a level equal or higher than their own level.
+% \end{itemize}
+%
+% \section{Technical details and problems}
+%
+% The implementation has to take care of various details.
+%
+% \begin{itemize}
+%
+% \item As sections in \LaTeX{} are not environments, the
+% \texttt{<Sect>} structures can be wrongly nested with other structures. For example
+% if a document puts a sectioning command into a list or a trivlist or
+% a minipage then it can no longer close previous \texttt{<Sect>} structures correctly.
+% The problem can be detected by checking the structure stack
+% and a warning can be issued, but the author then has to close the structures
+% manually before the list or minipage.
+%
+% Thus there have to be user interfaces to handle such cases.
+% It should also be possible not to create all the \texttt{<Sect>} structures
+% automatically but to tag only the headings so that the author can handle special
+% cases manually.
+%
+% \item If hyperref is used, targets for links should be inserted, either with
+% \cs{refstepcounter} or manually with \cs{MakeLinkTarget}. These targets must be
+% in the correct structure for the structure destinations. They replace some
+% of the current patches in hyperref.
+%
+% \item With lualatex the mc-commands set attributes \emph{locally}, so the
+% commands must be at the right grouping level.
+% \end{itemize}
+%
+% \subsection{Funktions and keys}
+%
+% \begin{function}{\tag_tool:n,\tagtool}
+%
+% \end{function}
+%
+% \subsection{TODO}
+%
+% \begin{itemize}
+% \item A dedicated command to close a sectioning unit should be provided.
+%
+% \item A dedicated command to open a sectioning unit should be provided too.
+%
+% \item It should also be possible to suppress the sectioning unit in sectioning commands
+% 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)
+% commands too.
+%
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \section{Implementation}
+% \begin{macrocode}
+\ProvidesExplPackage {latex-lab-testphase-sec-tagging} {2022-10-25} {0.8}
+ {Code related to the tagging of sectioning commands}
+% \end{macrocode}
+%
+% \subsection{Surrounding by \texttt{Sect} structures}
+% We use a stack to record the levels of the open \texttt{Sect}. The first item
+% has level -100. A sectioning command will take a record from the stack. If its level is
+% greater or equal it closes this structure and takes the next record from the stack.
+% If the record has a smaller level then it puts it back and stops.
+% The stack is compared with the main structure stack, if they don't match
+% it means we can't safely close the \texttt{Sect} and so we issue a warning
+% and do nothing.
+%
+% \subsubsection{Loading general kernel changes}
+% [kernel?]
+% Also loaded in the toc-tagging code.
+% \begin{macrocode}
+\RequirePackage{latex-lab-kernel-changes}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \subsubsection{Glyphtounicode improvements}
+%
+% As lualatex runs with legacy encodings in the test files, we enable and
+% load glyphtounicode. For the math we load additional definitions.
+%
+% \begin{macrocode}
+%<*kernelchange>
+\ifdefined\directlua
+ \pdfvariable gentounicode =1
+ \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+ \input{glyphtounicode}
+\fi
+ \input{glyphtounicode-cmex}
+%</kernelchange>
+% \end{macrocode}
+%
+% \subsubsection{updating \cs{@currentHref}}
+% [kernel?]
+%
+% We must ensure that manual targets (e.g. in unnumbered sections)
+% correctly update \cs{@currentHref}. For this we extend the kernel definition of
+% \cs{MakeLinkTarget}
+%
+% \begin{macrocode}
+%<*kernelchange>
+\ExplSyntaxOn
+\int_new:N\g__kernel_target_int
+\RenewDocumentCommand\MakeLinkTarget{sO{}m}
+ {%
+ \ifvmode
+ \special{}%
+ \else
+ \@savsf\spacefactor
+ \smash{}%
+ \spacefactor\@savsf
+ \fi
+ \int_gincr:N\g__kernel_target_int
+ \tl_gset:Nx \@currentHref {target*.\int_use:N\g__kernel_target_int}
+ }
+\ExplSyntaxOff
+%</kernelchange>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \subsubsection{Tagging commands}
+%
+%
+% \begin{variable}{\g__tag_sec_stack_seq}
+% The stack holds the tag and the level.
+% \begin{macrocode}
+\seq_new:N \g__tag_sec_stack_seq
+\seq_gpush:Nn\g__tag_sec_stack_seq {{Document}{-100}}
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l__tag_sec_Sect_bool}
+% This boolean controls if a Sect structure is opened.
+% \begin{macrocode}
+\bool_new:N \l__tag_sec_Sect_bool
+\bool_set_true:N\l__tag_sec_Sect_bool
+% \end{macrocode}
+% \end{variable}
+
+%
+% \begin{macro}{\__tag_sec_begin:nn}
+% This starts a sectioning structure.
+% Currently the tag is fix, either Sect or Part, depending on the level,
+% but this will perhaps change. The second argument is currently unused.
+% \begin{macrocode}
+\cs_new_protected:Npn\__tag_sec_begin:nn #1 #2 %#1 level #2 keyval
+ {
+ \tag_struct_begin:n
+ {
+ tag= {\int_compare:nNnTF {#1}={-1}{Part}{Sect}}
+ ,#2
+ }
+ \seq_gpush:Nx \g__tag_sec_stack_seq {{\g__tag_struct_tag_tl}{#1}}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__tag_sec_end:n}
+% \begin{macrocode}
+\msg_new:nnn { tag } {wrong-sect-nesting}
+ {
+ The~structure~#1~can~not~be~closed.\\
+ It~is~not~equal~to~the~current~structure~#2~on~the~main~stack
+ }
+
+\cs_new_protected:Npn\__tag_sec_end:n #1 % #1 level
+ {
+ \seq_get:NN \g__tag_sec_stack_seq \l__tag_tmpa_tl
+ \int_compare:nNnT {#1}<{\exp_last_unbraced:NV\use_ii:nn\l__tag_tmpa_tl+1}
+ {
+ \seq_get:NN\g__tag_struct_tag_stack_seq \l__tag_tmpb_tl
+ \exp_args:Nee
+ \tl_if_eq:nnTF
+ {\exp_last_unbraced:NV\use_i:nn\l__tag_tmpa_tl}
+ {\exp_last_unbraced:NV\use_i:nn\l__tag_tmpb_tl}
+ {
+ \seq_gpop:NN \g__tag_sec_stack_seq \l__tag_tmpa_tl
+ \tag_struct_end:
+ \__tag_sec_end:n {#1}
+ }
+ {
+ \msg_warning:nnxx {tag}{wrong-sect-nesting}
+ { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpa_tl }
+ { \exp_last_unbraced:NV\use_i:nn \l__tag_tmpb_tl }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\__tag_tool_para_split:}
+% Runin-sectioning command must separate the heading from the following text.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \__tag_tool_para_split:
+ {
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_struct_begin:n{tag=\l__tag_para_tag_default_tl}
+ \tag_mc_begin:n{}
+ \__tag_setup_restore_para_default:
+ }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\__tag_setup_restore_para_default:}
+% We change the para tagging in the sectioning code.
+% This here restores the default. Currently it only resets the
+% the tag, but perhaps more will be needed later.
+% \begin{macrocode}
+\cs_new_protected:Npn \__tag_setup_restore_para_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
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__tag_sec_end_display:}
+% \begin{macrocode}
+\cs_new_protected:Npn \__tag_sec_end_display:
+ {
+ \tag_struct_end: %P = Hn
+ \__tag_setup_restore_para_default:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Open sec structures should be closed at the end of the document. This should
+% be done before tagpdf closes the Document structure.
+% \begin{macrocode}
+\hook_gput_code:nnn{tagpdf/finish/before}{tagpdf/sec}{\__tag_sec_end:n{-10}}
+\hook_gset_rule:nnnn {tagpdf/finish/before}{tagpdf/sec}{before}{tagpdf}
+% \end{macrocode}
+%
+% The commands \cs{mainmatter}, \cs{backmatter}, \cs{frontmatter} and
+% \cs{appendix} close all \texttt{Sect} and \texttt{Part} structures.
+% \begin{macrocode}
+\AddToHook{cmd/frontmatter/before}{\__tag_sec_end:n{-10}}
+\AddToHook{cmd/mainmatter/before} {\__tag_sec_end:n{-10}}
+\AddToHook{cmd/backmatter/before} {\__tag_sec_end:n{-10}}
+\AddToHook{cmd/appendix/before} {\__tag_sec_end:n{-10}}
+% \end{macrocode}
+%
+% \subsection{Tagging tools}
+% We need to provide user and package level commands
+%
+% \begin{macrocode}
+\cs_if_free:NT \tag_tool:n
+ {
+ \cs_new_protected:Npn \tag_tool:n #1
+ {
+ \tag_if_active:T { \keys_set:nn {tag / tool}{#1} }
+ }
+ \cs_set_eq:NN\tagtool\tag_tool:n
+ }
+\keys_define:nn { tag / tool}
+ {
+ ,sec-start-part .code:n =
+ {
+ \bool_if:NT\l__tag_sec_Sect_bool
+ {
+ \__tag_sec_end:n {-1}
+ \__tag_sec_begin:nn{-1}{tag=Part}
+ }
+ \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
+% 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
+% to the time when sectioning commands are redefined with templates.
+% \begin{macrocode}
+ \tl_set:Nn\l__tag_para_main_tag_tl {NonStruct}
+ \tl_set:Nn\l__tag_para_tag_tl {Span}
+ }
+ ,sec-stop-part .code:n = {\__tag_sec_end_display:}
+ ,sec-start-chapter .code:n =
+ {
+ \bool_if:NT\l__tag_sec_Sect_bool
+ {
+ \__tag_sec_end:n {0}
+ \__tag_sec_begin:nn{0}{tag=Sect}
+ }
+ \tag_struct_begin:n{tag=chapter,title=#1}
+% \end{macrocode}
+% similar to part we remap to NonStruct for now ...
+% \begin{macrocode}
+ \tl_set:Nn\l__tag_para_main_tag_tl {NonStruct}
+ \tl_set:Nn\l__tag_para_tag_tl {Span}
+ }
+ ,sec-stop-chapter .meta:n = { sec-stop-part}
+ ,sec-start .code:n = % #1 is a name like "section"
+ {
+ \bool_if:NT\l__tag_sec_Sect_bool
+ {
+ \__tag_sec_end:n {\use:c{toclevel@#1}+0}
+ \__tag_sec_begin:nn {\use:c{toclevel@#1}+0}{tag=Sect}
+ }
+ \tl_set:Nn\l__tag_para_tag_tl{#1}
+ }
+ ,sec-start .value_required:n = true
+ ,sec-split-para .code:n = {\__tag_tool_para_split:}
+ ,restore-para .code:n = {\__tag_setup_restore_para_default:}
+ ,sec-stop .code:n =
+ {
+ \par\__tag_sec_end:n {\use:c{toclevel@#1}+0}
+ }
+ ,sec-stop .value_required:n = true
+ ,sec-add-grouping .bool_set:N = \l__tag_sec_Sect_bool
+ }
+% \end{macrocode}
+%
+%
+% \section{Sectioning commands}
+%
+% \subsection{\cs{part} and \cs{chapter}}
+%
+% \cs{part} and \cs{chapter} are defined by the classes.
+% To tag them we redefine the user commands.
+% This will probably break with various classes and with titlesec.
+% The tagging inside relies on the para tagging.
+% We do not yet use keyval in the optional argument, as this requires latex-dev
+% and the naming of the keys and their key family is unclear.
+% \begin{macrocode}
+\AddToHook{class/after}
+ {
+ \@ifundefined{chapter}
+ {
+% \end{macrocode}
+% This redefines \cs{part} in article class.
+% \begin{macrocode}
+ \RenewDocumentCommand\part{ s O{#3} m }
+ {
+ \if@noskipsec \leavevmode \fi
+ \par
+ \addvspace{4ex}%
+ \@afterindentfalse
+% \end{macrocode}
+% This are the tagging commands needed at the begin. They open a Part structure
+% and the structure for the title of the heading.
+% \begin{macrocode}
+ % tagging start commands
+ \tag_tool:n {sec-start-part=#2}
+ % end tagging start commands
+% \end{macrocode}
+% This adds a manual target if the part is unnumbered or starred.
+% It replaces the hyperref patches.
+% \begin{macrocode}
+ \bool_lazy_any:nT
+ {
+ { #1 }
+ {
+ \int_compare_p:nNn {\c@secnumdepth}<{-1}
+ }
+ }
+ {
+ \MakeLinkTarget[part]{}
+ }
+% \end{macrocode}
+% The main call to the underlying commands.
+% \begin{macrocode}
+ \IfBooleanTF
+ {#1}
+ { \@spart {#3} }
+ { \@part [#2]{#3} }
+% \end{macrocode}
+% and now the closing command for the tagging of the title.
+% \begin{macrocode}
+ \tag_tool:n {sec-stop-part}
+ }
+ }
+% \end{macrocode}
+% Redefinitions for book and report
+% \begin{macrocode}
+ {
+ \RenewDocumentCommand\chapter{ s O{#3} m }
+ {
+ \if@openright\cleardoublepage\else\clearpage\fi
+ \thispagestyle{plain}%
+ \global\@topnum\z@
+ \@afterindentfalse
+% \end{macrocode}
+% This are the tagging commands needed at the begin. They open a Sect structure
+% and the structure for the title of the heading.
+% \begin{macrocode}
+ \tag_tool:n { sec-start-chapter= #2 }
+% \end{macrocode}
+% This adds a manual target if the chapter is unnumbered or starred.
+% It replaces the hyperref patches.
+% \begin{macrocode}
+ \bool_lazy_any:nT
+ {
+ { #1 }
+ {
+ \int_compare_p:nNn {\c@secnumdepth}<{0}
+ }
+ {
+ %in book target also needed in frontmatter
+ \bool_lazy_and_p:nn
+ { \cs_if_exist_p:c { @mainmattertrue } }
+ { ! \legacy_if_p:n { @mainmatter } }
+ }
+ }
+ {
+ \MakeLinkTarget[chapter]{}
+ %todo public function for this update!
+ \tl_if_blank:VF \@currentHref
+ {
+ \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+ }
+ }
+% \end{macrocode}
+% The main call to the underlying commands.
+% \begin{macrocode}
+ \IfBooleanTF
+ {#1}
+ { \@schapter {#3} }
+ { \@chapter [#2]{#3} }
+% \end{macrocode}
+% and now the closing command for the tagging of the title.
+% \begin{macrocode}
+ \tag_tool:n {sec-stop-chapter}
+ }
+% \end{macrocode}
+% and similar for \cs{part}
+% \begin{macrocode}
+ \RenewDocumentCommand\part{ s O{#3} m }
+ {
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{plain}%
+ \if@twocolumn
+ \onecolumn
+ \@tempswatrue
+ \else
+ \@tempswafalse
+ \fi
+ \null\vfil
+% \end{macrocode}
+% This are the tagging commands needed at the begin. They open a Part structure
+% and the structure for the title of the heading.
+% \begin{macrocode}
+ \tag_tool:n {sec-start-part=#2}
+% \end{macrocode}
+% This adds a manual target if the part is unnumbered or starred.
+% It replaces the hyperref patches.
+% \begin{macrocode}
+ \bool_lazy_any:nT
+ {
+ { #1 }
+ {
+ \int_compare_p:nNn {\c@secnumdepth}<{-1}
+ }
+ {
+ %in book target also needed in frontmatter
+ \bool_lazy_and_p:nn
+ { \cs_if_exist_p:c { @mainmattertrue } }
+ { ! \legacy_if_p:n { @mainmatter } }
+ }
+ }
+ {
+ \MakeLinkTarget[part]{}
+ \tl_if_blank:VF \@currentHref
+ {
+ \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+ }
+ }
+% \end{macrocode}
+% The main call to the underlying commands.
+% \begin{macrocode}
+ \IfBooleanTF
+ {#1}
+ { \@spart {#3} }
+ { \@part [#2]{#3} }
+% \end{macrocode}
+% and now the closing command for the tagging of the title.
+% \begin{macrocode}
+ \tag_tool:n{sec-stop-part}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Sectioning commands based on \cs{@startsection}}
+%
+% The tagging of relies again on the para tagging:
+% we simply exchange the tag name by the one given as \#1.
+% This assumes that a tag with the name of the sectioning type is defined.
+% We don't try to pass the title, this will be done together with
+% the new keyval handling in the user command.
+%
+% \subsubsection{Hyperref code}
+% hyperref has to insert anchors. If the sectioning is numbered this is done by
+% \cs{refstepcounter} (and so in vmode). For unnumbered section hyperref
+% injects the anchor in hmode before the text, it also inserts a
+% kern to compensate the indent.
+%
+% This means that the target of numbered and unnumbered sectioning commands
+% differ, both regarding the location and in relation to the
+% tagging structure: The anchor from the \cs{refstepcounter} is outside of
+% the structure created by the heading title if the para tags are used,
+% while the other anchors are inside and so the structure destinations are different.
+%
+% We unify this by suppressing the anchor from the refstepcounter.
+% Also we only go back if the indent is positive.
+%
+% At first suppress all hyperref patches related to sectioning:
+% \begin{macrocode}
+\def\hyper@nopatch@sectioning{}
+% \end{macrocode}
+%
+% \begin{macro}{\@hyp@section@target@nnn}
+% A simple internal command. There is no need for something public,
+% as packages defining their own version of \cs{@startsection} will
+% probably need something slightly different based on \cs{MakeLinkTarget}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@hyp@section@target@nnn #1 #2 #3 %#1 optarg #2 name/counter, #3 indent
+ {
+ \makebox[0pt][l]
+ {
+ \skip_set:Nn \@tempskipa {#3}
+ \dim_compare:nNnF {\@tempskipa}<{0pt}{\kern-\@tempskipa}
+ \MakeLinkTarget#1{#2}
+ }
+ \tl_if_blank:VF \@currentHref
+ {
+ \prop_gput:Nxx \g__tag_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Adaption of the heading commands}
+% We add to \cs{@startsection} the commands to open the \texttt{Sect}
+% structure and to change the para tag.
+%
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \tag_tool:n { sec-start=#1}%new
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+% \end{macrocode}
+% To be able to correctly tag the number we need a special
+% \cs{@hangfrom} variant. This is a bit tricky:
+% As the paragraph starts after the \cs{setbox} luatex attributes
+% are not set yet and numbers are unmarked if one doesn't pay attention.
+% The code assumes that we are in vmode!
+% \begin{macrocode}
+\cs_new_protected:Npn \@kernel@tag@hangfrom #1
+ {
+ \tagstructbegin{tag=\l__tag_para_tag_tl}
+ \tagstructbegin{tag=Lbl}
+ \setbox\@tempboxa
+ \hbox
+ {
+% \end{macrocode}
+% In lua mode we have to set the attributes inside the box!
+% \begin{macrocode}
+ \bool_lazy_and:nnT
+ {\tag_if_active_p:}
+ {\g__tag_mode_lua_bool}
+ {\tagmcbegin{tag=Lbl}}
+ {#1}
+ }
+% \end{macrocode}
+% We stop tagging now, to avoid that the \cs{noindent} triggers
+% the paratagging. We do not disable paratagging completely, to
+% avoid that the numbering goes wrong.
+% \begin{macrocode}
+ \tag_stop:n{hangfrom}
+ \hangindent \wd\@tempboxa\noindent
+% \end{macrocode}
+% Restart tagging and insert the box.
+% \begin{macrocode}
+ \tag_start:n{hangfrom}
+ \tagmcbegin{}\box\@tempboxa\tagmcend\tagstructend\tagmcbegin{}}
+% \end{macrocode}
+% This command is used to tag the numbers of runin. We do not try
+% to avoid the empty container from the paratagging, this would require
+% more changes.
+% \begin{macrocode}
+\cs_new_protected:Npn \@kernel@tag@svsec
+ {
+ \tag_mc_end_push:
+ \tag_struct_begin:n{tag=Lbl}
+ \tag_mc_begin:n{}
+ \@svsec
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin_pop:n{}
+ }
+% \end{macrocode}
+% \cs{@sect} is only changed to replace the hyperref patches
+% and to use the new \cs{@kernel@tag@hangfrom} and \cs{@kernel@tag@svsec}
+% \begin{macrocode}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{\@hyp@section@target@nnn{[section]}{}{#3}}
+ \else
+ \LinkTargetOff
+ \refstepcounter{#1}%
+ \LinkTargetOn
+ \protected@edef\@svsec{\@hyp@section@target@nnn{}{#1}{#3}\@seccntformat{#1}\relax}%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ \tagtool{para-flattened=true} % or \bool_set_true\l__tag_para_flattened_bool
+ #6{%
+ \ifnum #2>\c@secnumdepth
+ \@hangfrom {\hskip #3\relax\@svsec}%
+ \else
+ \@kernel@tag@hangfrom{\hskip #3\relax\@svsec}%
+ \fi
+ \interlinepenalty \@M #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \ifnum #2>\c@secnumdepth
+ \@svsec
+ \else
+ \@kernel@tag@svsec
+ \fi #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+% \end{macrocode}
+% similar for \cs{@ssect}
+% \begin{macrocode}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ \tagtool{para-flattened=true}
+ #4{%
+ \@hangfrom{\hskip #1\relax\@hyp@section@target@nnn{[section]}{}{#1}}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \else
+ \def\@svsechd{#4{\hskip #1\relax\@hyp@section@target@nnn{[section]}{}{#3}\relax #5}}%
+ \fi
+ \@xsect{#3}}
+% \end{macrocode}
+% At last \cs{@xsect} needs code in two places. For display headings it has to
+% restore the default para code, for run in headings it has to separated the
+% heading from the following text.
+% \begin{macrocode}
+\def\@xsect#1{%
+ \@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \tag_tool:n {restore-para}
+ \@afterheading
+ \else
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \tag_tool:n {sec-split-para}
+ \@tempskipa #1\relax
+ \hskip -\@tempskipa
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \fi
+ \ignorespaces}
+%</package>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{sec-tagging-latex-lab-testphase.ltx}
+ [2023-02-12 v0.81 code related to the tagging of sectioning commands]
+\RequirePackage{latex-lab-testphase-sec-tagging}
+%</latex-lab>
+% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.pdf b/macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.pdf
new file mode 100644
index 0000000000..09e73151bc
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec-tagging.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 d8d9c671c3..217605d189 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: latex-lab-testphase.dtx
-% Copyright (C) 2021-2022 The LaTeX Project
+% Copyright (C) 2021-2023 The LaTeX Project
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -51,14 +51,60 @@
%
%
% \section{The Implementation}
+% new-or-1 contains the code for header and footer (tagging and
+% suppressing links) and is always loaded
+% \begin{macrocode}
+%<*new-or-1>
+\ProvidesFile{new-or-1-latex-lab-testphase.ltx}
+ [2022-11-04 v0.1a latex-lab wrapper new-or-1]
+%</new-or-1>
+% \end{macrocode}
+% new-or combines all new-or parts (currently 1+2)
+% \begin{macrocode}
+%<*new-or>
+\ProvidesFile{new-or-latex-lab-testphase.ltx}
+ [2022-11-04 v0.1a latex-lab wrapper new-or]
+%</new-or>
+% \end{macrocode}
+% \begin{macrocode}
+%<*phase-I>
+\ProvidesFile{phase-I-latex-lab-testphase.ltx}
+ [2023-02-04 v0.1b latex-lab wrapper phase-I]
+%</phase-I>
+% \end{macrocode}
+% \begin{macrocode}
+%<*phase-II>
+\ProvidesFile{phase-II-latex-lab-testphase.ltx}
+ [2022-11-04 v0.1a latex-lab wrapper phase-II]
+%</phase-II>
+% \end{macrocode}
+% \begin{macrocode}
+%<*phase-III>
+\ProvidesFile{phase-III-latex-lab-testphase.ltx}
+ [2023-03-06 v0.1a latex-lab wrapper phase-III]
+\input{phase-II-latex-lab-testphase.ltx}
+\RequirePackage{latex-lab-testphase-block-tagging}
+\RequirePackage{latex-lab-testphase-sec-tagging}
+\RequirePackage{latex-lab-testphase-toc-tagging}
+%</phase-III>
+% \end{macrocode}
+%
+% this is only provided for compatibility
+% \begin{macrocode}
+%<*tagpdf>
+\ProvidesFile{tagpdf-latex-lab-testphase.ltx}
+ [2022-11-04 v0.1a latex-lab wrapper tagpdf (deprecated)]
+%</tagpdf>
+% \end{macrocode}
+% \begin{macrocode}
+%<*tagpdf|phase-I|phase-II|new-or|new-or-1>
+\RequirePackage{latex-lab-testphase-new-or-1}
+%</tagpdf|phase-I|phase-II|new-or|new-or-1>
+% \end{macrocode}
% New output routine code is loaded in phase-II and new-or:
% \begin{macrocode}
%<*tagpdf|phase-II|new-or>
-\IfFileExists{latex-lab-testphase-new-or.sty}
- {
- \RequirePackage{latex-lab-testphase-new-or}
- }
- {}
+\RequirePackage{latex-lab-testphase-new-or-2}
%</tagpdf|phase-II|new-or>
% \end{macrocode}
% \begin{macrocode}
@@ -70,15 +116,33 @@
\AddToDocumentProperties [document]{testphase/tagpdf}{loaded}
%</tagpdf|phase-I|phase-II>
%<tagpdf|phase-II>\tagpdfsetup{activate,paratagging,interwordspace}
+%<tagpdf|phase-II>\AddToDocumentProperties [document]{tagging/para}{active}
%<phase-I>\tagpdfsetup{activate,interwordspace}
%<*tagpdf|phase-I|phase-II>
\AddToDocumentProperties [document]{tagging}{active}
-\AddToDocumentProperties [document]{tagging/para}{active}
\AddToDocumentProperties [document]{tagging/interwordspace}{active}
% \end{macrocode}
%
% \begin{macrocode}
%</tagpdf|phase-I|phase-II>
% \end{macrocode}
+% Wrapper files for math tagging:
+% \begin{macrocode}
+%<*math-lab>
+\ProvidesFile{math-latex-lab-testphase.ltx}
+ [2023-01-07 v0.8 code related to the math tagging]
+\RequirePackage{latex-lab-testphase-math}
+%</math-lab>
+% \end{macrocode}
+% \begin{macrocode}
+%<*math-sty>
+\ProvidesPackage{latex-lab-testphase-math}
+ [2023-01-07 v0.8 code related to the math tagging]
+\input{latex-lab-mathtagging.ltx}
+\input{latex-lab-amsmath.ltx}
+\input{latex-lab-mathtools.ltx}
+\input{latex-lab-mathpkg.ltx}
+%</math-sty>
+% \end{macrocode}
% \Finale
%
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 88a563d2c9..a525ce9013 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-toc-hyperref-changes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
new file mode 100644
index 0000000000..ea39e3a6a5
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx
@@ -0,0 +1,203 @@
+% \iffalse meta-comment
+%
+%% File: toc-hyperref-changes.dtx (C) Copyright 2022-2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-toc-hyperref-changes.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+% \title{The \textsf{toc-hyperref-changes} package\\
+% Changes and additions to hyperref related to toc entries}
+% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
+% \date{Version 0.81 2023-02-10}
+%
+% \maketitle
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% The followings contains various change needed for hyperref for the new toc tagging
+% code. They should be only loaded if hyperref is used!
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \section{Changes for hyperref}
+% \subsection{\cs{contentsline},\cs{addcontentsline}}
+% The standard \cs{contentsline} and \cs{addcontentsline}
+% should also be used with hyperref (together
+% with more changes below) so we have to disable the redefinition in hyperref (this
+% requires hyperref version 7.00v!
+% \begin{macrocode}
+\def\hyper@nopatch@toc{}
+\AddToHook{package/hyperref/after}
+ {
+ \@ifpackagelater{hyperref}{2023-02-07}{}
+ {\PackageWarning{latex-lab-testphase-toc-tagging}{hyperref too old}{}}
+ }
+% \end{macrocode}
+%
+% \subsection{Add links to toc entries}
+% \begin{macrocode}
+\ExplSyntaxOn
+\AddToHook{package/hyperref/after}
+ {
+ \AddToHook{contentsline/text/before}[hyp]
+ {
+ \tl_if_blank:VF \@contentsline@arg@two%text
+ {
+ \tl_if_blank:VF\@contentsline@arg@four%destination
+ {
+ \int_case:nnF {\Hy@linktoc}
+ {
+ {0}{} %none
+ {1}{\hyper@linkstart{link}{\@contentsline@arg@four}} %section
+ {2}{} %page
+ }
+ {\hyper@linkstart{link}{\@contentsline@arg@four}} %all
+ }
+ }
+ }
+ \AddToHook{contentsline/text/after}[hyp]
+ {
+ \tl_if_blank:VF \@contentsline@arg@two
+ {
+ \tl_if_blank:VF\@contentsline@arg@four
+ {
+ \int_case:nnF {\Hy@linktoc}
+ {
+ {0}{} %none
+ {1}{\hyper@linkend} %section
+ {2}{} %page
+ }
+ {\hyper@linkend} %all
+ } % none
+ }
+ }
+
+ \AddToHook{contentsline/page/before}[hyp]
+ {
+ \tl_if_blank:VF \@contentsline@arg@three
+ {
+ \tl_if_blank:VF\@contentsline@arg@two
+ {
+ \int_case:nnF {\Hy@linktoc}
+ {
+ {0}{} %none
+ {1}{} %section
+ {2}{\hyper@linkstart{link}{\@contentsline@arg@four}} %page
+ }
+ {\hyper@linkstart{link}{\@contentsline@arg@four}} %all
+ } % none
+ }
+ }
+ \AddToHook{contentsline/page/after}[hyp]
+ {
+ \tl_if_blank:VF \@contentsline@arg@three
+ {
+ \tl_if_blank:VF\@contentsline@arg@four
+ {
+ \int_case:nnF {\Hy@linktoc}
+ {
+ {0}{} %none
+ {1}{} %section
+ {2}{\hyper@linkend} %page
+ }
+ {\hyper@linkend} %all
+ } % none
+ }
+ }
+ \AddToHook{cmd/addcontentsline/before}[hyp]
+ {%
+ \ExpandArgs{ooo}
+ \Hy@addcontentsline@addbookmark
+ {\addcontentsline@arg@one}
+ {\addcontentsline@arg@two}
+ {\addcontentsline@arg@three}%
+ }
+ }
+\ExplSyntaxOff
+% \end{macrocode}
+% \subsection{Add bookmark code to \cs{addcontentsline}}
+%
+% \begin{macrocode}
+\newcommand\Hy@addcontentsline@addbookmark[3]%#1 toc type, #2 level, #3 content
+ {%
+ \ifx\@currentHref\@empty
+ \Hy@Warning{%
+ No destination for bookmark of \string\addcontentsline,%
+ \MessageBreak destination is added%
+ }%
+ \phantomsection
+ \fi
+ \begingroup
+ \expandafter\ifx\csname toclevel@#2\endcsname\relax
+ \begingroup
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@bookmarkstype
+ \Hy@WarningNoLine{%
+ bookmark level for unknown #2 defaults to 0%
+ }%
+ \else
+ \Hy@Info{bookmark level for unknown #2 defaults to 0}%
+ \fi
+ \endgroup
+ \expandafter\gdef\csname toclevel@#2\endcsname{0}%
+ \fi
+ \edef\Hy@toclevel{\csname toclevel@#2\endcsname}%
+ \Hy@writebookmark{\csname the#2\endcsname}%
+ {#3}%
+ {\@currentHref}%
+ {\Hy@toclevel}%
+ {#1}%
+ \ifHy@verbose
+ \begingroup
+ \def\Hy@tempa{#3}%
+ \@onelevel@sanitize\Hy@tempa
+ \let\temp@online\on@line
+ \let\on@line\@empty
+ \Hy@Info{%
+ bookmark\temp@online:\MessageBreak
+ thecounter {\csname the#2\endcsname}\MessageBreak
+ text {\Hy@tempa}\MessageBreak
+ reference {\@currentHref}\MessageBreak
+ toclevel {\Hy@toclevel}\MessageBreak
+ type {#1}%
+ }%
+ \endgroup
+ \fi
+ \endgroup
+ }
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
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
new file mode 100644
index 0000000000..444d701cdf
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..7485b2c210
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
@@ -0,0 +1,443 @@
+% \iffalse meta-comment
+%
+%% File: toc-kernel-functions.dtx (C) Copyright 2022-2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-toc-kernel-changes.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \title{The \textsf{toc-kernel-changes} package\\
+% Changes and additions to the kernel related to tagging and links in toc entries}
+% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
+% \date{Version 0.81 2023-02-10}
+%
+% \maketitle
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% The followings contains various changes to kernel commands
+% needed for the tagging of table of contents and similar lists.
+% \section{General kernel and class changes}
+%
+% Some of the changes can probably could go into the kernel.
+% This are marked with [kernel?],
+% the other are marked with [latex-lab]. A few changes must be done in the classes.
+% They are marked as [class]. They are inserted with hooks here: this will break
+% if a non-standard class is used.
+%
+% \subsection{Providing the counter representation \cs{theHxx} generally}
+% [kernel?]
+%
+% The \cs{theHxx} representation allows to create a unique representation of a counter
+% that is for example used to create destination names. It will also be needed
+% to add |/Ref| keys to various tagging structures. It makes therefore sense
+% to provide it by default as soon as a counter is created. The |\@addtoreset| change
+% (taken also from hyperref) tries to ensure the counter stays unique if it is reset.
+%
+% At first we suppress the patches from hyperref:
+% \begin{macrocode}
+%<*kernelchange>
+\def\hyper@nopatch@counter{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
+ \setcounter{#1}\z@
+ \global\expandafter\let\csname cl@#1\endcsname\@empty
+ \@addtoreset{#1}{@ckpt}%
+ \global\expandafter\let\csname p@#1\endcsname\@empty
+ \expandafter\gdef\csname theH#1\endcsname{\the\value{#1}}%new
+ \expandafter
+ \gdef\csname the#1\expandafter\endcsname\expandafter
+ {\expandafter\@arabic\csname c@#1\endcsname}}
+\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}%
+ \expandafter\gdef\csname theH#1\endcsname{\csname theH#2\endcsname.\the\value{#1}}%
+}
+% \end{macrocode}
+% The following counters are defined in the kernel
+% \begin{macrocode}
+\gdef\theHenumi{\the\value{enumi}}
+\gdef\theHenumii{\the\value{enumii}}
+\gdef\theHenumiii{\the\value{enumiii}}
+\gdef\theHenumiv{\the\value{enumiv}}
+\gdef\theHequation{\the\value{equation}}
+\gdef\theHfootnote{\the\value{footnote}}
+\gdef\theHmpfootnote{\the\value{mpfootnote}}
+% \end{macrocode}
+%
+% \subsection{Providing and updating \cs{@currentHref}}
+% [kernel?]
+%
+% \cs{@currentHref} contains the current unique representation of a counter.
+% It is useful also without hyperref as it allows to connect with a |/Ref|
+% key a toc entry with the heading it refers too. So \cs{refstepcounter}
+% is extended to update the command. This is done at the begin so that the
+% hyperref code can still adapt it later (using the cmd/refstepcounter/after hook
+% would be too late, and could also break with cleverref.)
+%
+% We also provide a kernel version that hyperref doesn't touch and so will never
+% set a target.
+% \begin{macrocode}
+\def\@currentHref{}
+\def\refstepcounter#1{\stepcounter{#1}%
+ \edef\@currentcounter{#1}%
+ \xdef\@currentHref {#1.\csname theH#1\endcsname}%
+ \protected@edef\@currentlabel
+ {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+}
+\let\@kernel@refstepcounter\refstepcounter
+% \end{macrocode}
+%
+% \subsection{Assigning the headings level numbers}
+% [kernel?]
+%
+% The code for the toc must be able to compare the level of |subsection| against
+% |section|. So some numbers are needed. It uses for now the commands used by
+% |hyperref| for the bookmark levels. While headings are more a class thing, it
+% could make sense to provide a standard set already in the kernel.
+% The numbers are a bit different to the one in hyperref, but imho sensible.
+%
+% Note for the future:
+% once that heading stuff is turned into template
+% instances the template should set that number.
+% \begin{macrocode}
+\def\toclevel@part{-1}
+\def\toclevel@chapter{0}
+\def\toclevel@section{1}
+\def\toclevel@subsection{2}
+\def\toclevel@subsubsection{3}
+\def\toclevel@paragraph{4}
+\def\toclevel@subparagraph{5}
+\def\toclevel@figure{1}
+\def\toclevel@table{1}
+%</kernelchange>
+% \end{macrocode}
+% \subsection{load kernel changes}
+% \begin{macrocode}
+%<*package>
+\RequirePackage{latex-lab-kernel-changes}
+% \end{macrocode}
+%
+% \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.
+% \begin{macrocode}
+\def\@contentsline@cfgpoint@before#1#2#3#4{}
+\def\@contentsline@cfgpoint@after#1#2#3#4{}
+\def\@contentsline@arg@one{}%level
+\def\@contentsline@arg@two{}%text
+\def\@contentsline@arg@three{}%page
+\def\@contentsline@arg@four{}%destination
+\def\contentsline#1#2#3#4%
+ {%
+ \def\@contentsline@arg@one{#1}%level
+ \def\@contentsline@arg@two{#2}%text
+ \def\@contentsline@arg@three{#3}%page
+ \def\@contentsline@arg@four{#4}%destination
+ \@contentsline@cfgpoint@before{#1}{#2}{#3}{#4}%
+ %\gdef\@contentsline@destination{#4}%
+ \csname l@#1\endcsname{#2}{#3}%
+ \@contentsline@cfgpoint@after{#1}{#2}{#3}{#4}%
+ }
+% \end{macrocode}
+%
+% \subsection{\cs{addcontentsline} changes}
+% [latex-lab]
+%
+% \cs{addcontentsline} should always write the unique counter representation
+% \cs{@currentHref} so that we can create the |/Ref| key. At the same time
+% we need a hook, so that hyperref can add its bookmarks code. The generic hook
+% would be ok, but we need the arguments, so we store them first.
+%
+% \begin{macrocode}
+\NewHook{cmd/addcontentsline/before}
+\def\addcontentsline#1#2#3{% toc extension, type, tag
+ \def\addcontentsline@arg@one{#1}% name??
+ \def\addcontentsline@arg@two{#2}%
+ \def\addcontentsline@arg@three{#3}%
+ \UseHook{cmd/addcontentsline/before}%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}\protected@file@percent
+ }}
+% \end{macrocode}
+%
+% \subsection{\cs{@starttoc}}
+% [kernel?]
+%
+% We add a configuration point before and after reading the file
+% for the tagging.
+% \begin{macrocode}
+\def\@starttoc@cfgpoint@before#1{}
+\def\@starttoc@cfgpoint@after#1{}
+\def\@starttoc#1{%
+ \begingroup
+ \makeatletter
+ \@starttoc@cfgpoint@before{#1}%
+ \@input{\jobname.#1}%
+ \@starttoc@cfgpoint@after{#1}
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \endgroup}
+% \end{macrocode}
+%
+% \subsection{Formatting of the toc entries}
+%
+% \subsubsection{Kernel commands}
+% [latex-lab] or [kernel?]?
+%
+% We need hooks before and after the content and before and after the page number.
+% The number needs some thing so that it can be tagged as label.
+% The text and the page
+% hooks are used in manual \cs{l@xx} commands and in \cs{l@xx} defined by
+% \cs{@dottedtocline} or by other means.
+% \begin{macrocode}
+\NewMirroredHookPair{contentsline/number/before}{contentsline/number/after}%
+\NewMirroredHookPair{contentsline/text/before}{contentsline/text/after}%
+\NewMirroredHookPair{contentsline/page/before}{contentsline/page/after}%
+% \end{macrocode}
+%
+% The dot 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.
+%
+% \cs{@dottedtocline} needs hooks and formatting commands.
+% \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@
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@#1@format\endcsname{#4}%
+ \UseHook{contentsline/text/after}%
+ \nobreak
+ \@dottedtocline@cfgpoint@leaders{%
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+ mu$}\hfill}%
+ \nobreak
+ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor
+ \UseHook{contentsline/page/before}%
+ #5%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}%
+ \par}%
+ \fi}
+% \end{macrocode}
+%
+% \subsubsection{\cs{numberline}}
+% [kernel?]
+% Inside or outside the box?
+% \begin{macrocode}
+\def\numberline#1{\hb@xt@\@tempdima{%
+ \UseHook{contentsline/number/before}%
+ #1\hfil
+ \UseHook{contentsline/number/after}%
+ }}
+% \end{macrocode}
+%
+% \subsubsection{\cs{l@xx} in the classes}
+% Depending on the class we have to redefine also more commands
+% For other classes it should be documented what is needed.
+% \begin{macrocode}
+\AddToHook{class/article/after}
+ {
+ \renewcommand*\l@part[2]{%
+ \ifnum \c@tocdepth >-2\relax
+ \addpenalty\@secpenalty
+ \addvspace{2.25em \@plus\p@}%
+ \setlength\@tempdima{3em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\leavevmode
+ \large \bfseries
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@-1@format\endcsname{#1}%
+ \UseHook{contentsline/text/after}%
+ \hfil
+ \hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}}\par
+ \nobreak
+ \endgroup
+ \fi}
+\renewcommand*\l@section[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength\@tempdima{1.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@1@format\endcsname{#1}%
+ \UseHook{contentsline/text/after}%
+ \nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}\par
+ \endgroup
+ \fi}
+ }
+\AddToHook{class/report/after}
+ {
+ \renewcommand*\l@part[2]{%
+ \ifnum \c@tocdepth >-2\relax
+ \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\p@}%
+ \setlength\@tempdima{3em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\leavevmode
+ \large \bfseries
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@-1@format\endcsname{#1}%
+ \UseHook{contentsline/text/after}%
+ \hfil
+ \hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}}\par
+ \nobreak
+ \endgroup
+ \fi}
+ \renewcommand*\l@chapter[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \vskip 1.0em \@plus\p@
+ \setlength\@tempdima{1.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@0@format\endcsname
+ {#1}%
+ \UseHook{contentsline/text/after}%
+ \nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+ }
+\AddToHook{class/book/after}
+ {
+ \renewcommand*\l@part[2]{%
+ \ifnum \c@tocdepth >-2\relax
+ \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\p@}%
+ \setlength\@tempdima{3em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\leavevmode
+ \large \bfseries
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@-1@format\endcsname{#1}%
+ \UseHook{contentsline/text/after}%
+ \hfil
+ \hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}}\par
+ \nobreak
+ \endgroup
+ \fi}
+ \renewcommand*\l@chapter[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \vskip 1.0em \@plus\p@
+ \setlength\@tempdima{1.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ \UseHook{contentsline/text/before}%
+ \csname contentsline@text@0@format\endcsname
+ {#1}%
+ \UseHook{contentsline/text/after}%
+ \nobreak\hfil
+ \nobreak\hb@xt@\@pnumwidth{\hss
+ \UseHook{contentsline/page/before}%
+ #2%
+ \UseHook{contentsline/page/after}%
+ \kern-\p@\kern\p@}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*latex-lab>
+\ProvidesFile{toc-tagging-latex-lab-testphase.ltx}
+ [2022-10-26 v0.8 code related to the tagging of toc and similar lists]
+
+\RequirePackage{latex-lab-testphase-toc-tagging}
+
+%</latex-lab>
+% \end{macrocode}
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
new file mode 100644
index 0000000000..1e8357e811
--- /dev/null
+++ 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-tagging-functions.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx
new file mode 100644
index 0000000000..179e5a868e
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx
@@ -0,0 +1,365 @@
+% \iffalse meta-comment
+%
+%% File: toc-tagging-functions.dtx (C) Copyright 2022-2023 LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% The development version of the bundle can be found below
+%
+% https://github.com/latex3/latex2e/required/latex-lab
+%
+% for those people who are interested or want to report an issue.
+%
+%<*driver>
+\documentclass{l3doc}
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \DocInput{latex-lab-toc-tagging-functions.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+% \title{The \textsf{toc-tagging-functions} package\\
+% Tagpdf functions related to the tagging of toc and similar lists}
+% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}}
+% \date{Version 0.81 2023-02-10}
+%
+% \maketitle
+%
+% \newcommand{\xt}[1]{\textsl{\textsf{#1}}}
+% \newcommand{\TODO}[1]{\textbf{[TODO:} #1\textbf{]}}
+% \newcommand{\docclass}{document class \marginpar{\raggedright document class
+% customizations}}
+%
+% \providecommand\hook[1]{\texttt{#1}}
+%
+% \begin{abstract}
+% \end{abstract}
+%
+% Header for the testphase package
+% \begin{macrocode}
+%<*header>
+\ProvidesExplPackage {latex-lab-testphase-toc-tagging} {2023-02-10} {0.81}
+ { commands related to the tagging of toc-like lists}
+%</header>
+% \end{macrocode}
+%
+% \section{Introduction}
+%
+% The followings contains various functions related to the tagging of the
+% table of contents and similar list. The functions will at some time
+% be moved inside the tagpdf code.
+% \begin{macrocode}
+%<*package>
+%<@@=tag>
+% \end{macrocode}
+% \section{Temporary variables}
+% \begin{macro}{\l_@@_toc_tmpa_tl}
+% \begin{macrocode}
+\tl_new:N \l_@@_toc_tmpa_tl
+% \end{macrocode}
+% \end{macro}
+%
+% \section{General struct commands}
+% The following variables and commands are not restricted to toc, but
+% probably will be need in other places too.
+% \begin{variable}{\g_@@_struct_dest_num_prop}
+% This variable records for (some or all, not clear yet)
+% destination names the related structure number to allow
+% to reference them in a Ref. The key is the destination.
+% Moved into tagpdf!
+% \end{variable}
+%
+% We use \cs{refstepcounter} to store the relation between
+% destination names/\cs{@currentHref} and structure numbers
+%
+% TODO: the functions should be moved into tagpdf so that one
+% doesn't has to test if the prop exists or not.
+% \begin{macrocode}
+\AddToHook{cmd/refstepcounter/after}
+ {
+ \tl_if_blank:VF \@currentHref
+ {
+ \prop_if_exist:NT \g_@@_struct_dest_num_prop
+ {
+ \prop_gput:Nxx \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+ }
+ }
+ }
+\AddToHook{cmd/H@refstepcounter/after}
+ {
+ \tl_if_blank:VF \@currentHref
+ {
+ \prop_if_exist:NT \g_@@_struct_dest_num_prop
+ {
+ \prop_gput:Nxx \g_@@_struct_dest_num_prop {\@currentHref}{\tag_get:n{struct_num}}
+ }
+ }
+ }
+% \end{macrocode}
+% \begin{variable}{\g_@@_struct_ref_by_dest_prop}
+% This variable contains structures whose Ref key should be updated
+% at the end to point to structured related with this destination.
+% As this is probably need in other places too, it is not only a toc-variable.
+% Moved into tagpdf!
+% \end{variable}
+%
+% \begin{macro}{\g_@@_struct_ref_by_dest:}
+% This command is executed and update the Ref keys
+% of the structures listed in |\g_@@_struct_ref_by_dest_prop|.
+% It is currently only relevant for the |TOCI|. But other structures
+% could need that later too.
+% The command is executed in the |tagpdf/finish/before| hook.
+% \begin{macrocode}
+\msg_new:nnn { tag } {struct-dest-unknown}
+ {
+ Destination~#1~has~no~related~structure.\\
+ /Ref~for~structure~#2~not~updated
+ }
+
+\cs_new_protected:Npn \g_@@_struct_ref_by_dest:
+ {
+ \prop_map_inline:Nn\g_@@_struct_ref_by_dest_prop
+ {
+ \prop_get:NnNTF \g_@@_struct_dest_num_prop {##2} \l_@@_tmpa_tl
+ {
+ \@@_struct_gput_data_ref:ee
+ { ##1 }
+ { \tag_struct_object_ref:e{ \l_@@_tmpa_tl }}
+ }
+ {
+ \msg_warning:nnnn {tag}{struct-dest-unknown}{##2}{ ##1}
+ }
+ }
+ }
+\hook_gput_code:nnn {tagpdf/finish/before}{tagpdf/struct/Ref}{\g_@@_struct_ref_by_dest:}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Toc code}
+% \begin{variable}{\g_@@_toc_level_int,\g_@@_toc_stack_seq}
+% |\g_@@_toc_level_int| records in a toc the current absolute level.
+% We must close open structures at the end of the toc, for this
+% we maintain a stack |\g_@@_toc_stack_seq|.
+% \begin{macrocode}
+\int_new:N \g_@@_toc_level_int
+\seq_new:N \g_@@_toc_stack_seq
+% \end{macrocode}
+% \end{variable}
+
+% \begin{macro}{\_tag_toc_starttoc_init:n}
+% The init code clears the stack, and set the level to -100
+% and start to TOC structure. We also disable paratagging.
+% The |/Title| is currently simply the type, but this could be done nicer.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_toc_starttoc_init:n #1
+ {
+ \bool_set_false:N \l_@@_para_bool
+ \seq_gclear:N \g_@@_toc_stack_seq
+ \int_gset:Nn \g_@@_toc_level_int {-100}
+ \tag_struct_begin:n{tag=TOC,title=#1}
+ }
+% \end{macrocode}
+% Now map it into the config point:
+% \begin{macrocode}
+\cs_set_protected:Npn\@starttoc@cfgpoint@before#1
+ {
+ \@@_toc_starttoc_init:n{#1}
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_toc_starttoc_finalize:}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_toc_starttoc_finalize:
+ {
+ \int_step_inline:nn
+ {\seq_count:N \g_@@_toc_stack_seq }
+ {\tag_struct_end:}
+ \tag_struct_end:
+ \seq_gclear:N \g_@@_toc_stack_seq
+ }
+% \end{macrocode}
+% Now map it into the config point:
+% \begin{macrocode}
+\cs_set_protected:Npn\@starttoc@cfgpoint@after#1
+ {
+ \@@_toc_starttoc_finalize:
+ }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@@_toc_end:n}
+% This commands ends all TOC on the stack with a level higher than the argument
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_toc_end:n #1
+ {
+ \seq_get:NNT\g_@@_toc_stack_seq \l_@@_toc_tmpa_tl
+ {
+ \bool_lazy_and:nnT
+ {
+ \str_if_eq_p:ee{\tl_head:N\l_@@_toc_tmpa_tl}{TOC}
+ }
+ {
+ \int_compare_p:nNn {#1}<{\tl_tail:N \l_@@_toc_tmpa_tl}
+ }
+ {
+ \seq_gpop:NN\g_@@_toc_stack_seq \l_@@_toc_tmpa_tl
+ \tag_struct_end:
+ \@@_toc_end:n{#1}
+ }
+ }
+ }
+\cs_generate_variant:Nn \@@_toc_end:n {e}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_toc_contentsline_begin:nnn}
+% 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
+ {
+ \tag_if_active:T
+ {
+% \end{macrocode}
+% We detect the intended level by checking the value of |toclevel@...|
+% (currently only provided by hyperref, but should be there always).
+% To be on the safe side we set it to 1 if not defined.
+% \begin{macrocode}
+ \ExpandArgs{c}\providecommand { toclevel@#1 }{ 1 } % just in case ...
+ \int_compare:nNnF { \use:c{toclevel@#1} } > {\use:c{c@tocdepth}}
+ {
+% \end{macrocode}
+% if level goes up, start new sub TOC unless we are at the begin
+% \begin{macrocode}
+ \bool_lazy_and:nnT
+ { \int_compare_p:nNn { \g_@@_toc_level_int } > {-100} }
+ { \int_compare_p:nNn { \use:c{toclevel@#1} } > { \g_@@_toc_level_int } }
+ {
+ \seq_gpush:Nx \g_@@_toc_stack_seq {{TOC}\use:c{toclevel@#1}}
+ \tag_struct_begin:n{tag=TOC}
+ }
+% \end{macrocode}
+% if level goes down close all TOC's with a higher level
+% \begin{macrocode}
+ \int_compare:nNnT
+ { \use:c{toclevel@#1} } < { \g_@@_toc_level_int }
+ {
+ \@@_toc_end:e { \use:c{toclevel@#1} }
+ }
+% \end{macrocode}
+%if same level do nothing
+% update toclevel to the current level.
+% \begin{macrocode}
+ \int_gset:Nn \g_@@_toc_level_int { \use:c{toclevel@#1} }
+% \end{macrocode}
+% now open the TOCI, the tagging of the
+% inner structure is left to the |\l@xxx| commands.
+% setting the title is not strictly necessary but looks nicer
+% but we have to remove the |\numberline|
+% \begin{NOTE}{UF}
+% perhaps keep the number? How to insert a space then
+% \end{NOTE}
+% \begin{macrocode}
+ \group_begin:
+ \text_declare_expand_equivalent:Nn \numberline \use_none:n
+ \exp_args:Nx \tag_struct_begin:n{tag=TOCI,title={\text_purify:n {#2}}}
+% \end{macrocode}
+% The TOCI structure should get a /Ref, so we put a request with its destination
+% name into the prop.
+% \begin{NOTE}{UF}
+% This only works with hyperref currently. Without hyperref we
+% need to store fake names.
+% \end{NOTE}
+% \begin{macrocode}
+ \prop_gput:Nxx \g_@@_struct_ref_by_dest_prop
+ { \tag_get:n {struct_num} }{#3}
+ \seq_gpush:Nx \g_@@_toc_stack_seq {{TOCI}\use:c{toclevel@#1}}
+ \group_end:
+ }
+ }
+ }
+% \end{macrocode}
+% Now map it into the config point:
+% \begin{macrocode}
+\cs_set_protected:Npn\@contentsline@cfgpoint@before#1#2#3#4
+ {
+ \@@_toc_contentsline_begin:nnn {#1}{#2}{#4}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_toc_contentsline_end:n}
+% 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
+ {
+ \int_compare:nNnF { \use:c{toclevel@#1} } > {\use:c{c@tocdepth}}
+ {
+ \seq_gpop:NNT \g_@@_toc_stack_seq\l_@@_tmpa_tl
+ {
+ \str_if_eq:eeTF{\tl_head:N\l_@@_tmpa_tl}{TOCI}
+ {
+ \tag_struct_end:
+ }
+ {
+ \msg_warning:nn{tag}{toc-no-TOCI}
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Now we map it to the config point
+% \begin{macrocode}
+\cs_set_protected:Npn \@contentsline@cfgpoint@after #1#2#3#4
+ {
+ \@@_toc_contentsline_end:n {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Tagging of the content}
+% This need discussion.
+%
+% \begin{macrocode}
+\AddToHook{contentsline/text/before}[tagpdf]{%
+ \tag_struct_begin:n{tag=Reference}%
+ \tag_mc_begin:n{tag=Reference}}
+\AddToHook{contentsline/text/after}[tagpdf]{%
+ \tag_mc_end:}
+\AddToHook{contentsline/page/before}[tagpdf]{%
+ \tag_mc_begin:n{tag=Reference}}
+\AddToHook{contentsline/page/after}[tagpdf]{%
+ \tag_mc_end:
+ \tag_struct_end:} %Reference
+\AddToHook{contentsline/number/before}[tagpdf]{%
+ \tag_mc_end:
+ \tag_struct_begin:n{tag=Lbl}%
+ \tag_mc_begin:n{tag=Lbl}}
+\AddToHook{contentsline/number/after}[tagpdf]{%
+ \tag_mc_end:
+ \tag_struct_end:
+ \tag_mc_begin:n{tag=Reference}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@dottedtocline@cfgpoint@leaders#1{%
+ \tag_mc_begin:n{artifact}\nobreak#1\nobreak\tag_mc_end:}
+% \end{macrocode}
+
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf
new file mode 100644
index 0000000000..b0b3f531db
--- /dev/null
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab.ins b/macros/latex-dev/required/latex-lab/latex-lab.ins
index bc668a71e1..ab77bbb846 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab.ins
+++ b/macros/latex-dev/required/latex-lab/latex-lab.ins
@@ -3,7 +3,7 @@
%% driver files from the dtx file(s) in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 2021-2022 The LaTeX Project
+%% Copyright (C) 2021-2023 The LaTeX Project
%%
%%
%% This file is part of the `LaTeX-lab Bundle' for LaTeX.
@@ -35,7 +35,7 @@
This is a generated file.
-Copyright 2021,2022 LaTeX Project
+Copyright 2021-2023 LaTeX Project
This file was generated from file(s) of the `LaTeX-lab Bundle'.
------------------------------------------------------------------------------------
@@ -68,15 +68,48 @@ where one can also log issues in case there are any.
% #1-latex-lab-testphase.ltx
\generate{\file{phase-I-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-I}}}
\generate{\file{phase-II-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-II}}}
+\generate{\file{phase-III-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{phase-III}}}
+
\generate{\file{tagpdf-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{tagpdf}}}
\generate{\file{new-or-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{new-or}}}
+\generate{\file{new-or-1-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{new-or-1}}}
+
+\generate{\file{math-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{math-lab}}}
+\generate{\file{latex-lab-testphase-math.sty}{\from{latex-lab-testphase.dtx}{math-sty}}}
% support files (the new-or code is a private package to make life easier)
-\generate{\file{latex-lab-testphase-new-or.sty}{\from{latex-lab-new-or.dtx}{code}}}
+\generate{\file{latex-lab-testphase-new-or-2.sty}{\from{latex-lab-new-or-2.dtx}{code}}}
+\generate{\file{latex-lab-testphase-new-or-1.sty}{\from{latex-lab-new-or-1.dtx}{code}}}
\generate{\file{latex-lab-footmisc.ltx}{\from{latex-lab-footnotes.dtx}{footmisc}}}
\generate{\file{latex-lab-footnotes.ltx}{\from{latex-lab-footnotes.dtx}{kernel}}}
+\generate{\file{latex-lab-mathtagging.ltx}{\from{latex-lab-mathtagging.dtx}{kernel}}}
+
+\generate{\file{latex-lab-amsmath.ltx}{\from{latex-lab-amsmath.dtx}{kernel}}}
+\generate{\file{latex-lab-mathtools.ltx}{\from{latex-lab-mathtools.dtx}{kernel}}}
+\generate{\file{latex-lab-mathpkg.ltx}{\from{latex-lab-mathpkg.dtx}{kernel}}}
+
+\generate{\file{latex-lab-testphase-sec-tagging.sty}{\from{latex-lab-sec-tagging.dtx}{package}}}
+\generate{\file{sec-tagging-latex-lab-testphase.ltx}{\from{latex-lab-sec-tagging.dtx}{latex-lab}}}
+
+
+\generate{\file{latex-lab-testphase-toc-tagging.sty}{%
+ \from{latex-lab-toc-tagging-functions.dtx}{header}
+ \from{latex-lab-toc-kernel-changes.dtx}{package}
+ \from{latex-lab-toc-tagging-functions.dtx}{package}
+ \from{latex-lab-toc-hyperref-changes.dtx}{package}}}
+
+\generate{\file{toc-tagging-latex-lab-testphase.ltx}{%
+ \from{latex-lab-toc-kernel-changes.dtx}{latex-lab}}}
+
+\generate{\file{latex-lab-kernel-changes.sty}
+ {\from{latex-lab-toc-kernel-changes.dtx}{kernelchange}
+ \from{latex-lab-sec-tagging.dtx}{kernelchange}
+ }}
+
+\generate{\file{latex-lab-testphase-block-tagging.sty}{\from{latex-lab-block-tagging.dtx}{package}}}
+\generate{\file{block-tagging-latex-lab-testphase.ltx}{\from{latex-lab-block-tagging.dtx}{latex-lab}}}
\endbatchfile
diff --git a/macros/latex-dev/required/latex-lab/usage-of-@footnotemark.txt b/macros/latex-dev/required/latex-lab/usage-of-@footnotemark.txt
deleted file mode 100644
index 684a695faa..0000000000
--- a/macros/latex-dev/required/latex-lab/usage-of-@footnotemark.txt
+++ /dev/null
@@ -1,186 +0,0 @@
-% packages that alter \@footnotemark ...
-
-
-% bibarts
-
-\let\ba@footnmark=\@footnotemark
-\def\@footnotemark{\ifhmode{\nobreak \hskip 0.04em plus 0.01em}\else\leavevmode\fi\ba@footnmark}%
-
-
-% ./bxjscls/bxjsja-minimal.def
-
-\def\bxjs@cjk@loaded{%
- \def\@footnotemark{%
- \leavevmode
- \ifhmode
- \edef\@x@sf{\the\spacefactor}%
- \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax
- \unkern\unkern
- \ifdim\lastskip>\z@ \unskip \fi
- \fi\fi
- \nobreak
- \fi
- \@makefnmark
- \ifhmode \spacefactor\@x@sf \fi
- \relax}%
- \let\bxjs@cjk@loaded\relax
-}
-
-% ./arabtex/afoot.sty
-
-\let \a@@footnotemark \@footnotemark
-
-\def \a@footnotemark {% inside Arabic environment
-\iftrans \unskip \unskip \nobreak \@makefnmark \fi
-\ifarab \a@spacefalse \putwordb@x \@makefnmark \a@spacetrue \fi }
-
-% ./hyperref/hyperref.sty
-
- \def\@footnotemark{%
- \leavevmode
- \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
- \stepcounter{Hfootnote}%
- \global\let\Hy@saved@currentHref\@currentHref
- \hyper@makecurrent{Hfootnote}%
- \global\let\Hy@footnote@currentHref\@currentHref
- \global\let\@currentHref\Hy@saved@currentHref
- \hyper@linkstart{link}{\Hy@footnote@currentHref}%
- \@makefnmark
- \hyper@linkend
- \ifhmode\spacefactor\@x@sf\fi
- \relax
- }%
-
-
-% ./hypdvips/hypdvips.sty
-
- \def\@footnotemark{%
- \leavevmode
- \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
- \stepcounter{Hfootnote}%
- \global\let\Hy@saved@currentHref\@currentHref
- \hyper@makecurrent{Hfootnote}%
- \global\let\Hy@footnote@currentHref\@currentHref
- \global\let\@currentHref\Hy@saved@currentHref
- \ifHy@draft%
- \@makefnmark%
- \else%
- \pp@hyperfootnote%
- \fi%
- \ifhmode\spacefactor\@x@sf\fi
- \relax
- }
-
- \newcommand{\pp@hyperfootnote}{%
- \ifx\pp@activerect\pp@true%
- \@makefnmark%
- \else%
- \ifpp@smallfootnotes%
- \let\pp@backup@@thefnmark\@thefnmark%
- \renewcommand{\@thefnmark}{\pdf@rect{\pp@backup@@thefnmark}}%
- \Hy@colorlink\@footnotecolor%
- \@makefnmark%
- \Hy@endcolorlink%
- \pdfmark{%
- pdfmark=/ANN,%
- linktype=footnote,%
- Subtype=/Link,%
- AcroHighlight=\@pdfhighlight,%
- Border=\@pdfborder,%
- BorderStyle=\@pdfborderstyle,%
- Color=\@footnotebordercolor,%
- Dest=\Hy@footnote@currentHref,%
- Raw=H.B%
- }%
- \let\@thefnmark\pp@backup@@thefnmark%
- \else%
- \pdfmark[\@makefnmark]{%
- pdfmark=/ANN,%
- linktype=footnote,%
- Subtype=/Link,%
- AcroHighlight=\@pdfhighlight,%
- Border=\@pdfborder,%
- BorderStyle=\@pdfborderstyle,%
- Color=\@footnotebordercolor,%
- Dest=\Hy@footnote@currentHref%
- }%
- \fi%
- \fi%
- }
-
-
-% ./memoir/memhfixc.sty
-
-\ifHy@hyperfootnotes
- \def\@footnotemark{%
- \leavevmode
- \ifhmode\edef\@x@sf{\the\spacefactor}%
- \m@mmf@check% <--- added
- \nobreak\fi
- \stepcounter{Hfootnote}%
- \global\let\Hy@saved@currentHref\@currentHref
- \hyper@makecurrent{Hfootnote}%
- \global\let\Hy@footnote@currentHref\@currentHref
- \global\let\@currentHref\Hy@saved@currentHref
- \hyper@linkstart{link}{\Hy@footnote@currentHref}%
- \@makefnmark
- \hyper@linkend
- \m@mmf@prepare% <--- added
- \ifhmode\spacefactor\@x@sf\fi
- \relax
- }%
-\fi
-
-
-% caption3.sty
-
-% this is altering the top-level when inside a float
-
-
-% ./koma-script/scrlttr2.cls
-
-\newcommand*{\scr@footnotemark}{%
- \leavevmode
- \ifhmode\edef\@x@sf{\the\spacefactor}\FN@mf@check\nobreak\fi
- \@makefnmark
- \csname FN@mf@prepare\endcsname
- \ifhmode\spacefactor\@x@sf\fi
- \relax}
-
-% tested against this ...
-
-\newcommand*{\scr@saved@footnotemark}{%
- \leavevmode
- \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
- \@makefnmark
- \ifhmode\spacefactor\@x@sf\fi
- \relax}
-
-
-% ./chextras/chextras.sty
-
-\ifstd@notes\else
- \let\std@footnotemark\@footnotemark
- \def\alt@footnotemark{\unskip\thinspace\std@footnotemark}
- \let\@footnotemark\alt@footnotemark
-
-% footmisx.sty
-
- \newcommand*\@footmisxnotemark{%
- \leavevmode
- \ifhmode
- \edef\@x@sf{\the\spacefactor}%
- \FN@mf@check
- \nobreak
- \fi
- \@footmicx@makefnmark
- \ifFN@pp@towrite
- \FN@pp@writetemp
- \FN@pp@towritefalse
- \fi
- \FN@mf@prepare
- \ifhmode\spacefactor\@x@sf\fi
- \relax
- }
-
-
diff --git a/macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt b/macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt
deleted file mode 100644
index 48a3172843..0000000000
--- a/macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt
+++ /dev/null
@@ -1,842 +0,0 @@
-
-% ./bibarts/bibarts.sty
-
-\let\ba@footnotetext=\@footnotetext
-\long\def\@footnotetext#1{\ba@footnotetext{%
- \global\let\thisto@ba=-%
- \global\let\thisti@ba=-%
- \global\let\thisp@ba=-%
- \global\let\thisvol@ba=-%
- \global\let\thiss@ba=-%
- \global\let\thisn@ba=-%
- \global\let\pos@ba=0%
- \kern 0.1em\nulskip@ba{\@footnotetrue\ignorespaces
- #1\nulskip@ba\ba@textmode}\global\let\lastto@ba=\thisto@ba
- \global\let\lastti@ba=\thisti@ba
- \global\let\lastp@ba=\thisp@ba
- \global\let\lastvol@ba=\thisvol@ba
- \global\let\lasts@ba=\thiss@ba
- \global\let\lastn@ba=\thisn@ba}}%
-
-
-% ./fnbreak/fnbreak.sty
-
- \let\fnb@orig@footnotetext\@footnotetext
- \long\def\@footnotetext#1{\fnb@orig@footnotetext{\fnb@fnstart#1\fnb@fnend}}%
-
-
-% ./revtex4-1/revtex4-1.cls ./revtex/ltxutil.sty ./revtex/revtex4-2.cls ...
-
-\long\def\@footnotetext{%
- \insert\footins\bgroup
- \make@footnotetext
-}%
-\long\def\@mpfootnotetext{%
- \minipagefootnote@pick
- \make@footnotetext
-}%
-\long\def\make@footnotetext#1{%
- \set@footnotefont
- \set@footnotewidth
- \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@\@mpfn\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1%
- \@finalstrut\strutbox\vadjust{\vskip\z@skip}%
- }%
- \color@endgroup
- \minipagefootnote@drop
-}%
-
-
-% ./nrc/nrc1.cls ./nrc/nrc2.cls
-
-% this is missing the \par at the end and \@currentcounter
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \reset@font\smallt
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
- }%
- \color@endgroup
- }%
-}%
-
-%-------------------------------------
-
-% ./bigfoot/bigfoot.sty
-
- \def\@footnotetext{\Footnotetextdefault{}}%
-
-%-------------------------------------
-
-
-% ./uafthesis/uafthesis.cls
-
-% this is missing the \par at the end and \@currentcounter
-
-%% this little gem provides for single-spaced footnotes
-\long\def\@footnotetext#1{\insert\footins{%
- \ssp
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
- {\rule{\z@}{\footnotesep}\ignorespaces
- #1\strut}}}
-
-%-------------------------------------
-
-
-
-% ./resphilosophica/resphilosophica.cls
-
-% I wonder if this \, is really intended below ...
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \normalfont\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep \splitmaxdepth \dp\strutbox
- \floatingpenalty\@MM \hsize\columnwidth
- \@parboxrestore \parindent\normalparindent \sloppy
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark}%
- \@makefntext{%
- \,\rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}}
-
-%-------------------------------------
-
-
-
-% ./setspace/setspace.sty
-
-% this is missing the \par at the end and \@currentcounter
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
-% GT: Next line added. Hook desired here!
- \def\baselinestretch {\setspace@singlespace}%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth
- \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}
-
-%-------------------------------------
-
-
-
-% ./linguex/linguex.sty
-
-
-\let\predefinedfootnotetext=\@footnotetext
-\long\def\@footnotetext#1{\@noftnotefalse\predefinedfootnotetext{#1}%
- \@noftnotetrue}
-
-
-%-------------------------------------
-
-
-% ./fnpara/fnpara.sty
-
-\long\def\@footnotetext#1{\insert\footins{%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \setbox0=\hbox{%
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
- \penalty -10
- \hskip\footglue
- }%
- }%
- \dp0=0pt \ht0=\fudgefactor\wd0 \box0
- \color@endgroup}}
-
-%-------------------------------------
-
-
-% ./footmisc/footmisc.sty (para option)
-
-% this is missing the \par at the end and \@currentcounter
-
- \long\def\FN@footnotetext#1{%
- \insert\footins{%
- \ifFN@setspace
- \let\baselinestretch\FN@baselinestretch
- \fi
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox
- \floatingpenalty\@MM
- \hsize\columnwidth
- \@parboxrestore
- \protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
- \color@begingroup
- \setbox\FN@tempboxa\hbox{%
- \@makefntext{\ignorespaces#1\strut
- \penalty-10\relax
- \hskip\footglue
- }% end of \@makefntext parameter
- }% end of \hbox
- \dp\FN@tempboxa\z@
- \ht\FN@tempboxa\dimexpr\wd\FN@tempboxa *%
- \footnotebaselineskip / \columnwidth\relax
- \box\FN@tempboxa
- \color@endgroup
- }%
- \FN@mf@prepare
- }
-
-%-------------------------------------
-
-
-% ./footmisc/footmisc.sty (normal)
-
-% this is missing the \par at the end and \@currentcounter
-
- \long\def\FN@footnotetext#1{%
- \insert\footins{%
- \ifFN@setspace
- \let\baselinestretch\FN@baselinestretch
- \fi
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox
- \floatingpenalty\@MM
- \hsize\columnwidth
- \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep
- \ignorespaces#1\@finalstrut\strutbox
- }%
- \color@endgroup
- }%
- \FN@mf@prepare
- }%
-
-
-
-%-------------------------------------
-
-
-% ./footmisc/footmisc.sty (side option)
-
- \long\def\FN@footnotetext#1{%
- \marginpar{%
- \ifFN@setspace
- \let\baselinestretch\FN@baselinestretch
- \fi
- \reset@font\footnotesize
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \ignorespaces#1%
- }%
- \color@endgroup
- }%
- \FN@mf@prepare
- }%
-
-
-
-%-------------------------------------
-
-
-
-% ./bxjscls/bxjsarticle.cls ./bxjscls/bxjsbook.cls ...
-
-\long\def\@footnotetext{%
- \insert\footins\bgroup
- \normalfont\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces}%
- \futurelet\jsc@next\jsc@fo@t}
-\def\jsc@fo@t{\ifcat\bgroup\noexpand\jsc@next \let\jsc@next\jsc@f@@t
- \else \let\jsc@next\jsc@f@t\fi \jsc@next}
-\def\jsc@f@@t{\bgroup\aftergroup\jsc@@foot\let\jsc@next}
-\def\jsc@f@t#1{#1\jsc@@foot}
-\def\jsc@@foot{\@finalstrut\strutbox\color@endgroup\egroup
- \ifx\pltx@foot@penalty\@undefined\else
- \ifhmode\null\fi
- \ifnum\pltx@foot@penalty=\z@\else
- \penalty\pltx@foot@penalty
- \pltx@foot@penalty\z@
- \fi
- \fi}
-
-
-not covered so far supports \footnote{ catcode changes ...} but also
-\foonote A --- the latter is questionable I would say
-
-
-%-------------------------------------
-
-
-% ./fn2end/fn2end.sty
-
-obsolete I guess, ignored in evaluation
-
-
-%-------------------------------------
-
-
-% ./hyperref/hyperref.sty
-
- \long\def\@footnotetext#1{%
- \H@@footnotetext{%
- \ifHy@nesting
- \expandafter\ltx@firstoftwo
- \else
- \expandafter\ltx@secondoftwo
- \fi
- {%
- \expandafter\hyper@@anchor\expandafter{%
- \Hy@footnote@currentHref
- }{\ignorespaces #1}%
- }{%
- \Hy@raisedlink{%
- \expandafter\hyper@@anchor\expandafter{%
- \Hy@footnote@currentHref
- }{\relax}%
- }%
- \let\@currentHref\Hy@footnote@currentHref
- \let\@currentlabelname\@empty
- \ignorespaces #1%
- }%
- }%
- }%
-
-
-Handling of anchors (in nested context) I guess. This needs to be
-married with the anchor setting that the tagging currently does and
-the latter improved/adjusted
-
-
-%-------------------------------------
-
-% ./biblatex-gb7714-2015/gb7714-2015ms.bbx ./biblatex-gb7714-2015/gb7714-2015mx.bbx ...
-
- \long\def\@footnotetext##1{\insert\footins{%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \leftskip \footbibmargin%增加的左侧缩进
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces##1\@finalstrut\strutbox%
- }%
- \color@endgroup}}%
-
-fits the structure
-%-------------------------------------
-
-
-% ./amscls/amsbook.cls ./amscls/amsproc.cls ./amscls/amsart.cls ...
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \normalfont\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep \splitmaxdepth \dp\strutbox
- \floatingpenalty\@MM \hsize\columnwidth
- \@parboxrestore \parindent\normalparindent \sloppy
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark}%
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}}
-
-fits the structure
-%-------------------------------------
-
-
-% ./umich-thesis/umich-thesis.cls
-
-% change LaTeX's footnotes to get vertical spacing correct
-\skip\footins \baselinestretch2\skip\footins
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \def\baselinestretch {\setspace@singlespace}%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth
- \@parboxrestore
- \vskip 1.2\baselineskip
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}
-
-fits the structure
-%-------------------------------------
-
-
-% ./nostarch/nostarch.cls
-
-\long\def\@footnotetext#1{\insert\footins{%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@{13.5pt}\ignorespaces#1}%
- \color@endgroup}}%
-
-fixed \footsep, probably very old
-fits the structure
-%-------------------------------------
-
-
-
-% ./coursepaper/coursepaper.cls
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \def\baselinestretch {1}%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth
- \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}
-
-fits the structure
-%-------------------------------------
-
-
-
-% ./ucthesis/ucthesis.cls
-
-% Single-space footnotes.
-\long\def\@footnotetext#1{\insert\footins{\ssp\reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
- {\rule{\z@}{\footnotesep}\ignorespaces
- #1\strut}}}
-
-fits the structure
-%-------------------------------------
-
-
-
-% ./jura/jura.cls
-
-\long\def\@footnotetext#1{\insert\footins{%
- \linespread{\J@FootnoteSpread}\reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}%
-
-fits the structure
-%-------------------------------------
-
-
-% ./asaetr/asaesub.sty
-
-2.09
-
-%-------------------------------------
-
-
-% ./lineno/fnlineno.sty
-
-%% |\FNLN@@text| stores the `\@footnotetext' found,
-%% we might check if it is `\FNLN@ltx@fntext' ... %% TODO
-\let\FNLN@@text\@footnotetext
-\def\@footnotetext{%
- \ifLineNumbers \expandafter \FNLN@text
- \else \expandafter \FNLN@@text
- \fi}
-
-
-\def \FNLN@text {% %% 2010/12/31 arg read later
- \vadjust{\penalty-\FNLN@M@swap@codepen}%
-%% Standard \LaTeX's `\@footnotetext' expands `\@thefnmark'
-%% to produce the footnote mark at the page bottom,
-%% right after it has been determined for the mark
-%% in the main text. \emph{Here} the footnote text
-%% will be typeset only when \emph{other} footnote marks
-%% may have been formed for typesetting the main text
-%% paragraph before.
-%% %%% (TODO clearer wording)
-%% In the \strong{footnote list}
-%% macro |\FNLN@list|, the (\dqtd{`&\protect'ed})
-%% \emph{current} expansion <mark> of `\@thefnmark'
-%% is stored as an item preceding the footnote text
-%% <text>. One footnote entry in `\FNLN@list'
-%% thus has the form \lq`<mark>\@lt<text>\@lt'\rq.
-%% \LaTeX's internal `\g@addto@macro' is used to \emph{append}
-%% an entry to the list (at the right). The OTR will later
-%% take the entries from the left of the list.
-%%
-%% The argument of the auxiliary/temporary `\@tempa'
-%% will contain the footnote text and thus must be able to
-%% carry `\par' tokens. We therefore need a `\long' version of
-%% `\protected@edef':
- \let\@@protect\protect
- \let\protect\@unexpandable@protect
- \afterassignment\restore@protect
- \long \edef \@tempa ##1{%
- \noexpand\g@addto@macro \noexpand\FNLN@list {%
- \@thefnmark \noexpand\@lt ##1\noexpand \@lt}}%
-%% ... issuing
-%% \lq`\g@addto@macro\FNLN@list{<mark>\elt<text>\@lt}'\rq\ ...
- \@tempa %% reads arg
-}
-%% Here we initialize |\FNLN@list|:
-\let\FNLN@list\@empty
-
-
-
-probably continues working but needs separate checking
-
-%-------------------------------------
-
-
-
-% ./jurabib/jurabib.sty
-
- \long\def\@footnotetext#1{%
- \Orig@tabularx@footnotetext{%
- \jb@fntrue
- #1%
- \setcounter{jb@cites@in@footnote}{0}%
- }%
- }%
-
- \let\jbsaved@footnotetext\@footnotetext
- \long\def\@footnotetext#1{%
- \begingroup
- \jb@fntrue
- \jbsaved@footnotetext{#1}%
- \setcounter{jb@cites@in@footnote}{0}%
- \endgroup
- }%
-
-
-first is table notes, second
-fits the structure
-%-------------------------------------
-
-
-
-% ./york-thesis/york-thesis.cls
-
-\long\def\@footnotetext#1{%
- \insert\footins{%
- \def\baselinestretch {1}%
- \reset@font\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth
- \@parboxrestore
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark}%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}
-
-fits the structure
-%-------------------------------------
-
-
-% ./ucdavisthesis/ucdavisthesis.cls
-
-\long\def\@footnotetext#1{\insert\footins{\renewcommand\baselinestretch{1}
- \footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
- {\rule{\z@}{\footnotesep}\ignorespaces
- #1\strut}\renewcommand\baselinestretch{\@spacing}}}
-
-looks old ...
-fits the structure
-%-------------------------------------
-
-
-% ./ledmac/afoot.sty
-
-fairly old and buggy in some aspects
-
-%%% Make the LaTeX \cs{footnote} catcode-safe, like in Plain TeX.
-
-\def \@footnotetext {% new, do not yet read footnote text
- \insert \footins \bgroup
- \ifx \footglue \undefined % prepare normal footnote
- \interlinepenalty \interfootnotelinepenalty \floatingpenalty \@MM
- \splittopskip \footnotesep \splitmaxdepth \dp \strutbox
- \else
- \global\long\def \@makefntext ##1{{$^{\@thefnmark }$}##1\nobreak }%
- \setbox0=\hbox \bgroup % fnpara.sty is present
- \floatingpenalty=20000 \footnotesize
- \fi
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
- \a@fntext }
-
-
-%-------------------------------------
-
-
-% ./toptesi/toptesi.sty
-
-
-\long\def\@footnotetext#1{\insert\footins{\linespread{1}\footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
- \hsize\columnwidth \@parboxrestore
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
- \@makefntext{\rule{\z@}{\footnotesep}\ignorespaces#1\strut}}}
-
-
-fits the structure
-%-------------------------------------
-
-
-% ./gb4e/gb4e.sty
-
-\let\@gbsaved@footnotetext=\@footnotetext
-\long\def\@footnotetext#1{%
- \@noftnotefalse\setcounter{fnx}{0}%
- \@gbsaved@footnotetext{#1}%
- \@noftnotetrue}
-
-fits the structure
-%-------------------------------------
-
-
-
-% ./koma-script/scrlttr2.cls ./koma-script/scrextend.sty ./koma-script/scrreprt.cls ...
-
-same bug as footmisc: the @prepare is in the wrong place
-
-fits the structure
-%-------------------------------------
-
-
-
-% ./tabu/tabu.sty
-
-not checked what that does
-
-
-%-------------------------------------
-
-
-% ./uwthesis/uwthesis.cls
-
-does chapter notes -- ignore for now
-
-%-------------------------------------
-
-
-% ./tools/multicol.sty
-
-\long\def\mult@footnotetext#1{\begingroup
- \columnwidth\textwidth
- \orig@footnotetext{#1}\endgroup}
-
-
-fits the structure, but need to think what makes sense here as this a
-temporary redefinition for the environment only
-
-%-------------------------------------
-
-
-% ./fancyvrb/fancyvrb.sty
-
-\long\def\V@footnotetext{%
- \afterassignment\V@@footnotetext
- \let\@tempa}
-\def\V@@footnotetext{%
- \insert\footins\bgroup
- \csname reset@font\endcsname
- \footnotesize
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\footnotesep
- \splitmaxdepth\dp\strutbox
- \floatingpenalty \@MM
- \hsize\columnwidth
- \@parboxrestore
- \def\@currentcounter{footnote}%
- \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
- \@makefntext{}%
- \rule{\z@}{\footnotesep}%
- \bgroup
- \aftergroup\V@@@footnotetext
- \ignorespaces}
-\def\V@@@footnotetext{\strut\egroup}
-
-
-another one of the footnote commands that do not read they argument as an argument
-
-%-------------------------------------
-
-
-% ./savefnmark/savefnmark.sty
-
-obsolete
-
-%-------------------------------------
-
-
-% ./changebar/changebar.sty
-
-\let\ltx@footnotetext\@footnotetext
-\long\def\cb@footnotetext#1{%
- \cb@trace@stack{end footnote on page \the\c@page}%
- \cb@pop\cb@currentstack
- \ifnum\cb@topleft=\cb@nil
- \ltx@footnotetext{#1}%
- \else
- \cb@push\cb@currentstack
- \edef\cb@temp{\the\cb@curbarwd}%
- \ltx@footnotetext{\cb@start[\cb@temp]#1\cb@end}%
- \fi}
-\let\@footnotetext\cb@footnotetext
-
-
-% ./eledmac/eledmac.sty
-
-\apptocmd{\@footnotetext}{\m@mmf@prepare}{}{}
-\pretocmd{\@footnotetext}{%
- \ifnumberedpar@
- \edtext{}{\l@dbfnote{#1}}%
- \else
- }{}{}
-\apptocmd{\@footnotetext}{\fi}{}{}%
-
-
-% ./yafoot/dblfnote.sty
-
-\long\def\dfn@footnotetext#1{{\setbox\dfn@boxa\vbox{
- \let\insert\dfn@gobble
- \columnwidth\DFNcolumnwidth \hbadness\c@DFNsloppiness
- \def\@makefnmark{\smash{\dfn@makefnmark}}
- \dfn@latex@footnotetext{#1}\par \boxmaxdepth\dfn@fnmaxdp}%
- \dfn@dima\ht\dfn@boxa \advance\dfn@dima\dp\dfn@boxa
- \ifdim\dfn@dima>\z@\else
- \dfn@dima1sp\relax
- \setbox\dfn@boxa\vbox{\vbox to1sp{\unvbox\dfn@boxa\vfil}}\fi
- \global\setbox\dfn@ins\vbox{\boxmaxdepth\dfn@fnmaxdp
- \ifvoid\dfn@ins\else
- \unvbox\dfn@ins \allowbreak \nointerlineskip \fi
- \ifdfn@allowcbreak \unvbox \else \box \fi \dfn@boxa}%
- \setbox\dfn@boxa\copy\dfn@ins
- \dfn@split{.5\ht\dfn@boxa}\dfn@boxa\dfn@boxb\dfn@fnmaxdp\footnotesep
- \advance\@tempdima\@tempdimb \@tempdimb\@tempdima
- \advance\@tempdima-\dfn@fnht \global\dfn@fnht\@tempdimb
- \insert\footins{\floatingpenalty\@MM \vbox to\@tempdima{}}%
- \xdef\dfn@list{\dfn@list\@elt{\number\dfn@dima}{\number\@tempdima}}}}
-\let\dfn@latex@footnotetext\@footnotetext
-\let\@footnotetext\dfn@footnotetext
-
-
-% ./ftnxtra/ftnxtra.sty
-
-not checked what this does
-
-
-% ./acmart/acmart.cls
-
-\if@ACM@sigchiamode
-\long\def\@footnotetext#1{\marginpar{%
- \reset@font\small
- \interlinepenalty\interfootnotelinepenalty
- \protected@edef\@currentlabel{%
- \csname p@footnote\endcsname\@thefnmark
- }%
- \color@begingroup
- \@makefntext{%
- \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
- \color@endgroup}}%
-\fi
-
-
-% ./memoir/memoir.cls
-
- this needs some further analysis
-
diff --git a/macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt b/macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt
deleted file mode 100644
index e119197b70..0000000000
--- a/macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-
- \ifdim\lastkern>\z@\ifdim\lastkern<5sp\relax
-./bxjscls/bxjsja-minimal.def
-
-
-
- \ifdim\lastkern=-3sp \unkern
- \ifdim\lastkern=3sp \kern-3sp
- {\kern\MT@outer@kern\kern3sp\kern-3sp\relax}%
-./microtype/letterspace.sty
-
-
- \ifdim\lastkern=-3sp \unkern
- \ifdim\lastkern=3sp \kern-3sp
- {\kern\MT@outer@kern\kern3sp\kern-3sp\relax}%
-./microtype/microtype-pdftex.def
-
-
- \ifdim\lastkern=-3sp \unkern
- \ifdim\lastkern=3sp \kern-3sp
- {\kern\MT@outer@kern\kern3sp\kern-3sp\relax}%
-./microtype/microtype-luatex.def
-
-
-
-\providecommand*{\multiplefootnotemarker}{3sp}
-./eledmac/eledmac.sty
-
-
-
-\providecommand*{\multiplefootnotemarker}{3sp}
-./reledmac/reledmac.sty
-
-
-\edef\CJK@kern{\kern -2sp\kern 2sp}
-\edef\CJK@CJK{\kern -1sp\kern 1sp}
-./cjk/texinput/CJK.sty
-
-
-\edef\ruby@kern{\kern -5sp\kern 5sp}
-./cjk/texinput/ruby.sty
-
-
-% hyphenation between pinyin syllables. Values 1sp-3sp are already used
-\edef\py@sp{\kern -4sp\kern 4sp}
-./cjk/texinput/pinyin.sty
-
-
-\providecommand*{\multiplefootnotemarker}{3sp}
-./tufte-latex/tufte-common.def
-
-
-
-\newcommand*{\multiplefootnotemarker}{3sp}
-./memoir/memoir.cls
-
-
-\providecommand*{\multiplefootnotemarker}{3sp}
-./parnotes/parnotes.sty
-
-
-\providecommand*{\multiplefootnotemarker}{3sp}
-./lwarp/lwarp-footmisc.sty
-
-
- \bgroup \kern-3sp\kern3sp % kerns so I can test for beginning of list
-./examdesign/examdesign.cls
-
-
- \kern-1sp \kern1sp }
- \kern-2sp \kern2sp }
- \kern-3sp \kern3sp }
- \kern-4sp \kern4sp }
-./polyglossia/gloss-korean.ldf
-
-
-
-\NewDocumentCommand \@sidenotes@multisign { } {3sp}
-./sidenotes/sidenotes.sty
-
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
index a877bbe57c..dae1c3f742 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
index f944831c59..584b8b980f 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
@@ -121,7 +121,7 @@
\title{Mode d’emploi du module \ext{babel-french}}
\author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}}
-\newcommand*{\latestversion}{3.5p}
+\newcommand*{\latestversion}{3.5q}
\date{Version {\latestversion} -- \today}
\begin{document}
@@ -158,8 +158,6 @@
\vspace{-\baselineskip}\noindent
\descindentFB=0pt
\begin{description}
- \item[15 janvier 2017] La version~3.2f est compatible avec l’extension
- \ext{icomma}.
\item[30 janvier 2017] Le comportement par défaut de la commande
|\frquote{}| sous LuaTeX est modifié, voir p.~\pageref{frquote}.
\item[30 avril 2017] Utiliser |\frenchsetup{}| de préférence à
@@ -182,8 +180,10 @@
\item[11 nov. 2022] Avec Lua(La)TeX le codage |«~abc~»| ne produit plus
d’espace parasite. La redéfinition de |\shorthandoff{}|,
|\shorthandon{}| sous LuaTeX/XeTeX est supprimée.
- \item[3 janvier 2022] Modification de la commande |\DecimalMathComma|,
+ \item[3 janvier 2023] Modification de la commande |\DecimalMathComma|,
voir p.~\pageref{decimalmathcomma}.
+ \item[8 mars 2023] Correction de bug dans les listes,
+ voir p.~\pageref{par-in-lists}.
\end{description}
\end{abstract}
\egroup
@@ -1579,6 +1579,14 @@ remarque de Fabrice Eudes : elle peut désormais être utilisée dans le préamb
Voir section~\ref{decimalmathcomma} p.~\pageref{decimalmathcomma} pour plus de
détails.
+\vspace{\parskip}
+La version 3.5q corrige un bug concernant les listes signalé par Denis Bitouzé :
+les alinéas inclus dans une liste n’étaient pas distinguables. Dorénavant
+|\listparindent| est défini comme |\parindent| et si|\parskip > 0|, |\parsep|
+est défini comme |\parskip|. Il est possible de revenir à l’ancienne
+présentation en ajoutant \emph{dans l’environnement de liste} les commandes
+|\parskip=0pt| et |\parindent=0pt|.\hlabel{par-in-lists}
+
\subsection{Changements entre les versions 3.4d et 3.3d}
\label{ssec:changes-3.4}
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
index 441b411aee..fa68afd071 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
@@ -11,7 +11,7 @@
%<frenchb>\ProvidesLanguage{frenchb}
%<lua>--[[
%<lua> File `frenchb.lua’ generated from frenchb.dtx
- [2023/01/02 v3.5p French support from the babel system]
+ [2023/03/08 v3.5q French support from the babel system]
%<*internal>
\iffalse
%</internal>
@@ -40,8 +40,7 @@
%%
%</dtx>
%<*filedriver>
-\RequirePackage{pdfmanagement-testphase}
-\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-US}
+\DocumentMetadata{pdfstandard=A-2b, lang=en-US}
\documentclass[a4paper]{ltxdoc}
\usepackage[left=38mm,right=38mm,top=30mm,bottom=50mm]{geometry}
\usepackage[dvipsnames]{xcolor}
@@ -828,6 +827,13 @@
% Version 3.5n introduces a new command |\bname{}| (an alternative to
% |\bsc{}|).
%
+% Version 3.5q corrects a bug in lists layout: |\listparindent|
+% (formely 0pt) is defined as |\parindent| and if |\parskip > 0pt|,
+% |\parsep| is now defined as |\parskip|. This ensures that
+% paragraphs included in lists are now visible. The former behaviour
+% can be recovered by adding |\parskip=0pt|, |\parindent=0pt|
+% \emph{inside} the list environment.
+%
% \subsubsection*{What’s new in version 3.4?}
%
% Version 3.4a adds a new command |\frenchdate| (see
@@ -5250,6 +5256,8 @@ return french_punctuation
% An option for backward compatibility is provided.}
%
% \begin{macro}{\listFB}
+% \changes{v3.5q}{2023/02/15}{Bug correction: \cs{parsep} should be
+% related to \cs{parskip} and \cs{listparindent} to \cs{parindent}.}
% \begin{macro}{\listORI}
% \begin{macro}{\FB@listVsettings}
% Vertical spacing in lists should be shorter in French texts than
@@ -5274,20 +5282,31 @@ return french_punctuation
% \begin{macrocode}
\let\listORI\list
\let\endlistORI\endlist
+\newdimen\FB@parskip
\def\FB@listVsettings{%
- \setlength{\itemsep}{0.4ex plus 0.2ex minus 0.2ex}%
- \setlength{\parsep}{0.4ex plus 0.2ex minus 0.2ex}%
\setlength{\topsep}{0.8ex plus 0.4ex minus 0.4ex}%
\setlength{\partopsep}{0.4ex plus 0.2ex minus 0.2ex}%
% \end{macrocode}
% |\parskip| is of type `skip’, its mean value only (\emph{not
% the glue}) should be subtracted from |\topsep| and added to
% |\partopsep|, so convert |\parskip| to a `dimen’ using
-% |\@tempdima|.
+% |\FB@parskip|.
+% \begin{macrocode}
+ \FB@parskip=\parskip
+ \addtolength{\topsep}{-\FB@parskip}%
+ \addtolength{\partopsep}{\FB@parskip}%
+ \setlength{\itemsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\parsep}{0.4ex plus 0.2ex minus 0.2ex}%
+% \end{macrocode}
+% (v3.5q) If |\parskip| is not null, |\parsep| is set to |\parskip|,
+% so paragraphs inside items will be preceeded by the same vertical
+% space as paragraphs located outside lists; the vertical skip before
+% items (|\itemsep| + |\parsep|) doesn’t need to be enlarged.
% \begin{macrocode}
- \@tempdima=\parskip
- \addtolength{\topsep}{-\@tempdima}%
- \addtolength{\partopsep}{\@tempdima}%
+ \ifdim\FB@parskip>0pt
+ \setlength{\parsep}{\FB@parskip}%
+ \addtolength{\itemsep}{-\FB@parskip}%
+ \fi
}
\def\listFB#1#2{\listORI{#1}{\FB@listVsettings #2}}
\let\endlistFB\endlistORI
@@ -5387,7 +5406,7 @@ return french_punctuation
\labelindentFB}%
\else
% \end{macrocode}
-% Default layout: labels hanging into the left margin.
+% Default layout: labels hanging into the list left margin.
% \begin{macrocode}
\leftmarginFB=\labelwidthFB
\advance\leftmarginFB by \labelsep
@@ -5395,6 +5414,11 @@ return french_punctuation
{\csname leftmargin\romannumeral\FB@dp\endcsname =
\leftmarginFB}%
\advance\leftmargini by \listindentFB
+% \end{macrocode}
+% (v3.5q) Same `parindent’ for paragraphs in lists’ items (was null
+% as in standard lists).
+% \begin{macrocode}
+ \listparindent=\parindent
\fi
\leftmargin=\csname leftmargin%
\ifnum\@listdepth=\@ne i\else ii\fi\endcsname
@@ -5419,18 +5443,22 @@ return french_punctuation
% unless option \fbo{StandardListSpacing} is set, then set horizontal
% indentations according to |\FB@listHsettings| unless option
% \fbo{ListOldLayout} is \fbo{true} (compatibility with lists
-% up to v.~2.5k).
+% up to v2.5k).
% \begin{macrocode}
\def\FB@itemizesettings{%
\ifFBStandardListSpacing
\else
- \setlength{\itemsep}{\z@}%
- \setlength{\parsep}{\z@}%
\setlength{\topsep}{\z@}%
\setlength{\partopsep}{\z@}%
- \@tempdima=\parskip
- \addtolength{\topsep}{-\@tempdima}%
- \addtolength{\partopsep}{\@tempdima}%
+ \FB@parskip=\parskip
+ \addtolength{\topsep}{-\FB@parskip}%
+ \addtolength{\partopsep}{\FB@parskip}%
+ \setlength{\itemsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \ifdim\FB@parskip>0pt
+ \setlength{\parsep}{\FB@parskip}%
+ \addtolength{\itemsep}{-\FB@parskip}%
+ \fi
\fi
\settowidth{\labelwidth}{\csname\@itemitem\endcsname}%
\ifFBListOldLayout
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
index 11268e191f..395080ae3f 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/CHANGES.md b/macros/latex/contrib/genealogytree/CHANGES.md
index 186d064592..efae235b48 100644
--- a/macros/latex/contrib/genealogytree/CHANGES.md
+++ b/macros/latex/contrib/genealogytree/CHANGES.md
@@ -17,6 +17,23 @@ and this project adheres to
+## [2.3.0] - 2023-03-09
+
+### Added
+- Catalan translation provided by Josep Tebé i Cetó
+- Chinese translation provided by Chen Yanzheng
+- Value `catalan` for option `language`
+- Value `chinese` for option `language`
+
+### Fixed
+- Option `autofill parents unspecific` was broken (issue #41)
+- Internal documentation macro adapted to newer interal tcolorbox syntax
+- Options `fill zoom DBimage` and `fill overzoom DBimage` adapted to be
+ compatible to the tikzfill package (expansion problem).
+ `\gtrincludeDBimage` also changed accordingly.
+
+
+
## [2.2.0] - 2022-03-17
### Added
@@ -425,7 +442,7 @@ and this project adheres to
- Pre publication development.
-
-[v2.1.0] https://github.com/T-F-S/genealogytree/compare/v2.01...2.1.0
+[v2.2.0] https://github.com/T-F-S/genealogytree/compare/v2.1.0...v2.2.0
+[v2.1.0] https://github.com/T-F-S/genealogytree/compare/v2.01...v2.1.0
[v2.01] https://github.com/T-F-S/genealogytree/compare/v2.00...v2.01
diff --git a/macros/latex/contrib/genealogytree/README.md b/macros/latex/contrib/genealogytree/README.md
index 25c4d06ef4..c441228cfc 100644
--- a/macros/latex/contrib/genealogytree/README.md
+++ b/macros/latex/contrib/genealogytree/README.md
@@ -1,6 +1,6 @@
-# The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+# The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
-> Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+> Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
> This work may be distributed and/or modified under the
> conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
index 0b893c644a..ab59ba00b9 100644
--- a/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
index ec8a2ea0fc..b84b9ac1eb 100644
--- a/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
index 8fa4eb74cc..6bbe1e3096 100644
--- a/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
index 9995cbd07a..87dd10be43 100644
--- a/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree-languages.pdf b/macros/latex/contrib/genealogytree/genealogytree-languages.pdf
index 58f985e5db..7307ad730d 100644
--- a/macros/latex/contrib/genealogytree/genealogytree-languages.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree-languages.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree.pdf b/macros/latex/contrib/genealogytree/genealogytree.pdf
index 9c75dfe74e..3d110c0514 100644
--- a/macros/latex/contrib/genealogytree/genealogytree.pdf
+++ b/macros/latex/contrib/genealogytree/genealogytree.pdf
Binary files differ
diff --git a/macros/latex/contrib/genealogytree/genealogytree.sty b/macros/latex/contrib/genealogytree/genealogytree.sty
index 8ab1ac5fd4..6704428ff3 100644
--- a/macros/latex/contrib/genealogytree/genealogytree.sty
+++ b/macros/latex/contrib/genealogytree/genealogytree.sty
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% genealogytree.sty: genealogy trees (graphs)
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -18,8 +18,8 @@
%% This work consists of all files listed in README
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{genealogytree}[2022/03/17 version 2.2.0 genealogy trees]
-\def\gtr@version{2.2.0}
+\ProvidesPackage{genealogytree}[2023/03/09 version 2.3.0 genealogy trees]
+\def\gtr@version{2.3.0}
\RequirePackage{expl3}[2020/02/25]
\RequirePackage{xparse,xfp}
@@ -134,6 +134,8 @@
\gtr@add@library{core.options}{gtrcore.options.code.tex}
\gtr@add@library{core.symbols}{gtrcore.symbols.code.tex}
+\gtr@add@library{lang.catalan}{gtrlang.catalan.code.tex}
+\gtr@add@library{lang.chinese}{gtrlang.chinese.code.tex}
\gtr@add@library{lang.danish}{gtrlang.danish.code.tex}
\gtr@add@library{lang.dutch}{gtrlang.dutch.code.tex}
\gtr@add@library{lang.english}{gtrlang.english.code.tex}
diff --git a/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex b/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
index 1d2644f484..b70f50415c 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.contour.code.tex: Contours
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%%%%%%%%%%
%% Contour
diff --git a/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex b/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
index effbc01f08..3f750e241b 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.drawing.code.tex: Drawing
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%%%%%%%%%%
%% Auxiliary Tools
diff --git a/macros/latex/contrib/genealogytree/gtrcore.node.code.tex b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex
index 2b6c7081cc..a7bd386551 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.node.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.node.code.tex: Node Boxes
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%
% Processors %
@@ -1272,13 +1272,27 @@
\ifdefvoid{\gtrDBimage}{#2}{#1}%
}
-\def\gtrincludeDBimage#1{%
- \begingroup\edef\x{\endgroup\noexpand\includegraphics[\gtrDBimageopt,#1]}\x{\gtrDBimage}%
-}
+\ExplSyntaxOn
+
+\NewDocumentCommand \gtrincludeDBimage { m }
+ {
+ \exp_last_unbraced:NNV \includegraphics [ \gtrDBimageopt, #1 ] { \gtrDBimage }
+ }
+
+\tikzset
+ {
+ fill@gtrDB@image@options/.code=
+ {
+ \tl_set:Nx \l_tmpa_tl { fill~image~options = { \exp_not:V \gtrDBimageopt } }
+ \pgfkeysalsofrom { \l_tmpa_tl }
+ }
+ }
+
+\ExplSyntaxOff
\tikzset{%
- fill overzoom DBimage/.style={fill image options=\gtrDBimageopt,fill overzoom image=\gtrDBimage},%
- fill zoom DBimage/.style={fill image options=\gtrDBimageopt,fill zoom image=\gtrDBimage},%
+ fill overzoom DBimage/.style={fill@gtrDB@image@options,fill overzoom image=\gtrDBimage},%
+ fill zoom DBimage/.style={fill@gtrDB@image@options,fill zoom image=\gtrDBimage},%
}
\gtrset{%
diff --git a/macros/latex/contrib/genealogytree/gtrcore.options.code.tex b/macros/latex/contrib/genealogytree/gtrcore.options.code.tex
index cc06b0d245..30b96faa84 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.options.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.options.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.options.code.tex: Options
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%%%%%%%%%%
%% General handling
@@ -458,7 +458,7 @@
\let\gtr@parent@@p\gtr@parent@@p@unspecific%
},
autofill parents unspecific*/.default=5,
- autofill parents unspecific/.code={%
+ autofill parents unspecific/.style={%
autofill parents unspecific*={#1},
ignore level={\the\numexpr#1+1\relax},
},
diff --git a/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex b/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
index ae6c57edce..d8e44d1468 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.parser.code.tex: Parser
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%% (local) stack implementation
\def\gtrnewstack#1{%
diff --git a/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex b/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
index e2766e6db5..b00f9a7bce 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.processing.code.tex: Processing
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%%%%%%%%%%
%% Processing - common
%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex b/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
index defe242cfd..526c998371 100644
--- a/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrcore.symbols.code.tex: Symbols
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
%%%%%%%%%%%%%%%%%%%%%%%
%% Symbols
diff --git a/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex b/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex
new file mode 100644
index 0000000000..c101559106
--- /dev/null
+++ b/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex
@@ -0,0 +1,87 @@
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
+%% gtrlang.catalan.code.tex: Catalan language
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Translation by Josep Tebe i Ceto <JosepTebe at proton dot me>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\gtr@set@library@version{2.3.0}
+
+\gtrset{language@/catalan/.code={%
+ \gtrset{symlang/.cd,
+ Born=nascut,
+ Bornoutofwedlock=nascut fora del matrimoni,
+ Stillborn=nascut mort,
+ Diedonbirthday=mort al n\'eixer,
+ Baptized=batejat,
+ Engaged=comprom\`es,
+ Married=casat,
+ Divorced=divorciat,
+ Partnership=uni\'o sense matrimoni,
+ Floruit=per\'iode d'activitat,
+ Died=mort,
+ Killed=mort en acci\'o,
+ Buried=enterrat,
+ Funeralurn=incinerat,
+ Female=dona,
+ Male=home,
+ Neuter=sexe desconegut
+ }%
+ \gtrset{%
+ month long/.cd,
+ 01/.initial=gener,
+ 02/.initial=febrer,
+ 03/.initial=mar\c{c},
+ 04/.initial=abril,
+ 05/.initial=maig,
+ 06/.initial=juny,
+ 07/.initial=juliol,
+ 08/.initial=agost,
+ 09/.initial=setembre,
+ 10/.initial=octubre,
+ 11/.initial=novembre,
+ 12/.initial=desembre,
+ }%
+ \gtrset{%
+ month short/.cd,
+ 01/.initial=gen\protect\dot,
+ 02/.initial=feb\protect\dot,
+ 03/.initial=mar\protect\dot,
+ 04/.initial=abr\protect\dot,
+ 05/.initial=mai\protect\dot,
+ 06/.initial=jun\protect\dot,
+ 07/.initial=jul\protect\dot,
+ 08/.initial=ago\protect\dot,
+ 09/.initial=set\protect\dot,
+ 10/.initial=oct\protect\dot,
+ 11/.initial=nov\protect\dot,
+ 12/.initial=des\protect\dot,
+ }%
+ \gtrset{%
+ set@typical@date@format=d month yyyy,
+ calendar text for=AD is {}{ dC},
+ calendar text for=BC is {}{ aC},
+ calendar text for=GR is {}{\protect\textsuperscript{greg.}},
+ calendar text for=JU is {}{\protect\textsuperscript{jul.}},
+ calendar text for=caAD is {ca.~}{ dC},
+ calendar text for=caBC is {ca.~}{ aC},
+ calendar text for=ca is {ca.~}{},
+ date range full={}{ a }{},
+ date range before={abans de }{},
+ date range after={despr\'es de }{},
+ place text={a }{},
+ }%
+}}
diff --git a/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex b/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex
new file mode 100644
index 0000000000..cd32960c32
--- /dev/null
+++ b/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex
@@ -0,0 +1,94 @@
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
+%% gtrlang.chinese.code.tex: Chinese language-Simplified
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Translation by Chen Yanzheng <snbcyz at mail dot ustc dot edu dot cn>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\gtr@set@library@version{2.3.0}
+
+\gtrset{language@/chinese/.code={%
+ \gtrset{symlang/.cd,
+ Born={出生},
+ Bornoutofwedlock={?婚生},
+ Stillborn={死产},
+ Diedonbirthday={出生当日死亡},
+ Baptized={?洗},
+ Engaged={订婚},
+ Married={结婚},
+ Divorced={离婚},
+ Partnership={未婚伴侣},
+ Floruit={在世时期},
+ Died={死亡},
+ Killed={阵亡},
+ Buried={下葬},
+ Funeralurn={?化},
+ Female={女性},
+ Male={男性},
+ Neuter={性别?详/中性}
+ }%
+ \gtrset{%
+ month long/.cd,
+ 01/.initial=1月,
+ 02/.initial=2月,
+ 03/.initial=3月,
+ 04/.initial=4月,
+ 05/.initial=5月,
+ 06/.initial=6月,
+ 07/.initial=7月,
+ 08/.initial=8月,
+ 09/.initial=9月,
+ 10/.initial=10月,
+ 11/.initial=11月,
+ 12/.initial=12月,
+ }%
+ \gtrset{%
+ month short/.cd,
+ 01/.initial=1\protect\dot,
+ 02/.initial=2\protect\dot,
+ 03/.initial=3\protect\dot,
+ 04/.initial=4\protect\dot,
+ 05/.initial=5\protect\dot,
+ 06/.initial=6\protect\dot,
+ 07/.initial=7\protect\dot,
+ 08/.initial=8\protect\dot,
+ 09/.initial=9\protect\dot,
+ 10/.initial=10\protect\dot,
+ 11/.initial=11\protect\dot,
+ 12/.initial=12\protect\dot,
+ }%
+ \gtrset{%
+ set@typical@date@format=yyyy-mm-dd,
+ calendar text for=AD is {公元}{},
+ calendar text for=BC is {公元?}{},
+ calendar text for=GR is {格里高利历}{},
+ calendar text for=JU is {儒略历}{},
+ calendar text for=caAD is {约公元}{},
+ calendar text for=caBC is {约公元?}{},
+ calendar text for=ca is {约}{},
+ date range full={自}{至}{},
+ date range before={}{以?},
+ date range after={}{以?},
+ place text={于}{},
+ }%
+}}
+%SPECIAL NOTE:\usepackage{CJK}
+%\begin{document}
+%\begin{CJK*}{UTF8}{gbsn}
+%gbsn IS THE FONT
+%CONTENT
+%\end{CJK*}
+%\end{document}
diff --git a/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
index 1d9a4e52a0..2eb28a73bb 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.danish.code.tex: Danish language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Mikkel Eide Eriksen <mikkel dot eriksen at gmail dot com>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/danish/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex b/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
index d38f7791f7..9050865f5e 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.dutch.code.tex: Dutch language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Dirk Bosmans <onstrees at myonline be>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/dutch/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.english.code.tex b/macros/latex/contrib/genealogytree/gtrlang.english.code.tex
index c13b2f4c69..6ab220e854 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.english.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.english.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.english.code.tex: English language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/english/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.french.code.tex b/macros/latex/contrib/genealogytree/gtrlang.french.code.tex
index aceff41a25..9e8cdef2c8 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.french.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.french.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.french.code.tex: French language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Denis Bitouze <denis dot bitouze at univ-littoral fr>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/french/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.german.code.tex b/macros/latex/contrib/genealogytree/gtrlang.german.code.tex
index 4d0152a789..b43f8840a0 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.german.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.german.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.german.code.tex: German language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/german/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex b/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
index ed2b1def4f..9bc9f49725 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.italian.code.tex: Italian language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Andrea Vaccari <ing dot andrea dot vaccari at gmail com>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/italian/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex b/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
index e67ffb84aa..1065f3bd9c 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.portuguese.code.tex: Portuguese language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Natan de Almeida Laverde <natanlaverde at gmail dot com>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/portuguese/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
index d2a5bd45d8..358efdb818 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.spanish.code.tex: Spanish language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Francisco G. Perez Sanchez <ozo.froid at gmail dot com>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/spanish/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
index 18d3e10a63..cfcd43edaa 100644
--- a/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlang.swedish.code.tex: Swedish language
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% Translation by Per Starbaeck <per at starback.se>
%% -------------------------------------------------------------------------------------------
%%
@@ -18,7 +18,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\gtrset{language@/swedish/.code={%
\gtrset{symlang/.cd,
diff --git a/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex b/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
index 80a7ee79ae..b1dfc8c329 100644
--- a/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlib.debug.code.tex: Debugger
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\RequirePackage{array,tabularx}
\tcbuselibrary{breakable}
diff --git a/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex b/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
index 8c09a9eb45..4aa2dac789 100644
--- a/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlib.fanchart.code.tex: Fancharts
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex b/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
index b58ace1043..0bbfe4638c 100644
--- a/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
+++ b/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex
@@ -1,8 +1,8 @@
-%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17)
+%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09)
%% gtrlib.templates.code.tex: Templates
%%
%% -------------------------------------------------------------------------------------------
-%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work may be distributed and/or modified under the
@@ -17,7 +17,7 @@
%%
%% This work consists of all files listed in README
%%
-\gtr@set@library@version{2.2.0}
+\gtr@set@library@version{2.3.0}
% Templates
diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
index 8d789be01c..56f51f6f0d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -5,6 +5,14 @@ first release 0.95a, 2021-02-23 will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.
+## [2023-03-09]
+
+### Fixed
+ - regression data producer in xmp
+
+### Changed
+ - removed/reduced fontspec firstaid to avoid clash with new l3backend and with option parsing (issue #47)
+
## [2023-02-20]
### Added
diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md
index 427ecb77ed..4cf2155174 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/README.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/README.md
@@ -1,6 +1,6 @@
# LaTeX PDF management testphase bundle
-Version: 0.95w, 2023-02-20
+Version: 0.95x, 2023-03-09
This package is used during a test phase to load the new PDF management code
of LaTeX.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
index a91b8a348a..dcfba47cc0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
@@ -24,7 +24,7 @@
%% This file has the LPPL maintenance status "maintained".
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2023-02-20 v0.95w
+\ProvidesPackage{color-ltx}[2023-03-09 v0.95x
Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
\edef\Gin@codes{%
\catcode`\noexpand\^^A\the\catcode`\^^A\relax
diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
index c60ee84fcf..2b08ae1d80 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
@@ -19,7 +19,7 @@
%
% for those people who are interested.
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-02-20}{0.95w}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-03-09}{0.95x}
{temporay patches to for the colorspace package to test pdfresource management ... UF}
% colorspace can define more models, that l3color can't yet handle.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty
deleted file mode 100644
index 01f8530a65..0000000000
--- a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty
+++ /dev/null
@@ -1,3888 +0,0 @@
-%%
-%% This is file `fontspec-luatex.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% fontspec.dtx (with options: `fontspec,LU')
-%% fontspec-code-load.dtx (with options: `fontspec,LU')
-%% fontspec-code-vars.dtx (with options: `fontspec,LU')
-%% fontspec-code-msg.dtx (with options: `fontspec,LU')
-%% fontspec-code-opening.dtx (with options: `fontspec,LU')
-%% fontspec-code-fontload.dtx (with options: `fontspec,LU')
-%% fontspec-code-interfaces.dtx (with options: `fontspec,LU')
-%% fontspec-code-user.dtx (with options: `fontspec,LU')
-%% fontspec-code-api.dtx (with options: `fontspec,LU')
-%% fontspec-code-internal.dtx (with options: `fontspec,LU')
-%% fontspec-code-opentype.dtx (with options: `fontspec,LU')
-%% fontspec-code-graphite.dtx (with options: `fontspec,LU')
-%% fontspec-code-keyval.dtx (with options: `fontspec,LU')
-%% fontspec-code-feat-opentype.dtx (with options: `fontspec,LU')
-%% fontspec-code-scripts.dtx (with options: `fontspec,LU')
-%% fontspec-code-lang.dtx (with options: `fontspec,LU')
-%% fontspec-code-feat-aat.dtx (with options: `fontspec,LU')
-%% fontspec-code-enc.dtx (with options: `fontspec,LU')
-%% fontspec-code-math.dtx (with options: `fontspec,LU')
-%% fontspec-code-closing.dtx (with options: `fontspec,LU')
-%% fontspec-code-xfss.dtx (with options: `fontspec,LU')
-%% ------------------------------------------------
-%% The FONTSPEC package <wspr.io/fontspec>
-%% ------------------------------------------------
-%% Copyright 2004-2017 Will Robertson, LPPL "maintainer"
-%% Copyright 2009-2013 Khaled Hosny
-%% ------------------------------------------------
-%% This package is free software and may be redistributed and/or modified under
-%% the conditions of the LaTeX Project Public License, version 1.3c or higher
-%% (your choice): <http://www.latex-project.org/lppl/>.
-%% ------------------------------------------------
-%%^^A%% fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec>
-%%^^A%% Metadata for the package, including files and versioning
-
-\RequirePackage{xparse}
-\ProvidesExplPackage{fontspec-luatex-tmp-ltx}%
- {2022/01/15}{2023-02-20}{0.95w}
-
-%%^^A%% fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
-%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec>
-\bool_new:N \l__fontspec_firsttime_bool
-\bool_new:N \l__fontspec_nobf_bool
-\bool_new:N \l__fontspec_noit_bool
-\bool_new:N \l__fontspec_nosc_bool
-\bool_new:N \l__fontspec_check_bool
-\bool_new:N \l__fontspec_tfm_bool
-\bool_new:N \l__fontspec_atsui_bool
-\bool_new:N \l__fontspec_ot_bool
-\bool_new:N \l__fontspec_mm_bool
-\bool_new:N \l__fontspec_harfbuzz_bool
-\bool_new:N \l__fontspec_graphite_bool
-\bool_new:N \l__fontspec_fontcfg_bool
-\bool_set_true:N \l__fontspec_fontcfg_bool
-\bool_new:N \g__fontspec_math_euler_bool
-\bool_new:N \g__fontspec_math_lucida_bool
-\bool_new:N \g__fontspec_pkg_euler_loaded_bool
-\bool_new:N \g__fontspec_cfg_bool
-\bool_new:N \g__fontspec_math_bool
-\bool_new:N \g__fontspec_euenc_bool
-\bool_new:N \l__fontspec_tmpa_bool
-\bool_new:N \l__fontspec_disable_defaults_bool
-\bool_new:N \l__fontspec_alias_bool
-\bool_new:N \l__fontspec_external_bool
-\bool_new:N \l__fontspec_defining_encoding_bool
-\bool_new:N \l__fontspec_scriptlang_exist_bool
-\bool_new:N \g__fontspec_em_normalise_slant_bool
-\bool_new:N \l__fontspec_proceed_bool
-\bool_new:N \l__fontspec_never_check_bool
-\int_new:N \l__fontspec_script_int
-\int_new:N \l__fontspec_language_int
-\int_new:N \l__fontspec_strnum_int
-\int_new:N \l__fontspec_tmp_int
-\int_new:N \l__fontspec_tmpa_int
-\int_new:N \l__fontspec_tmpb_int
-\int_new:N \l__fontspec_tmpc_int
-\int_new:N \l__fontspec_em_int
-\int_new:N \l__fontspec_emdef_int
-\int_new:N \l__fontspec_strong_int
-\int_new:N \l__fontspec_strongdef_int
-\fp_new:N \l__fontspec_tmpa_fp
-\fp_new:N \l__fontspec_tmpb_fp
-\dim_new:N \l__fontspec_tmpa_dim
-\dim_new:N \l__fontspec_tmpb_dim
-\dim_new:N \l__fontspec_tmpc_dim
-\seq_new:N \l__fontspec_bf_series_seq
-\clist_new:N \g__fontspec_default_fontopts_clist
-\clist_new:N \g__fontspec_all_keyval_modules_clist
-\clist_new:N \l__fontspec_sizefeat_clist
-\clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}}
-\clist_new:N \l__fontspec_extensions_clist
-\clist_new:N \l__fontspec_fontopts_clist
-\clist_new:N \l__fontspec_family_fontopts_clist
-\clist_new:N \l__fontspec_all_features_clist
-\clist_new:N \l__fontspec_leftover_clist
-\clist_new:N \l__fontspec_keys_leftover_clist
-\clist_new:N \l__fontspec_sizing_leftover_clist
-\clist_new:N \l__fontspec_fontfeat_clist
-\clist_new:N \l__fontspec_fontfeat_curr_clist
-\clist_new:N \l__fontspec_arg_clist
-\clist_new:N \l__fontspec_this_feat_clist
-\clist_new:N \l__fontspec_fontfeat_up_clist
-\clist_new:N \l__fontspec_fontfeat_bf_clist
-\clist_new:N \l__fontspec_fontfeat_it_clist
-\clist_new:N \l__fontspec_fontfeat_bfit_clist
-\clist_new:N \l__fontspec_fontfeat_sl_clist
-\clist_new:N \l__fontspec_fontfeat_bfsl_clist
-\clist_new:N \l__fontspec_fontfeat_sw_clist
-\clist_new:N \l__fontspec_fontfeat_bfsw_clist
-\clist_new:N \l__fontspec_fontfeat_sc_clist
-\prop_new:N \g__fontspec_fontopts_prop
-\prop_new:N \l__fontspec_nfss_prop
-\prop_new:N \l__fontspec_nfssfont_prop
-\prop_new:N \g__fontspec_OT_features_prop
-\prop_new:N \g__fontspec_all_opentype_feature_names_prop
-\prop_new:N \g__fontspec_em_prop
-\prop_new:N \g__fontspec_strong_prop
-\prop_new:N \g__fontspec_fontid_family_prop
-\prop_new:N \g__fontspec_family_int_prop
-\tl_new:N \l_fontspec_family_tl
-\tl_new:N \g_fontspec_encoding_tl
-\tl_new:N \l_fontspec_fontname_tl
-\tl_clear_new:N \UTFencname
-\tl_clear_new:N \cyrillicencoding
-\tl_clear_new:N \latinencoding
-\tl_new:N \l__fontspec_renderer_tl
-\tl_new:N \l__fontspec_mode_tl
-\tl_new:N \l__fontspec_shaper_tl
-\tl_new:N \g__fontspec_defined_shapes_tl
-\tl_new:N \g__fontspec_single_feat_tl
-\tl_new:N \l__fontspec_basename_tl
-\tl_new:N \g__fontspec_curr_series_tl
-\tl_new:N \l__fontspec_curr_fontname_tl
-\tl_new:N \l__fontspec_curr_bfname_tl
-\tl_new:N \l__fontspec_ext_filename_tl
-\tl_new:N \l__fontspec_extension_tl
-\tl_new:N \l__fontspec_font_path_tl
-\tl_new:N \l__fontspec_fontid_tl
-\tl_new:N \l__fontspec_fontname_tl
-\tl_new:N \l__fontspec_options_tl
-\tl_new:N \l__fontspec_saved_fontname_tl
-\tl_new:N \l__fontspec_prev_unicode_name_tl
-\tl_new:N \g__fontspec_nfss_enc_tl
-\tl_new:N \g__fontspec_nfss_family_tl
-\tl_new:N \l__fontspec_nfss_sc_tl
-\tl_new:N \l__fontspec_nfss_tl
-\tl_new:N \l__fontspec_nfss_fam_tl
-\tl_new:N \l__fontspec_size_tl
-\tl_new:N \l__fontspec_sizedfont_tl
-\tl_new:N \l__fontspec_this_font_tl
-\tl_new:N \l__fontspec_ttc_index_tl
-\tl_new:N \l__fontspec_smcp_shape_tl
-\tl_new:N \l__fontspec_emshape_query_tl
-\tl_new:N \l__fontspec_em_switch_tl
-\tl_new:N \l__fontspec_strong_switch_tl
-\tl_new:N \l__fontspec_tmp_tl
-\tl_new:N \l__fontspec_tmpa_tl
-\tl_new:N \l__fontspec_tmpb_tl
-\tl_new:N \l__fontspec_em_tmp_tl
-\tl_new:N \l__fontspec_strong_tmp_tl
-\tl_new:N \g__fontspec_mathrm_tl
-\tl_new:N \g__fontspec_bfmathrm_tl
-\tl_new:N \g__fontspec_mathsf_tl
-\tl_new:N \g__fontspec_mathtt_tl
-\tl_gset:Nn \g__fontspec_mathrm_tl {\rmdefault}
-\tl_gset:Nn \g__fontspec_mathsf_tl {\sfdefault}
-\tl_gset:Nn \g__fontspec_mathtt_tl {\ttdefault}
-\tl_new:N \l__fontspec_family_label_tl
-\tl_new:N \l__fontspec_fake_slant_tl
-\tl_new:N \l__fontspec_fake_embolden_tl
-\tl_new:N \l__fontspec_fontname_up_tl
-\tl_new:N \l__fontspec_fontname_bf_tl
-\tl_new:N \l__fontspec_fontname_it_tl
-\tl_new:N \l__fontspec_fontname_bfit_tl
-\tl_new:N \l__fontspec_fontname_sl_tl
-\tl_new:N \l__fontspec_fontname_bfsl_tl
-\tl_new:N \l__fontspec_fontname_sw_tl
-\tl_new:N \l__fontspec_fontname_bfsw_tl
-\tl_new:N \l__fontspec_fontname_sc_tl
-\tl_new:N \l__fontspec_script_tl
-\tl_new:N \l__fontspec_script_name_tl
-\tl_set:Nn \l__fontspec_script_name_tl {CustomDefault}
-\tl_new:N \l__fontspec_lang_tl
-\tl_new:N \l__fontspec_lang_name_tl
-\tl_set:Nn \l__fontspec_lang_name_tl {Default}
-\tl_new:N \l__fontspec_scale_tl
-\tl_new:N \l__fontspec_hyphenchar_tl
-\tl_new:N \l__fontspec_hexcol_tl
-\tl_new:N \l__fontspec_opacity_tl
-\tl_new:N \l__fontspec_optical_size_tl
-\tl_new:N \l__fontspec_mapping_tl
-\tl_new:N \l__fontspec_punctspace_adjust_tl
-\tl_new:N \l__fontspec_wordspace_adjust_tl
-\tl_new:N \l__fontspec_postadjust_tl
-\tl_const:Nn \c__fontspec_hexcol_tl {000000}
- \tl_const:Nn \c__fontspec_opacity_tl {}
-\tl_const:Nn \c__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl }
-\tl_new:N \g__fontspec_rawfeatures_sclist
-\tl_new:N \l__fontspec_pre_feat_sclist
-\tl_new:N \l__fontspec_rmfamily_family_tl
-\tl_new:N \l__fontspec_sffamily_family_tl
-\tl_new:N \l__fontspec_ttfamily_family_tl
-\tl_new:N \l__fontspec_rmfamily_encoding_tl
-\tl_new:N \l__fontspec_sffamily_encoding_tl
-\tl_new:N \l__fontspec_ttfamily_encoding_tl
-
-%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC <wspr.io/fontspec>
-\cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} }
-\cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} }
-\cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} }
-\cs_new:Npn \__fontspec_error:nxx { \msg_error:nnxx {fontspec} }
-\cs_new:Npn \__fontspec_warning:n { \msg_warning:nn {fontspec} }
-\cs_new:Npn \__fontspec_warning:nx { \msg_warning:nnx {fontspec} }
-\cs_new:Npn \__fontspec_warning:nxx { \msg_warning:nnxx {fontspec} }
-\cs_new:Npn \__fontspec_info:n { \msg_info:nn {fontspec} }
-\cs_new:Npn \__fontspec_info:nx { \msg_info:nnx {fontspec} }
-\cs_new:Npn \__fontspec_info:nxx { \msg_info:nnxx {fontspec} }
-\cs_new:Npn \__fontspec_trace:n { \msg_trace:nn {fontspec} }
-\cs_generate_variant:Nn \msg_new:nnn {nnx}
-\cs_generate_variant:Nn \msg_new:nnnn {nnxx}
-\cs_new:Nn \__fontspec_msg_new:nn
- { \msg_new:nnx {fontspec} {#1} { \tl_trim_spaces:n {#2} } }
-\cs_new:Nn \__fontspec_msg_new:nnn
- { \msg_new:nnxx {fontspec} {#1} { \tl_trim_spaces:n {#2} } { \tl_trim_spaces:n {#3} } }
-\char_set_catcode_space:n {32}
-\__fontspec_msg_new:nn {only-inside-encdef}
- {
- \exp_not:N #1 can only be used in the second argument
- to \string\DeclareUnicodeEncoding.
- }
-\__fontspec_msg_new:nn {no-size-info}
- {
- Size information must be supplied.\\
- For example, SizeFeatures={Size={8-12},...}.
- }
-\__fontspec_msg_new:nnn {font-not-found}
- {
- The font "#1" cannot be found.
- }
- {
- A font might not be found for many reasons.\\
- Check the spelling, where the font is installed etc. etc.\\\\
- When in doubt, ask someone for help!
- }
-\__fontspec_msg_new:nnn {rename-feature-not-exist}
- {
- The feature #1 doesn't appear to be defined.
- }
- {
- It looks like you're trying to rename a feature that doesn't exist.
- }
-\__fontspec_msg_new:nn {no-glyph}
- {
- '#1' does not contain glyph #2.
- }
-\__fontspec_msg_new:nnn {euler-too-late}
- {
- The euler package must be loaded BEFORE fontspec.
- }
- {
- fontspec only overwrites euler's attempt to
- define the maths text fonts if fontspec is
- loaded after euler. Type <return> to proceed
- with incorrect \string\mathit, \string\mathbf, etc.
- }
-\__fontspec_msg_new:nnn {no-xcolor}
- {
- Cannot load named colours without the xcolor package.
- }
- {
- Sorry, I can't do anything to help. Instead of loading
- the color package, use xcolor instead.
- }
-\__fontspec_msg_new:nnn {unknown-color-model}
- {
- Error loading colour `#1'; unknown colour model.
- }
- {
- Sorry, I can't do anything to help. Please report this error
- to my developer with a minimal example that causes the problem.
- }
-\__fontspec_msg_new:nnn {not-in-addfontfeatures}
- {
- The "#1" font feature cannot be used in \string\addfontfeatures.
- }
- {
- This is due to how TeX loads fonts; such settings
- are global so adding them mid-document within a group causes
- confusion. You'll need to define multiple font families to achieve
- what you want.
- }
-\__fontspec_msg_new:nn {tu-clash}
- {
- I have found the tuenc.def encoding definition file but the TU encoding is not
- defined by the LaTeX2e kernel; attempting to correct but you really should update
- to the latest version of LaTeX2e.
- }
-\__fontspec_msg_new:nn {tu-missing}
- {
- The TU encoding seems to be missing; please update to the latest version of LaTeX2e.
- }
-\__fontspec_msg_new:nn {addfontfeatures-ignored}
- {
- \string\addfontfeature (s) ignored \msg_line_context:;
- it cannot be used with a font that wasn't selected by a fontspec command.\\
- \\
- The current font is "\use:c{font@name}".\\
- \int_compare:nTF { \clist_count:n {#1} = 1 }
- { The requested feature is "#1". }
- { The requested features are "#1". }
- }
-\__fontspec_msg_new:nn {feature-option-overwrite}
- {
- Option '#2' of font feature '#1' overwritten.
- }
-\__fontspec_msg_new:nn {ot-tag-too-long}
- {
- OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer.
- }
-\__fontspec_msg_new:nn {aat-feature-not-exist}
- {
- '\l_keys_key_tl=\l_keys_value_tl' feature not supported
- for AAT font '\l_fontspec_fontname_tl'.
- }
-\__fontspec_msg_new:nn {aat-feature-not-exist-in-font}
- {
- AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
- in font '\l_fontspec_fontname_tl'.
- }
-\__fontspec_msg_new:nn {icu-feature-not-exist}
- {
- '\l_keys_key_tl=\l_keys_value_tl' feature not supported
- for OpenType font '\l_fontspec_fontname_tl'
- }
-\__fontspec_msg_new:nn {icu-feature-not-exist-in-font}
- {
- OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
- for font '\l_fontspec_fontname_tl'
- with script '\l__fontspec_script_name_tl' and language '\l__fontspec_lang_name_tl'.
- }
-\__fontspec_msg_new:nn {no-opticals}
- {
- '#1' doesn't appear to have an Optical Size axis.
- }
-\__fontspec_msg_new:nn {language-not-exist}
- {
- Language '#1' not available
- for font '\l_fontspec_fontname_tl'
- with script '\l__fontspec_script_name_tl'.
- }
-\__fontspec_msg_new:nn {only-xetex-feature}
- {
- Ignored XeTeX-only feature: '#1'.
- }
-\__fontspec_msg_new:nn {only-luatex-feature}
- {
- Ignored LuaTeX-only feature: '#1'.
- }
-\__fontspec_msg_new:nn {unknown-renderer}
- {
- Renderer '#1' unknown. Assuming Harfbuzz with 'shaper=#1'.
- Please raise a fontspec issue to add this shaper to the interface.
- }
-\__fontspec_msg_new:nn {no-mapping}
- {
- Input mapping not supported in LuaTeX.
- }
-\__fontspec_msg_new:nn {no-mapping-ligtex}
- {
- Input mapping not supported in LuaTeX.\\
- Use "Ligatures=TeX" instead of "Mapping=tex-text".
- }
-\__fontspec_msg_new:nn {cm-default-obsolete}
- {
- The "cm-default" package option is obsolete.
- }
-\__fontspec_msg_new:nn {font-index-needs-ttc}
- {
- The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\
- Feature ignored.
- }
-\__fontspec_msg_new:nn {feat-cannot-remove}
- {
- The "#1" feature cannot be deactivated. Request ignored.
- }
-\__fontspec_msg_new:nn {defining-font}
- {
- Font family '\g__fontspec_nfss_family_tl' created for font '#2'
- with options [\l__fontspec_all_features_clist].\\
- \\
- This font family consists of the following NFSS series/shapes:\\
- \g__fontspec_defined_shapes_tl
- }
-\__fontspec_msg_new:nn {no-font-shape}
- {
- Could not resolve font "#1" (it probably doesn't exist).
- }
-\__fontspec_msg_new:nn {set-scale}
- {
- \l_fontspec_fontname_tl\space scale = \l__fontspec_scale_tl.
- }
-\__fontspec_msg_new:nn {setup-math}
- {
- Adjusting the maths setup (use [no-math] to avoid this).
- }
-\__fontspec_msg_new:nn {no-script}
- {
- Font "#1" does not contain requested Script "#2".
- }
-\__fontspec_msg_new:nn {opa-twice}
- {
- Opacity set twice, in both Colour and Opacity.\\
- Using specification "Opacity=#1".
- }
-\__fontspec_msg_new:nn {opa-twice-col}
- {
- Opacity set twice, in both Opacity and Colour.\\
- Using an opacity specification in hex of "#1/FF".
- }
-\__fontspec_msg_new:nn {bad-colour}
- {
- Bad colour declaration "#1".
- Colour must be one of:\\
- * a named xcolor colour\\
- * a six-digit hex colour RRGGBB\\
- * an eight-digit hex colour RRGGBBTT with opacity
- }
-\char_set_catcode_ignore:n {32}
-
-%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC <wspr.io/fontspec>
-\DeclareOption{cm-default}
- {
- \__fontspec_warning:n {cm-default-obsolete}
- }
-\DeclareOption {math} { \bool_gset_true:N \g__fontspec_math_bool }
-\DeclareOption {no-math} { \bool_gset_false:N \g__fontspec_math_bool }
-\DeclareOption {config} { \bool_gset_true:N \g__fontspec_cfg_bool }
-\DeclareOption {no-config}{ \bool_gset_false:N \g__fontspec_cfg_bool }
-\DeclareOption {euenc} { \bool_gset_true:N \g__fontspec_euenc_bool }
-\DeclareOption {tuenc} { \bool_gset_false:N \g__fontspec_euenc_bool }
-\DeclareOption {quiet}
- {
- \msg_redirect_module:nnn { fontspec } { warning } { info }
- \msg_redirect_module:nnn { fontspec } { info } { none }
- }
-\DeclareOption{silent}
- {
- \msg_redirect_module:nnn { fontspec } { warning } { none }
- \msg_redirect_module:nnn { fontspec } { info } { none }
- }
-\ExecuteOptions{config,math,tuenc}
-\ProcessOptions*
-\bool_if:NF \g__fontspec_euenc_bool
- {
- \file_if_exist:nTF {tuenc.def}
- {
- \cs_if_exist:cF {T@TU}
- {
- \__fontspec_warning:n {tu-clash}
- \DeclareFontEncoding{TU}{}{}
- \DeclareFontSubstitution{TU}{lmr}{m}{n}
- }
- }
- {
- \__fontspec_warning:n {tu-missing}
- \bool_gset_true:N \g__fontspec_euenc_bool
- }
- }
-\bool_if:NTF \g__fontspec_euenc_bool
- {
- \tl_gset:Nn \g_fontspec_encoding_tl {EU2}
- }
- { \tl_gset:Nn \g_fontspec_encoding_tl { TU } }
-\tl_set:Nn \rmdefault {lmr}
-\tl_set:Nn \sfdefault {lmss}
-\tl_set:Nn \ttdefault {lmtt}
-\RequirePackage[\g_fontspec_encoding_tl]{fontenc}
-\tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed
-\tl_if_in:NnT \@filelist {.cls} { \normalsize }
-\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
-\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
-\AtBeginDocument
- {
- \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
- \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
- }
-\bool_if:NT \g__fontspec_euenc_bool
- {
- \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile
- \cs_set:Npn \XeTeXpicfile {}
- \RequirePackage{xunicode}
- \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp:
- }
-\cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l__fontspec_check_bool }
-\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool }
-\cs_new:Nn \__fontspec_keys_set_known:nnN
- {
- \keys_set_known:nnN {#1} {#2} #3
- }
-\cs_generate_variant:Nn \__fontspec_keys_set_known:nnN {nx}
-\cs_new:Nn \__fontspec_int_mult_truncate:Nn
- {
- \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: }
- }
-\cs_set:Npn \__fontspec_lua_function:ne #1#2 { \lua_now:e { fontspec.#1 ("#2") } }
-\cs_set:Npn \__fontspec_lua_function:nee #1#2#3 { \lua_now:e { fontspec.#1 ("#2","#3") } }
-\cs_set:Npn \__fontspec_lua_function:neee #1#2#3#4 { \lua_now:e { fontspec.#1 ("#2","#3","#4") } }
-\cs_set:Npn \__fontspec_lua_function:neeee #1#2#3#4#5 { \lua_now:e { fontspec.#1 ("#2","#3","#4","#5") } }
-\cs_generate_variant:Nn \int_set:Nn {Nv}
-\cs_generate_variant:Nn \keys_set:nn {nx}
-\cs_generate_variant:Nn \keys_set_known:nnN {nx}
-\cs_generate_variant:Nn \prop_put:Nnn {Nxx}
-\cs_generate_variant:Nn \prop_put:Nnn {NxV}
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV}
-\cs_generate_variant:Nn \prop_gput:Nnn {Nxn}
-\cs_generate_variant:Nn \prop_get:NnNT {NxN}
-\cs_generate_variant:Nn \prop_get:NnNTF {NxN}
-\cs_generate_variant:Nn \str_if_eq:nnTF {nv}
-\cs_generate_variant:Nn \tl_if_empty_p:n {e}
-\cs_generate_variant:Nn \tl_if_empty:nTF {x}
-\cs_generate_variant:Nn \tl_if_empty:nF {x}
-\cs_generate_variant:Nn \tl_if_empty:nF {f}
-\cs_generate_variant:Nn \tl_if_eq:nnT {ox}
-\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
-
-%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3
- {
- \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop:
- }
-\cs_set:Npn \__fontspec_primitive_font_gset:Nnn #1#2#3
- {
- \global \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop:
- }
-\cs_set:Npn \__fontspec_font_suppress_not_found_error:
- {
- \int_set:Nn \suppressfontnotfounderror {1}
- }
-\prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F}
- {
- \ifx #1 \nullfont
- \prg_return_true:
- \else
- \prg_return_false:
- \fi
- }
-\prg_set_conditional:Nnn \__fontspec_primitive_font_set:Nnn {TF,T,F}
- {
- \__fontspec_primitive_font_set:Nnn #1 {#2} {#3}
- \__fontspec_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:}
- }
-\prg_set_conditional:Nnn \__fontspec_primitive_font_gset:Nnn {TF,T,F}
- {
- \__fontspec_primitive_font_gset:Nnn #1 {#2} {#3}
- \__fontspec_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:}
- }
-\cs_set:Npn \__fontspec_primitive_font_set:Onn { \exp_last_unbraced:No \__fontspec_primitive_font_set:Nnn }
-\cs_set:Npn \__fontspec_primitive_font_set:OnnF { \exp_last_unbraced:No \__fontspec_primitive_font_set:NnnF }
-\cs_set:Npn \__fontspec_primitive_font_gset:Onn { \exp_last_unbraced:No \__fontspec_primitive_font_gset:Nnn }
-\cs_set:Npn \__fontspec_primitive_font_gset:OnnF { \exp_last_unbraced:No \__fontspec_primitive_font_gset:NnnF }
-\prg_set_conditional:Nnn \__fontspec_primitive_font_if_exist:n {TF,T,F}
- {
- \group_begin:
- \__fontspec_font_suppress_not_found_error:
- \__fontspec_primitive_font_set:Nnn \l__fontspec_primitive_font {#1} { \f@size pt - 1sp }
- \__fontspec_primitive_font_if_null:NTF \l__fontspec_primitive_font
- { \group_end: \prg_return_false: }
- { \group_end: \prg_return_true: }
- }
-\prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F}
- {
- \tex_iffontchar:D #1 #2 \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Nn \__fontspec_primitive_font_set_hyphenchar:Nn
- {
- \tex_hyphenchar:D #1 = #2 \scan_stop:
- }
-\cs_new_eq:NN \__fontspec_primitive_font_get_name:N \fontname
-\cs_new:Npn \__fontspec_primitive_font_current_name:
- {
- \__fontspec_primitive_font_get_name:N \tex_font:D
- }
-
-%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\NewDocumentCommand \fontspec { O{} m O{} }
- {
- \__fontspec_main_fontspec:nn {#1,#3} {#2}
- \ignorespaces
- }
-\NewDocumentCommand \setmainfont { O{} m O{} }
- {
- \__fontspec_main_setmainfont:nn {#1,#3} {#2}
- \ignorespaces
- }
-\NewDocumentCommand \setsansfont { O{} m O{} }
- {
- \__fontspec_main_setsansfont:nn {#1,#3} {#2}
- \ignorespaces
- }
-\NewDocumentCommand \setmonofont { O{} m O{} }
- {
- \__fontspec_main_setmonofont:nn {#1,#3} {#2}
- \ignorespaces
- }
-\NewDocumentCommand \setmathrm { O{} m O{} }
- {
- \__fontspec_main_setmathrm:nn {#1,#3} {#2}
- }
-\NewDocumentCommand \setboldmathrm { O{} m O{} }
- {
- \__fontspec_main_setboldmathrm:nn {#1,#3} {#2}
- }
-\NewDocumentCommand \setmathsf { O{} m O{} }
- {
- \__fontspec_main_setmathsf:nn {#1,#3} {#2}
- }
-\NewDocumentCommand \setmathtt { O{} m O{} }
- {
- \__fontspec_main_setmathtt:nn {#1,#3} {#2}
- }
-\NewDocumentCommand \setromanfont { O{} m O{} }
- {
- \__fontspec_main_setmainfont:nn {#1,#3} {#2}
- }
-\NewDocumentCommand \newfontfamily { m O{} m O{} }
- {
- \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \NewDocumentCommand
- }
-\NewDocumentCommand \renewfontfamily { m O{} m O{} }
- {
- \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand
- }
-\NewDocumentCommand \setfontfamily { m O{} m O{} }
- {
- \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand
- }
-\NewDocumentCommand \providefontfamily { m O{} m O{} }
- {
- \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand
- }
-\NewDocumentCommand \newfontface { m O{} m O{} }
- {
- \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \NewDocumentCommand
- }
-\NewDocumentCommand \renewfontface { m O{} m O{} }
- {
- \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand
- }
-\NewDocumentCommand \setfontface { m O{} m O{} }
- {
- \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand
- }
-\NewDocumentCommand \providefontface { m O{} m O{} }
- {
- \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand
- }
-\NewDocumentCommand \defaultfontfeatures { t+ o m }
- {
- \IfNoValueTF {#2}
- { \__fontspec_set_default_features:nn {#1} {#3} }
- { \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
- \ignorespaces
- }
-\NewDocumentCommand \addfontfeatures {m}
- {
- \__fontspec_main_addfontfeatures:n {#1}
- }
-\NewDocumentCommand \addfontfeature {m}
- {
- \__fontspec_main_addfontfeatures:n {#1}
- }
-\NewDocumentCommand \newfontfeature {mm}
- {
- \__fontspec_main_newfontfeature:nn {#1} {#2}
- }
-\NewDocumentCommand \newAATfeature {mmmm}
- {
- \__fontspec_main_newAATfeature:nnnn {#1} {#2} {#3} {#4}
- }
-\NewDocumentCommand \newopentypefeature {mmm}
- {
- \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3}
- }
-\NewDocumentCommand \newICUfeature {mmm}
- {
- \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3}
- }
-\NewDocumentCommand \aliasfontfeature {mm}
- {
- \__fontspec_main_aliasfontfeature:nn {#1} {#2}
- }
-\NewDocumentCommand \aliasfontfeatureoption {mmm}
- {
- \__fontspec_main_aliasfontfeatureoption:nnn {#1} {#2} {#3}
- }
-\NewDocumentCommand \newfontscript {mm}
- {
- \fontspec_new_script:nn {#1} {#2}
- }
-\NewDocumentCommand \newfontlanguage {mm}
- {
- \fontspec_new_lang:nn {#1} {#2}
- }
-\NewDocumentCommand \DeclareFontExtensions {m}
- {
- \__fontspec_main_DeclareFontExtensions:n {#1}
- }
-\NewDocumentCommand \IfFontFeatureActiveTF {mmm}
- {
- \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3}
- }
-\AtBeginDocument
- {
- \RenewDocumentCommand \oldstylenums {m}
- {
- \__fontspec_main_oldstylenums:n {#1}
- }
- }
-\NewDocumentCommand \liningnums {m}
- {
- \__fontspec_main_liningnums:n {#1}
- }
-
-%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\cs_new:Nn \__fontspec_main_fontspec:nn
- {
- \fontspec_set_family:Nnn \f@family {#1} {#2}
- \fontencoding { \g__fontspec_nfss_enc_tl }
- \selectfont
- }
-\cs_if_exist:NTF \@rmfamilyhook
- {
- \tl_put_right:Nn \@rmfamilyhook {\fontencoding \l__fontspec_rmfamily_encoding_tl}
- \tl_put_right:Nn \@sffamilyhook {\fontencoding \l__fontspec_sffamily_encoding_tl}
- \tl_put_right:Nn \@ttfamilyhook {\fontencoding \l__fontspec_ttfamily_encoding_tl}
- }
- {
- \tl_replace_all:cnn { rmfamily~ } { \fontfamily }
- { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily }
- \tl_replace_all:cnn { sffamily~ } { \fontfamily }
- { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily }
- \tl_replace_all:cnn { ttfamily~ } { \fontfamily }
- { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily }
- }
-\tl_set:Nn \l__fontspec_rmfamily_encoding_tl { \encodingdefault }
-\tl_set:Nn \l__fontspec_sffamily_encoding_tl { \encodingdefault }
-\tl_set:Nn \l__fontspec_ttfamily_encoding_tl { \encodingdefault }
-\cs_new:Nn \__fontspec_main_setmainfont:nn
- {
- \ifdefined\DeclareFontSeriesDefault
- \DeclareFontSeriesDefault[rm]{bf}{\bfdefault}
- \fi
- \fontspec_set_family:Nnn \l__fontspec_rmfamily_family_tl {#1} {#2}
- \tl_set_eq:NN \rmdefault \l__fontspec_rmfamily_family_tl
- \tl_set_eq:NN \l__fontspec_rmfamily_encoding_tl \g__fontspec_nfss_enc_tl
- \str_if_eq:eeT {\familydefault} {\rmdefault}
- { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
- \__fontspec_setmainfont_hook:nn {#1} {#2} % for unicode-math only
- \normalfont
- }
-\cs_new:Nn \__fontspec_main_setsansfont:nn
- {
- \ifdefined\DeclareFontSeriesDefault
- \DeclareFontSeriesDefault[sf]{bf}{\bfdefault}
- \fi
- \fontspec_set_family:Nnn \l__fontspec_sffamily_family_tl {#1} {#2}
- \tl_set_eq:NN \sfdefault \l__fontspec_sffamily_family_tl
- \tl_set_eq:NN \l__fontspec_sffamily_encoding_tl \g__fontspec_nfss_enc_tl
- \str_if_eq:eeT {\familydefault} {\sfdefault}
- { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
- \__fontspec_setsansfont_hook:nn {#1} {#2} % for unicode-math only
- \normalfont
- }
-\cs_new:Nn \__fontspec_main_setmonofont:nn
- {
- \ifdefined\DeclareFontSeriesDefault
- \DeclareFontSeriesDefault[tt]{bf}{\bfdefault}
- \fi
- \fontspec_set_family:Nnn \l__fontspec_ttfamily_family_tl {#1} {#2}
- \tl_set_eq:NN \ttdefault \l__fontspec_ttfamily_family_tl
- \tl_set_eq:NN \l__fontspec_ttfamily_encoding_tl \g__fontspec_nfss_enc_tl
- \str_if_eq:eeT {\familydefault} {\ttdefault}
- { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
- \__fontspec_setmonofont_hook:nn {#1} {#2} % for unicode-math only
- \normalfont
- }
-\cs_new:Nn \__fontspec_main_setmathrm:nn
- {
- \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {Renderer=Basic,#1} {#2}
- \__fontspec_setmathrm_hook:nn {#1} {#2} % for unicode-math only
- }
-\cs_new:Nn \__fontspec_main_setboldmathrm:nn
- {
- \fontspec_gset_family:Nnn \g__fontspec_bfmathrm_tl {Renderer=Basic,#1} {#2}
- \__fontspec_setboldmathrm_hook:nn {#1} {#2} % for unicode-math only
- }
-\cs_new:Nn \__fontspec_main_setmathsf:nn
- {
- \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {Renderer=Basic,#1} {#2}
- \__fontspec_setmathsf_hook:nn {#1} {#2} % for unicode-math only
- }
-\cs_new:Nn \__fontspec_main_setmathtt:nn
- {
- \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {Renderer=Basic,#1} {#2}
- \__fontspec_setmathtt_hook:nn {#1} {#2} % for unicode-math only
- }
-\cs_set_eq:NN \__fontspec_setmainfont_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setsansfont_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setmonofont_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setmathrm_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setmathsf_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setmathtt_hook:nn \use_none:nn
-\cs_set_eq:NN \__fontspec_setboldmathrm_hook:nn \use_none:nn
-\@onlypreamble\setmathrm
-\@onlypreamble\setboldmathrm
-\@onlypreamble\setmathsf
-\@onlypreamble\setmathtt
-\tl_gset:Nn \g__fontspec_mathrm_tl {\rmdefault}
-\tl_gset:Nn \g__fontspec_mathsf_tl {\sfdefault}
-\tl_gset:Nn \g__fontspec_mathtt_tl {\ttdefault}
-\cs_new:Nn \__fontspec_main_newfontfamily:NnnN
- {
- \fontspec_set_family:cnn { l__fontspec_ \cs_to_str:N #1 _family_tl } {#2} {#3}
- \use:x
- {
- \exp_not:N #4 \exp_not:N #1 {}
- {
- \exp_not:N \fontfamily { \use:c { l__fontspec_ \cs_to_str:N #1 _family_tl } }
- \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
- \exp_not:N \selectfont
- }
- }
- }
-\cs_new:Nn \__fontspec_main_newfontface:NnnN
- {
- \__fontspec_main_newfontfamily:NnnN #1 { BoldFont={},ItalicFont={},SmallCapsFont={},#2 } {#3} #4
- }
-\cs_new:Nn \__fontspec_set_default_features:nn
- {
- \IfBooleanTF {#1} \clist_gput_right:Nn \clist_gset:Nn
- \g__fontspec_default_fontopts_clist {#2}
- }
-\cs_new:Nn \__fontspec_set_font_default_features:nnn
- {
- \clist_map_inline:nn {#2}
- {
- \tl_if_single:nTF {##1}
- { \tl_set:No \l__fontspec_tmp_tl { \cs:w l__fontspec_ \cs_to_str:N ##1 _family_tl\cs_end: } }
- { \__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {##1} }
-
- \IfBooleanTF {#1}
- {
- \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
- { \tl_clear:N \l__fontspec_tmpb_tl }
- \tl_put_right:Nn \l__fontspec_tmpb_tl {#3,}
- \prop_gput:NVV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl
- }
- {
- \tl_if_empty:nTF {#3}
- { \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl }
- { \prop_gput:NVn \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,} }
- }
- }
- }
-\cs_new:Nn \__fontspec_main_addfontfeatures:n
- {
- \fontspec_if_fontspec_font:TF
- {
- \group_begin:
- \keys_set_known:nnN {fontspec-addfeatures} {#1} \l__fontspec_tmp_tl
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {options} \l__fontspec_options_tl
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {fontname} \l__fontspec_fontname_tl
- \bool_set_true:N \l__fontspec_disable_defaults_bool
- \use:x
- {
- \__fontspec_select_font_family:nn
- { \l__fontspec_options_tl , #1 } {\l__fontspec_fontname_tl}
- }
- \group_end:
- \fontfamily \g__fontspec_nfss_family_tl \selectfont
- }
- {
- \__fontspec_warning:nx {addfontfeatures-ignored} {#1}
- }
- \ignorespaces
- }
-\cs_new:Nn \__fontspec_main_newfontfeature:nn
- {
- \keys_define:nn { fontspec }
- {
- #1 .code:n = { \__fontspec_update_featstr:n {#2} }
- }
- }
-\cs_new:Nn \__fontspec_main_newAATfeature:nnnn
- {
- \keys_if_exist:nnF { fontspec } {#1}
- { \__fontspec_define_aat_feature_group:n {#1} }
-
- \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
- { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
-
- \__fontspec_define_aat_feature:nnnn {#1}{#2}{#3}{#4}
- }
-\cs_new:Nn \__fontspec_main_newopentypefeature:nnn
- {
- \keys_if_exist:nnF { fontspec / options } {#1}
- { \__fontspec_define_opentype_feature_group:n {#1} }
-
- \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
- { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
-
- \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn
- {#1} {#2} { \__fontspec_strip_plus_minus:n {#3} } {#3} {}
- }
-\cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil }
-\cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil
- {
- \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2}
- }
-\cs_new:Nn \__fontspec_main_aliasfontfeature:nn
- {
- \bool_set_false:N \l__fontspec_alias_bool
-
- \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
- {
- \keys_if_exist:nnT {##1} {#1}
- {
- \bool_set_true:N \l__fontspec_alias_bool
- \keys_define:nn {##1}
- { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } }
- }
- }
-
- \bool_if:NF \l__fontspec_alias_bool
- { \__fontspec_warning:nx {rename-feature-not-exist} {#1} }
- }
-\cs_new:Nn \__fontspec_main_aliasfontfeatureoption:nnn
- {
- \bool_set_false:N \l__fontspec_alias_bool
-
- \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
- {
- \keys_if_exist:nnT { ##1 / #1 } {#2}
- {
- \bool_set_true:N \l__fontspec_alias_bool
- \keys_define:nn { ##1 / #1 }
- { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
- }
-
- \keys_if_exist:nnT { ##1 / #1 } {#2Reset}
- {
- \keys_define:nn { ##1 / #1 }
- { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } }
- }
-
- \keys_if_exist:nnT { ##1 / #1 } {#2Off}
- {
- \keys_define:nn { ##1 / #1 }
- { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } }
- }
- }
-
- \bool_if:NF \l__fontspec_alias_bool
- { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} }
- }
-\cs_new:Nn \__fontspec_main_DeclareFontExtensions:n
- {
- \clist_set:Nn \l__fontspec_extensions_clist { #1 }
- }
-\__fontspec_main_DeclareFontExtensions:n {.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont}
-\cs_new:Nn \__fontspec_main_IfFontFeatureActiveTF:nnn
- {
- \__fontspec_if_font_feature:nTF {#1} {#2} {#3}
- }
-\prg_new_conditional:Nnn \__fontspec_if_font_feature:n {TF}
- {
- \tl_gclear:N \g__fontspec_single_feat_tl
- \group_begin:
- \__fontspec_font_suppress_not_found_error:
- \__fontspec_init:
- \bool_set_true:N \l__fontspec_ot_bool
- \bool_set_true:N \l__fontspec_never_check_bool
- \bool_set_false:N \l__fontspec_firsttime_bool
- \clist_clear:N \l__fontspec_fontfeat_clist
- \__fontspec_get_features:n {#1}
- \group_end:
-
-
- \tl_if_empty:NTF \g__fontspec_single_feat_tl { \prg_return_false: }
- {
- \exp_args:NV \fontspec_if_current_feature:nTF \g__fontspec_single_feat_tl
- { \prg_return_true: } { \prg_return_false: }
- }
- }
-\cs_new_protected:Nn \__fontspec_main_oldstylenums:n
- {
- \group_begin:
- \addfontfeature{Numbers=OldStyle}
- #1
- \group_end:
- }
-\cs_new_protected:Nn \__fontspec_main_liningnums:n
- {
- \group_begin:
- \addfontfeature{Numbers=Lining}
- #1
- \group_end:
- }
-
-%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F}
- {
- \cs_if_exist:cTF {g__fontspec_fontinfo_ \f@family _prop} \prg_return_true: \prg_return_false:
- }
-\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_atsui_bool
- {
- \__fontspec_make_AAT_feature_string:NnnTF \font {#1} {#2}
- \prg_return_true: \prg_return_false:
- }
- {
- \prg_return_false:
- }
- }
- {
- \prg_return_false:
- }
- }
-\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool \prg_return_true: \prg_return_false:
- }
- {
- \prg_return_false:
- }
- }
-\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl
- \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl}
-
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-num} \l__fontspec_tmp_tl
- \int_set:Nn \l__fontspec_language_int {\l__fontspec_tmp_tl}
-
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_script_tl
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_lang_tl
-
- \__fontspec_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:}
- }
- {
- \prg_return_false:
- }
- }
- {
- \prg_return_false:
- }
- }
-\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \__fontspec_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false:
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false:
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl
- \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl}
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_script_tl
-
- \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false:
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \__fontspec_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false:
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl
- \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl
- {\prg_return_true:} {\prg_return_false:}
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F}
- {
- \fontspec_if_fontspec_font:TF
- {
- \__fontspec_set_font_type:N \font
- \bool_if:NTF \l__fontspec_ot_bool
- {
- \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl
- \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl
- {\prg_return_true:} {\prg_return_false:}
- }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\cs_new:Nn \__fontspec_tl_new_if_free:N { \tl_if_exist:NF #1 { \tl_new:N #1 } }
-\cs_new:Nn \__fontspec_set_family:NnnN
- {
- \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
- \tl_set:Nn \l__fontspec_family_label_tl {#1}
- \__fontspec_select_font_family:nn {#2} {#3}
- \__fontspec_tl_new_if_free:N #1
- #4 #1 \l_fontspec_family_tl
- \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
- }
-\cs_new:Nn \fontspec_gset_family:Nnn { \__fontspec_set_family:NnnN #1 {#2} {#3} \tl_gset_eq:NN }
-\cs_new:Nn \fontspec_set_family:Nnn { \__fontspec_set_family:NnnN #1 {#2} {#3} \tl_set_eq:NN }
-\cs_generate_variant:Nn \fontspec_set_family:Nnn {c}
-\tl_new:N \l__fontspec_fontface_cs_tl
-\tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font}
-\cs_new:Nn \__fontspec_set_fontface:NNnnN
- {
- \tl_set:Nn \l__fontspec_fontface_cs_tl {#1}
- \tl_set:Nn \l__fontspec_family_label_tl {#2}
- \__fontspec_select_font_family:nn {#3} {#4}
- #5 #2 \l_fontspec_family_tl
- \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset
- }
-\cs_new:Nn \fontspec_gset_fontface:NNnn { \__fontspec_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_gset_eq:NN }
-\cs_new:Nn \fontspec_set_fontface:NNnn { \__fontspec_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_set_eq:NN }
-\prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F}
- {
- \group_begin:
- \__fontspec_init:
- \__fontspec_if_detect_external:nT {#1} { \__fontspec_font_is_file: }
- \__fontspec_primitive_font_if_exist:nTF { \__fontspec_construct_font_call:nn {#1} {} }
- { \group_end: \prg_return_true: }
- { \group_end: \prg_return_false: }
- }
-\cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF
-
-\prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F}
- {
- \exp_args:Nxx \tl_if_in:nnTF
- { \__fontspec_primitive_font_current_name: } { \tl_to_str:n {#1} }
- { \prg_return_true: } { \prg_return_false: }
- }
-\prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F}
- {
- \__fontspec_if_merge_shape:nTF {sc}
- {
- \tl_set_eq:Nc \l__fontspec_smcp_shape_tl { \__fontspec_shape_merge:nn {\f@shape} {sc} }
- }
- {
- \tl_set:Nn \l__fontspec_smcp_shape_tl {sc}
- }
-
- \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl }
- {
- \tl_if_eq:ccTF
- { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl }
- { \f@encoding/\f@family/\f@series/\shapedefault }
- { \prg_return_false: }
- { \prg_return_true: }
- }
- { \prg_return_false: }
- }
-
-%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\cs_new_protected:Nn \__fontspec_select_font_family:nn
- {
- \group_begin:
- \__fontspec_font_suppress_not_found_error:
- \__fontspec_init:
-
- \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2}
- \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2}
- \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2}
-
- \__fontspec_if_detect_external:nT {#2}
- { \keys_set:nn {fontspec-preparse-external} {Path} }
-
- \keys_set_known:nn {fontspec-preparse-cfg} {#1}
-
- \__fontspec_init_ttc:n {#2}
- \__fontspec_load_external_fontoptions:N \l_fontspec_fontname_tl
-
- \__fontspec_extract_all_features:n {#1}
- \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist }
-
-
- \__fontspec_preparse_features:
- \__fontspec_load_font:
- \__fontspec_set_scriptlang:
- \__fontspec_get_features:n {}
- \bool_set_false:N \l__fontspec_firsttime_bool
-
- \__fontspec_save_family_needed:nTF {#2}
- {
- \__fontspec_save_family:nn {#1} {#2}
- }
- {
- }
- \group_end:
-
- \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl
- }
-\cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn %% deprecated, for compatibility only
-\cs_new:Nn \__fontspec_sanitise_fontname:Nn
- {
- \tl_set:Nx #1 {#2}
- \tl_remove_all:Nn #1 {~}
- \clist_map_inline:Nn \l__fontspec_extensions_clist
- {
- \tl_if_in:NnT #1 {##1}
- {
- \tl_remove_once:Nn #1 {##1}
- \tl_set:Nn \l__fontspec_extension_tl {##1}
- \clist_map_break:
- }
- }
- }
-\prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T}
- {
- \clist_map_inline:Nn \l__fontspec_extensions_clist
- {
- \bool_set_false:N \l__fontspec_tmpa_bool
- \exp_args:Nx % <- this should be handled earlier
- \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string}
- { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: }
- }
- \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false:
- }
-\cs_new:Nn \__fontspec_init_ttc:n
- {
- \str_if_eq:eeT { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc}
- {
- \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1}
- \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1}
- \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1}
- }
- }
-\cs_new:Nn \__fontspec_load_external_fontoptions:N
- {
- \bool_if:NT \l__fontspec_fontcfg_bool
- {
- \tl_set:Nx \l__fontspec_ext_filename_tl {#1.fontspec}
- \tl_remove_all:Nn \l__fontspec_ext_filename_tl {~}
- \prop_if_in:NVF \g__fontspec_fontopts_prop #1
- {
- \exp_args:No \file_if_exist:nT { \l__fontspec_ext_filename_tl }
- { \file_input:n { \l__fontspec_ext_filename_tl } }
- }
- }
- }
-\cs_new:Nn \__fontspec_extract_all_features:n
- {
- \bool_if:NTF \l__fontspec_disable_defaults_bool
- {
- \clist_set:Nx \l__fontspec_all_features_clist {#1}
- }
- {
- \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist
- { \clist_clear:N \l__fontspec_fontopts_clist }
-
- \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist
- { \clist_clear:N \l__fontspec_family_fontopts_clist }
- \tl_clear:N \l__fontspec_family_label_tl
-
- \clist_set:Nx \l__fontspec_all_features_clist
- {
- \g__fontspec_default_fontopts_clist,
- \l__fontspec_family_fontopts_clist,
- \l__fontspec_fontopts_clist,
- #1
- }
- }
- }
-\cs_new:Nn \__fontspec_preparse_features:
- {
-
- \__fontspec_keys_set_known:nxN {fontspec-preparse-external}
- { \l__fontspec_all_features_clist }
- \l__fontspec_keys_leftover_clist
-
- \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl
- \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist}
- \l__fontspec_keys_leftover_clist
- \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist}
- \l__fontspec_fontfeat_clist
- }
-\cs_new:Nn \__fontspec_load_font:
- {
-
- \__fontspec_primitive_font_set:NnnF \l__fontspec_test_font
- { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
- { \f@size pt - 2sp }
- { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} }
-
- \__fontspec_set_font_type:N \l__fontspec_test_font
- \__fontspec_primitive_font_gset:Onn \l__fontspec_fontface_cs_tl
- { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
- { \f@size pt + 2sp }
-
- \l__fontspec_fontface_cs_tl % this is necessary for LuaLaTeX to check the scripts properly
-
- }
-\cs_new:Nn \__fontspec_construct_font_call:nnnnnn
- {
- " \__fontspec_fontname_wrap:n { #1 #2 } #3
- #4 #5
- \str_if_eq:eeF {#6}{} {:#6} "
- }
-\cs_new:Nn \__fontspec_construct_font_call:nn
- {
- \__fontspec_construct_font_call:nnnnnn
- {#1}
- \l__fontspec_extension_tl
- \l__fontspec_ttc_index_tl
- \l__fontspec_renderer_tl
- \l__fontspec_optical_size_tl
- {#2}
- }
-\cs_new:Nn \__fontspec_font_is_name:
- {
- \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n
- }
-\cs_new:Nn \__fontspec_font_is_file:
- {
- \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] }
- }
-\cs_new:Nn \__fontspec_set_scriptlang:
- {
- \bool_if:NT \l__fontspec_firsttime_bool
- {
- \tl_if_empty:NF \l__fontspec_script_name_tl
- {
- \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl}
- \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl}
- }
- }
- }
-\cs_new:Nn \__fontspec_get_features:n
- {
- \__fontspec_init_fontface:
- \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1}
- \l__fontspec_keys_leftover_clist
- \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
- \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
-
- \tl_if_empty:NF \l__fontspec_mapping_tl
- { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } }
-
- \str_if_eq:eeF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl }
- { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl }
- { \__fontspec_update_featstr:n { color = {\l__fontspec_hexcol_tl\l__fontspec_opacity_tl} } }
- }
-\prg_new_conditional:Nnn \__fontspec_save_family_needed:n { TF }
- {
-
-
- \tl_if_empty:NTF \l__fontspec_nfss_fam_tl
- {
- \prop_get:NVNTF \g__fontspec_fontid_family_prop \l__fontspec_fontid_tl \l__fontspec_tmp_tl
- {
- \tl_gset_eq:NN \g__fontspec_nfss_family_tl \l__fontspec_tmp_tl
- \prg_return_false:
- }
- {
- \tl_set:Nx \l__fontspec_tmp_tl {#1}
- \tl_remove_all:Nn \l__fontspec_tmp_tl { ~ }
- \__fontspec_save_fontid_family:VV \l__fontspec_fontid_tl \l__fontspec_tmp_tl
- \prg_return_true:
- }
- }
- {
- \tl_gset_eq:NN \g__fontspec_nfss_family_tl \l__fontspec_nfss_fam_tl
- \cs_undefine:c { g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop }
- \prg_return_true:
- }
- }
-\cs_new:Nn \__fontspec_save_fontid_family:nn
- {
- \prop_get:NnNTF \g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl
- {
- \tl_set:Nx \l__fontspec_tmp_tl
- { \int_eval:n { \l__fontspec_tmp_tl + 1 } }
- }
- { \tl_set:Nn \l__fontspec_tmp_tl { 0 } }
- \prop_gput:NnV \g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl
- \tl_gset:Nx \g__fontspec_nfss_family_tl { #2 ( \l__fontspec_tmp_tl ) }
- \prop_gput:NnV \g__fontspec_fontid_family_prop {#1} \g__fontspec_nfss_family_tl
- }
-\cs_generate_variant:Nn \__fontspec_save_fontid_family:nn { VV }
-\cs_new:Nn \__fontspec_save_family:nn
- {
- \__fontspec_save_fontinfo:n {#2}
- \__fontspec_find_autofonts:
- \DeclareFontFamily{\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{}
- \__fontspec_set_faces:
- \__fontspec_info:nxx {defining-font} {#1} {#2}
- }
-\cs_new:Nn \__fontspec_save_fontinfo:n
- {
- \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop}
- \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 }
- \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist }
- \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef}
- {
- \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl}
- { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist }
- }
- \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int
- \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int
- \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l__fontspec_script_tl
- \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l__fontspec_lang_tl
- }
-\cs_new:Nn \__fontspec_find_autofonts:
- {
- \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool}
- {
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B}
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I}
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI}
- }
-
- \bool_if:NF \l__fontspec_nobf_bool
- {
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B}
- }
-
- \bool_if:NF \l__fontspec_noit_bool
- {
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I}
- }
-
- \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B}
- }
-\cs_new:Nn \__fontspec_set_faces:
- {
- \__fontspec_add_nfssfont:nnnn \mddefault \shapedefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist
- \__fontspec_add_nfssfont:nnnn \bfdefault \shapedefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist
- \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist
- \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist
- \__fontspec_add_nfssfont:nnnn \mddefault \swdefault \l__fontspec_fontname_sw_tl \l__fontspec_fontfeat_sw_clist
- \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist
- \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist
- \__fontspec_add_nfssfont:nnnn \bfdefault \swdefault \l__fontspec_fontname_bfsw_tl \l__fontspec_fontfeat_bfsw_clist
- \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 }
- }
-\cs_new:Nn \__fontspec_set_faces_aux:nnnnn
- {
- \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3}
- \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5}
- }
-\cs_new:Nn \fontspec_complete_fontname:Nn
- {
- \tl_set:Nx #1 {#2}
- \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl}
- \tl_remove_all:Nn #1 {~}
- }
-\cs_new:Nn \__fontspec_add_nfssfont:nnnn
- {
- \tl_set:Nx \l__fontspec_this_font_tl {#3}
-
- \tl_if_empty:xTF {#4}
- { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} }
- { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl }
-
- \tl_if_empty:NF \l__fontspec_this_font_tl
- {
- \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2}
- { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} }
- }
- }
-\cs_new:Nn \__fontspec_set_font_type:N
- {
- \bool_set_true:N \l__fontspec_ot_bool
- }
-\cs_new:Nn \__fontspec_set_autofont:Nnn
- {
- \bool_if:NF \l__fontspec_external_bool
- {
- \tl_if_empty:xF {#2}
- {
- \tl_if_empty:NT #1
- {
- \__fontspec_if_autofont:nnTF {#2} {#3}
- { \tl_set:Nx #1 {#2#3} }
- { \__fontspec_info:nx {no-font-shape} {#2#3} }
- }
- }
- }
- }
-\prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF}
- {
- \group_begin:
- \__fontspec_primitive_font_set:Nnn \l__fontspec_tmpa_font { \__fontspec_construct_font_call:nn {#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 1sp }
- \__fontspec_primitive_font_set:Nnn \l__fontspec_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 1sp }
- \str_if_eq:eeTF { \__fontspec_primitive_font_get_name:N \l__fontspec_tmpa_font } { \__fontspec_primitive_font_get_name:N \l__fontspec_tmpb_font }
- { \group_end: \prg_return_false: }
- { \group_end: \prg_return_true: }
- }
-\cs_new:Nn \__fontspec_make_font_shapes:Nnnnn
- {
- \group_begin:
- \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist
- \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {#1}
- \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5}
- \group_end:
- }
-\cs_new:Nn \__fontspec_load_fontname:Nn
- {
- \__fontspec_sanitise_fontname:Nn #1 {#2}
- \__fontspec_load_external_fontoptions:N #1
- \prop_get:NVNF \g__fontspec_fontopts_prop #1 \l__fontspec_fontopts_clist
- { \clist_clear:N \l__fontspec_fontopts_clist }
- \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l__fontspec_fontopts_clist
- \__fontspec_primitive_font_set:OnnF \l__fontspec_fontface_cs_tl
- { \__fontspec_construct_font_call:nn {#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 2sp }
- { \__fontspec_error:nx {font-not-found} {#2} }
- }
-\keys_define:nn {fontspec/fontname}
- {
- Font .tl_set:N = \l_fontspec_fontname_tl ,
- Font .groups:n = {getfontname} ,
- }
-\cs_new:Nn \__fontspec_declare_shape:nnnn
- {
- \tl_build_begin:N \l__fontspec_nfss_tl
- \tl_build_begin:N \l__fontspec_nfss_sc_tl
- \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
-
- \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} }
-
- \tl_build_end:N \l__fontspec_nfss_tl
- \tl_build_end:N \l__fontspec_nfss_sc_tl
-
- \__fontspec_declare_shapes_normal:nn {#1} {#2}
- \__fontspec_declare_shapes_smcaps:nn {#1} {#2}
- \__fontspec_declare_shape_slanted:nn {#1} {#2}
- \__fontspec_declare_shapes_bx:nn {#1} {#2}
- \__fontspec_declare_shape_loginfo:nn {#1} {#2}
- }
-\cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx}
-\cs_new:Nn \__fontspec_setup_single_size:nn
- {
- \tl_clear:N \l__fontspec_size_tl
- \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
-
- \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 }
- \l__fontspec_sizing_leftover_clist
- \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }
-
- % "normal"
- \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
- \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {}
-
- % small caps
- \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist
-
- \bool_if:NF \l__fontspec_nosc_bool
- {
- \tl_if_empty:NTF \l__fontspec_fontname_sc_tl
- {
- \__fontspec_make_smallcaps:TF
- {
- \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps}
- }
- {
- \bool_set_true:N \l__fontspec_nosc_bool
- }
- }
- { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_fontname_sc_tl} }% local for each size
- }
-
- \bool_if:NF \l__fontspec_nosc_bool
- {
- \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl
- {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist}
- }
- }
-\cs_new:Nn \__fontspec_setup_nfss:Nnnn
- {
-
- \__fontspec_get_features:n { #2 , #3 , #4 }
-
- \tl_if_empty:NF \l__fontspec_scale_tl
- {
- \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] }
- }
-
- \tl_build_put_right:Nx #1
- {
- <\l__fontspec_size_tl> \l__fontspec_scale_tl
- \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl }
- { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist }
- }
- }
-\cs_new:Nn \__fontspec_declare_shapes_normal:nn
- {
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
- {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl}
- }
-\cs_new:Nn \__fontspec_declare_shapes_smcaps:nn
- {
- \tl_if_empty:NF \l__fontspec_nfss_sc_tl
- {
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} {#1}
- { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl}
- }
- }
-\cs_new:Nn \__fontspec_combo_sc_shape:n
- {
- \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} }
- { \tl_use:c { \__fontspec_shape_merge:nn {#1} {\scdefault} } }
- { \scdefault#1 }
- }
-\cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn
- {
-\group_begin:
-\normalsize
-\cs_undefine:c {#1/#2/#3/#4/\f@size}
-\group_end:
-\DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6}
- }
-\cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx}
-\cs_new:Nn \__fontspec_declare_shape_slanted:nn
- {
- \bool_if:nT
- {
- \str_if_eq_p:ee {#2} {\itdefault} &&
- !(\str_if_eq_p:ee {\itdefault} {\sldefault})
- }
- {
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault}
- {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl}
- }
- }
-\cs_new:Nn \__fontspec_declare_shapes_bx:nn
- {
- \bool_if:nT
- {
- \str_if_eq_p:ee {#1} {\bfdefault} &&
- !(\str_if_eq_p:ee {\bfdefault} {bx})
- }
- {
- % bx/?
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
- {bx} {#2}
- { <->ssub*\g__fontspec_nfss_family_tl/\bfdefault/#2 }
- { \l__fontspec_postadjust_tl }
-
- % bx/sc -> b/sc
- \tl_if_empty:NF \l__fontspec_nfss_sc_tl
- {
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
- {bx} { \__fontspec_combo_sc_shape:n {#2} }
- { <->ssub*\g__fontspec_nfss_family_tl/\bfdefault/#2 }
- { \l__fontspec_postadjust_tl }
- }
-
- % bx/sl -> bx/it
- \bool_if:nT
- {
- \str_if_eq_p:ee {#2} {\itdefault} &&
- !(\str_if_eq_p:ee {\itdefault} {\sldefault})
- }
- {
- \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl}
- {bx} {\sldefault}
- { <->ssub*\g__fontspec_nfss_family_tl/bx/\itdefault }
- { \l__fontspec_postadjust_tl }
- }
-
- }
- }
-\cs_new:Nn \__fontspec_declare_shape_loginfo:nn
- {
- \tl_gput_right:Nx \g__fontspec_defined_shapes_tl
- {
- \exp_not:n { \\ }
- -~ \exp_not:N \str_case:nn {#1/#2}
- {
- {\mddefault/\shapedefault} {'normal'~}
- {\bfdefault/\shapedefault} {'bold'~}
- {\mddefault/\itdefault} {'italic'~}
- {\mddefault/\sldefault} {'slanted'~}
- {\mddefault/\swdefault} {'swash'~}
- {\bfdefault/\itdefault} {'bold~ italic'~}
- {\bfdefault/\sldefault} {'bold~ slanted'~}
- {\bfdefault/\swdefault} {'bold~ swash'~}
- } (#1/#2)~
- with~ NFSS~ spec.:~
- \l__fontspec_nfss_tl
- \exp_not:n { \\ }
- -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} }
- {
- {\mddefault/\scdefault} {'small~ caps'~}
- {\bfdefault/\scdefault} {'bold~ small~ caps'~}
- {\mddefault/\scitdefault} {'italic~ small~ caps'~}
- {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
- {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
- {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
- }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~
- with~ NFSS~ spec.:~
- \l__fontspec_nfss_sc_tl
- \tl_if_empty:fF {\l__fontspec_postadjust_tl}
- {
- \exp_not:N \\ and~ font~ adjustment~ code:
- \exp_not:N \\ \l__fontspec_postadjust_tl
- }
- }
- }
-\tl_set:Nn \l__fontspec_pre_feat_sclist
- {
- mode = \l__fontspec_mode_tl ;
- \tl_if_empty:NF \l__fontspec_shaper_tl { shaper = \l__fontspec_shaper_tl ; }
- \tl_if_empty:NF \l__fontspec_script_tl { script = \l__fontspec_script_tl ; }
- \tl_if_empty:NF \l__fontspec_lang_tl { language = \l__fontspec_lang_tl ; }
- }
-\cs_new:Nn \__fontspec_make_smallcaps:TF
- {
- \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2}
- }
-\cs_new:Nn \__fontspec_update_featstr:n
- {
- \bool_if:NF \l__fontspec_firsttime_bool
- {
- \tl_gset:Nx \g__fontspec_single_feat_tl { #1 }
- \tl_gput_right:Nx \g__fontspec_rawfeatures_sclist {#1;}
- }
- }
-\cs_new:Nn \__fontspec_remove_clashing_featstr:n
- {
- \clist_map_inline:nn {#1}
- {
- \tl_gremove_all:Nn \g__fontspec_rawfeatures_sclist {##1;}
- }
- }
-\cs_generate_variant:Nn \__fontspec_remove_clashing_featstr:n {x}
-\cs_set:Npn \__fontspec_init:
- {
- \bool_set_false:N \l__fontspec_ot_bool
- \bool_set_true:N \l__fontspec_firsttime_bool
- \__fontspec_font_is_name:
- \tl_clear:N \l__fontspec_font_path_tl
- \tl_clear:N \l__fontspec_optical_size_tl
- \tl_clear:N \l__fontspec_ttc_index_tl
- \tl_clear:N \l__fontspec_renderer_tl
- \tl_gclear:N \g__fontspec_defined_shapes_tl
- \tl_gclear:N \g__fontspec_curr_series_tl
- \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl
- \tl_set:Nn \l__fontspec_mode_tl {node}
- \int_set:Nn \prehyphenchar { `\- } % fixme
- \int_zero:N \posthyphenchar % fixme
- \int_zero:N \preexhyphenchar % fixme
- \int_zero:N \postexhyphenchar % fixme
- }
-\cs_new:Nn \__fontspec_init_fontface:
- {
- \tl_gclear:N \g__fontspec_rawfeatures_sclist
- \tl_clear:N \l__fontspec_scale_tl
- \tl_set_eq:NN \l__fontspec_opacity_tl \c__fontspec_opacity_tl
- \tl_set_eq:NN \l__fontspec_hexcol_tl \c__fontspec_hexcol_tl
- \tl_set_eq:NN \l__fontspec_postadjust_tl \c__fontspec_postadjust_tl
- \tl_clear:N \l__fontspec_wordspace_adjust_tl
- \tl_clear:N \l__fontspec_punctspace_adjust_tl
- }
-\cs_new_protected:Nn \__fontspec_ot_validate_tag:n
- {
- \__fontspec_ot_validate_tag:w #1 \q_nil
- }
-\cs_generate_variant:Nn \__fontspec_ot_validate_tag:n {x}
-\cs_set:Npn \__fontspec_ot_validate_tag:w #1 #2 \q_nil
- {
- \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} }
- { \__fontspec_ot_validate_tag_aux:w #2 \c_empty_tl \c_empty_tl \q_nil }
- { \__fontspec_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil }
- }
-\cs_set:Npn \__fontspec_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil
- {
- \int_compare:nT { \tl_count:n {#5} > 2 }
- { \__fontspec_error:nx {ot-tag-too-long} {#1#2#3#4#5} }
- }
-
-%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\cs_new:Nn \__fontspec_define_opentype_feature_group:n
- {
- \keys_define:nn {fontspec-opentype} { #1 .multichoice: , .groups:n = {opentype} }
- }
-\cs_new:Nn \__fontspec_feat_prop_add:nn
- {
- \tl_if_empty:nF {#1}
- {
- \prop_if_in:NnF \g__fontspec_OT_features_prop {#1}
- {
- \prop_gput:Nnn \g__fontspec_OT_features_prop {#1} {#2}
- }
- }
- }
-\cs_new:Nn \__fontspec_define_opentype_feature:nnnnn
- {
- \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2}
- \tl_if_empty:nTF {#4}
- {
- \keys_define:nn {fontspec-opentype}
- {
- #1/#2 .code:n =
- { \__fontspec_remove_clashing_featstr:n {#5} } ,
- #1/#2 .groups:n = {opentype}
- }
- }
- {
- \keys_define:nn {fontspec-opentype}
- {
- #1/#2 .code:n =
- {
- \__fontspec_make_OT_feature:nnn {#3} {#4} {#5}
- } ,
- #1/#2 .groups:n = {opentype}
- }
- }
- }
-\cs_new:Nn \__fontspec_feat_off:n {#1Off}
-\cs_new:Nn \__fontspec_feat_reset:n {#1Reset}
-\cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn
- {
- \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5}
- \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {}
- \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4}
- }
-\cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn
- {
- \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5}
- \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4}
- }
-\cs_new:Nn \__fontspec_make_OT_feature:nnn
- {
-
- \bool_set_true:N \l__fontspec_proceed_bool
-
- \tl_if_empty:nF {#1}
- {
- \exp_args:No \__fontspec_check_ot_feat:NnF \l__fontspec_fontface_cs_tl {#1}
- {
- \__fontspec_warning:nx {icu-feature-not-exist-in-font} {#1}
- \bool_set_false:N \l__fontspec_proceed_bool
- }
- }
-
- \__fontspec_remove_clashing_featstr:x { #2 , \__fontspec_swap_plus_minus:n {#2} , #3 }
-
- \bool_if:NT \l__fontspec_proceed_bool { \__fontspec_update_featstr:n {#2} }
- }
-\cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx}
-\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil }
-\cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil
- { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
-\prg_new_conditional:Nnn \__fontspec_check_script:Nn {TF,T}
- {
- \bool_if:NTF \l__fontspec_never_check_bool
- { \prg_return_true: }
- {
- \bool_if:nTF { \tl_if_empty_p:e {#2} }
- { \prg_return_false: }
- {
- \__fontspec_ot_validate_tag:x {#2}
- \cs_if_eq:NNTF #1 \font
- { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} }
- { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
- \lua_now:e { fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2") }
- \bool_if:NTF \l__fontspec_check_bool
- {
- \prg_return_true:
- }
- {
- \prg_return_false:
- }
- }
- }
- }
-\prg_new_conditional:Nnn \__fontspec_check_lang:Nn {TF}
- {
- \__fontspec_check_lang:NnnTF #1 {#2} {\l__fontspec_script_tl} {\prg_return_true:} {\prg_return_false:}
- }
-\prg_new_conditional:Nnn \__fontspec_check_lang:Nnn {TF}
- {
- \bool_if:NTF \l__fontspec_never_check_bool
- { \prg_return_true: }
- {
- \bool_if:nTF { \tl_if_empty_p:e {#3} }
- { \prg_return_false: }
- {
- \__fontspec_ot_validate_tag:x {#2}
- \__fontspec_ot_validate_tag:x {#3}
- \cs_if_eq:NNTF #1 \font
- { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} }
- { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
- \__fontspec_lua_function:neee {check_ot_lang} {\l__fontspec_tmp_tl} {#2} {#3}
- \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
- }
- }
- }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F}
- {
- \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l__fontspec_lang_tl} {\l__fontspec_script_tl}
- {\prg_return_true:} {\prg_return_false:}
- }
-\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F}
- {
- \bool_if:NTF \l__fontspec_never_check_bool
- { \prg_return_true: }
- {
- \bool_if:nTF { \tl_if_empty_p:e {#3} || \tl_if_empty_p:e {#4} }
- { \prg_return_false: }
- {
- \__fontspec_ot_validate_tag:x {#2}
- \__fontspec_ot_validate_tag:x {#3}
- \__fontspec_ot_validate_tag:x {#4}
- \cs_if_eq:NNTF #1 \font
- { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} }
- { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} }
- \__fontspec_lua_function:neeee {check_ot_feat} {\l__fontspec_tmp_tl} {#2} {#3} {#4}
- \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
- }
- }
- }
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {afrc}{Alternative~Fractions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {akhn}{Akhands}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwf}{Below-base~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blws}{Below-base~Substitutions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {calt}{Contextual~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cjct}{Conjunct~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {clig}{Contextual~Ligatures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpsp}{Capital~Spacing}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cswh}{Contextual~Swash}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {curs}{Cursive~Positioning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dist}{Distances}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dnom}{Denominators}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dtls}{Dotless~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {expt}{Expert~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fina}{Terminal~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {flac}{Flattened~accent~forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {frac}{Fractions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fwid}{Full~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {half}{Half~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {haln}{Halant~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hist}{Historical~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hlig}{Historical~Ligatures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hngl}{Hangul}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hwid}{Half~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {init}{Initial~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {isol}{Isolated~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ital}{Italics}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jalt}{Justification~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp78}{JIS78~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp83}{JIS83~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp90}{JIS90~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp04}{JIS2004~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {kern}{Kerning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lfbd}{Left~Bounds}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {liga}{Standard~Ligatures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lnum}{Lining~Figures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {locl}{Localized~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mark}{Mark~Positioning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {medi}{Medial~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nukt}{Nukta~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {numr}{Numerators}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {onum}{Oldstyle~Figures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {opbd}{Optical~Bounds}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ordn}{Ordinals}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ornm}{Ornaments}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pcap}{Petite~Capitals}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pkna}{Proportional~Kana}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pnum}{Proportional~Figures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pref}{Pre-Base~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pstf}{Post-base~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {psts}{Post-base~Substitutions}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pwid}{Proportional~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {qwid}{Quarter~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rand}{Randomize}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rkrf}{Rakar~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rlig}{Required~Ligatures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rphf}{Reph~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtbd}{Right~Bounds}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {salt}{Stylistic~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {size}{Optical~size}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smcp}{Small~Capitals}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smpl}{Simplified~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {subs}{Subscript}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sups}{Superscript}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {swsh}{Swash}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {titl}{Titling}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnum}{Tabular~Figures}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {trad}{Traditional~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {twid}{Third~Widths}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {unic}{Unicase}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vatu}{Vattu~Variants}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vert}{Vertical~Writing}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation}
-\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero}
-
-%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-
-%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\clist_gset:Nn \g__fontspec_all_keyval_modules_clist
- {
- fontspec, fontspec-opentype, fontspec-aat,
- fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested,
- fontspec-renderer
- }
-\cs_new:Nn \__fontspec_keys_define_code:nnn
- {
- \keys_define:nn {#1} { #2 .code:n = {#3} }
- }
-\cs_new:Nn \__fontspec_aff_error:n
- {
- \__fontspec_keys_define_code:nnn {fontspec-addfeatures} {#1}
- { \__fontspec_error:nx {not-in-addfontfeatures} {#1} }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile}
- {
- \bool_set_false:N \l__fontspec_fontcfg_bool
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile}
- {
- \bool_set_false:N \l__fontspec_fontcfg_bool
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path}
- {
- \bool_set_true:N \l__fontspec_nobf_bool
- \bool_set_true:N \l__fontspec_noit_bool
- \bool_set_true:N \l__fontspec_external_bool
- \tl_set:Nn \l__fontspec_font_path_tl {#1}
- \__fontspec_font_is_file:
- }
-\aliasfontfeature{Path}{ExternalLocation}
-\__fontspec_keys_define_code:nnn {fontspec} {Path} {}
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension}
- {
- \tl_set:Nn \l__fontspec_extension_tl {#1}
- \bool_if:NF \l__fontspec_external_bool
- {
- \keys_set:nn {fontspec-preparse-external} {Path}
- }
- }
-\tl_clear:N \l__fontspec_extension_tl
-\__fontspec_keys_define_code:nnn {fontspec} {Extension} {}
-\keys_define:nn {fontspec-renderer}
- {
- Renderer .choices:nn =
- {Full,Node,Basic,Base,HarfBuzz,Harfbuzz,OpenType,AAT,Graphite}
- {
- \int_compare:nT {\l_keys_choice_int >= 5} { \bool_set_true:N \l__fontspec_harfbuzz_bool }
-
- \tl_set:Nx \l__fontspec_mode_tl
- {
- \int_case:nn \l_keys_choice_int { 1 {node} 2 {node} 3 {base} 4 {base} 5 {harf} 6 {harf} 7 {harf} 8 {harf} 9 {harf}}
- }
-
- \tl_set:Nx \l__fontspec_shaper_tl
- {
- \int_case:nn \l_keys_choice_int { 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {ot} 8 {coretext_aat} 9 {graphite2} }
- }
-
-
- \tl_gset:Nx \g__fontspec_single_feat_tl
- {
- mode=\l__fontspec_mode_tl ;
- \tl_if_empty:NF \l__fontspec_shaper_tl { shaper=\l__fontspec_shaper_tl}
- }
- } ,
-
- Renderer unknown .code:n =
- {
- \bool_set_true:N \l__fontspec_harfbuzz_bool
- \__fontspec_warning:nx {unknown-renderer} {#1}
- \tl_set:Nn \l__fontspec_mode_tl {harf}
- \tl_set:Nn \l__fontspec_shaper_tl {#1}
- } ,
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {Script}
- {
- \tl_set:Nn \l__fontspec_script_name_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {Language}
- {
- \tl_set:Nn \l__fontspec_lang_name_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex}
- {
- \str_if_eq:eeF { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc}
- { \__fontspec_warning:n {font-index-needs-ttc} }
- \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {FontIndex}
- {
- \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont}
- {
- \tl_if_empty:nTF {#1}
- {
- \bool_set_true:N \l__fontspec_noit_bool
- }
- {
- \bool_set_false:N \l__fontspec_noit_bool
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_it_tl {#1}
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_sl_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SwashFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_sw_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
- {
- \tl_if_empty:nTF {#1}
- {
- \bool_set_true:N \l__fontspec_nobf_bool
- }
- {
- \bool_set_false:N \l__fontspec_nobf_bool
- \fontspec_complete_fontname:Nn \l__fontspec_curr_bfname_tl {#1}
-
- \seq_if_empty:NT \l__fontspec_bf_series_seq
- {
- \tl_gset:Nx \g__fontspec_curr_series_tl {\bfdefault}
- \seq_put_right:Nx \l__fontspec_bf_series_seq {\bfdefault}
- }
-
- \tl_if_eq:oxT \g__fontspec_curr_series_tl {\bfdefault}
- {
- \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl
- }
-
- \prop_put:NxV \l__fontspec_nfss_prop {BoldFont-\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl
-
-
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfit_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsl_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSwashFont}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsw_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont}
- {
- \tl_if_empty:nTF {#1}
- {
- \bool_set_true:N \l__fontspec_nosc_bool
- }
- {
- \bool_set_false:N \l__fontspec_nosc_bool
- \fontspec_complete_fontname:Nn \l__fontspec_fontname_sc_tl {#1}
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_up_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_bfit_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_sl_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_bfsl_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {SwashFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_sw_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSwashFeatures}
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_bfsw_clist {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures}
- {
- \bool_if:NF \l__fontspec_firsttime_bool
- {
- \clist_put_right:Nn \l__fontspec_fontfeat_sc_clist {#1}
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures}
- {
- \clist_set:Nn \l__fontspec_sizefeat_clist {#1}
- \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures}
- {
- \clist_set:Nn \l__fontspec_sizefeat_clist {#1}
- \tl_if_empty:NT \l__fontspec_this_font_tl
- { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font}
- {
- \tl_set:Nn \l__fontspec_this_font_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures}
- {
- % dummy
- }
-\__fontspec_keys_define_code:nnn {fontspec} {Font}
- {
- % dummy
- }
-\__fontspec_keys_define_code:nnn {fontspec-sizing} {Size}
- {
- \tl_set:Nn \l__fontspec_size_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-sizing} {Font}
- {
- \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {UprightFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {ItalicFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {SlantedFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldItalicFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldSlantedFont} {}
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding}
- {
- \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily}
- {
- \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 }
- }
-\__fontspec_keys_define_code:nnn {fontspec-preparse} {FontFace}
- {
- \tl_clear:N \l__fontspec_this_font_tl
- \clist_set:No \l__fontspec_arg_clist { \use_iii:nnn #1 }
- \clist_set_eq:NN \l__fontspec_this_feat_clist \l__fontspec_arg_clist
- \int_compare:nT { \clist_count:N \l__fontspec_arg_clist = 1 }
- {
- \tl_if_in:NnF \l__fontspec_arg_clist {=}
- {
- \tl_set_eq:NN \l__fontspec_this_font_tl \l__fontspec_arg_clist
- \tl_clear:N \l__fontspec_this_feat_clist
- }
- }
-
- \__fontspec_add_nfssfont:nnnn
- {\use_i:nnn #1} {\use_ii:nnn #1} {\l__fontspec_this_font_tl} {\l__fontspec_this_feat_clist}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {Scale}
- {
- \str_case:nnF {#1}
- {
- {MatchLowercase} { \__fontspec_calc_scale:n {5} }
- {MatchUppercase} { \__fontspec_calc_scale:n {8} }
- }
- { \tl_set:Nx \l__fontspec_scale_tl {#1} }
- }
-\__fontspec_keys_define_code:nnn {fontspec} {ScaleAgain}
- {
- \tl_if_empty:NT \l__fontspec_scale_tl { \tl_set:Nn \l__fontspec_scale_tl {1} }
- \tl_set:Nx \l__fontspec_scale_tl { \fp_eval:n { #1 * \l__fontspec_scale_tl } }
- \__fontspec_info:n {set-scale}
- }
-\cs_new:Nn \__fontspec_calc_scale:n
- {
- \group_begin:
-
- \fontencoding { \encodingdefault }
- \fontfamily { \familydefault }
- \selectfont
-
- \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font
- \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l__fontspec_fontface_cs_tl
-
- \tl_set:Nx \l__fontspec_scale_tl
- {
- \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} /
- \dim_to_fp:n {\l__fontspec_tmpb_dim} }
- }
-
- \__fontspec_info:n {set-scale}
- \exp_args:NNNx
- \group_end:
- \tl_set:Nx \l__fontspec_scale_tl { \l__fontspec_scale_tl }
- }
-\cs_new:Nn \__fontspec_set_font_dimen:NnN
- {
- \dim_set:Nn #1 { \fontdimen #2 #3 }
- \dim_compare:nNnT #1 = {0pt}
- {
- \settoheight #1
- {
- \str_if_eq:nnTF {#3} {\font} \rmfamily #3
- \int_case:nnF #2
- {
- {5} {x} % x-height
- {8} {X} % cap-height
- } {?} % "else" clause; never reached.
- }
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec} {WordSpace}
- {
- \bool_if:NF \l__fontspec_firsttime_bool
- { \_fontspec_parse_wordspace:w #1,,,\q_stop }
- }
-\__fontspec_aff_error:n {WordSpace}
-\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop
- {
- \tl_if_empty:nTF {#4}
- {
- \tl_set:Nn \l__fontspec_wordspace_adjust_tl
- {
- \fontdimen 2 \font = #1 \fontdimen 2 \font
- \fontdimen 3 \font = #1 \fontdimen 3 \font
- \fontdimen 4 \font = #1 \fontdimen 4 \font
- }
- }
- {
- \tl_set:Nn \l__fontspec_wordspace_adjust_tl
- {
- \fontdimen 2 \font = #1 \fontdimen 2 \font
- \fontdimen 3 \font = #2 \fontdimen 3 \font
- \fontdimen 4 \font = #3 \fontdimen 4 \font
- }
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace}
- {
- \str_case_e:nnF {#1}
- {
- {WordSpace}
- {
- \tl_set:Nn \l__fontspec_punctspace_adjust_tl
- { \fontdimen 7 \font = 0 \fontdimen 2 \font }
- }
- {TwiceWordSpace}
- {
- \tl_set:Nn \l__fontspec_punctspace_adjust_tl
- { \fontdimen 7 \font = 1 \fontdimen 2 \font }
- }
- }
- {
- \tl_set:Nn \l__fontspec_punctspace_adjust_tl
- { \fontdimen 7 \font = #1 \fontdimen 7 \font }
- }
- }
-\__fontspec_aff_error:n {PunctuationSpace}
-\__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment}
- {
- \tl_put_right:Nx \l__fontspec_postadjust_tl {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {LetterSpace}
- {
- \__fontspec_update_featstr:n {letterspace=#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {HyphenChar}
- {
- \str_if_eq:nnTF {#1} {None}
- {
- \tl_put_right:Nn \l__fontspec_postadjust_tl
- { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} }
- }
- {
- \__fontspec_warning:nx {only-xetex-feature} {HyphenChar}
-
- \tl_if_single:nTF {#1}
- { \tl_set:Nn \l__fontspec_hyphenchar_tl {`#1} }
- { \tl_set:Nn \l__fontspec_hyphenchar_tl { #1} }
-
- \exp_args:No \__fontspec_primitive_font_glyph_if_exist:NnTF \l__fontspec_fontface_cs_tl {\l__fontspec_hyphenchar_tl}
- {
- \tl_put_right:Nn \l__fontspec_postadjust_tl
- { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l__fontspec_hyphenchar_tl } }
- }
- { \__fontspec_error:nxx {no-glyph}{\l_fontspec_fontname_tl}{#1} }
-
- }
- }
-\__fontspec_aff_error:n {HyphenChar}
-\__fontspec_keys_define_code:nnn {fontspec} {Color}
- {
- \tl_set:Nn \l__fontspec_hexcol_tl {#1}
- }
-\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8
- {
- \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6}
- \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl
- {
- \bool_if:NF \l__fontspec_firsttime_bool
- { \__fontspec_warning:nx {opa-twice-col} {#7#8} }
- }
- \tl_set:Nn \l__fontspec_opacity_tl {#7#8}
- }
-\aliasfontfeature{Color}{Colour}
-\__fontspec_keys_define_code:nnn {fontspec} {Opacity}
- {
- \int_set:Nn \l__fontspec_tmp_int {255}
- \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 }
- \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl
- {
- \bool_if:NF \l__fontspec_firsttime_bool
- { \__fontspec_warning:nx {opa-twice} {#1} }
- }
- \tl_set:Nx \l__fontspec_opacity_tl
- {
- ,
- \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad
- \int_to_hex:n { \l__fontspec_tmp_int }
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping}
- {
- \str_if_eq:nnTF {#1} {tex-text}
- {
- \__fontspec_warning:n {no-mapping-ligtex}
- \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none}
- \keys_set:nn {fontspec-opentype} { Ligatures=TeX }
- }
- { \__fontspec_warning:n {no-mapping} }
- }
-\__fontspec_keys_define_code:nnn {fontspec} {Weight}
- {
- \__fontspec_update_featstr:n{weight=#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {Width}
- {
- \__fontspec_update_featstr:n{width=#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec} {OpticalSize}
- {
- \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1}
- }
-\keys_define:nn {fontspec}
- {
- FakeSlant .code:n =
- {
- \__fontspec_update_featstr:n {slant=#1}
- },
- FakeSlant .default:n = {0.2}
- }
-\keys_define:nn {fontspec}
- {
- FakeStretch .code:n =
- {
- \__fontspec_update_featstr:n {extend=#1}
- },
- FakeStretch .default:n = {1.2}
- }
-\keys_define:nn {fontspec}
- {
- FakeBold .code:n =
- {
- \__fontspec_update_featstr:n {embolden=#1}
- },
- FakeBold .default:n = {1.5}
- }
-\keys_define:nn {fontspec}
- {
- AutoFakeSlant .code:n =
- {
- \bool_if:NT \l__fontspec_firsttime_bool
- {
- \tl_set:Nn \l__fontspec_fake_slant_tl {#1}
- \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1}
- \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl
- \bool_set_false:N \l__fontspec_noit_bool
-
- \tl_if_empty:NF \l__fontspec_fake_embolden_tl
- {
- \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist
- {FakeBold=\l__fontspec_fake_embolden_tl}
- \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1}
- \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
- }
- }
- },
- AutoFakeSlant .default:n = {0.2}
- }
-\keys_define:nn {fontspec}
- {
- AutoFakeBold .code:n =
- {
- \bool_if:NT \l__fontspec_firsttime_bool
- {
- \tl_set:Nn \l__fontspec_fake_embolden_tl {#1}
- \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1}
- \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl
- \bool_set_false:N \l__fontspec_nobf_bool
-
- \tl_if_empty:NF \l__fontspec_fake_slant_tl
- {
- \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist
- {FakeSlant=\l__fontspec_fake_slant_tl}
- \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1}
- \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl
- }
- }
- },
- AutoFakeBold .default:n = {1.5}
- }
-\__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature}
- {
- \__fontspec_update_featstr:n {#1}
- }
-\__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature}
- {
- \__fontspec_update_featstr:n {#1}
- }
-
-%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ }
-\__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ }
-\__fontspec_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ }
-\__fontspec_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ }
-\__fontspec_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ }
-\__fontspec_define_opentype_feature_group:n {Ligatures}
-\__fontspec_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {}
- {
- +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig,
- +tlig,-tlig
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {TeX} {} {tlig} {}
-\__fontspec_define_opentype_feature_group:n {Letters}
-\__fontspec_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {}
- {
- +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand,
- -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {}
-\__fontspec_define_opentype_feature_group:n {Numbers}
-\__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {}
- {
- +tnum,-tnum,
- +pnum,-pnum,
- +onum,-onum,
- +lnum,-lnum,
- +zero,-zero,
- +anum,-anum,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum}
-\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum}
-\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum}
-\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum}
-\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {}
-\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
-\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
-\aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
- \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {}
-\__fontspec_define_opentype_feature_group:n {VerticalPosition}
-\__fontspec_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {}
- {
- +sups,-sups,
- +subs,-subs,
- +ordn,-ordn,
- +numr,-numr,
- +dnom,-dnom,
- +sinf,-sinf,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf}
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf}
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf}
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf}
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf}
-\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom}
-\__fontspec_define_opentype_feature_group:n {Contextuals}
-\__fontspec_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {}
- {
- +cswh,-cswh,
- +calt,-calt,
- +init,-init,
- +fina,-fina,
- +falt,-falt,
- +medi,-medi,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {}
-\__fontspec_define_opentype_feature_group:n {Diacritics}
-\__fontspec_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {}
- {
- +mark,-mark,
- +mkmk,-mkmk,
- +abvm,-abvm,
- +blwm,-blwm,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {}
-\__fontspec_define_opentype_feature_group:n {Kerning}
-\__fontspec_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {}
- {
- +cpsp,-cpsp,
- +kern,-kern,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {}
-\__fontspec_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern}
-\__fontspec_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern}
-\__fontspec_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern}
-\__fontspec_define_opentype_feature_group:n {Fractions}
-\__fontspec_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {}
- {
- +frac,-frac,
- +afrc,-afrc,
- }
-\__fontspec_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {}
-\__fontspec_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {}
-\__fontspec_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac}
-\__fontspec_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac}
-\__fontspec_define_opentype_feature_group:n {LocalForms}
-\__fontspec_define_opentype_feature:nnnnn {LocalForms} {On} {locl} {+locl} {}
-\__fontspec_define_opentype_feature:nnnnn {LocalForms} {Off} {locl} {-locl} {}
-\__fontspec_define_opentype_feature:nnnnn {LocalForms} {Reset} {} {} {+locl,-locl}
-
-\__fontspec_define_opentype_feature_group:n {Style}
-\__fontspec_define_opentype_feature:nnnnn {Style} {ResetAll} {} {}
- {
- +salt,-salt,
- +ital,-ital,
- +ruby,-ruby,
- +swsh,-swsh,
- +hist,-hist,
- +titl,-titl,
- +hkna,-hkna,
- +vkna,-vkna,
- +ssty=0,-ssty=0,
- +ssty=1,-ssty=1,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Titling} {titl} {titl} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} % backwards compat
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna}
-\__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1}
-\__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0}
-\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Uppercase} {case} {case} {}
-\__fontspec_define_opentype_feature_group:n {CJKShape}
-\__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {}
- {
- +trad,-trad,
- +smpl,-smpl,
- +jp78,-jp78,
- +jp83,-jp83,
- +jp90,-jp90,
- +jp04,-jp04,
- +expt,-expt,
- +nlck,-nlck,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck}
-\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt}
-\__fontspec_define_opentype_feature_group:n {CharacterWidth}
-\__fontspec_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {}
- {
- +pwid,-pwid,
- +fwid,-fwid,
- +hwid,-hwid,
- +twid,-twid,
- +qwid,-qwid,
- +palt,-palt,
- +halt,-halt,
- }
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt}
-\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt}
-\__fontspec_define_opentype_feature_group:n {Vertical}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern}
-\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal}
-\__fontspec_define_opentype_feature_group:n {Alternate}
-\keys_define:nn {fontspec-opentype}
- {
- Alternate .default:n = {0} ,
- Alternate .groups:n = {opentype},
- Alternate / unknown .code:n =
- {
- \clist_map_inline:nn {#1}
- { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} }
- }
- }
-\keys_define:nn {fontspec-opentype}
- {
- Alternate / Random .code:n =
- { \__fontspec_make_OT_feature:nnn {salt}{ +salt = random }{} } ,
- }
-\aliasfontfeature{Alternate}{StylisticAlternates}
-\__fontspec_define_opentype_feature_group:n {Variant}
-\keys_define:nn {fontspec-opentype}
- {
- Variant .default:n = {0} ,
- Variant .groups:n = {opentype} ,
- Variant / unknown .code:n =
- {
- \clist_map_inline:nn {#1}
- {
- \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {}
- }
- }
- }
-\aliasfontfeature{Variant}{StylisticSet}
-\__fontspec_define_opentype_feature_group:n {CharacterVariant}
-\use:x
- {
- \cs_new:Npn \exp_not:N \fontspec_parse_cv:w
- ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil
- {
- \__fontspec_make_OT_feature:xxx
- { cv \exp_not:N \two@digits {##1} }
- { +cv \exp_not:N \two@digits {##1} = ##2 } {}
- }
- \keys_define:nn {fontspec-opentype}
- {
- CharacterVariant / unknown .code:n =
- {
- \clist_map_inline:nn {##1}
- {
- \exp_not:N \fontspec_parse_cv:w
- ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil
- }
- }
- }
- }
-\__fontspec_define_opentype_feature_group:n {Annotation}
-\keys_define:nn {fontspec-opentype}
- {
- Annotation .default:n = {0} ,
- Annotation .groups:n = {opentype},
- Annotation / unknown .code:n =
- {
- \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {}
- }
- }
-\__fontspec_define_opentype_feature_group:n {Ornament}
-\keys_define:nn {fontspec-opentype}
- {
- Ornament .default:n = {0} ,
- Ornament .groups:n = {opentype},
- Ornament / unknown .code:n =
- {
- \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {}
- }
- }
-\keys_define:nn {fontspec-opentype}
- {
- Script .choice: ,
- Script .groups:n = {opentype} ,
- }
-\cs_new:Nn \fontspec_new_script:nn
- {
- \keys_define:nn {fontspec-opentype} { Script / #1 .code:n =
- {
- \bool_set_false:N \l__fontspec_scriptlang_exist_bool
- \clist_map_inline:nn {#2}
- {
- \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {####1}
- {
- \tl_set:Nn \l__fontspec_script_name_tl {#1}
- \tl_set:Nn \l__fontspec_script_tl {####1}
- \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int}
- \bool_set_true:N \l__fontspec_scriptlang_exist_bool
- \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 }
- \clist_map_break:
- }
- }
-
- \bool_if:NF \l__fontspec_scriptlang_exist_bool
- {
- \bool_if:nF { \str_if_eq_p:ee {#1} {CustomDefault} }
- {
- \tl_clear:N \l__fontspec_script_name_tl
- \__fontspec_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1}
- }
-
- \bool_if:nF
- {
- \str_if_eq_p:ee {#1} {Default} ||
- \str_if_eq_p:ee {#1} {Latin} ||
- \str_if_eq_p:ee {#1} {CustomDefault}
- }
- {
- \keys_set:nn {fontspec-opentype} { Script = CustomDefault }
- }
- }
- }
- }
- }
-\keys_define:nn {fontspec-opentype}
- {
- Language .choice: ,
- Language .groups:n = {opentype} ,
- }
-\cs_new:Nn \fontspec_new_lang:nn
- {
- \keys_define:nn {fontspec-opentype} { Language / #1 .code:n =
- {
- \bool_set_false:N \l__fontspec_scriptlang_exist_bool
- \clist_map_inline:nn {#2}
- {
- \exp_args:No \__fontspec_check_lang:NnTF \l__fontspec_fontface_cs_tl {####1}
- {
- \tl_set:Nn \l__fontspec_lang_tl {####1}
- \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int}
- \tl_gset:Nx \g__fontspec_single_feat_tl { language=####1 }
- \bool_set_true:N \l__fontspec_scriptlang_exist_bool
- \clist_map_break:
- }
- }
- \bool_if:NF \l__fontspec_scriptlang_exist_bool
- {
- \__fontspec_warning:nx {language-not-exist} {#1}
- \keys_set:nn {fontspec-opentype} { Language = Default }
- }
- }
- }
- }
-\__fontspec_keys_define_code:nnn {fontspec-opentype} { Language / Default }
- {
- \tl_set:Nn \l__fontspec_lang_tl {dflt}
- \int_zero:N \l__fontspec_language_int
- \tl_gset:Nn \g__fontspec_single_feat_tl { language=dflt }
- }
-\cs_new:Nn \__fontspec_ot_compat:nn
- {
- \aliasfontfeatureoption {#1} {#2Off} {No#2}
- }
-\__fontspec_ot_compat:nn {Ligatures} {Rare}
-\__fontspec_ot_compat:nn {Ligatures} {Required}
-\__fontspec_ot_compat:nn {Ligatures} {Common}
-\__fontspec_ot_compat:nn {Ligatures} {Discretionary}
-\__fontspec_ot_compat:nn {Ligatures} {Contextual}
-\__fontspec_ot_compat:nn {Ligatures} {Historic}
-\__fontspec_ot_compat:nn {Numbers} {SlashedZero}
-\__fontspec_ot_compat:nn {Contextuals} {Swash}
-\__fontspec_ot_compat:nn {Contextuals} {Alternate}
-\__fontspec_ot_compat:nn {Contextuals} {WordInitial}
-\__fontspec_ot_compat:nn {Contextuals} {WordFinal}
-\__fontspec_ot_compat:nn {Contextuals} {LineFinal}
-\__fontspec_ot_compat:nn {Contextuals} {Inner}
-\__fontspec_ot_compat:nn {Diacritics} {MarkToBase}
-\__fontspec_ot_compat:nn {Diacritics} {MarkToMark}
-\__fontspec_ot_compat:nn {Diacritics} {AboveBase}
-\__fontspec_ot_compat:nn {Diacritics} {BelowBase}
-
-%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\newfontscript{Adlam}{adlm}
-\newfontscript{Ahom}{ahom}
-\newfontscript{Anatolian~Hieroglyphs}{hluw}
-\newfontscript{Arabic}{arab}
-\newfontscript{Armenian}{armn}
-\newfontscript{Avestan}{avst}
-\newfontscript{Balinese}{bali}
-\newfontscript{Bamum}{bamu}
-\newfontscript{Bassa~Vah}{bass}
-\newfontscript{Batak}{batk}
-\newfontscript{Bengali}{bng2,beng}
-\newfontscript{Bhaiksuki}{bhks}
-\newfontscript{Bopomofo}{bopo}
-\newfontscript{Brahmi}{brah}
-\newfontscript{Braille}{brai}
-\newfontscript{Buginese}{bugi}
-\newfontscript{Buhid}{buhd}
-\newfontscript{Byzantine~Music}{byzm}
-\newfontscript{Canadian~Syllabics}{cans}
-\newfontscript{Carian}{cari}
-\newfontscript{Caucasian~Albanian}{aghb}
-\newfontscript{Chakma}{cakm}
-\newfontscript{Cham}{cham}
-\newfontscript{Cherokee}{cher}
-\newfontscript{Chorasmian}{chrs}
-\newfontscript{CJK~Ideographic}{hani}
-\newfontscript{Coptic}{copt}
-\newfontscript{Cypriot~Syllabary}{cprt}
-\newfontscript{Cypro~Minoan}{cpmn}
-\newfontscript{Cyrillic}{cyrl}
-\newfontscript{Default}{DFLT}
-\newfontscript{CustomDefault}{latn,DFLT}
-\newfontscript{Deseret}{dsrt}
-\newfontscript{Devanagari}{dev2,deva}
-\newfontscript{Dives~Akuru}{diak}
-\newfontscript{Dogra}{dogr}
-\newfontscript{Duployan}{dupl}
-\newfontscript{Egyptian~Hieroglyphs}{egyp}
-\newfontscript{Elbasan}{elba}
-\newfontscript{Elymaic}{elym}
-\newfontscript{Ethiopic}{ethi}
-\newfontscript{Georgian}{geor}
-\newfontscript{Glagolitic}{glag}
-\newfontscript{Gothic}{goth}
-\newfontscript{Grantha}{gran}
-\newfontscript{Greek}{grek}
-\newfontscript{Gujarati}{gjr2,gujr}
-\newfontscript{Gunjala~Gondi}{gong}
-\newfontscript{Gurmukhi}{gur2,guru}
-\newfontscript{Hangul~Jamo}{jamo}
-\newfontscript{Hangul}{hang}
-\newfontscript{Hanifi~Rohingya}{rohg}
-\newfontscript{Hanunoo}{hano}
-\newfontscript{Hatran}{hatr}
-\newfontscript{Hebrew}{hebr}
-\newfontscript{Hiragana~and~Katakana}{kana}
-\newfontscript{Imperial~Aramaic}{armi}
-\newfontscript{Inscriptional~Pahlavi}{phli}
-\newfontscript{Inscriptional~Parthian}{prti}
-\newfontscript{Javanese}{java}
-\newfontscript{Kaithi}{kthi}
-\newfontscript{Kannada}{knd2,knda}
-\newfontscript{Kayah~Li}{kali}
-\newfontscript{Kharosthi}{khar}
-\newfontscript{Khitan~Small~Script}{kits}
-\newfontscript{Khmer}{khmr}
-\newfontscript{Khojki}{khoj}
-\newfontscript{Khudawadi}{sind}
-\newfontscript{Lao}{lao~}
-\newfontscript{Latin}{latn}
-\newfontscript{Lepcha}{lepc}
-\newfontscript{Limbu}{limb}
-\newfontscript{Linear~A}{lina}
-\newfontscript{Linear~B}{linb}
-\newfontscript{Lisu}{lisu}
-\newfontscript{Lycian}{lyci}
-\newfontscript{Lydian}{lydi}
-\newfontscript{Mahajani}{mahj}
-\newfontscript{Makasar}{maka}
-\newfontscript{Malayalam}{mlm2,mlym}
-\newfontscript{Mandaic}{mand}
-\newfontscript{Manichaean}{mani}
-\newfontscript{Marchen}{marc}
-\newfontscript{Masaram Gondi}{gonm}
-\newfontscript{Math}{math}
-\newfontscript{Medefaidrin}{medf}
-\newfontscript{Meitei~Mayek}{mtei}
-\newfontscript{Mende~Kikakui}{mend}
-\newfontscript{Meroitic~Cursive}{merc}
-\newfontscript{Meroitic~Hieroglyphs}{mero}
-\newfontscript{Miao}{plrd}
-\newfontscript{Modi}{modi}
-\newfontscript{Mongolian}{mong}
-\newfontscript{Mro}{mroo}
-\newfontscript{Multani}{mult}
-\newfontscript{Musical~Symbols}{musc}
-\newfontscript{Myanmar}{mym2,mymr}
-\newfontscript{N'Ko}{nko~}
-\newfontscript{Nabataean}{nbat}
-\newfontscript{Nandinagari}{nand}
-\newfontscript{Newa}{newa}
-\newfontscript{Nushu}{nshu}
-\newfontscript{Nyiakeng~Puachue~Hmong}{hmnp}
-\newfontscript{Odia}{ory2,orya}
-\newfontscript{Ogham}{ogam}
-\newfontscript{Ol~Chiki}{olck}
-\newfontscript{Old~Italic}{ital}
-\newfontscript{Old~Hungarian}{hung}
-\newfontscript{Old~North~Arabian}{narb}
-\newfontscript{Old~Permic}{perm}
-\newfontscript{Old~Persian~Cuneiform}{xpeo}
-\newfontscript{Old~Sogdian}{sogo}
-\newfontscript{Old~South~Arabian}{sarb}
-\newfontscript{Old~Turkic}{orkh}
-\newfontscript{Old~Uyghur}{ougr}
-\newfontscript{Osage}{osge}
-\newfontscript{Osmanya}{osma}
-\newfontscript{Pahawh~Hmong}{hmng}
-\newfontscript{Palmyrene}{palm}
-\newfontscript{Pau~Cin~Hau}{pauc}
-\newfontscript{Phags-pa}{phag}
-\newfontscript{Phoenician}{phnx}
-\newfontscript{Psalter~Pahlavi}{phlp}
-\newfontscript{Rejang}{rjng}
-\newfontscript{Runic}{runr}
-\newfontscript{Samaritan}{samr}
-\newfontscript{Saurashtra}{saur}
-\newfontscript{Sharada}{shrd}
-\newfontscript{Shavian}{shaw}
-\newfontscript{Siddham}{sidd}
-\newfontscript{Sign~Writing}{sgnw}
-\newfontscript{Sinhala}{sinh}
-\newfontscript{Sogdian}{sogd}
-\newfontscript{Sora~Sompeng}{sora}
-\newfontscript{Sumero-Akkadian~Cuneiform}{xsux}
-\newfontscript{Sundanese}{sund}
-\newfontscript{Syloti~Nagri}{sylo}
-\newfontscript{Syriac}{syrc}
-\newfontscript{Tagalog}{tglg}
-\newfontscript{Tagbanwa}{tagb}
-\newfontscript{Tai~Le}{tale}
-\newfontscript{Tai~Lu}{talu}
-\newfontscript{Tai~Tham}{lana}
-\newfontscript{Tai~Viet}{tavt}
-\newfontscript{Takri}{takr}
-\newfontscript{Tamil}{tml2,taml}
-\newfontscript{Tangsa}{tnsa}
-\newfontscript{Tangut}{tang}
-\newfontscript{Telugu}{tel2,telu}
-\newfontscript{Thaana}{thaa}
-\newfontscript{Thai}{thai}
-\newfontscript{Tibetan}{tibt}
-\newfontscript{Tifinagh}{tfng}
-\newfontscript{Tirhuta}{tirh}
-\newfontscript{Toto}{toto}
-\newfontscript{Ugaritic~Cuneiform}{ugar}
-\newfontscript{Vai}{vai~}
-\newfontscript{Vithkuqi}{vith}
-\newfontscript{Wancho}{wcho}
-\newfontscript{Warang~Citi}{wara}
-\newfontscript{Yezidi}{yezi}
-\newfontscript{Yi}{yi~~}
-\newfontscript{Zanabazar~Square}{zanb}
-\newfontscript{CJK}{hani}
-\newfontscript{Kana}{kana}
-\newfontscript{Maths}{math}
-\newfontscript{N'ko}{nko~}
-\newfontscript{Oriya}{ory2,orya}
-
-%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\newfontlanguage{Abaza}{ABA}
-\newfontlanguage{Abkhazian}{ABK}
-\newfontlanguage{Adyghe}{ADY}
-\newfontlanguage{Afrikaans}{AFK}
-\newfontlanguage{Afar}{AFR}
-\newfontlanguage{Agaw}{AGW}
-\newfontlanguage{Altai}{ALT}
-\newfontlanguage{Amharic}{AMH}
-\newfontlanguage{Arabic}{ARA}
-\newfontlanguage{Aari}{ARI}
-\newfontlanguage{Arakanese}{ARK}
-\newfontlanguage{Assamese}{ASM}
-\newfontlanguage{Athapaskan}{ATH}
-\newfontlanguage{Avar}{AVR}
-\newfontlanguage{Awadhi}{AWA}
-\newfontlanguage{Aymara}{AYM}
-\newfontlanguage{Azeri}{AZE}
-\newfontlanguage{Badaga}{BAD}
-\newfontlanguage{Baghelkhandi}{BAG}
-\newfontlanguage{Balkar}{BAL}
-\newfontlanguage{Baule}{BAU}
-\newfontlanguage{Berber}{BBR}
-\newfontlanguage{Bench}{BCH}
-\newfontlanguage{Bible~Cree}{BCR}
-\newfontlanguage{Belarussian}{BEL}
-\newfontlanguage{Bemba}{BEM}
-\newfontlanguage{Bengali}{BEN}
-\newfontlanguage{Bulgarian}{BGR}
-\newfontlanguage{Bhili}{BHI}
-\newfontlanguage{Bhojpuri}{BHO}
-\newfontlanguage{Bikol}{BIK}
-\newfontlanguage{Bilen}{BIL}
-\newfontlanguage{Blackfoot}{BKF}
-\newfontlanguage{Balochi}{BLI}
-\newfontlanguage{Balante}{BLN}
-\newfontlanguage{Balti}{BLT}
-\newfontlanguage{Bambara}{BMB}
-\newfontlanguage{Bamileke}{BML}
-\newfontlanguage{Breton}{BRE}
-\newfontlanguage{Brahui}{BRH}
-\newfontlanguage{Braj~Bhasha}{BRI}
-\newfontlanguage{Burmese}{BRM}
-\newfontlanguage{Bashkir}{BSH}
-\newfontlanguage{Beti}{BTI}
-\newfontlanguage{Catalan}{CAT}
-\newfontlanguage{Cebuano}{CEB}
-\newfontlanguage{Chechen}{CHE}
-\newfontlanguage{Chaha~Gurage}{CHG}
-\newfontlanguage{Chattisgarhi}{CHH}
-\newfontlanguage{Chichewa}{CHI}
-\newfontlanguage{Chukchi}{CHK}
-\newfontlanguage{Chipewyan}{CHP}
-\newfontlanguage{Cherokee}{CHR}
-\newfontlanguage{Chuvash}{CHU}
-\newfontlanguage{Comorian}{CMR}
-\newfontlanguage{Coptic}{COP}
-\newfontlanguage{Cree}{CRE}
-\newfontlanguage{Carrier}{CRR}
-\newfontlanguage{Crimean~Tatar}{CRT}
-\newfontlanguage{Church~Slavonic}{CSL}
-\newfontlanguage{Czech}{CSY}
-\newfontlanguage{Danish}{DAN}
-\newfontlanguage{Dargwa}{DAR}
-\newfontlanguage{Woods~Cree}{DCR}
-\newfontlanguage{German}{DEU}
-\newfontlanguage{Dogri}{DGR}
-\newfontlanguage{Divehi}{DIV}
-\newfontlanguage{Djerma}{DJR}
-\newfontlanguage{Dangme}{DNG}
-\newfontlanguage{Dinka}{DNK}
-\newfontlanguage{Dungan}{DUN}
-\newfontlanguage{Dzongkha}{DZN}
-\newfontlanguage{Ebira}{EBI}
-\newfontlanguage{Eastern~Cree}{ECR}
-\newfontlanguage{Edo}{EDO}
-\newfontlanguage{Efik}{EFI}
-\newfontlanguage{Greek}{ELL}
-\newfontlanguage{English}{ENG}
-\newfontlanguage{Erzya}{ERZ}
-\newfontlanguage{Spanish}{ESP}
-\newfontlanguage{Estonian}{ETI}
-\newfontlanguage{Basque}{EUQ}
-\newfontlanguage{Evenki}{EVK}
-\newfontlanguage{Even}{EVN}
-\newfontlanguage{Ewe}{EWE}
-\newfontlanguage{French~Antillean}{FAN}
-\newfontlanguage{Farsi}{FAR}
-\newfontlanguage{Parsi}{FAR}
-\newfontlanguage{Persian}{FAR}
-\newfontlanguage{Finnish}{FIN}
-\newfontlanguage{Fijian}{FJI}
-\newfontlanguage{Flemish}{FLE}
-\newfontlanguage{Forest~Nenets}{FNE}
-\newfontlanguage{Fon}{FON}
-\newfontlanguage{Faroese}{FOS}
-\newfontlanguage{French}{FRA}
-\newfontlanguage{Frisian}{FRI}
-\newfontlanguage{Friulian}{FRL}
-\newfontlanguage{Futa}{FTA}
-\newfontlanguage{Fulani}{FUL}
-\newfontlanguage{Ga}{GAD}
-\newfontlanguage{Gaelic}{GAE}
-\newfontlanguage{Gagauz}{GAG}
-\newfontlanguage{Galician}{GAL}
-\newfontlanguage{Garshuni}{GAR}
-\newfontlanguage{Garhwali}{GAW}
-\newfontlanguage{Ge'ez}{GEZ}
-\newfontlanguage{Gilyak}{GIL}
-\newfontlanguage{Gumuz}{GMZ}
-\newfontlanguage{Gondi}{GON}
-\newfontlanguage{Greenlandic}{GRN}
-\newfontlanguage{Garo}{GRO}
-\newfontlanguage{Guarani}{GUA}
-\newfontlanguage{Gujarati}{GUJ}
-\newfontlanguage{Haitian}{HAI}
-\newfontlanguage{Halam}{HAL}
-\newfontlanguage{Harauti}{HAR}
-\newfontlanguage{Hausa}{HAU}
-\newfontlanguage{Hawaiin}{HAW}
-\newfontlanguage{Hammer-Banna}{HBN}
-\newfontlanguage{Hiligaynon}{HIL}
-\newfontlanguage{Hindi}{HIN}
-\newfontlanguage{High~Mari}{HMA}
-\newfontlanguage{Hindko}{HND}
-\newfontlanguage{Ho}{HO}
-\newfontlanguage{Harari}{HRI}
-\newfontlanguage{Croatian}{HRV}
-\newfontlanguage{Hungarian}{HUN}
-\newfontlanguage{Armenian}{HYE}
-\newfontlanguage{Igbo}{IBO}
-\newfontlanguage{Ijo}{IJO}
-\newfontlanguage{Ilokano}{ILO}
-\newfontlanguage{Indonesian}{IND}
-\newfontlanguage{Ingush}{ING}
-\newfontlanguage{Inuktitut}{INU}
-\newfontlanguage{Irish}{IRI}
-\newfontlanguage{Irish~Traditional}{IRT}
-\newfontlanguage{Icelandic}{ISL}
-\newfontlanguage{Inari~Sami}{ISM}
-\newfontlanguage{Italian}{ITA}
-\newfontlanguage{Hebrew}{IWR}
-\newfontlanguage{Javanese}{JAV}
-\newfontlanguage{Yiddish}{JII}
-\newfontlanguage{Japanese}{JAN}
-\newfontlanguage{Judezmo}{JUD}
-\newfontlanguage{Jula}{JUL}
-\newfontlanguage{Kabardian}{KAB}
-\newfontlanguage{Kachchi}{KAC}
-\newfontlanguage{Kalenjin}{KAL}
-\newfontlanguage{Kannada}{KAN}
-\newfontlanguage{Karachay}{KAR}
-\newfontlanguage{Georgian}{KAT}
-\newfontlanguage{Kazakh}{KAZ}
-\newfontlanguage{Kebena}{KEB}
-\newfontlanguage{Khutsuri~Georgian}{KGE}
-\newfontlanguage{Khakass}{KHA}
-\newfontlanguage{Khanty-Kazim}{KHK}
-\newfontlanguage{Khmer}{KHM}
-\newfontlanguage{Khanty-Shurishkar}{KHS}
-\newfontlanguage{Khanty-Vakhi}{KHV}
-\newfontlanguage{Khowar}{KHW}
-\newfontlanguage{Kikuyu}{KIK}
-\newfontlanguage{Kirghiz}{KIR}
-\newfontlanguage{Kisii}{KIS}
-\newfontlanguage{Kokni}{KKN}
-\newfontlanguage{Kalmyk}{KLM}
-\newfontlanguage{Kamba}{KMB}
-\newfontlanguage{Kumaoni}{KMN}
-\newfontlanguage{Komo}{KMO}
-\newfontlanguage{Komso}{KMS}
-\newfontlanguage{Kanuri}{KNR}
-\newfontlanguage{Kodagu}{KOD}
-\newfontlanguage{Korean~Old~Hangul}{KOH}
-\newfontlanguage{Konkani}{KOK}
-\newfontlanguage{Kikongo}{KON}
-\newfontlanguage{Komi-Permyak}{KOP}
-\newfontlanguage{Korean}{KOR}
-\newfontlanguage{Komi-Zyrian}{KOZ}
-\newfontlanguage{Kpelle}{KPL}
-\newfontlanguage{Krio}{KRI}
-\newfontlanguage{Karakalpak}{KRK}
-\newfontlanguage{Karelian}{KRL}
-\newfontlanguage{Karaim}{KRM}
-\newfontlanguage{Karen}{KRN}
-\newfontlanguage{Koorete}{KRT}
-\newfontlanguage{Kashmiri}{KSH}
-\newfontlanguage{Khasi}{KSI}
-\newfontlanguage{Kildin~Sami}{KSM}
-\newfontlanguage{Kui}{KUI}
-\newfontlanguage{Kulvi}{KUL}
-\newfontlanguage{Kumyk}{KUM}
-\newfontlanguage{Kurdish}{KUR}
-\newfontlanguage{Kurukh}{KUU}
-\newfontlanguage{Kuy}{KUY}
-\newfontlanguage{Koryak}{KYK}
-\newfontlanguage{Ladin}{LAD}
-\newfontlanguage{Lahuli}{LAH}
-\newfontlanguage{Lak}{LAK}
-\newfontlanguage{Lambani}{LAM}
-\newfontlanguage{Lao}{LAO}
-\newfontlanguage{Latin}{LAT}
-\newfontlanguage{Laz}{LAZ}
-\newfontlanguage{L-Cree}{LCR}
-\newfontlanguage{Ladakhi}{LDK}
-\newfontlanguage{Lezgi}{LEZ}
-\newfontlanguage{Lingala}{LIN}
-\newfontlanguage{Low~Mari}{LMA}
-\newfontlanguage{Limbu}{LMB}
-\newfontlanguage{Lomwe}{LMW}
-\newfontlanguage{Lower~Sorbian}{LSB}
-\newfontlanguage{Lule~Sami}{LSM}
-\newfontlanguage{Lithuanian}{LTH}
-\newfontlanguage{Luba}{LUB}
-\newfontlanguage{Luganda}{LUG}
-\newfontlanguage{Luhya}{LUH}
-\newfontlanguage{Luo}{LUO}
-\newfontlanguage{Latvian}{LVI}
-\newfontlanguage{Majang}{MAJ}
-\newfontlanguage{Makua}{MAK}
-\newfontlanguage{Malayalam~Traditional}{MAL}
-\newfontlanguage{Mansi}{MAN}
-\newfontlanguage{Marathi}{MAR}
-\newfontlanguage{Marwari}{MAW}
-\newfontlanguage{Mbundu}{MBN}
-\newfontlanguage{Manchu}{MCH}
-\newfontlanguage{Moose~Cree}{MCR}
-\newfontlanguage{Mende}{MDE}
-\newfontlanguage{Me'en}{MEN}
-\newfontlanguage{Mizo}{MIZ}
-\newfontlanguage{Macedonian}{MKD}
-\newfontlanguage{Male}{MLE}
-\newfontlanguage{Malagasy}{MLG}
-\newfontlanguage{Malinke}{MLN}
-\newfontlanguage{Malayalam~Reformed}{MLR}
-\newfontlanguage{Malay}{MLY}
-\newfontlanguage{Mandinka}{MND}
-\newfontlanguage{Mongolian}{MNG}
-\newfontlanguage{Manipuri}{MNI}
-\newfontlanguage{Maninka}{MNK}
-\newfontlanguage{Manx~Gaelic}{MNX}
-\newfontlanguage{Moksha}{MOK}
-\newfontlanguage{Moldavian}{MOL}
-\newfontlanguage{Mon}{MON}
-\newfontlanguage{Moroccan}{MOR}
-\newfontlanguage{Maori}{MRI}
-\newfontlanguage{Maithili}{MTH}
-\newfontlanguage{Maltese}{MTS}
-\newfontlanguage{Mundari}{MUN}
-\newfontlanguage{Naga-Assamese}{NAG}
-\newfontlanguage{Nanai}{NAN}
-\newfontlanguage{Naskapi}{NAS}
-\newfontlanguage{N-Cree}{NCR}
-\newfontlanguage{Ndebele}{NDB}
-\newfontlanguage{Ndonga}{NDG}
-\newfontlanguage{Nepali}{NEP}
-\newfontlanguage{Newari}{NEW}
-\newfontlanguage{Nagari}{NGR}
-\newfontlanguage{Norway~House~Cree}{NHC}
-\newfontlanguage{Nisi}{NIS}
-\newfontlanguage{Niuean}{NIU}
-\newfontlanguage{Nkole}{NKL}
-\newfontlanguage{N'ko}{NKO}
-\newfontlanguage{Dutch}{NLD}
-\newfontlanguage{Nogai}{NOG}
-\newfontlanguage{Norwegian}{NOR}
-\newfontlanguage{Northern~Sami}{NSM}
-\newfontlanguage{Northern~Tai}{NTA}
-\newfontlanguage{Esperanto}{NTO}
-\newfontlanguage{Nynorsk}{NYN}
-\newfontlanguage{Oji-Cree}{OCR}
-\newfontlanguage{Ojibway}{OJB}
-\newfontlanguage{Oriya}{ORI}
-\newfontlanguage{Oromo}{ORO}
-\newfontlanguage{Ossetian}{OSS}
-\newfontlanguage{Palestinian~Aramaic}{PAA}
-\newfontlanguage{Pali}{PAL}
-\newfontlanguage{Punjabi}{PAN}
-\newfontlanguage{Palpa}{PAP}
-\newfontlanguage{Pashto}{PAS}
-\newfontlanguage{Polytonic~Greek}{PGR}
-\newfontlanguage{Pilipino}{PIL}
-\newfontlanguage{Palaung}{PLG}
-\newfontlanguage{Polish}{PLK}
-\newfontlanguage{Provencal}{PRO}
-\newfontlanguage{Portuguese}{PTG}
-\newfontlanguage{Chin}{QIN}
-\newfontlanguage{Rajasthani}{RAJ}
-\newfontlanguage{R-Cree}{RCR}
-\newfontlanguage{Russian~Buriat}{RBU}
-\newfontlanguage{Riang}{RIA}
-\newfontlanguage{Rhaeto-Romanic}{RMS}
-\newfontlanguage{Romanian}{ROM}
-\newfontlanguage{Romany}{ROY}
-\newfontlanguage{Rusyn}{RSY}
-\newfontlanguage{Ruanda}{RUA}
-\newfontlanguage{Russian}{RUS}
-\newfontlanguage{Sadri}{SAD}
-\newfontlanguage{Sanskrit}{SAN}
-\newfontlanguage{Santali}{SAT}
-\newfontlanguage{Sayisi}{SAY}
-\newfontlanguage{Sekota}{SEK}
-\newfontlanguage{Selkup}{SEL}
-\newfontlanguage{Sango}{SGO}
-\newfontlanguage{Shan}{SHN}
-\newfontlanguage{Sibe}{SIB}
-\newfontlanguage{Sidamo}{SID}
-\newfontlanguage{Silte~Gurage}{SIG}
-\newfontlanguage{Skolt~Sami}{SKS}
-\newfontlanguage{Slovak}{SKY}
-\newfontlanguage{Slavey}{SLA}
-\newfontlanguage{Slovenian}{SLV}
-\newfontlanguage{Somali}{SML}
-\newfontlanguage{Samoan}{SMO}
-\newfontlanguage{Sena}{SNA}
-\newfontlanguage{Sindhi}{SND}
-\newfontlanguage{Sinhalese}{SNH}
-\newfontlanguage{Soninke}{SNK}
-\newfontlanguage{Sodo~Gurage}{SOG}
-\newfontlanguage{Sotho}{SOT}
-\newfontlanguage{Albanian}{SQI}
-\newfontlanguage{Serbian}{SRB}
-\newfontlanguage{Saraiki}{SRK}
-\newfontlanguage{Serer}{SRR}
-\newfontlanguage{South~Slavey}{SSL}
-\newfontlanguage{Southern~Sami}{SSM}
-\newfontlanguage{Suri}{SUR}
-\newfontlanguage{Svan}{SVA}
-\newfontlanguage{Swedish}{SVE}
-\newfontlanguage{Swadaya~Aramaic}{SWA}
-\newfontlanguage{Swahili}{SWK}
-\newfontlanguage{Swazi}{SWZ}
-\newfontlanguage{Sutu}{SXT}
-\newfontlanguage{Syriac}{SYR}
-\newfontlanguage{Tabasaran}{TAB}
-\newfontlanguage{Tajiki}{TAJ}
-\newfontlanguage{Tamil}{TAM}
-\newfontlanguage{Tatar}{TAT}
-\newfontlanguage{TH-Cree}{TCR}
-\newfontlanguage{Telugu}{TEL}
-\newfontlanguage{Tongan}{TGN}
-\newfontlanguage{Tigre}{TGR}
-\newfontlanguage{Tigrinya}{TGY}
-\newfontlanguage{Thai}{THA}
-\newfontlanguage{Tahitian}{THT}
-\newfontlanguage{Tibetan}{TIB}
-\newfontlanguage{Turkish}{TRK,TUR}
-\newfontlanguage{Turkmen}{TKM}
-\newfontlanguage{Temne}{TMN}
-\newfontlanguage{Tswana}{TNA}
-\newfontlanguage{Tundra~Nenets}{TNE}
-\newfontlanguage{Tonga}{TNG}
-\newfontlanguage{Todo}{TOD}
-\newfontlanguage{Tsonga}{TSG}
-\newfontlanguage{Turoyo~Aramaic}{TUA}
-\newfontlanguage{Tulu}{TUL}
-\newfontlanguage{Tuvin}{TUV}
-\newfontlanguage{Twi}{TWI}
-\newfontlanguage{Udmurt}{UDM}
-\newfontlanguage{Ukrainian}{UKR}
-\newfontlanguage{Urdu}{URD}
-\newfontlanguage{Upper~Sorbian}{USB}
-\newfontlanguage{Uyghur}{UYG}
-\newfontlanguage{Uzbek}{UZB}
-\newfontlanguage{Venda}{VEN}
-\newfontlanguage{Vietnamese}{VIT}
-\newfontlanguage{Wa}{WA}
-\newfontlanguage{Wagdi}{WAG}
-\newfontlanguage{West-Cree}{WCR}
-\newfontlanguage{Welsh}{WEL}
-\newfontlanguage{Wolof}{WLF}
-\newfontlanguage{Tai~Lue}{XBD}
-\newfontlanguage{Xhosa}{XHS}
-\newfontlanguage{Yakut}{YAK}
-\newfontlanguage{Yoruba}{YBA}
-\newfontlanguage{Y-Cree}{YCR}
-\newfontlanguage{Yi~Classic}{YIC}
-\newfontlanguage{Yi~Modern}{YIM}
-\newfontlanguage{Chinese~Hong~Kong}{ZHH}
-\newfontlanguage{Chinese~Phonetic}{ZHP}
-\newfontlanguage{Chinese~Simplified}{ZHS}
-\newfontlanguage{Chinese~Traditional}{ZHT}
-\newfontlanguage{Zande}{ZND}
-\newfontlanguage{Zulu}{ZUL}
-
-%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-
-%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\DeclareDocumentCommand \EncodingCommand { m O{} O{} m }
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \EncodingCommand }
- \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2][#3]{#4}
- }
-\DeclareDocumentCommand \EncodingAccent {mm}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \EncodingAccent }
- \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}}
- }
-\DeclareDocumentCommand \EncodingSymbol {mm}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \EncodingSymbol }
- \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2}
- }
-\DeclareDocumentCommand \EncodingComposite {mmm}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \EncodingComposite }
- \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3}
- }
-\DeclareDocumentCommand \EncodingCompositeCommand {mmm}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \EncodingCompositeCommand }
- \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3}
- }
-\DeclareDocumentCommand \DeclareUnicodeEncoding {mm}
- {
- \DeclareFontEncoding{#1}{}{}
- \DeclareFontSubstitution{#1}{lmr}{m}{n}
- \DeclareFontFamily{#1}{lmr}{}
-
- \DeclareFontShape{#1}{lmr}{m}{n}
- {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{}
- \DeclareFontShape{#1}{lmr}{m}{it}
- {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{}
- \DeclareFontShape{#1}{lmr}{m}{sc}
- {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{}
- \DeclareFontShape{#1}{lmr}{bx}{n}
- {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{}
- \DeclareFontShape{#1}{lmr}{bx}{it}
- {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{}
-
- \tl_set_eq:NN \l__fontspec_prev_unicode_name_tl \UnicodeEncodingName
- \tl_set:Nn \UnicodeEncodingName {#1}
- \bool_set_true:N \l__fontspec_defining_encoding_bool
- #2
- \bool_set_false:N \l__fontspec_defining_encoding_bool
- \tl_set_eq:NN \UnicodeEncodingName \l__fontspec_prev_unicode_name_tl
- }
-\DeclareDocumentCommand \UndeclareSymbol {m}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \UndeclareSymbol }
- \UndeclareTextCommand {#1} {\UnicodeEncodingName}
- }
-\DeclareDocumentCommand \UndeclareAccent {m}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \UndeclareAccent }
- \UndeclareTextCommand {#1} {\UnicodeEncodingName}
- }
-\DeclareDocumentCommand \UndeclareCommand {m}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \UndeclareCommand }
- \UndeclareTextCommand {#1} {\UnicodeEncodingName}
- }
-\DeclareDocumentCommand \UndeclareComposite {mm}
- {
- \bool_if:NF \l__fontspec_defining_encoding_bool
- { \__fontspec_error:nn {only-inside-encdef} \UndeclareComposite }
- \cs_undefine:c
- { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} }
- }
-
-%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC <wspr.io/fontspec>
-\@ifpackageloaded{euler}
- { \bool_gset_true:N \g__fontspec_pkg_euler_loaded_bool }
- { \bool_gset_false:N \g__fontspec_pkg_euler_loaded_bool }
-\cs_new:Nn \fontspec_setup_maths:
- {
- \@ifpackageloaded{euler}
- {
- \bool_if:NTF \g__fontspec_pkg_euler_loaded_bool
- { \bool_gset_true:N \g__fontspec_math_euler_bool }
- { \__fontspec_error:n {euler-too-late} }
- }
- {}
- \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{}
- \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{}
- \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{}
- \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n}
- \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n}
- \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19}
- \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18}
- \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127}
- \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126}
- \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22}
- \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21}
- \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20}
- \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler
- \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95}
- \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23}
- \group_begin:
- \mathchardef\@tempa="603A \relax
- \ifx\colon\@tempa
- \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58}
- \fi
- \group_end:
- \bool_if:NF \g__fontspec_math_euler_bool
- {
- \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33}
- \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58}
- \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59}
- \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63}
- \bool_if:NF \g__fontspec_math_lucida_bool
- {
- \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0}
- \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1}
- \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2}
- \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3}
- \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4}
- \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5}
- \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6}
- \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7}
- \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8}
- \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9}
- \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0}
- \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1}
- \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2}
- \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3}
- \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4}
- \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5}
- \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6}
- \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7}
- \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8}
- \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9}
- \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10}
- \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43}
- \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61}
- \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0}
- \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1}
- \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2}
- \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3}
- \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14}
- \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36}
- \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts
- }
- }
- \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault
- \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault
- \DeclareSymbolFontAlphabet\mathrm{operators}
- \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault
- \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault
- \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\shapedefault
- \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\shapedefault
- \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault
- \tl_if_empty:NTF \g__fontspec_bfmathrm_tl
- {
- \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\itdefault
- }
- {
- \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\shapedefault
- \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\shapedefault
- \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault
- }
- \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\shapedefault
- \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\shapedefault
- }
-\cs_new:Nn \fontspec_maybe_setup_maths:
- {
- \@ifpackageloaded{anttor}
- {
- \ifx\define@antt@mathversions a\bool_gset_false:N \g__fontspec_math_bool\fi
- }{}
- \@ifpackageloaded{arevmath} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{eulervm} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{mathdesign} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{concmath} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{cmbright} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{mathesf} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{gfsartemisia} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{iwona}
- {
- \ifx\define@iwona@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi
- }{}
- \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{kmath} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{kurier}
- {
- \ifx\define@kurier@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi
- }{}
- \@ifpackageloaded{fouriernc} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{fourier} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{lmodern} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{mathpazo} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{mathptmx} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{MinionPro} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{breqn} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{pxfonts} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{txfonts} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{newpxmath} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{newtxmath} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \@ifpackageloaded{mtpro2} {\bool_gset_false:N \g__fontspec_math_bool}{}
- \bool_if:NT \g__fontspec_math_bool
- {
- \__fontspec_info:n {setup-math}
- \fontspec_setup_maths:
- }
- }
-\AtBeginDocument{\fontspec_maybe_setup_maths:}
-
-%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC <wspr.io/fontspec>
-\bool_if:NT \g__fontspec_cfg_bool
- {
- \InputIfFileExists{fontspec.cfg}
- {}
- { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} }
- }
-
-%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC <wspr.io/fontspec>
-
-\providecommand*\scitdefault{\scdefault\itdefault}
-\providecommand*\scsldefault{\scdefault\sldefault}
-\providecommand*\scswdefault{\scdefault\swdefault}
-\cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl }
-\cs_new:Nn \__fontspec_merge_default_shapes:
- {
- \tl_const:cn { \__fontspec_shape_merge:nn \shapedefault\scdefault } {\scdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\scitdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \sldefault \scdefault } {\scsldefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \swdefault \scdefault } {\scswdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \itdefault } {\scitdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \sldefault } {\scsldefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \swdefault } {\scswdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scsldefault \itdefault } {\scitdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scitdefault \sldefault } {\scsldefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scitdefault \shapedefault } {\scdefault}
- \tl_const:cn { \__fontspec_shape_merge:nn \scsldefault \shapedefault } {\scdefault}
- }
-\__fontspec_merge_default_shapes:
-\prg_new_conditional:Nnn \__fontspec_if_merge_shape:n {TF}
- {
- \bool_lazy_and:nnTF
- { \tl_if_exist_p:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } }
- {
- \cs_if_exist_p:c
- {
- \f@encoding/\f@family/\f@series/
- \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} }
- }
- }
- \prg_return_true: \prg_return_false:
- }
-\cs_set_eq:NN \emfontdeclare \DeclareEmphSequence
-\cs_set_protected:Npn \strongfontdeclare #1
- {
- \prop_gclear:N \g__fontspec_strong_prop
- \int_zero:N \l__fontspec_strongdef_int
-
- \group_begin:
- \normalfont
- \clist_map_inline:nn {\strongreset,#1}
- {
- ##1
- \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f@series } { \l__fontspec_strongdef_int }
- \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 }
- \int_incr:N \l__fontspec_strongdef_int
- }
- \group_end:
- }
-\DeclareRobustCommand \strongenv
- {
- \@nomath\strongenv
-
- \prop_get:NxNT \g__fontspec_strong_prop { \f@series } \l__fontspec_strong_tmp_tl
- {
- \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl }
- }
-
- \int_incr:N \l__fontspec_strong_int
-
- \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl
- { \l__fontspec_strong_switch_tl }
- {
- \int_zero:N \l__fontspec_strong_int
- \strongreset
- }
-
- }
-\DeclareTextFontCommand{\strong}{\strongenv}
-\cs_set:Npn \strongreset {}
-\cs_set:Npn \reset@font
- {
- \normalfont
- \int_zero:N \l__fontspec_strong_int
- }
-\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} }
-\strongfontdeclare{ \bfseries }
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
index 58851e7e5a..2e67737df9 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
@@ -82,7 +82,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -969,7 +969,7 @@
%<@@=hyp>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2023-02-20 v0.95w %
+\ProvidesFile{hgeneric-testphase.def}[2023-03-09 v0.95x %
generic Hyperref driver for the LaTeX PDF management testphase bundle]
\RequirePackage{etoolbox} %why?
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
index c5476881c0..306f715e8d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
index e812e75256..94dddfa8ee 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
@@ -45,7 +45,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
%
@@ -56,27 +56,27 @@
% \begin{macrocode}
%<drivers>\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-testphase-dvipdfmx.def}{2023-02-20}{}
+ {l3backend-testphase-dvipdfmx.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-testphase-dvips.def}{2023-02-20}{}
+ {l3backend-testphase-dvips.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-testphase-dvisvgm.def}{2023-02-20}{}
+ {l3backend-testphase-dvisvgm.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-testphase-luatex.def}{2023-02-20}{}
+ {l3backend-testphase-luatex.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-testphase-pdftex.def}{2023-02-20}{}
+ {l3backend-testphase-pdftex.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
%</pdftex>
%<*xdvipdfmx>
- {l3backend-testphase-xetex.def}{2023-02-20}{}
+ {l3backend-testphase-xetex.def}{2023-03-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
%</xdvipdfmx>
% \end{macrocode}
@@ -1965,6 +1965,7 @@
\pdfmanagement_add:nnn{Info}{Creator}{(TeX)}
%</drivers>
%<*dvips>
+ \AddToHook{begindocument}{\pdfmanagement_add:nnn{Info}{Producer}{(pdfTeX+dvips)}}
\__kernel_backend_literal:e{!~<</DocumentUUID~(DocumentUUID)>>~setpagedevice}
\__kernel_backend_literal:e{!~<</InstanceUUID~(InstanceUUID)>>~setpagedevice}
%</dvips>
@@ -2006,6 +2007,7 @@
\AddToDocumentProperties[hyperref]{pdfmetadate}{D:20010101205959-00'00'}
\AddToDocumentProperties[hyperref]{pdfdate}{D:20010101205959-00'00'}
\AddToDocumentProperties[hyperref]{pdfinstanceid}{uuid:0a57c455-157a-4141-8c19-6237d832fc80}
+ \AddToDocumentProperties[hyperref]{pdfproducer}{\c_sys_engine_exec_str-NN.NN.NN}
}
%</drivers>
% \end{macrocode}
@@ -2024,29 +2026,98 @@
% an unnamed object so should be referenced directly with |\pdf_object_ref_last:|
% \begin{macrocode}
%<*luatex>
-\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1
+\cs_new_protected:Npn \@@_backend_metadata_stream:n #1
{
\tex_immediate:D \tex_pdfextension:D obj ~uncompressed~
- \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}}
+ \@@_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}}
}
%</luatex>
%<*pdftex>
-\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1
+\cs_new_protected:Npn \@@_backend_metadata_stream:n #1
{
\group_begin:
\tex_pdfcompresslevel:D 0 \scan_stop:
\tex_immediate:D \tex_pdfobj:D
- \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}}
+ \@@_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}}
\group_end:
}
%</pdftex>
%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm>
-\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1
+\cs_new_protected:Npn \@@_backend_metadata_stream:n #1
{
\pdf_object_unnamed_write:nn {stream}{{/Type~/Metadata~/Subtype~/XML}{#1}}
}
%</xdvipdfmx|dvipdfmx|dvips|dvisvgm>
% \end{macrocode}
+%
+% \subsection{Suppressing deprecated PDF features}
+%
+% \texttt{/ProcSet}, \texttt{/CharSet} and the \texttt{/Info} dictionary
+% are deprecated in PDF 2.0. For the pdf/A-4 standard they must be suppressed.
+% Not every engine is able to do this, but for pdfTeX and luatex we define suitable
+% backend command. \texttt{/ProcSet} is suppressed automatically
+% for pdf version 2.0 starting with in texlive 2023.
+% \begin{macro}{\@@_backend_omit_charset:n}
+% The option to omit /Charset exists already for quite some time for the two
+% engines.
+% \begin{macrocode}
+%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm>
+\cs_new_protected:Npn \@@_backend_omit_charset:n #1 {} %#1 number
+%</xdvipdfmx|dvipdfmx|dvips|dvisvgm>
+%<*pdftex>
+\cs_new_protected:Npn \@@_backend_omit_charset:n #1 %#1 number
+ {
+ \tex_pdfomitcharset:D = #1 \scan_stop:
+ }
+%</pdftex>
+%<*luatex>
+\cs_new_protected:Npn \@@_backend_omit_charset:n #1 %#1 number
+ {
+ \tex_pdfvariable:D omitcharset = #1 \scan_stop:
+ }
+%</luatex>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_backend_omit_info:n}
+% The option to suppress the info dictionary will be available in
+% texlive 2023.
+% \begin{macrocode}
+%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm>
+\cs_new_protected:Npn \@@_backend_omit_info:n #1 {} %#1 number
+%</xdvipdfmx|dvipdfmx|dvips|dvisvgm>
+%<*pdftex>
+\bool_lazy_and:nnTF
+ { \int_compare_p:nNn {\tex_pdftexversion:D } > {139} }
+ { \int_compare_p:nNn {\tex_pdftexrevision:D } > {24} }
+ {
+ \cs_new_protected:Npn \@@_backend_omit_info:n #1 %#1 number
+ {
+ \pdfomitinfodict = #1 \scan_stop:
+ }
+ }
+ {
+ \cs_new_protected:Npn \@@_backend_omit_info:n #1 {}%#1 number
+
+ }
+%</pdftex>
+%<*luatex>
+ \int_compare:nNnTF {\directlua{tex.print(status.list()["development_id"])} } > {7560}
+ {
+ \cs_new_protected:Npn \@@_backend_omit_info:n #1 %#1 number
+ {
+ \tex_pdfvariable:D omitinfodict = #1 \scan_stop:
+ }
+ }
+ {
+ \cs_new_protected:Npn \@@_backend_omit_info:n #1 {} %#1 number
+ }
+%</luatex>
+% \end{macrocode}
+% \end{macro}
+%
+
+%
% \subsection{lua code for lualatex}
% \begin{macrocode}
%<*lua>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
index 229895df9b..03c2cb4d73 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
index bd62c74dc4..761a2fef58 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -432,7 +432,7 @@
% \begin{macrocode}
%<@@=pdfannot>
%<*header>
-\ProvidesExplPackage{l3pdfannot}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdfannot}{2023-03-09}{0.95x}
{PDF-annotations}
\RequirePackage{l3pdfdict}
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
index c8d599d700..6efe0a3e81 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
index b46a87348e..4a6af666de 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -208,7 +208,7 @@
% \begin{macrocode}
%<@@=pdfdict>
%<*header>
-\ProvidesExplPackage{l3pdfdict}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdfdict}{2023-03-09}{0.95x}
{Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
index 30c708719d..277eda9a51 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
index f5f653cad7..0a3933eaca 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
index 1a07c64766..f3f2709d1c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
index 34e1d8b8e0..e5f0b33fed 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
index 8b051f6999..c3a510d875 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
index 8a3711b797..b2920fcdc4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
index 000a7452d5..c668f282fe 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
index f2df427ebf..5011ea4916 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
index b9b7bbb303..e33b6a3598 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
index 423231bf7c..55a230c77e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
@@ -83,7 +83,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
index c95db774a0..400c83654e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
index d4a6011750..72f111d55a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
index 608479e30b..98020b9fa2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
index f972c7cf87..c9181a6ed8 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
@@ -69,7 +69,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -973,7 +973,7 @@
%<*package>
%<@@=pdffield>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2023-02-20}{0.95w}%
+\ProvidesExplPackage{l3pdffield-testphase}{2023-03-09}{0.95x}%
{form fields}
% \end{macrocode}
% \subsection{hyperref specific command}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
index 63440cf172..35caa5b8db 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
index 4582d4a99d..fe3ffbd6ef 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -398,7 +398,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdffile}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdffile}{2023-03-09}{0.95x}
{embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
\RequirePackage{l3pdftools} %temporarly!!
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
index e06e86127d..c51b62daf8 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
index 4fffefa1d7..df5724be08 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
@@ -57,7 +57,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -632,7 +632,7 @@
%<@@=pdfmanagement>
%<*header>
%
-\ProvidesExplPackage{l3pdfmanagement}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdfmanagement}{2023-03-09}{0.95x}
{Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
index 54c1ccae90..fa89390e25 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
index ed08282b30..034cf6fd00 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -200,17 +200,18 @@
% tested from TeX, but in a current LaTeX normally ToUnicode are set for all fonts.
% \item[|tagged|] that is set in A-2a and A-3a and means that the pdf must be
% tagged. This is currently neither tested not enforced somewhere.
+% \item[|no_CharSet|] CharSet is deprecated is pdf 2.0 and should not
+% be used in A-4. l3pdfmeta will therefore suppress it for the
+% engines pdftex and luatex (the other engines have no suitable option)
% \item[|Trailer_no_Info|] The \texttt{Info} dictionary
% has been deprecated since quite some time. Metadata should be set with
% XMP-data instead. In PDF A-4 now the \texttt{Info} dictionary
% shall not be present in the trailer dictionary at all
% (unless there exists a PieceInfo entry in the Catalog). And if it is present
-% it should only contain the \texttt{/ModDate} entry. The engines
-% do not offer currently an option to suppress the dictionary completly,
-% one can only give the entries the value null (it only works for all entries
-% with lualatex and pdflatex). The next pdflatex will offer \cs{pdfomitinfodict}.
-% Until then l3pdfmeta does nothing with this requirement.
-%
+% it should only contain the \texttt{/ModDate} entry. In
+% texlive 2023 the engines pdftex and luatex have primitives
+% to suppress the dictionary
+% and l3pdfmeta will make use of it.
% \end{description}
%
% \subsubsection{Tests with values and special handlers}
@@ -562,7 +563,7 @@
% \begin{macrocode}
%<@@=pdfmeta>
%<*header>
-\ProvidesExplPackage{l3pdfmeta}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdfmeta}{2023-03-09}{0.95x}
{PDF-Standards---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
@@ -746,6 +747,10 @@
{
\pdfmeta_standard_verify:nF { annot_flags }
{ \@@_verify_pdfa_annot_flags: }
+ \pdfmeta_standard_verify:nF { Trailer_no_Info }
+ { \__pdf_backend_omit_info:n {1} }
+ \pdfmeta_standard_verify:nF { no_CharSet }
+ { \__pdf_backend_omit_charset:n {1} }
\pdfmeta_standard_verify:nnF { min_pdf_version }
{ \pdf_version: }
{ \msg_warning:nnxxx {pdf}{wrong-pdfversion}
@@ -939,6 +944,8 @@
\prop_gput:cnn
{ g_@@_standard_pdf/A-4_prop }{year}{2020}
\prop_gput:cnn
+ { g_@@_standard_pdf/A-4_prop }{no_CharSet}{}
+\prop_gput:cnn
{ g_@@_standard_pdf/A-4_prop }{Trailer_no_Info}{}
\prop_gremove:cn
{ g_@@_standard_pdf/A-4_prop }{conformance}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
index 2795c0188f..66e3bf0206 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
index d3ad09cbfb..8996d74131 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -211,7 +211,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdftools}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdftools}{2023-03-09}{0.95x}
{candidate commands for l3pdf---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
index e0b99f153f..633a4ef871 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
index c12604614d..4eeb9071ab 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -132,7 +132,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*header>
-\ProvidesExplPackage{l3pdfxform}{2023-02-20}{0.95w}
+\ProvidesExplPackage{l3pdfxform}{2023-03-09}{0.95x}
{command to create xforms (beta)---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
index b9261b84cb..4d0fb96e1f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
index 5fbd9314e6..ba3473cb30 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -215,7 +215,7 @@
% \begin{macrocode}
%<@@=pdfmanagement>
%<*header>
-\ProvidesExplPackage{ltdocinit}{2023-02-20}{0.95w}
+\ProvidesExplPackage{ltdocinit}{2023-03-09}{0.95x}
{Initialize document metadata}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
index d7311dddb1..963c915cca 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua b/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua
deleted file mode 100644
index 1d4eab4de1..0000000000
--- a/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua
+++ /dev/null
@@ -1,78 +0,0 @@
-if not luaotfload.set_transparent_colorstack then return end
-local l = lpeg
-local spaces = l.P' '^0
-local digit16 = l.R('09', 'af', 'AF')
-
-local octet = digit16 * digit16 / function(s) return string.format('%.3g ', tonumber(s, 16) / 255) end
-local htmlcolor = l.Cs(octet * octet * octet * -1 * l.Cc'rg')
-local color_export = {
- token.create'endlocalcontrol',
- token.create'tex_hpack:D',
- token.new(0, 1),
- token.create'color_export:nnN',
- token.new(0, 1),
- '',
- token.new(0, 2),
- token.new(0, 1),
- 'backend',
- token.new(0, 2),
- token.create'l_tmpa_tl',
- token.create'exp_after:wN',
- token.create'__color_select:nn',
- token.create'l_tmpa_tl',
- token.new(0, 2),
-}
-local group_end = token.create'group_end:'
-local value = (1 - l.P'}')^0
-luatexbase.add_to_callback('luaotfload.parse_color', function (value)
- local html = htmlcolor:match(value)
- if html then return html end
-
- tex.runtoks(function()
- token.get_next()
- color_export[6] = value
- tex.sprint(-2, color_export)
- end)
- local list = token.scan_list()
- if not list.head or list.head.next or list.head.subtype ~= node.subtype'pdf_colorstack' then
- error'Unexpected backend behavior'
- end
- local cmd = list.head.data
- node.free(list)
- return cmd
-end, 'l3color')
-
--- Let's also integrate l3opacity
-
-luaotfload.set_transparent_colorstack(token.create'c__opacity_backend_stack_int'.index)
-
-local transparent_register = {
- token.create'pdfmanagement_add:nnn',
- token.new(0, 1),
- 'Page/Resources/ExtGState',
- token.new(0, 2),
- token.new(0, 1),
- '',
- token.new(0, 2),
- token.new(0, 1),
- '<</ca ',
- '',
- '/CA ',
- '',
- '>>',
- token.new(0, 2),
-}
-luatexbase.add_to_callback('luaotfload.parse_transparent', function(value)
- value = (octet * -1):match(value)
- if not value then
- tex.error'Invalid transparency value'
- return
- end
- value = value:sub(1, -2)
- local result = 'opacity' .. value
- tex.runtoks(function()
- transparent_register[6], transparent_register[10], transparent_register[12] = result, value, value
- tex.sprint(-2, transparent_register)
- end)
- return '/' .. result .. ' gs'
-end, 'l3opacity')
diff --git a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
index 891af85d6d..dc8d376f76 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
index 2e40ed6814..23ce50f33d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -63,7 +63,7 @@
% |debug={firstaidoff={name1,name2,...},...}|.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2023-02-20}{0.95w}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2023-03-09}{0.95x}
{LaTeX PDF management testphase bundle / firstaid-patches}
%<@@=pdfmanagement>
@@ -96,36 +96,21 @@
% \subsection{Fontspec}
% When using luaLaTeX opacity is broken (issue \#30) as
% fontspec/luaotfload doesn't use the pdfmanagement but write to ExtGState directly
-% To repair this some new lua code is needed. This also
-% improves the color parsing and allows to use cmyk and spot colors as font colors.
-% It is also needed to use a patch version of \texttt{fontspec-luatex.sty} to
-% slightly change the way how the Opacity and Color key are handled.
-% The patch is only executed if luaotfload is new enough.
+% To repair this some new lua code is needed. It also needs a new fontspec
+% and a change in the color key.
% \begin{macrocode}
\sys_if_engine_luatex:T
{
- \lua_now:n
- {
- if~not~luaotfload.set_transparent_colorstack~
- then~
- tex.print("\\bool_gset_false:N\\g_@@_firstaid_fontspec_bool")~
- end
- }
\bool_if:NT \g_@@_firstaid_fontspec_bool
{
- \msg_info:nnn{pdfmanagement}{firstaid}{fontspec}
- \file_if_exist:nT { luaotfload-l3color-tmp.lua }
- {
- \lua_load_module:n { luaotfload-l3color-tmp.lua }
- }
-
- \declare@file@substitution{fontspec-luatex.sty}{fontspec-luatex-tmp-ltx.sty}
- \AddToHook{package/fontspec/after}
+ \@ifpackagelater{fontspec}{2023-03-10}
{
- \str_if_eq:vnF{ver@fontspec.sty}{2022/01/15~v2.8a~Font~selection~for~XeLaTeX~and~LuaLaTeX}
- {\msg_warn:nnn{pdfmanagement}{firstaid-changed}{fontspec}}
- }
- }
+ \__fontspec_keys_define_code:nnn {fontspec} {Color}
+ {
+ \tl_set:Nn \l__fontspec_hexcol_tl {#1}
+ }
+ }{}
+ }
}
% \end{macrocode}
% \subsection{Output routine}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
index 30aa895e05..05f5aeac65 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
index 7b8a19d4cb..15ee3c7d0c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.95w, released 2023-02-20}
+% \date{Version 0.95x, released 2023-03-09}
%
% \maketitle
% \begin{documentation}
@@ -386,7 +386,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2023-02-20}{0.95w}
+\ProvidesExplPackage{pdfmanagement-testphase}{2023-03-09}{0.95x}
{LaTeX PDF management testphase bundle}
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2020-10-01}{}{
@@ -414,7 +414,7 @@
% to allow to set it in the document.
% \begin{macrocode}
%<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-02-20}{0.95w}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-03-09}{0.95x}
{PDF~management~code~(testphase)}
%</header>
%<*package>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
index c4205bc6e4..7e40c5713c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
index 98baf67303..192e4b77a1 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
@@ -1,6 +1,6 @@
%% LaTeX2e file `xcolor-patches.sty'
%%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-02-20 v0.95w patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-03-09 v0.95x patch xcolor for l3color]
\@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/tugboat/NEWS b/macros/latex/contrib/tugboat/NEWS
index 5f9b4fa553..aa1e53391e 100644
--- a/macros/latex/contrib/tugboat/NEWS
+++ b/macros/latex/contrib/tugboat/NEWS
@@ -1,7 +1,16 @@
-$Id: NEWS 458 2023-01-16 18:44:30Z karl $
+$Id: NEWS 463 2023-03-08 21:59:19Z karl $
This file records noteworthy changes. This file is public domain.
-----------------
+2.29 (2023-03-08):
+
+ltugboat.cls:
+- \url: the fallback definition now typesets (in tt) more special characters.
+- omit TUG-specific doi when not typesetting in the production environment.
+
+tugboat.bst: abbreviate "chapter" to "ch." in tugboat.bst.
+
+-----------------
2.28 (2023-01-16):
ltugboat.cls:
diff --git a/macros/latex/contrib/tugboat/ltubguid.pdf b/macros/latex/contrib/tugboat/ltubguid.pdf
index 4e9a95b979..3d39af7dad 100644
--- a/macros/latex/contrib/tugboat/ltubguid.pdf
+++ b/macros/latex/contrib/tugboat/ltubguid.pdf
Binary files differ
diff --git a/macros/latex/contrib/tugboat/tugboat.bst b/macros/latex/contrib/tugboat/tugboat.bst
index a64d28fd17..1129bb8ab5 100644
--- a/macros/latex/contrib/tugboat/tugboat.bst
+++ b/macros/latex/contrib/tugboat/tugboat.bst
@@ -1,4 +1,4 @@
-%%% $Id: tugboat.bst 457 2023-01-16 18:43:54Z karl $
+%%% $Id: tugboat.bst 462 2023-03-08 17:26:54Z karl $
%%% TUGboat changes are public domain.
%%%
%%% Modified for TUGboat from abbrvurl.bst:
@@ -735,7 +735,7 @@ FUNCTION {format.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
- { "chapter" }
+ { "ch." }
{ type "l" change.case$ }
if$
chapter tie.or.space.connect
@@ -972,7 +972,8 @@ FUNCTION {format.pubmed}
% (aka the doiurl variable), and only add it if needed.
%
% This code is from https://tex.stackexchange.com/questions/119237
-% (thank you, mafp).
+% (thank you, mafp). The original urlbst package solved the problem in a
+% different (simpler) way in its 0.9.1 (January 2023) release.
%
% The "X Y contains" function checks if string Y is contained in X.
% Although we only need to check if Y is at the beginning of X,
diff --git a/macros/latex/contrib/tugboat/tugboat.dtx b/macros/latex/contrib/tugboat/tugboat.dtx
index d205ab011d..ea7f22af77 100644
--- a/macros/latex/contrib/tugboat/tugboat.dtx
+++ b/macros/latex/contrib/tugboat/tugboat.dtx
@@ -1,5 +1,5 @@
% \iffalse (this is a meta-comment (so they say))
-% $Id: tugboat.dtx 459 2023-01-16 21:05:37Z karl $
+% $Id: tugboat.dtx 462 2023-03-08 17:26:54Z karl $
% tugboat.dtx - main source for LaTeX TUGboat classes.
%
% Copyright 1994-2023 TeX Users Group.
@@ -28,7 +28,7 @@
%<ltugboatsty>\ProvidesPackage{ltugboat}
%<ltugprocsty>\ProvidesPackage{ltugproc}
%<ltugcomn> \ProvidesPackage{ltugcomn}
- [2023-01-16 v2.28
+ [2023-03-08 v2.29
%<ltugboatcls> TUGboat journal class%
%<ltugproccls> TUG conference proceedings class%
%<ltugboatsty|ltugprocsty> TUG compatibility package%
@@ -1308,7 +1308,13 @@
\def\tburl{\url}%
\def\tbsurl{\url}% no hyperref, so just \url is fine.
\def\tbhurl{\url}%
- \ifx\url\undefined \let\url\texttt \fi % er, make sure \url is defined
+ \ifx\url\undefined % make sure \url is defined
+ \def\url{\begingroup % might as well catch common special chars
+ \catcode`\#=12 \catcode`\$=12 \catcode`\%=12 \catcode`\^=12
+ \catcode`\&=12 \catcode`\_=12 \catcode`\~=12
+ \finish@tub@url}
+ \def\finish@tub@url#1{\tt #1\endgroup}
+ \fi
\else
% This hyperref hook-in is due to Ulrike Fischer.
% \url{https://github.com/latex3/hyperref/issues/125}.
@@ -3544,21 +3550,27 @@
\def\tubdoiprefix{10.47397/tb} % the number crossref assigned us
\def\tubabovedoi{} % fudge spacing or whatever.
%
-\def\tubtypesetdoi{\iftubomitdoioption\else % if not explicit omission ...
- \iftubfinaloption % do this if [final], even if pageno>900
- \vbox to 0pt{% don't impact normal layout
- \edef\thedoi{\ifnum\count0>900 xnot\fi % but make url invalid if >900
- doi.org/\tubdoiprefix/\volno-\issno/\jobname}%
- \scriptsize
- \vskip\baselineskip
- \tubabovedoi
- \iftubsecondcolstart \moveright \tubcolwidthandgutter \fi
- \rlap{\expandafter\tbsurl\expandafter{\thedoi}}%
- \vss
- }%
+\def\tubtypesetdoi{%
+ \iftubomitdoioption\else % do if not explicit omission ...
+ \ifnum\volno>0 % and if being run for production ...
+ \iftubfinaloption % and if [final], even if pageno>900
+ \vbox to 0pt{% don't impact normal layout
+ \edef\thedoi{% but make url invalid if >900
+ \ifnum\count0>900 example.org%
+ \else doi.org\fi
+ /\tubdoiprefix/\volno-\issno/\jobname}%
+ \scriptsize
+ \vskip\baselineskip
+ \tubabovedoi
+ \iftubsecondcolstart \moveright \tubcolwidthandgutter \fi
+ \rlap{\expandafter\tbsurl\expandafter{\thedoi}}%
+ \vss
+ }%
+ \fi % tubfinaloption
+ \fi % volno>0
+ \fi % !tubomitdoioption
\global\let\tubtypesetdoi\@empty % only do it once, no matter what.
- \fi
-\fi}
+}
%
%
% \end{macrocode}
diff --git a/macros/latex/contrib/tugboat/tugboat.pdf b/macros/latex/contrib/tugboat/tugboat.pdf
index 611ea5fe18..fc6500607f 100644
--- a/macros/latex/contrib/tugboat/tugboat.pdf
+++ b/macros/latex/contrib/tugboat/tugboat.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/README.md b/macros/luatex/latex/lua-typo/README.md
index 0930ac70cf..9577fee1cf 100644
--- a/macros/luatex/latex/lua-typo/README.md
+++ b/macros/luatex/latex/lua-typo/README.md
@@ -81,7 +81,12 @@ Changes
* v.0.61:
- bug fixes and documentation enhanced.
- - colours `mygrey` and `myred` renamed `LTgrey` and `LTred`.
+ - colours `mygrey` and `myred` renamed as `LTgrey` and `LTred`.
+
+* v.0.65:
+ - new option `ShortFinalWord` to detect short end-of-sentence word
+ on top of next page.
+ - code cleaning.
--
Copyright 2020--2023 Daniel Flipo
diff --git a/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
index f5ea36a35e..35fe6bc907 100644
--- a/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
index 287b2660b5..ed50a38d11 100644
--- a/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/doc/lua-typo.pdf b/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
index 55acdc97b8..6990971202 100644
--- a/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
+++ b/macros/luatex/latex/lua-typo/doc/lua-typo.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-typo/source/lua-typo.dtx b/macros/luatex/latex/lua-typo/source/lua-typo.dtx
index 9929679bc2..41a9966280 100644
--- a/macros/luatex/latex/lua-typo/source/lua-typo.dtx
+++ b/macros/luatex/latex/lua-typo/source/lua-typo.dtx
@@ -52,29 +52,28 @@
\csname fi\endcsname
%</gobble>
%<*driver>
-\RequirePackage{pdfmanagement-testphase}
-%<+doc>\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-GB}
-%<+docfr>\DeclareDocumentMetadata{pdfstandard=A-2b, lang=fr-FR}
-\documentclass[a4paper]{ltxdoc}
-\usepackage[dvipsnames]{xcolor}
+%<+doc>\DocumentMetadata{pdfstandard=A-2b, lang=en-GB}
+%<+doc>\documentclass[a4paper,british]{ltxdoc}
+%<+docfr>\DocumentMetadata{pdfstandard=A-2b, lang=fr-FR}
+%<+docfr>\documentclass[a4paper,french]{ltxdoc}
\usepackage{fontspec}
\setmainfont{erewhon}
\setsansfont{Cabin}[Scale=MatchLowercase]
\setmonofont{VeraMono.ttf}[
Scale = MatchLowercase,
- ItalicFont = VeraMoIt.ttf,
- BoldFont = VeraMoBd.ttf,
- BoldItalicFont = VeraMoBI.ttf,
- HyphenChar=None, Color=Sepia,
+ ItalicFont = VeraMoIt.ttf,
+ BoldFont = VeraMoBd.ttf,
+ BoldItalicFont = VeraMoBI.ttf,
+ HyphenChar=None,
+ Color=5D1D00,
]
\usepackage[expansion=true, protrusion=true]{microtype}
-%<+doc>\usepackage[british]{babel}
-%<+docfr>\usepackage[french]{babel}
+\usepackage{babel,varioref}
%<+docfr>\frenchsetup{og=«, fg=»}
+
\usepackage[ShortPages, OverfullLines, UnderfullLines,
Widows, Orphans, EOPHyphens, RepeatedHyphens
]{lua-typo}
-\luatypoLLminWD=3em
\renewcommand*\descriptionlabel[1]{%
\hspace{\labelsep}\texttt{#1}}
\usepackage{array,url,verbatim}
@@ -100,7 +99,7 @@
\newcommand*\file[1]{\texttt{#1}}
\newcommand*\pkg[1]{\texttt{#1}}
\newcommand*\opt[1]{\texttt{#1}}
-\renewcommand\meta[1]{\texttt{\textsl{\color{Sepia}<#1>}}}
+\renewcommand\meta[1]{\texttt{\textsl{<#1>}}}
\newcommand*\node[1]{\textsc{#1}}
%
\setlength{\parindent}{0pt}
@@ -205,7 +204,7 @@
% \pkg{lua-typo}, il suffit d’ajouter dans le préambule la ligne %\\
% |\usepackage[All]{lua-typo}|
%
-% La version courante (0.61) nécessite un noyau LaTeX récent,
+% La version courante (0.65) nécessite un noyau LaTeX récent,
% 2021/06/01 ou ultérieur. Ceux qui ne disposent que d’un noyau plus
% ancient reçoivent un message d’avertissement et un message d’erreur
% «\texttt{Unable to register callback}» ; une version «rollback »
@@ -235,10 +234,20 @@
% ou pour se limiter aux tests \meta{OptX} et \meta{OptY} :\\
% |\usepackage[|\meta{OptX}|, |\meta{OptY}|]{lua-typo}|
%
-% \pagebreak[4]
-% Le tableau suivant donne le nom des options et le type des
-% vérifications proposées :
+% La liste des options et le type des vérifications proposées sont
+% présentés dans le tableau \vpageref{options-fr}.
+% Par exemple, pour limiter les vérifications aux lignes trop pleines
+% ou creuses, il suffit de coder :\\
+% |\usepackage[OverfullLines, UnderfullLines]{lua-typo}|\\
+% Pour tout vérifier sauf les coupures répétées en fin de ligne on
+% codera :\\
+% |\usepackage[All, RepeatedHyphens=false]{lua-typo}|\\
+% Notez que l’option that \opt{All} doit être la première de la
+% liste, les suivantes étant rétirées de la liste complète définie
+% par~\opt{All}.
%
+% \begin{table}[ht]
+% \centering\label{options-fr}
% \begin{tabular}{>{\ttfamily}ll}
% \multicolumn{1}{l}{Nom} & Imperfection à signaler\\ \hline
% All & Active toutes les options ci-dessous\\
@@ -258,18 +267,10 @@
% LastWordMatch & Même (partie de) mot en fin de lignes
% consécutives ?\\
% FootnoteSplit & Fin de note de bas de page sur page suivante?\\
+% ShortFinalWord & Mot de fin de phrase court en haut de page\\
% \hline
% \end{tabular}
-%
-% Par exemple, pour limiter les vérifications aux lignes trop pleines
-% ou creuses, il suffit de coder :\\
-% |\usepackage[OverfullLines, UnderfullLines]{lua-typo}|\\
-% Pour tout vérifier sauf les coupures répétées en fin de ligne on
-% codera :\\
-% |\usepackage[All, RepeatedHyphens=false]{lua-typo}|\\
-% Notez que l’option that \opt{All} doit être la première de la
-% liste, les suivantes étant rétirées de la liste complète définie
-% par~\opt{All}.
+% \end{table}
%
% Le nom des différentes options n’étant pas facile à mémoriser, il
% est possible de les retrouver sans devoir consulter la
@@ -299,6 +300,9 @@
% \item[RepeatedHyphens :] de même, lorsque le nombre de lignes
% consécutives affectées par des coupures dépasse le seuil fixé
% (voir ci-dessous), ne sont coloriées que les coupures en excès.
+% \item[ShortFinalWord :] lorsque le premier mot de la première ligne
+% d’une page termine une phrase et qu’il est court (au plus
+% |\luatypoMinLen=4| lettres), on le signale.
% \end{description}
%
% \section{Paramétrage personnalisé}
@@ -374,7 +378,7 @@
% commun), ainsi que la présence de « mon » en début ou fin de
% deux lignes consécutives (trois lettres en commun).
%
-% \item[EOLShortWords:] cette option signale la présence en fin de
+% \item[EOLShortWords:] cette option signale la présence en fin de
% ligne de mots très courts (une ou deux lettres)
% qui sont répertoriés dans une des listes
% suivantes (elles dépendent de la langue courante) :\\
@@ -423,14 +427,16 @@
% \luatypoSetColor{11}{LTred} % Répétitions en fin de ligne
% \luatypoSetColor{12}{LTgrey}% Dernière ligne d’alinéa presque pleine
% \luatypoSetColor{13}{cyan} % Note de bas de page éclatée
+% \luatypoSetColor{14}{red} % Mot de fin de phrase en haut de page
% \end{verbatim}
-% \pkg{lua-typo} charge l’extension graphique \pkg{color}.
-% Seules les couleurs portant un nom (\emph{named colors}) peuvent
-% être utilisées ; pour en définir de nouvelles, il faut donc soit
-% utiliser la commande |\definecolor| de l’extension \pkg{color}
-% (comme ci-dessus pour |LTgrey| ou |LTred|), soit charger l’extension
-% \pkg{xcolor} package qui donne accès à une kyrielle de noms de
-% couleurs.
+% \pkg{lua-typo} charge les extensions \pkg{luacolor} et donc
+% \pkg{color}. Seules les couleurs portant un nom (\emph{named
+% colors}) peuvent être utilisées dans la commande
+% |\luatypoSetColor| ; pour en définir de nouvelles il faut donc,
+% soit utiliser la commande |\definecolor| de l’extension
+% \pkg{color} (comme ci-dessus pour |LTgrey| ou |LTred|), soit
+% charger l’extension \pkg{xcolor} qui donne accès à une
+% kyrielle de noms de couleurs.
% \end{FrenchDoc}
%
% \StopEventually{}
@@ -449,9 +455,9 @@
% \filedate.}, is meant for careful writers and proofreaders who do
% not feel totally satisfied with LaTeX output, the most frequent
% issues being overfull or underfull lines, widows and orphans,
-% hyphenated words split across two pages, consecutive lines ending
-% with hyphens, paragraphs ending on too short or nearly full lines,
-% homeoarchy, etc.
+% hyphenated words split across two pages, two many consecutive lines
+% ending with hyphens, paragraphs ending on too short or nearly full
+% lines, homeoarchy, etc.
%
% This package, which works with LuaLaTeX only,
% \emph{does not try to correct anything} but just highlights
@@ -469,7 +475,7 @@
% may be acceptable in some conditions (multi-columns, technical
% papers) and unbearable in others (literary works f.i.).
% Moreover, correcting a potential issue somewhere may result in
-% other much more serious flaws elsewhere…\\
+% other much more serious flaws somewhere else …\\
% b) Conversely, possible bugs in \pkg{lua-typo} might hide issues
% that should normally be highlighted.
%
@@ -543,6 +549,7 @@
% FirstWordMatch & same (part of) word starting two consecutive lines?\\
% LastWordMatch & same (part of) word ending two consecutive lines?\\
% FootnoteSplit & footnotes spread over two pages or more?\\
+% ShortFinalWord & Short word ending a sentence on the next page\\
% \hline
% \end{tabular}\\[12pt]
% For example, if you want \pkg{lua-typo} to only warn about overfull
@@ -559,7 +566,6 @@
% this option provides an easy way to get their names without having
% to look into the documentation.
%
-% \enlargethispage*{\baselineskip}
% With option \opt{None}, \pkg{lua-typo} \emph{does absolutely
% nothing}, all checks are disabled as the main function is not added
% to any LuaTeX callback. It not quite equivalent to commenting out
@@ -577,6 +583,9 @@
% \item[RepeatedHyphens:] ditto, when the number of consecutives
% hyphenated lines is too high, only the hyphenated words in
% excess (the last ones) are hightlighted.
+% \item[ShortFinalWord :] the first word on a page is highlighted
+% if it ends a sentence and is short (up to |\luatypoMinLen=4|
+% letters).
% \end{description}
%
% \section{Customisation}
@@ -685,17 +694,18 @@
% \luatypoSetColor9{red} % Nearly empty page (a few lines)
% \luatypoSetColor{10}{LTred} % First word matches
% \luatypoSetColor{11}{LTred} % Last word matches
-% \luatypoSetColor{12}{LTgrey}% paragraph’s last line nearly full
-% \luatypoSetColor{13}{cyan} % footnotes spread over two pages
+% \luatypoSetColor{12}{LTgrey}% Paragraph’s last line nearly full
+% \luatypoSetColor{13}{cyan} % Footnotes spread over two pages
+% \luatypoSetColor{14}{red} % Short final word on top of the page
% \end{verbatim}
%
-% \pkg{lua-typo} loads the \pkg{color} package from the LaTeX graphic
-% bundle. Only named colours can be used by \pkg{lua-typo}, so you
-% can either use the |\definecolor| from \pkg{color} package to
-% define yours (as done in the config file for `LTgrey’) or load the
+% \pkg{lua-typo} loads the \pkg{luacolor} package which loads the
+% \pkg{color} package from the LaTeX graphic bundle.
+% |\luatypoSetColor| requires named colours, so you can either use
+% the |\definecolor| from \pkg{color} package to define yours
+% (as done in the config file for `LTgrey’ and `LTred’) or load the
% \pkg{xcolor} package which provides a bunch of named colours.
%
-% \clearpage
% \section{\TeX{}nical details}
%
% \iffalse
@@ -709,7 +719,7 @@
%<+scan>\ProvidesPackage{scan-page}
%<+dtx>\ProvidesFile{lua-typo.dtx}
%<*dtx|sty|scan>
- [2023-02-10 v.0.61 Daniel Flipo]
+ [2023-03-08 v.0.65 Daniel Flipo]
%</dtx|sty|scan>
%<*sty>
% \fi
@@ -725,7 +735,7 @@
% \begin{macrocode}
\ifdefined\DeclareRelease
\DeclareRelease{v0.4}{2021-01-01}{lua-typo-2021-04-18.sty}
- \DeclareCurrentRelease{}{2023-02-04}
+ \DeclareCurrentRelease{}{2023-03-08}
\else
\PackageWarning{lua-typo}{Your LaTeX kernel is too old to provide
access\MessageBreak to former versions of the lua-typo package.%
@@ -761,6 +771,7 @@
\newcount\luatypoPageMin
\newcount\luatypoMinFull
\newcount\luatypoMinPart
+\newcount\luatypoMinLen
\newcount\luatypo@LANGno
\newcount\luatypo@options
\newtoks\luatypo@single
@@ -797,6 +808,7 @@ luatypo = { }
\DeclareBoolOption[false]{FirstWordMatch}
\DeclareBoolOption[false]{LastWordMatch}
\DeclareBoolOption[false]{FootnoteSplit}
+\DeclareBoolOption[false]{ShortFinalWord}
% \end{macrocode}
% Option \opt{All} resets all booleans relative to specific
% typographic checks to \opt{true}.
@@ -809,6 +821,7 @@ luatypo = { }
\LT@ParLastHyphentrue \LT@EOLShortWordstrue
\LT@FirstWordMatchtrue \LT@LastWordMatchtrue
\LT@BackParindenttrue \LT@FootnoteSplittrue
+ \LT@ShortFinalWordtrue
}
\ProcessKeyvalOptions{luatypo}
% \end{macrocode}
@@ -909,6 +922,12 @@ luatypo = { }
\else
\directlua{ luatypo.FootnoteSplit = false }%
\fi
+ \ifLT@ShortFinalWord
+ \advance\luatypo@options by 1
+ \directlua{ luatypo.ShortFinalWord = true }%
+ \else
+ \directlua{ luatypo.ShortFinalWord = false }%
+ \fi
}
% \end{macrocode}
%
@@ -936,6 +955,7 @@ luatypo = { }
FirstWordMatch [false]\MessageBreak
LastWordMatch [false]\MessageBreak
FootnoteSplit [false]\MessageBreak
+ ShortFinalWord [false]\MessageBreak
\MessageBreak
*********************************************%
\MessageBreak Lua-typo [ShowOptions]
@@ -954,6 +974,7 @@ luatypo = { }
luatypo.Stretch = tex.count.luatypoStretchMax
luatypo.MinFull = tex.count.luatypoMinFull
luatypo.MinPart = tex.count.luatypoMinPart
+ luatypo.MinLen = tex.count.luatypoMinLen
luatypo.LLminWD = tex.dimen.luatypoLLminWD
luatypo.BackPI = tex.dimen.luatypoBackPI
luatypo.BackFuzz = tex.dimen.luatypoBackFuzz
@@ -1004,8 +1025,8 @@ luatypo = { }
% lines. The first argument is a language name, say \opt{french},
% which is turned into a command |\l@french| expanding to a number
% known by luatex, otherwise an error message occurs.
-% The UTF8 string entered as second argument has to be converted
-% into the font internal coding.
+% The utf-8 string entered as second argument has to be
+% converted into the font internal coding.
% \begin{macrocode}
\newcommand*{\luatypoOneChar}[2]{%
\def\luatypo@LANG{#1}\luatypo@single={#2}%
@@ -1016,7 +1037,7 @@ luatypo = { }
local string = \the\luatypo@single
luatypo.single[langno] = " "
for p, c in utf8.codes(string) do
- local s = string.char(c)
+ local s = utf8.char(c)
luatypo.single[langno] = luatypo.single[langno] .. s
end
%<dbg> texio.write_nl("SINGLE=" .. luatypo.single[langno])
@@ -1035,7 +1056,7 @@ luatypo = { }
local string = \the\luatypo@double
luatypo.double[langno] = " "
for p, c in utf8.codes(string) do
- local s = string.char(c)
+ local s = utf8.char(c)
luatypo.double[langno] = luatypo.double[langno] .. s
end
%<dbg> texio.write_nl("DOUBLE=" .. luatypo.double[langno])
@@ -1087,14 +1108,11 @@ char_to_discard[string.byte(":")] = true
char_to_discard[string.byte(";")] = true
char_to_discard[string.byte("-")] = true
-local split_lig = { }
-split_lig[0xFB00] = "ff"
-split_lig[0xFB01] = "fi"
-split_lig[0xFB02] = "fl"
-split_lig[0xFB03] = "ffi"
-split_lig[0xFB04] = "ffl"
-split_lig[0xFB05] = "st"
-split_lig[0xFB06] = "st"
+local eow_char = { }
+eow_char[string.byte(".")] = true
+eow_char[string.byte("!")] = true
+eow_char[string.byte("?")] = true
+eow_char[utf8.codepoint("…")] = true
local DISC = node.id("disc")
local GLYPH = node.id("glyph")
@@ -1134,10 +1152,13 @@ local HYPH = 0x2D
% \begin{macrocode}
local LIGA = 0x102
% \end{macrocode}
-% |parline| (current paragraph) must not be reset on every new page!
+% Counter |parline| (current paragraph) \emph{must not be reset}
+% on every new page!
% \begin{macrocode}
local parline = 0
-
+% \end{macrocode}
+% Local definitions for the `node’ library:
+% \begin{macrocode}
local dimensions = node.dimensions
local rangedimensions = node.rangedimensions
local effective_glue = node.effective_glue
@@ -1148,13 +1169,44 @@ local traverse_id = node.traverse_id
local has_field = node.has_field
local uses_font = node.uses_font
local is_glyph = node.is_glyph
-
% \end{macrocode}
+% Local definitions from the `unicode.utf8’ library: replacements are
+% needed for functions |string.gsub()|, |string.find()| and
+% |string.reverse()| which are meant for one-byte characters only.
+%
+% \changes{v0.65}{2023/03/02}{Three new functions for utf-8 strings’
+% manipulations.}
%
-% \changes{v0.32}{2021/03/14}{Better protection against unexpected
+% |utf8_find| requires an utf-8 string and a `pattern’ (also utf-8),
+% it returns |nil| if pattern is not found, or the \emph{byte}
+% position of the first match otherwise [not an issue as we only
+% care for true/false].
+% \begin{macrocode}
+local utf8_find = unicode.utf8.find
+% \end{macrocode}
+% |utf8_gsub| mimics |string.gsub| for utf-8 strings.
+% \begin{macrocode}
+local utf8_gsub = unicode.utf8.gsub
+% \end{macrocode}
+% |utf8_reverse| returns the reversed string (utf-8 chars read from
+% end to beginning) [same as |string.reverse| but for utf-8 strings].
+% \begin{macrocode}
+local utf8_reverse = function (s)
+ if utf8.len(s) > 1 then
+ local so = ""
+ for p, c in utf8.codes(s) do
+ so = utf8.char(c) .. so
+ end
+ s = so
+ end
+ return s
+end
+% \end{macrocode}
+%
+%\changes{v0.32}{2021/03/14}{Better protection against unexpected
% nil nodes.}
%
-% This auxillary function colours glyphs and discretionaries.
+% The next function colours glyphs and discretionaries.
% It requires two arguments: a node and a (named) colour.
%
% \begin{macrocode}
@@ -1166,34 +1218,20 @@ local color_node = function (node, color)
local repl = node.replace
if pre then
set_attribute(pre,attr,color)
-%<dbg> texio.write_nl('PRE=' .. tostring(pre.char))
end
if post then
set_attribute(post,attr,color)
-%<dbg> if pre then
-%<dbg> texio.write(' POST=' .. tostring(post.char))
-%<dbg> else
-%<dbg> texio.write_nl('POST=' .. tostring(post.char))
-%<dbg> end
end
if repl then
set_attribute(repl,attr,color)
-%<dbg> if pre or post then
-%<dbg> texio.write(' REPL=' .. tostring(repl.char))
-%<dbg> else
-%<dbg> texio.write_nl('REPL=' .. tostring(repl.char))
-%<dbg> end
end
-%<dbg> if pre or post or repl then
-%<dbg> texio.write_nl(' ')
-%<dbg> end
elseif node then
set_attribute(node,attr,color)
end
end
% \end{macrocode}
%
-% This auxillary function colours a whole line. It requires two
+% The nextfunction colours a whole line. It requires two
% arguments: a line’s node and a (named) colour.\par
% Digging into nested hlists and vlists is needed f.i.\ to colour
% aligned equations.
@@ -1245,9 +1283,9 @@ local color_line = function (head, color)
end
% \end{macrocode}
%
-% This function appends a line to a buffer which will be written
-% to file `\cs{jobname.typo}’; it takes four arguments:
-% a string, two numbers (which can be \node{nil}) and a flag.
+% The next function takes four arguments: a string, two numbers
+% (which can be \node{nil}) and a flag. It appends a line to
+% a buffer which will be written to file `\cs{jobname.typo}’.
%
% \changes{v0.50}{2021/05/13}{Summary of flaws written to file
% `\cs{jobname.typo}’.}
@@ -1277,77 +1315,72 @@ end
% While comparing two words, the only significant nodes are glyphs
% and ligatures, dicretionnaries other than ligatures, kerns
% (letterspacing) should be discarded.
-% For each word to be compared we build a ``signature'' made of
+% For each word to be compared we build a ``signature’’ made of
% glyphs and split ligatures.
%
-% \changes{v0.32}{2021/03/14}{Experimental code to deal with non
-% standard ligatures.}
+% \changes{v0.65}{2023/03/02}{All ligatures are now split using the
+% node’s `components’ field rather than a table.}
%
% The first function adds a node to a signature of type string.
% It returns the augmented string and its length.
% The last argument is a boolean needed when building a signature
-% backwards (see |check_last_word|).
+% backwards (see |check_line_last_word|).
% \begin{macrocode}
local signature = function (node, string, swap)
local n = node
local str = string
if n and n.id == GLYPH then
- local b, id = is_glyph(n)
- if b and not char_to_discard[b] then
-% \end{macrocode}
-% Punctuation has to be discarded; the French apostrophe
-% (right quote U+2019) has a char code ``out of range'',
-% we replace it with U+0027;
-% Other glyphs should have char codes less than 0x100 (or 0x180?) or
-% be ligatures… standard ones (U+FB00 to U+FB06) are converted using
-% table |split_lig|.
-% \begin{macrocode}
- if b == 0x2019 then b = 0x27 end
- if b < 0x100 then
- str = str .. string.char(b)
- elseif split_lig[b] then
- local c = split_lig[b]
- if swap then
- c = string.reverse(c)
- end
- str = str .. c
+ local b = n.char
+ if b and not char_to_discard[b] then
% \end{macrocode}
-% Experimental: store other ligatures as the last two digits of their
-% decimal code…
+% Punctuation has to be discarded; other glyphs may be ligatures,
+% then they have a |components| field which holds the list of glyphs
+% which compose the ligature.
% \begin{macrocode}
- elseif n.subtype == LIGA and b > 0xE000 then
- local c = string.sub(b,-2)
- if swap then
- c = string.reverse(c)
- end
- str = str .. c
- end
- end
+ if n.components then
+ local c = ""
+ for nn in traverse_id(GLYPH, n.components) do
+ c = c .. utf8.char(nn.char)
+ end
+ if swap then
+ str = str .. utf8_reverse(c)
+ else
+ str = str .. c
+ end
+ else
+ str = str .. utf8.char(b)
+ end
+ end
elseif n and n.id == DISC then
% \end{macrocode}
-% Ligatures are split into |pre| and |post| and both parts are
-% stored. In case of \emph{ffl, ffi}, the post part is also
-% a ligature…
+% Discretionaries are split into |pre| and |post| and both parts
+% are stored. They might be ligatures (\emph{ffl, ffi})…
% \begin{macrocode}
local pre = n.pre
local post = n.post
local c1 = ""
local c2 = ""
- if pre and pre.char and pre.char ~= HYPH and pre.char < 0x100 then
- c1 = string.char(pre.char)
+ if pre and pre.char then
+ if pre.components then
+ for nn in traverse_id(GLYPH, post.components) do
+ c1 = c1 .. utf8.char(nn.char)
+ end
+ else
+ c1 = utf8.char(pre.char)
+ end
+ c1 = utf8_gsub(c1, "-", "")
end
if post and post.char then
- if post.char < 0x100 then
- c2 = string.char(post.char)
- elseif split_lig[post.char] then
- c2 = split_lig[post.char]
- if swap then
- c2 = string.reverse(c2)
+ if post.components then
+ for nn in traverse_id(GLYPH, post.components) do
+ c2 = c2 .. utf8.char(nn.char)
end
+ else
+ c2 = utf8.char(post.char)
end
end
if swap then
- str = str .. c2 .. c1
+ str = str .. utf8_reverse(c2) .. c1
else
str = str .. c1 .. c2
end
@@ -1355,39 +1388,39 @@ local signature = function (node, string, swap)
% \end{macrocode}
% The returned length is the number of \emph{letters}.
% \begin{macrocode}
- local len = string.len(str)
- if string.find(str, "_") then
+ local len = utf8.len(str)
+ if utf8_find(str, "_") then
len = len - 1
end
return len, str
end
% \end{macrocode}
%
-% This auxillary function looks for consecutive lines ending with the
-% same letters.\par
+% The next function looks for consecutive lines ending with
+% the same letters.\par
% It requires five arguments: a string (previous line’s signature),
% a node (the last one on the current line), a line number, a column
% number (possibly |nil|) and a boolean to cancel checking in some
-% cases (end of paragraphs).\par
+% cases (end of paragraphs).
% It prints the matching part at end of linewith with the supplied
% colour and returns the current line’s last word and a boolean (match).
%
-% \changes{v0.32}{2021/03/14}{Functions `check\_first\_word’ and
-% `check\_last\_word’ rewritten.}
+% \changes{v0.32}{2021/03/14}{Functions `check\_line\_first\_word’ and
+% `check\_line\_last\_word’ rewritten.}
%
% \changes{v0.50}{2021/05/13}{Homeoarchy detection added for lines
% starting or ending on \cs{mbox}.}
%
-% \changes{v0.61}{2023/02/06}{`check\_last\_word’ returns a flag
+% \changes{v0.61}{2023/02/06}{`check\_line\_last\_word’ returns a flag
% to set pageflag.}
%
% \begin{macrocode}
-local check_last_word = function (old, node, line, colno, flag)
+local check_line_last_word = function (old, node, line, colno, flag)
local COLOR = luatypo.colortbl[11]
local match = false
local new = ""
local maxlen = 0
- if flag and node then
+ if node then
local swap = true
local box, go
% \end{macrocode}
@@ -1431,69 +1464,91 @@ local check_last_word = function (old, node, line, colno, flag)
maxlen, new = signature (n, new, swap)
until not n or n.id == GLUE
end
- new = string.reverse(new)
-%<dbg> texio.write_nl('EOLsigold=' .. old)
-%<dbg> texio.write(' EOLsig=' .. new)
- local MinFull = luatypo.MinFull
- local MinPart = luatypo.MinPart
- MinFull = math.min(MinPart,MinFull)
- local k = MinPart
- local oldlast = string.gsub (old, '.*_', '')
- local newlast = string.gsub (new, '.*_', '')
- local i = string.find(new, "_")
- if i and i > maxlen - MinPart + 1 then
- k = MinPart + 1
- end
- local oldsub = string.sub(old,-k)
- local newsub = string.sub(new,-k)
- local l = string.len(new)
- if oldsub == newsub and l >= k then
-%<dbg> texio.write_nl('EOLnewsub=' .. newsub)
- match = true
- elseif oldlast == newlast and string.len(newlast) >= MinFull then
-%<dbg> texio.write_nl('EOLnewlast=' .. newlast)
- match = true
- oldsub = oldlast
- newsub = newlast
- k = string.len(newlast)
- end
- if match then
+ new = utf8_reverse(new)
+%<dbg> texio.write_nl("EOLsigold=" .. old)
+%<dbg> texio.write(" EOLsig=" .. new)
% \end{macrocode}
-% Minimal partial match; any more glyphs matching?
+% When called with flag |false|, |check_line_last_word| returns
+% the last word’s signature, but doesn’t compare it with the
+% previous line’s.
% \begin{macrocode}
- local osub = oldsub
- local nsub = newsub
- while osub == nsub and k <= maxlen do
- k = k +1
- osub = string.sub(old,-k)
- nsub = string.sub(new,-k)
- if osub == nsub then
- newsub = nsub
+ if flag then
+ local MinFull = luatypo.MinFull
+ local MinPart = luatypo.MinPart
+ MinFull = math.min(MinPart,MinFull)
+ local k = MinPart
+ local dlo = utf8_reverse(old)
+ local wen = utf8_reverse(new)
+ local oldlast = utf8_gsub (old, ".*_", "_")
+ local newlast = utf8_gsub (new, ".*_", "_")
+ local i
+ if utf8_find(newlast, "_") then
+ i = utf8.len(newlast)
+ end
+ if i and i > maxlen - MinPart + 1 then
+ k = MinPart + 1
+ end
+ local oldsub = ""
+ local newsub = ""
+ for p, c in utf8.codes(dlo) do
+ if utf8.len(oldsub) < k then
+ oldsub = utf8.char(c) .. oldsub
end
end
- newsub = string.gsub(newsub, '^_', '')
-%<dbg> texio.write_nl('EOLfullmatch=' .. newsub)
- local msg = "E.O.L. MATCH=" .. newsub
- log_flaw(msg, line, colno, footnote)
+ for p, c in utf8.codes(wen) do
+ if utf8.len(newsub) < k then
+ newsub = utf8.char(c) .. newsub
+ end
+ end
+ local l = utf8.len(new)
+ if oldsub == newsub and l >= k then
+%<dbg> texio.write_nl("EOLnewsub=" .. newsub)
+ match = true
+ elseif oldlast == newlast and utf8.len(newlast) > MinFull then
+%<dbg> texio.write_nl("EOLnewlast=" .. newlast)
+ match = true
+ oldsub = oldlast
+ newsub = newlast
+ k = utf8.len(newlast)
+ end
+ if match then
+% \end{macrocode}
+% Minimal partial match; any more glyphs matching?
+% \begin{macrocode}
+ local osub = oldsub
+ local nsub = newsub
+ while osub == nsub and k <= maxlen do
+ k = k +1
+ osub = string.sub(old,-k)
+ nsub = string.sub(new,-k)
+ if osub == nsub then
+ newsub = nsub
+ end
+ end
+ newsub = utf8_gsub(newsub, "^_", "")
+%<dbg> texio.write_nl("EOLfullmatch=" .. newsub)
+ local msg = "E.O.L. MATCH=" .. newsub
+ log_flaw(msg, line, colno, footnote)
% \end{macrocode}
% Lest’s colour the matching string.
% \begin{macrocode}
- oldsub = string.reverse(newsub)
- local newsub = ""
- local n = lastn
- repeat
- if n and n.id ~= GLUE then
- color_node(n, COLOR)
- l, newsub = signature(n, newsub, swap)
- elseif n and n.id == GLUE then
- newsub = newsub .. "_"
- elseif not n and box then
- n = box
- else
- break
- end
- n = n.prev
- until newsub == oldsub or l >= k
+ oldsub = utf8_reverse(newsub)
+ local newsub = ""
+ local n = lastn
+ repeat
+ if n and n.id ~= GLUE then
+ color_node(n, COLOR)
+ l, newsub = signature(n, newsub, swap)
+ elseif n and n.id == GLUE then
+ newsub = newsub .. "_"
+ elseif not n and box then
+ n = box
+ else
+ break
+ end
+ n = n.prev
+ until newsub == oldsub or l >= k
+ end
end
end
return new, match
@@ -1503,11 +1558,11 @@ end
% Same thing for beginning of lines: check the first two words
% and compare their signature with the previous line’s.
%
-% \changes{v0.61}{2023/02/06}{`check\_first\_word’ returns a flag
+% \changes{v0.61}{2023/02/06}{`check\_line\_first\_word’ returns a flag
% to set pageflag.}
%
% \begin{macrocode}
-local check_first_word = function (old, node, line, colno, flag)
+local check_line_first_word = function (old, node, line, colno, flag)
local COLOR = luatypo.colortbl[10]
local match = false
local swap = false
@@ -1548,10 +1603,10 @@ local check_first_word = function (old, node, line, colno, flag)
maxlen, new = signature (n, new, swap)
until not n or n.id == GLUE
end
-%<dbg> texio.write_nl('BOLsigold=' .. old)
-%<dbg> texio.write(' BOLsig=' .. new)
+%<dbg> texio.write_nl("BOLsigold=" .. old)
+%<dbg> texio.write(" BOLsig=" .. new)
% \end{macrocode}
-% When called with flag |false|, |check_first_word| returns
+% When called with flag |false|, |check_line_first_word| returns
% the first word’s signature, but doesn’t compare it with the
% previous line’s.
% \begin{macrocode}
@@ -1560,26 +1615,33 @@ local check_first_word = function (old, node, line, colno, flag)
local MinPart = luatypo.MinPart
MinFull = math.min(MinPart,MinFull)
local k = MinPart
- local oldsub = ""
- local newsub = ""
- local oldfirst = string.gsub (old, '_.*', '')
- local newfirst = string.gsub (new, '_.*', '')
- local i = string.find(new, "_")
+ local oldfirst = utf8_gsub (old, "_.*", "_")
+ local newfirst = utf8_gsub (new, "_.*", "_")
+ local i
+ if utf8_find(newfirst, "_") then
+ i = utf8.len(newfirst)
+ end
if i and i <= MinPart then
k = MinPart + 1
end
- local oldsub = string.sub(old,1,k)
- local newsub = string.sub(new,1,k)
- local l = string.len(newsub)
+ local oldsub = ""
+ local newsub = ""
+ for p, c in utf8.codes(old) do
+ if utf8.len(oldsub) < k then oldsub = oldsub .. utf8.char(c) end
+ end
+ for p, c in utf8.codes(new) do
+ if utf8.len(newsub) < k then newsub = newsub .. utf8.char(c) end
+ end
+ local l = utf8.len(newsub)
if oldsub == newsub and l >= k then
-%<dbg> texio.write_nl('BOLnewsub=' .. newsub)
+%<dbg> texio.write_nl("BOLnewsub=" .. newsub)
match = true
- elseif oldfirst == newfirst and string.len(newfirst) >= MinFull then
-%<dbg> texio.write_nl('BOLnewfirst=' .. newfirst)
+ elseif oldfirst == newfirst and utf8.len(newfirst) > MinFull then
+%<dbg> texio.write_nl("BOLnewfirst=" .. newfirst)
match = true
oldsub = oldfirst
newsub = newfirst
- k = string.len(newfirst)
+ k = utf8.len(newfirst)
end
if match then
% \end{macrocode}
@@ -1595,8 +1657,8 @@ local check_first_word = function (old, node, line, colno, flag)
newsub = nsub
end
end
- newsub = string.gsub(newsub, '_$', '') --$
-%<dbg> texio.write_nl('BOLfullmatch=' .. newsub)
+ newsub = utf8_gsub(newsub, "_$", "") --$
+%<dbg> texio.write_nl("BOLfullmatch=" .. newsub)
local msg = "B.O.L. MATCH=" .. newsub
log_flaw(msg, line, colno, footnote)
% \end{macrocode}
@@ -1604,7 +1666,7 @@ local check_first_word = function (old, node, line, colno, flag)
% \begin{macrocode}
oldsub = newsub
local newsub = ""
- local k = string.len(oldsub)
+ local k = utf8.len(oldsub)
local n = start
repeat
if n and n.id ~= GLUE then
@@ -1625,13 +1687,79 @@ local check_first_word = function (old, node, line, colno, flag)
end
% \end{macrocode}
%
-% \pagebreak[4]
-% This auxillary function looks for a short word (one or two chars)
-% at end of lines, compares it to a given list and colours it if
-% matches. The first argument must be a node of type |GLYPH|,
+% \changes{v0.65}{2023/03/02}{New `check\_page\_first\_word’ function.}
+%
+% The next function checks the first word on a new page: if
+% it ends a sentence and is short (up to |luatypoMinLen| characters),
+% the function returns |true| and colors the offending word.
+% Otherwise it just retrurs |false|.
+% The function requires two arguments: the line’s first node and
+% a column number (possibly |nil|).
+%
+% \begin{macrocode}
+local check_page_first_word = function (node, colno)
+ local COLOR = luatypo.colortbl[14]
+ local match = false
+ local swap = false
+ local new = ""
+ local maxlen = luatypo.MinLen
+ local len = 0
+ local n = node
+ local pn
+ while n and n.id ~= GLYPH and n.id ~= DISC and
+ (n.id ~= HLIST or n.subtype == INDENT) do
+ n = n.next
+ end
+ local start = n
+ if n and n.id == HLIST then
+ start = n.head
+ n = n.head
+ end
+ repeat
+ len, new = signature (n, new, swap)
+ n = n.next
+ until len > maxlen or (n and n.id == GLYPH and eow_char[n.char]) or
+ (n and n.id == GLUE) or
+ (n and n.id == KERN and n.subtype == 1)
+% \end{macrocode}
+% In French `?’ and `!’ are preceded by a glue (babel) or a kern
+% (polyglossia).
+% \begin{macrocode}
+ if n and (n.id == GLUE or n.id == KERN) then
+ pn = n
+ n = n.next
+ end
+ if len <= maxlen and n and n.id == GLYPH and eow_char[n.char] then
+ match =true
+ if pn and (pn.id == GLUE or pn.id == KERN) then
+ new = new .. " "
+ len = len + 1
+ end
+ len = len + 1
+ end
+%<dbg> texio.write_nl("FinalWord=" .. new)
+ if match then
+ local msg = "ShortFinalWord=" .. new
+ log_flaw(msg, 1, colno, false)
+% \end{macrocode}
+% Lest’s colour the final word and punctuation sign.
+% \begin{macrocode}
+ local n = start
+ repeat
+ color_node(n, COLOR)
+ n = n.next
+ until eow_char[n.char]
+ color_node(n, COLOR)
+ end
+ return match
+end
+% \end{macrocode}
+%
+% The next function looks for a short word (one or two
+% chars) at end of lines, compares it to a given list and colours it
+% if matches. The first argument must be a node of type |GLYPH|,
% usually the last line’s node, the next two are the line and
-% column number.\par
-% TODO: where does ``out of range’’ starts? U+0100? U+0180?
+% column number.
%
% \changes{v0.61}{2023/02/06}{`check\_regexpr’ returns a flag
% to set pageflag in `check\_vtop’.}
@@ -1651,11 +1779,11 @@ local check_regexpr = function (glyph, line, colno)
% \end{macrocode}
% For single char words, the previous node is a glue.
% \begin{macrocode}
- if lchar and lchar < 0x100 and previous and previous.id == GLUE then
- match = string.find(luatypo.single[lang], string.char(lchar))
+ if lchar and previous and previous.id == GLUE then
+ match = utf8_find(luatypo.single[lang], utf8.char(lchar))
if match then
retflag = true
- local msg = "RGX MATCH=" .. string.char(lchar)
+ local msg = "RGX MATCH=" .. utf8.char(lchar)
log_flaw(msg, line, colno, footnote)
color_node(glyph,COLOR)
end
@@ -1671,9 +1799,9 @@ local check_regexpr = function (glyph, line, colno)
% \end{macrocode}
% For two chars words, the previous node is a glue…
% \begin{macrocode}
- if pchar and pchar < 0x100 and pprev and pprev.id == GLUE then
- local pattern = string.char(pchar) .. string.char(lchar)
- match = string.find(luatypo.double[lang], pattern)
+ if pchar and pprev and pprev.id == GLUE then
+ local pattern = utf8.char(pchar) .. utf8.char(lchar)
+ match = utf8_find(luatypo.double[lang], pattern)
if match then
retflag = true
local msg = "RGX MATCH=" .. pattern
@@ -1690,10 +1818,9 @@ local check_regexpr = function (glyph, line, colno)
if pprev and pprev.id == GLYPH then
local pchar, id = is_glyph(pprev)
local ppprev = pprev.prev
- if pchar and pchar < 0x100 and
- ppprev and ppprev.id == GLUE then
- local pattern = string.char(pchar) .. string.char(lchar)
- match = string.find(luatypo.double[lang], pattern)
+ if pchar and ppprev and ppprev.id == GLUE then
+ local pattern = utf8.char(pchar) .. utf8.char(lchar)
+ match = utf8_find(luatypo.double[lang], pattern)
if match then
retflag = true
local msg = "REGEXP MATCH=" .. pattern
@@ -1709,8 +1836,8 @@ return retflag
end
% \end{macrocode}
%
-% This auxillary function prints the first part of an hyphenated word
-% up to the discretionary, with a supplied colour.
+% The next function prints the first part of an hyphenated
+% word up to the discretionary, with a supplied colour.
% It requires two arguments: a \node{disc} node and a (named) colour.
%
% \begin{macrocode}
@@ -1725,7 +1852,7 @@ local show_pre_disc = function (disc, color)
% \end{macrocode}
%
% \begin{macro}{footnoterule-ahead}
-% This auxillary function scans the current \node{vlist} in search
+% The next function scans the current \node{vlist} in search
% of a |\footnoterule|; it returns |true| if found, false otherwise.
% The \node{rule} node above footnotes is normaly surrounded by
% two (vertical) \node{kern} nodes, the total height is either
@@ -1759,11 +1886,11 @@ local footnoterule_ahead = function (head)
if totalht == 0 or totalht == ruleht then
flag = true
else
-%<dbg> texio.write_nl(' ')
-%<dbg> texio.write_nl('Not a footnoterule:')
-%<dbg> texio.write(' KERN height=' .. ht1)
-%<dbg> texio.write(' RULE height=' .. ht2)
-%<dbg> texio.write(' KERN height=' .. ht3)
+%<dbg> texio.write_nl(" ")
+%<dbg> texio.write_nl("Not a footnoterule:")
+%<dbg> texio.write(" KERN height=" .. ht1)
+%<dbg> texio.write(" RULE height=" .. ht2)
+%<dbg> texio.write(" KERN height=" .. ht3)
end
end
end
@@ -1774,7 +1901,7 @@ end
% \end{macro}
%
% \begin{macro}{get-pagebody}
-% This auxillary function scans the \node{vlist}s on the current
+% The next function scans the \node{vlist}s on the current
% page in search of the page body.
% It returns the corresponding node or nil in case of failure.
%
@@ -1789,29 +1916,29 @@ local get_pagebody = function (head)
repeat
fn = fn.next
until fn.id == VLIST and fn.height > 0
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl(" ")
%<dbg> local ht = string.format("%.1fpt", fn.height/65536)
%<dbg> local dp = string.format("%.1fpt", fn.depth/65536)
-%<dbg> texio.write_nl('get_pagebody: TOP VLIST')
-%<dbg> texio.write(' ht=' .. ht .. ' dp=' .. dp)
+%<dbg> texio.write_nl("get_pagebody: TOP VLIST")
+%<dbg> texio.write(" ht=" .. ht .. " dp=" .. dp)
first = fn.list
for n in traverse_id(VLIST,first) do
if n.subtype == 0 and n.height == textht then
%<dbg> local ht = string.format("%.1fpt", n.height/65536)
-%<dbg> texio.write_nl('BODY found: ht=' .. ht)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("BODY found: ht=" .. ht)
+%<dbg> texio.write_nl(" ")
body = n
break
else
-%<dbg> texio.write_nl('Skip short VLIST:')
+%<dbg> texio.write_nl("Skip short VLIST:")
%<dbg> local ht = string.format("%.1fpt", n.height/65536)
%<dbg> local dp = string.format("%.1fpt", n.depth/65536)
-%<dbg> texio.write(' ht=' .. ht .. ' dp=' .. dp)
+%<dbg> texio.write(" ht=" .. ht .. " dp=" .. dp)
first = n.list
for n in traverse_id(VLIST,first) do
if n.subtype == 0 and n.height == textht then
%<dbg> local ht = string.format("%.1fpt", n.height/65536)
-%<dbg> texio.write_nl(' BODY: ht=' .. ht)
+%<dbg> texio.write_nl(" BODY: ht=" .. ht)
body = n
break
end
@@ -1819,7 +1946,7 @@ local get_pagebody = function (head)
end
end
if not body then
- texio.write_nl('***lua-typo ERROR: PAGE BODY *NOT* FOUND!***')
+ texio.write_nl("***lua-typo ERROR: PAGE BODY *NOT* FOUND!***")
end
return body
end
@@ -1827,7 +1954,7 @@ end
% \end{macro}
%
% \begin{macro}{check-vtop}
-% This function is called repeatedly by |check_page| (see below);
+% The next function is called repeatedly by |check_page| (see below);
% it scans the boxes found in the page body (f.i. columns)
% in search of typographical flaws and logs.
%
@@ -1863,6 +1990,7 @@ check_vtop = function (head, colno, vpos)
local EOLShortWords = luatypo.EOLShortWords
local LastWordMatch = luatypo.LastWordMatch
local FootnoteSplit = luatypo.FootnoteSplit
+ local ShortFinalWord = luatypo.ShortFinalWord
local Stretch = math.max(luatypo.Stretch/100,1)
local blskip = tex.getglue("baselineskip")
local vpos_min = PAGEmin * blskip
@@ -1904,6 +2032,7 @@ check_vtop = function (head, colno, vpos)
vpos = vpos + head.height + head.depth
local linewd = head.width
local first = head.head
+ local ListItem = false
if footnote then
ftnline = ftnline + 1
line = ftnline
@@ -1926,9 +2055,9 @@ check_vtop = function (head, colno, vpos)
body_bottom = true
elseif footnoterule_ahead(n) then
body_bottom = true
-%<dbg> texio.write_nl('=> FOOTNOTE RULE ahead')
-%<dbg> texio.write_nl('check_vtop: last line before footnotes')
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("=> FOOTNOTE RULE ahead")
+%<dbg> texio.write_nl("check_vtop: last line before footnotes")
+%<dbg> texio.write_nl(" ")
end
% \end{macrocode}
% Is the current line overfull or underfull?
@@ -1954,6 +2083,7 @@ check_vtop = function (head, colno, vpos)
color_line (head, COLOR)
end
% \end{macrocode}
+% \enlargethispage*{2\baselineskip}
% Set flag |ftnsplit| to |true| on every page’s last line.
% This flag will be reset to false if the current line ends a
% paragraph.
@@ -1976,7 +2106,6 @@ check_vtop = function (head, colno, vpos)
(first.id == GLUE and first.subtype == LFTSKIP) do
first = first.next
end
- local ListItem = false
% \end{macrocode}
% Now let’s analyse the beginning of the current line.
% \begin{macrocode}
@@ -1987,6 +2116,8 @@ check_vtop = function (head, colno, vpos)
% they are frozen in footnotes).
% \begin{macrocode}
hyphcount = 0
+ firstwd = ""
+ lastwd = ""
if not footnote then
parline = 1
if body_bottom then
@@ -2043,8 +2174,8 @@ check_vtop = function (head, colno, vpos)
local llwd = linewd - PFskip
%<dbg> local PFskip_pt = string.format("%.1fpt", PFskip/65536)
%<dbg> local llwd_pt = string.format("%.1fpt", llwd/65536)
-%<dbg> texio.write_nl('PFskip= ' .. PFskip_pt)
-%<dbg> texio.write(' llwd= ' .. llwd_pt)
+%<dbg> texio.write_nl("PFskip= " .. PFskip_pt)
+%<dbg> texio.write(" llwd= " .. llwd_pt)
% \end{macrocode}
% |llwd| is the line’s length. Is it too short?
% \begin{macrocode}
@@ -2095,7 +2226,7 @@ check_vtop = function (head, colno, vpos)
if FirstWordMatch then
local flag = not ListItem
firstwd, flag =
- check_first_word(firstwd, first, line, colno, flag)
+ check_line_first_word(firstwd, first, line, colno, flag)
if flag then
pageflag = true
end
@@ -2109,7 +2240,7 @@ check_vtop = function (head, colno, vpos)
flag = false
end
lastwd, flag =
- check_last_word(lastwd, pn, line, colno, flag)
+ check_line_last_word(lastwd, pn, line, colno, flag)
if flag then
pageflag = true
end
@@ -2123,46 +2254,46 @@ check_vtop = function (head, colno, vpos)
% Colour the whole line now if it is a orphan or a footnote
% continuing on the next page.
% \begin{macrocode}
- if orphanflag and Orphans then
- pageflag = true
- local msg = "ORPHAN"
- log_flaw(msg, line, colno, footnote)
- local COLOR = luatypo.colortbl[5]
- color_line (head, COLOR)
- end
- if ftnsplit and FootnoteSplit then
- pageflag = true
- local msg = "FOOTNOTE SPLIT"
- log_flaw(msg, line, colno, footnote)
- local COLOR = luatypo.colortbl[13]
- color_line (head, COLOR)
- end
- if (page_bottom or body_bottom) and EOPHyphens then
+ if orphanflag and Orphans then
+ pageflag = true
+ local msg = "ORPHAN"
+ log_flaw(msg, line, colno, footnote)
+ local COLOR = luatypo.colortbl[5]
+ color_line (head, COLOR)
+ end
+ if ftnsplit and FootnoteSplit then
+ pageflag = true
+ local msg = "FOOTNOTE SPLIT"
+ log_flaw(msg, line, colno, footnote)
+ local COLOR = luatypo.colortbl[13]
+ color_line (head, COLOR)
+ end
+ if (page_bottom or body_bottom) and EOPHyphens then
% \end{macrocode}
% This hyphen occurs on the page’s last line (body or footnote),
% colour (differently) the last word.
% \begin{macrocode}
- pageflag = true
- local msg = "LAST WORD SPLIT"
- log_flaw(msg, line, colno, footnote)
- local COLOR = luatypo.colortbl[1]
- local pg = show_pre_disc (pn,COLOR)
- end
+ pageflag = true
+ local msg = "LAST WORD SPLIT"
+ log_flaw(msg, line, colno, footnote)
+ local COLOR = luatypo.colortbl[1]
+ local pg = show_pre_disc (pn,COLOR)
+ end
% \end{macrocode}
% Track matching words at the beginning and end of line.
% \begin{macrocode}
if FirstWordMatch then
local flag = not ListItem
firstwd, flag =
- check_first_word(firstwd, first, line, colno, flag)
+ check_line_first_word(firstwd, first, line, colno, flag)
if flag then
pageflag = true
end
end
if LastWordMatch then
- local flag = false
+ local flag = true
lastwd, flag =
- check_last_word(lastwd, ln, line, colno, true)
+ check_line_last_word(lastwd, ln, line, colno, flag)
if flag then
pageflag = true
end
@@ -2206,36 +2337,36 @@ check_vtop = function (head, colno, vpos)
% Colour the whole line now if it is a orphan or a footnote
% continuing on the next page.
% \begin{macrocode}
- if orphanflag and Orphans then
- pageflag = true
- local msg = "ORPHAN"
- log_flaw(msg, line, colno, footnote)
- local COLOR = luatypo.colortbl[5]
- color_line (head, COLOR)
- end
- if ftnsplit and FootnoteSplit then
- pageflag = true
- local msg = "FOOTNOTE SPLIT"
- log_flaw(msg, line, colno, footnote)
- local COLOR = luatypo.colortbl[13]
- color_line (head, COLOR)
- end
+ if orphanflag and Orphans then
+ pageflag = true
+ local msg = "ORPHAN"
+ log_flaw(msg, line, colno, footnote)
+ local COLOR = luatypo.colortbl[5]
+ color_line (head, COLOR)
+ end
+ if ftnsplit and FootnoteSplit then
+ pageflag = true
+ local msg = "FOOTNOTE SPLIT"
+ log_flaw(msg, line, colno, footnote)
+ local COLOR = luatypo.colortbl[13]
+ color_line (head, COLOR)
+ end
% \end{macrocode}
-% Track matching words at the beginning and end of line and shot
+% Track matching words at the beginning and end of line and short
% words.
% \begin{macrocode}
if FirstWordMatch then
local flag = not ListItem
firstwd, flag =
- check_first_word(firstwd, first, line, colno, flag)
+ check_line_first_word(firstwd, first, line, colno, flag)
if flag then
pageflag = true
end
end
if LastWordMatch and pn then
- local flag
+ local flag = true
lastwd, flag =
- check_last_word(lastwd, pn, line, colno, true)
+ check_line_last_word(lastwd, pn, line, colno, flag)
if flag then
pageflag = true
end
@@ -2252,6 +2383,13 @@ check_vtop = function (head, colno, vpos)
end
end
% \end{macrocode}
+% Check the page’s first word (end of sentence?).
+% \begin{macrocode}
+ if ShortFinalWord and pageline == 1 and parline > 1 and
+ check_page_first_word(first,colno) then
+ pageflag = true
+ end
+% \end{macrocode}
% End of scanning for the main type of node (text lines).
% \begin{macrocode}
elseif head.id == HLIST and
@@ -2323,8 +2461,8 @@ check_vtop = function (head, colno, vpos)
% set the |footnote| flag and reset some counters and flags
% for the coming footnote lines.
% \begin{macrocode}
-%<dbg> texio.write_nl('check_vtop: footnotes start')
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("check_vtop: footnotes start")
+%<dbg> texio.write_nl(" ")
footnote = true
ftnline = 0
body_bottom = false
@@ -2342,15 +2480,15 @@ check_vtop = function (head, colno, vpos)
if first_bot then
%<dbg> local vpos_pt = string.format("%.1fpt", vpos/65536)
%<dbg> local vmin_pt = string.format("%.1fpt", vpos_min/65536)
-%<dbg> texio.write_nl('pageline=' .. pageline)
-%<dbg> texio.write_nl('vpos=' .. vpos_pt)
-%<dbg> texio.write(' vpos_min=' .. vmin_pt)
+%<dbg> texio.write_nl("pageline=" .. pageline)
+%<dbg> texio.write_nl("vpos=" .. vpos_pt)
+%<dbg> texio.write(" vpos_min=" .. vmin_pt)
%<dbg> if page_bottom then
%<dbg> local tht = tex.getdimen("textheight")
%<dbg> local tht_pt = string.format("%.1fpt", tht/65536)
-%<dbg> texio.write(' textheight=' .. tht_pt)
+%<dbg> texio.write(" textheight=" .. tht_pt)
%<dbg> end
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl(" ")
if pageline > 1 and pageline < PAGEmin and ShortPages then
pageshort = true
end
@@ -2388,21 +2526,21 @@ check_vtop = function (head, colno, vpos)
elseif head.id == HLIST and head.subtype == BOX then
local hf = head.list
if hf and hf.id == VLIST and hf.subtype == 0 then
-%<dbg> texio.write_nl('check_vtop: BREAK => multicol')
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("check_vtop: BREAK => multicol")
+%<dbg> texio.write_nl(" ")
break
end
end
head = nextnode
end
%<dbg> if nextnode then
-%<dbg> texio.write('Exit check_vtop, next=')
+%<dbg> texio.write("Exit check_vtop, next=")
%<dbg> texio.write(tostring(node.type(nextnode.id)))
-%<dbg> texio.write('-'.. nextnode.subtype)
+%<dbg> texio.write("-".. nextnode.subtype)
%<dbg> else
-%<dbg> texio.write_nl('Exit check_vtop, next=nil')
+%<dbg> texio.write_nl("Exit check_vtop, next=nil")
%<dbg> end
-%<dbg> texio.write_nl('')
+%<dbg> texio.write_nl("")
% \end{macrocode}
% Update the list of flagged pages avoiding duplicates:
% \begin{macrocode}
@@ -2451,8 +2589,8 @@ luatypo.check_page = function (head)
% of bowing, let’s step down one level.
% \begin{macrocode}
%<dbg> local boxwd = string.format("%.1fpt", first.width/65536)
-%<dbg> texio.write_nl('One step down: boxwd=' .. boxwd)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("One step down: boxwd=" .. boxwd)
+%<dbg> texio.write_nl(" ")
top = body.list
first = top.list
end
@@ -2461,9 +2599,9 @@ luatypo.check_page = function (head)
% \begin{macrocode}
while top do
first = top.list
-%<dbg> texio.write_nl('Page loop: top=' .. tostring(node.type(top.id)))
-%<dbg> texio.write('-' .. top.subtype)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("Page loop: top=" .. tostring(node.type(top.id)))
+%<dbg> texio.write("-" .. top.subtype)
+%<dbg> texio.write_nl(" ")
if top and top.id == VLIST and top.subtype == 0 and
top.width > textwd/2 then
% \end{macrocode}
@@ -2471,11 +2609,11 @@ luatypo.check_page = function (head)
% \begin{macrocode}
%<dbg> local boxht = string.format("%.1fpt", top.height/65536)
%<dbg> local boxwd = string.format("%.1fpt", top.width/65536)
-%<dbg> texio.write_nl('**VLIST: ')
+%<dbg> texio.write_nl("**VLIST: ")
%<dbg> texio.write(tostring(node.type(top.id)))
-%<dbg> texio.write('-' .. top.subtype)
-%<dbg> texio.write(' wd=' .. boxwd .. ' ht=' .. boxht)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write("-" .. top.subtype)
+%<dbg> texio.write(" wd=" .. boxwd .. " ht=" .. boxht)
+%<dbg> texio.write_nl(" ")
local next = check_vtop(first,colno,vpos)
if next then
top = next
@@ -2489,24 +2627,24 @@ luatypo.check_page = function (head)
% Two or more columns, each one is boxed in a vlist.\par
% Run |check_vtop| on every column.
% \begin{macrocode}
-%<dbg> texio.write_nl('**MULTICOL type1:')
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("**MULTICOL type1:")
+%<dbg> texio.write_nl(" ")
colno = 0
for n in traverse_id(VLIST, first) do
colno = colno + 1
col = n.list
-%<dbg> texio.write_nl('Start of col.' .. colno)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("Start of col." .. colno)
+%<dbg> texio.write_nl(" ")
check_vtop(col,colno,vpos)
-%<dbg> texio.write_nl('End of col.' .. colno)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("End of col." .. colno)
+%<dbg> texio.write_nl(" ")
end
colno = nil
top = top.next
-%<dbg> texio.write_nl('MULTICOL type1 END: next=')
+%<dbg> texio.write_nl("MULTICOL type1 END: next=")
%<dbg> texio.write(tostring(node.type(top.id)))
-%<dbg> texio.write('-' .. top.subtype)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write("-" .. top.subtype)
+%<dbg> texio.write_nl(" ")
elseif (top and top.id == HLIST and top.subtype == BOX) and
(first and first.id == HLIST and first.subtype == BOX) and
(first.height > 0 and first.width > 0) then
@@ -2515,19 +2653,19 @@ luatypo.check_page = function (head)
% holds a vlist.\par
% Run |check_vtop| on every column.
% \begin{macrocode}
-%<dbg> texio.write_nl('**MULTICOL type2:')
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("**MULTICOL type2:")
+%<dbg> texio.write_nl(" ")
colno = 0
for n in traverse_id(HLIST, first) do
colno = colno + 1
local nn = n.list
if nn and nn.list then
col = nn.list
-%<dbg> texio.write_nl('Start of col.' .. colno)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("Start of col." .. colno)
+%<dbg> texio.write_nl(" ")
check_vtop(col,colno,vpos)
-%<dbg> texio.write_nl('End of col.' .. colno)
-%<dbg> texio.write_nl(' ')
+%<dbg> texio.write_nl("End of col." .. colno)
+%<dbg> texio.write_nl(" ")
end
end
colno = nil
@@ -2543,18 +2681,17 @@ return luatypo.check_page
% \end{macrocode}
% \end{macro}
%
+% \changes{v0.50}{2021/05/02}{Callback `pre\_output\_filter’ replaced
+% by `pre\_shipout\_filter’, in the former the material is not boxed
+% yet and footnotes are not visible.}
+%
% NOTE: |effective_glue| requires a `parent’ node, as pointed out by
% Marcel Krüger on S.E., this implies using |pre_shipout_filter|
% instead of |pre_output_filter|.
%
% Add the |luatypo.check_page| function to the |pre_shipout_filter|
% callback (with priority 1 for colour attributes to be effective),
-% unless option |None| is selected ; remember that the |None|
-% boolean’s value is forwarded to Lua `AtEndOfPackage’…
-%
-% \changes{v0.50}{2021/05/02}{Callback `pre\_output\_filter’ replaced
-% by `pre\_shipout\_filter’, in the former the material is not boxed
-% yet and footnotes are not visible.}
+% unless option |None| is selected.
%
% \begin{macrocode}
\AtEndOfPackage{%
@@ -2567,17 +2704,16 @@ return luatypo.check_page
}
% \end{macrocode}
%
-% Load a local config file if present in LaTeX’s search path.\par
-% Otherwise, set reasonnable defaults.
+% Load a config file if present in LaTeX’s search path or
+% set reasonnable defaults.
%
-% \changes{v0.61}{2023/02/07}{Colours mygrey, myred renamed
+% \changes{v0.61}{2023/02/07}{Colours mygrey, myred renamed as
% LTgrey, LTred.}
%
% \begin{macrocode}
-
\InputIfFileExists{lua-typo.cfg}%
- {\PackageInfo{lua-typo.sty}{'lua-typo.cfg' file loaded}}%
- {\PackageInfo{lua-typo.sty}{'lua-typo.cfg' file not found.
+ {\PackageInfo{lua-typo.sty}{"lua-typo.cfg" file loaded}}%
+ {\PackageInfo{lua-typo.sty}{"lua-typo.cfg" file not found.
\MessageBreak Providing default values.}%
\definecolor{LTgrey}{gray}{0.6}%
\definecolor{LTred}{rgb}{1,0.55,0}
@@ -2595,6 +2731,7 @@ return luatypo.check_page
\luatypoSetColor{11}{LTred}% Last word matches
\luatypoSetColor{12}{LTgrey}% Paragraph ending on a nearly full line
\luatypoSetColor{13}{cyan}% Footnote split
+ \luatypoSetColor{14}{red}% Too short first (final) word on the page
\luatypoBackPI=1em\relax
\luatypoBackFuzz=2pt\relax
\ifdim\parindent=0pt \luatypoLLminWD=20pt\relax
@@ -2604,6 +2741,7 @@ return luatypo.check_page
\luatypoPageMin=5\relax
\luatypoMinFull=4\relax
\luatypoMinPART=4\relax
+ \luatypoMinLen=4\relax
}%
% \end{macrocode}
% \iffalse
@@ -2643,6 +2781,10 @@ return luatypo.check_page
\luatypoMinFull=3\relax
\luatypoMinPart=4\relax
+%% Minimum number of characters for the first word on a page if it ends
+%% a sentence.
+\luatypoMinLen=4\relax
+
%% Default colours = red, cyan, LTgrey
\definecolor{LTgrey}{gray}{0.6}
\definecolor{LTred}{rgb}{1,0.55,0}
@@ -2660,11 +2802,12 @@ return luatypo.check_page
\luatypoSetColor{11}{LTred} % Last word matches
\luatypoSetColor{12}{LTgrey}% Paragraph ending on a nearly full line
\luatypoSetColor{13}{cyan} % Footnote split
+\luatypoSetColor{14}{red} % Too short first (final) word on the page
%% Language specific settings (example for French):
%% short words (two letters max) to be avoided at end of lines.
-%%\luatypoOneChar{french}{'À Ô Y'}
-%%\luatypoTwoChars{french}{'Je Tu Il On Au De'}
+%%\luatypoOneChar{french}{"À Ô Y"}
+%%\luatypoTwoChars{french}{"Je Tu Il On Au De"}
% \end{macrocode}
%
% \iffalse
@@ -2729,12 +2872,12 @@ return luatypo.check_page
\AtVeryEndDocument{%
\directlua{
- texio.write_nl(' ')
- texio.write_nl('***************************')
- texio.write_nl('*** PAGE SCANNING ONLY: ***')
- texio.write_nl('*** NO CHECK PERFORMED! ***')
- texio.write_nl('***************************')
- texio.write_nl(' ')
+ texio.write_nl(" ")
+ texio.write_nl("***************************")
+ texio.write_nl("*** PAGE SCANNING ONLY: ***")
+ texio.write_nl("*** NO CHECK PERFORMED! ***")
+ texio.write_nl("***************************")
+ texio.write_nl(" ")
}%
}
@@ -2750,21 +2893,10 @@ luatypo.colortbl = { }
luatypo.pagelist = " "
local hyphcount = 0
-local parlines = 0
-local pagelines = 0
local pageno = 0
local prevno = 0
local pageflag = false
-local char_to_discard = { }
-char_to_discard[string.byte(",")] = true
-char_to_discard[string.byte(".")] = true
-char_to_discard[string.byte("!")] = true
-char_to_discard[string.byte("?")] = true
-char_to_discard[string.byte(":")] = true
-char_to_discard[string.byte(";")] = true
-char_to_discard[string.byte("-")] = true
-
local DISC = node.id("disc")
local GLYPH = node.id("glyph")
local GLUE = node.id("glue")
@@ -2807,24 +2939,24 @@ local get_pagebody = function (head)
first = fn.list
local ht = string.format("%.1fpt", fn.height/65536)
local dp = string.format("%.1fpt", fn.depth/65536)
- texio.write_nl('SKIP vlist: ht=' .. ht .. ' dp=' .. dp)
+ texio.write_nl("SKIP vlist: ht=" .. ht .. " dp=" .. dp)
for n in traverse_id(VLIST,first) do
if n.subtype == 0 and n.height == textht then
local ht = string.format("%.1fpt", n.height/65536)
- texio.write_nl(' BODY: ' .. ht)
- texio.write_nl(' ')
+ texio.write_nl(" BODY: " .. ht)
+ texio.write_nl(" ")
body = n
break
else
local ht = string.format("%.1fpt", n.height/65536)
local dp = string.format("%.1fpt", n.depth/65536)
- texio.write_nl(' SKIP vlist: ht=' .. ht .. ' dp=' .. dp)
+ texio.write_nl(" SKIP vlist: ht=" .. ht .. " dp=" .. dp)
first = n.list
for n in traverse_id(VLIST,first) do
if n.subtype == 0 and n.height == textht then
ht = string.format("%.1fpt", n.height/65536)
- texio.write_nl(' BODY: ' .. ht)
- texio.write_nl(' ')
+ texio.write_nl(" BODY: " .. ht)
+ texio.write_nl(" ")
body = n
break
end
@@ -2832,37 +2964,48 @@ local get_pagebody = function (head)
end
end
if not body then
- texio.write_nl('***lua-typo ERROR: PAGE BODY *NOT* FOUND!***')
+ texio.write_nl("***lua-typo ERROR: PAGE BODY *NOT* FOUND!***")
end
return body
end
local print_subtype = function (node,parent)
local n = node
- if n.id == GLYPH and n.subtype == 256 and n.char < 0x100 then
- texio.write(string.char(n.char))
- else
- if n.subtype then
- texio.write(n.subtype)
- else
- texio.write(' ')
- end
- end
- if n.id == GLUE then
+ if n.id == GLYPH then
+ texio.write(utf8.char(n.char))
+ elseif n.id == GLUE then
real_pt = string.format("%.1fpt", effective_glue(n,parent)/65536)
- texio.write(' realwd=' .. real_pt)
+ texio.write(" realwd=" .. real_pt)
elseif n.id == DISC then
- texio.write(' pre=' .. tostring(n.pre))
- texio.write(' post=' .. tostring(n.post))
- texio.write(' repl=' .. tostring(n.replace))
+ local c = ""
+ if n.replace then
+ for nn in traverse_id(GLYPH, n.replace) do
+ c = c .. utf8.char(nn.char)
+ end
+ texio.write(c)
+ end
+ if n.pre then
+ c = ""
+ for nn in traverse_id(GLYPH, n.pre) do
+ c = c .. utf8.char(nn.char)
+ end
+ texio.write(" pre=" .. c)
+ end
+ if n.post then
+ c = ""
+ for nn in traverse_id(GLYPH, n.post) do
+ c = c .. utf8.char(nn.char)
+ end
+ texio.write(" post=" .. c)
+ end
elseif n.subtype and n.subtype < 256 and n.height and n.depth then
ht_pt = string.format("%.1fpt", n.height/65536)
dp_pt = string.format("%.1fpt", n.depth/65536)
- texio.write(' ht=' .. ht_pt .. ' dp=' .. dp_pt)
+ texio.write(" ht=" .. ht_pt .. " dp=" .. dp_pt)
if n.width then
wd_pt = string.format("%.1fpt", n.width/65536)
- texio.write(' wd=' .. wd_pt)
- end
+ texio.write(" wd=" .. wd_pt)
+ end
end
end
@@ -2874,9 +3017,9 @@ local scanvlist = function (head)
local textht = tex.getdimen("textheight")
local textwd = tex.getdimen("textwidth")
local pageno = tex.getcount("c@page")
- texio.write_nl('PAGE ' .. pageno)
- texio.write(' textheight='.. string.format("%.1fpt", textht/65536))
- texio.write(' textwidth=' .. string.format("%.1fpt", textwd/65536))
+ texio.write_nl("PAGE " .. pageno)
+ texio.write(" textheight=".. string.format("%.1fpt", textht/65536))
+ texio.write(" textwidth=" .. string.format("%.1fpt", textwd/65536))
local linecount = 0
local body, parent, ht_pt, dp_pt, real_pt
body = get_pagebody(head)
@@ -2886,46 +3029,46 @@ local scanvlist = function (head)
end
while (head) do
texio.write_nl(tostring(node.type(head.id)))
- texio.write('-')
+ texio.write("-")
print_subtype(head,body)
if head.kern then
ht_pt = string.format("%.1fpt", head.kern/65536)
- texio.write(' KERN ht/wd=' .. ht_pt)
+ texio.write(" KERN ht/wd=" .. ht_pt)
end
local next = head.next
local first = head.head
for n in traverse(first) do
parent = head
- texio.write_nl(' ' .. tostring(node.type(n.id)))
- texio.write('-')
+ texio.write_nl(" " .. tostring(node.type(n.id)))
+ texio.write("-")
print_subtype(n,head)
if n.id == VLIST or n.id == HLIST then
local ff = n.head
for nn in traverse(ff) do
parent = n
- texio.write_nl(' ' .. tostring(node.type(nn.id)))
- texio.write('-')
+ texio.write_nl(" " .. tostring(node.type(nn.id)))
+ texio.write("-")
print_subtype(nn,n)
if nn.id == VLIST or nn.id == HLIST then
local f3 = nn.head
for n3 in traverse(f3) do
parent = nn
- texio.write_nl(' ' .. tostring(node.type(n3.id)))
- texio.write('-')
+ texio.write_nl(" " .. tostring(node.type(n3.id)))
+ texio.write("-")
print_subtype(n3,nn)
if n3.id == VLIST or n3.id == HLIST then
local f4 = n3.head
for n4 in traverse(f4) do
parent = n3
- texio.write_nl(' ' .. tostring(node.type(n4.id)))
- texio.write('-')
+ texio.write_nl(" " .. tostring(node.type(n4.id)))
+ texio.write("-")
print_subtype(n4,n3)
if n4.id == VLIST or n4.id == HLIST then
local f5 = n4.head
for n5 in traverse(f5) do
parent = n4
- texio.write_nl(' ' .. tostring(node.type(n4.id)))
- texio.write('-')
+ texio.write_nl(" " .. tostring(node.type(n4.id)))
+ texio.write("-")
print_subtype(n5,n4)
end
end
diff --git a/macros/optex/README b/macros/optex/README
index 36c2c98bb1..220e29fa5f 100644
--- a/macros/optex/README
+++ b/macros/optex/README
@@ -22,7 +22,11 @@ doc/ ... PDF version of the OpTeX documentation and sources.
History:
-<1.10> Feb 2022:
+<1.11> Mar 2023:
+ \fontfamsub: the substitution of missing families introduced.
+ New font family files created.
+ Minor bugs fixed.
+<1.10> Feb 2023:
key-values improved: \iskv, \kvx, \nokvx introduced.
unimath-codes: control sequences are macros, no \chardef.
\bp, \expr: optional syntax for setting the number of digits after decimal point.
diff --git a/macros/optex/base/f-cabin.opm b/macros/optex/base/f-cabin.opm
new file mode 100644
index 0000000000..d0b6e19387
--- /dev/null
+++ b/macros/optex/base/f-cabin.opm
@@ -0,0 +1,43 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Cabin] \Cabin {Inspired by Gill's typefaces + touch of a modernism}
+ {\caps \cond \medium \semibold} {\rm \bf \it \bi} {FiraMath}
+ {[Cabin-Regular]}
+ {\_def\_fontnamegen{[Cabin\_condV-\_currV\_condV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps (unavailable in condensed variants)^^J
+ \cond ...... condensed variants^^J
+ \medium .... medium weight (only \rm, \it)^^J
+ \semibold .. semibold weight (only \bf, \bi)^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={},cond={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \nocaps {\_fsetV caps={} }
+\_moddef \cond {\_fsetV cond=Condensed }
+\_moddef \nocond {\_fsetV cond={} }
+\_moddef \medium {\_fvars Medium Bold MediumItalic BoldItalic }
+\_moddef \semibold {\_fvars Regular SemiBold Italic SemiBoldItalic }
+
+\_initfontfamily % new font family must be initialized
+
+\_ifmathloading
+ \_loadmath {[FiraMath-Regular]}
+ \_addUmathfont \_xits {[XITSMath-Regular]}{} {[XITSMath-Bold]}{} {}
+ \_addto\_frak{\_fam\_xits}\_addto\_cal{\_fam\_xits} \_public \frak \cal ;
+ % \bf, \bi from FiraMath:
+ \_let\_bsansvariables=\_bfvariables
+ \_let\_bsansGreek=\_bfGreek
+ \_let\_bsansgreek=\_bfgreek
+ \_let\_bsansdigits=\_bfdigits
+ \_let\_bisansvariables=\_bivariables
+ \_let\_bisansgreek=\_bigreek
+ % \_resetmathchars <fam-number> <list of \Umathchardef csnames> ;
+ \_mathchars \_xits {\bigtriangleup \bigblacktriangleup \blacktriangle
+ \vartriangle \smallblacktriangleright} % ... etc. you can add more
+\_fi
+
+\_endcode
+
diff --git a/macros/optex/base/f-erewhon.opm b/macros/optex/base/f-erewhon.opm
index 11fc55330e..efc23c411e 100644
--- a/macros/optex/base/f-erewhon.opm
+++ b/macros/optex/base/f-erewhon.opm
@@ -3,7 +3,7 @@
\_famdecl [Erewhon] \Erewhon {Derived from Heuristica with slanted variants}
{\caps} {\rm \bf \it \bi \sl \bs} {Erewhon}
{[Erewhon-Regular]}
- {\_def\_fontnamegen {[Erewhon-\_currV]:\_capsV\_fontfeatures}}
+ {\_def\_fontnamegen {[Erewhon-\_currV]:script=latn;\_capsV\_fontfeatures}}
\_wlog{\_detokenize{%
Modifiers:^^J
diff --git a/macros/optex/base/f-fira.opm b/macros/optex/base/f-fira.opm
new file mode 100644
index 0000000000..17f246e54b
--- /dev/null
+++ b/macros/optex/base/f-fira.opm
@@ -0,0 +1,55 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Fira] \Fira {FiraSans and FiraMono with FiraMath}
+ {\sans \mono \caps \allsc \nocaps \thin \light \book \medium}
+ {\rm \bf \it \bi}
+ {FiraMath}
+ {[FiraSans-Regular]}
+ {\_def \_fontnamegen {[Fira\_subV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers (subfamilies):^^J
+ \mono ...... Monospaced variants [Mono]^^J
+Modifiers (face weight):^^J
+ \thin ...... \rm, \it = Thin, \bf, \bi = Regular (Sans)^^J
+ \light ..... \rm, \it = Light, \bf, \bi = Medium (Sans)^^J
+ \book ...... \rm, \it = Book, \bf, \bi = SemiBold (Sans)^^J
+ \medium .... \rm, \it = Medium, \bf, \bi = ExtraBold/Bold (Sans, Mono)^^J
+Modifiers (small caps):^^J
+ \caps ...... Caps and small caps (Sans)^^J
+ \allsc ..... Small caps only (Sans)^^J
+ \nocaps .... No small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV sub=Sans,caps={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \mono {\_fsetV sub=Mono,caps={} \_fvars Regular Bold Oblique BoldOblique }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \allsc {\_fsetV caps=+smcp;+c2sc;\_ffonum; }
+\_moddef \nocaps {\_fsetV caps={} }
+
+\_moddef \thin {\_onlyif sub=Sans: {\_fvars Thin Regular ThinItalic Italic }}
+\_moddef \light {\_onlyif sub=Sans: {\_fvars Light Medium LightItalic MediumItalic }}
+\_moddef \book {\_onlyif sub=Sans: {\_fvars Book SemiBold BookItalic SemiBoldItalic }}
+\_moddef \medium {\_onlyif sub=Sans: {\_fvars Medium ExtraBold MediumItalic ExtraBoldItalic }%
+ \_onlyif sub=Mono: {\_fvars Medium Bold MediumOblique BoldOblique }}
+
+\_initfontfamily % new font family must be initialized
+
+\_ifmathloading
+ \_loadmath {[FiraMath-Regular]}
+ \_addUmathfont \_xits {[XITSMath-Regular]}{} {[XITSMath-Bold]}{} {}
+ \_addto\_frak{\_fam\_xits}\_addto\_cal{\_fam\_xits} \_public \frak \cal ;
+ % \bf, \bi from FiraMath:
+ \_let\_bsansvariables=\_bfvariables
+ \_let\_bsansGreek=\_bfGreek
+ \_let\_bsansgreek=\_bfgreek
+ \_let\_bsansdigits=\_bfdigits
+ \_let\_bisansvariables=\_bivariables
+ \_let\_bisansgreek=\_bigreek
+ % \_resetmathchars <fam-number> <list of \Umathchardef csnames> ;
+ \_mathchars \_xits {\bigtriangleup \bigblacktriangleup \blacktriangle
+ \vartriangle \smallblacktriangleright
+ \unicodevdots \unicodeadots \unicodeddots} % ... etc. you can add more
+\_fi
+
+\_endcode
diff --git a/macros/optex/base/f-heros.opm b/macros/optex/base/f-heros.opm
index d749553882..a7aebdb4b8 100644
--- a/macros/optex/base/f-heros.opm
+++ b/macros/optex/base/f-heros.opm
@@ -32,7 +32,8 @@ Modifiers:^^J
\_let\_bisansgreek=\_bigreek
% \_resetmathchars <fam-number> <list of \Umathchardef csnames> ;
\_mathchars \_xits {\bigtriangleup \bigblacktriangleup \blacktriangle
- \vartriangle \smallblacktriangleright} % ... etc. you can add more
+ \vartriangle \smallblacktriangleright
+ \unicodevdots \unicodeadots \unicodeddots} % ... etc. you can add more
\_fi
\_endcode
diff --git a/macros/optex/base/f-inconsolata.opm b/macros/optex/base/f-inconsolata.opm
new file mode 100644
index 0000000000..732b6fd4f5
--- /dev/null
+++ b/macros/optex/base/f-inconsolata.opm
@@ -0,0 +1,18 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Inconsolata] \Inconsolata {Inconsolata monospaced fonts}
+ {\narrow} {\rm \bf} {}
+ {[Inconsolatazi4-Regular.otf]}
+ {\_def \_fontnamegen {[Inconsolata\_subV-\_currV]:\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \narrow ...... Narrow variants^^J
+}}
+
+\_moddef \resetmod {\_fsetV sub=zi4 \_fvars Regular Bold . . }
+\_moddef \narrow {\_fsetV sub=N \_fvars Regular Bold . . }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
diff --git a/macros/optex/base/f-xcharter.opm b/macros/optex/base/f-xcharter.opm
index b776582a1c..9cdef445ca 100644
--- a/macros/optex/base/f-xcharter.opm
+++ b/macros/optex/base/f-xcharter.opm
@@ -1,7 +1,7 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
\_famdecl [XCharter] \XCharter {An extension of Bitstream Charter}
- {\caps \slant} {\rm \bf \it \bi} {}
+ {\caps \slant} {\rm \bf \it \bi} {XCharter}
{[XCharter-Roman]}
{\_def\_fontnamegen {[XCharter-\_currV]:script=latn;\_capsV\_fontfeatures}}
@@ -17,6 +17,9 @@ Modifiers:^^J
\_initfontfamily % new font family must be initialized
+\loadmath{[XCharter-Math]}
+\loadboldmath{[XCharter-Math-Bold]} \to {[XCharter-Math]}
+
\_endcode
See the file `f-heros.opm` for information about principles of such
diff --git a/macros/optex/base/fams-ini.opm b/macros/optex/base/fams-ini.opm
index 505887f46e..3754cc8f6d 100644
--- a/macros/optex/base/fams-ini.opm
+++ b/macros/optex/base/fams-ini.opm
@@ -7,6 +7,7 @@
\_faminfo [Catalogue] {Catalogue of all registered font families} {fonts-catalog} {}
\_famalias [Catalog]
+\_famsrc {TeXlive}
\_famtext {Computer Modern like family:}
\_famfrom {GUST}
@@ -132,6 +133,12 @@
{ -,\onum: {\rm\bf\it\bi} }
\_famalias [Caslon]
+\_famfrom {Pablo Impallari, Igino Marini}
+\_faminfo [Cabin] {Inspired by Gill's typefaces + touch of a modernism} {f-cabin}
+ { -,\caps: {\rm\bf\it\bi} \medium: {\rm\it} \semibold: {\bf\bi}
+ \cond: {\rm\bf\it\bi} \cond\medium: {\rm\it} \cond\semibold: {\bf\bi}
+ }
+
\_famfrom {Adobe, Paul D. Hunt}
\_faminfo [Source Pro] {Adobe SourceSerifPro, SourceSansPro, SourceCodePro} {f-sourcepro}
{ \elight,\light,-,\bolder: {\rm\it} -,\bolder: {\bf\bi}
@@ -192,10 +199,12 @@
-,\medium,\semibold: {\bf\bi} }
\_famfrom {CTU in Prague, Roman Cernohous}
+\_famsrc {non free font, used in CTU Style, see \url{https://www.cvut.cz/en/ctu-logo}}
\_faminfo [Technika] {Fonts from visual style of CTU in Prague} {f-technika}
{ -,\light,\book, \caps, \caps\book: {\rm\bf\it\bi} -:{\stencil} }
\_famalias [CTU Technika]
+\_famsrc {TeXlive}
\_famfrom {Bitstream, Andrey V. Panov, Michael Sharpe}
\_faminfo [XCharter] {An extension of Bitstream Charter} {f-xcharter}
{ -,\slant,\caps,\caps\slant: {\rm\bf\it\bi} }
@@ -204,6 +213,16 @@
\_faminfo [GFSBodoni] {Based on Bodoni with greek letters} {f-gfsbodoni}
{ -: {\rm\bf\it\bi} \caps: {\rm} }
+\_famfrom {bBox Type GmbH, Carrois Corporate GbR, Edenspiekermann AG}
+\_faminfo [Fira] {Humanist sans-serif, originally designed for Firefox OS} {f-fira}
+ { \thin,\light,\book,-,\medium,\mono,\mono\medium,%
+ \thin\caps,\light\caps,\book\caps,\caps,\medium\caps,%
+ \thin\allsc,\light\allsc,\book\allsc,\allsc,\medium\allsc: {\rm\bf\it\bi} }
+
+\_famfrom {Raph Levien}
+\_faminfo [Inconsolata] {A monospaced font for code listing} {f-inconsolata}
+ { -,\narrow: {\rm\bf} }
+
\_endcode
Once you have prepared a font family file with the name `f-<famname>.opm` and
diff --git a/macros/optex/base/fonts-catalog.opm b/macros/optex/base/fonts-catalog.opm
index 347c94b145..893c731df0 100644
--- a/macros/optex/base/fonts-catalog.opm
+++ b/macros/optex/base/fonts-catalog.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_undefined {Font catalogue <2022-07-11>} % loaded on demand by \fontfam[catalog]
+\_codedecl \_undefined {Font catalogue <2023-03-09>} % loaded on demand by \fontfam[catalog]
\_tracinglostchars=1 % only to log file
\_initunifonts
@@ -41,7 +41,9 @@
\_iftrue {\_ttfixed \$Default math font\$: \_mathfaminfo \_par}
\_else Default math font (\_mathfaminfo): \_the\_catalogmathsample \_par
\_fi\_fi
- \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.}
+ \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.\_nl
+ \_null\_qquad ... where is the family from:\_nl
+ \_null\_qquad\_qquad\_the\_famsrc}
\_fi\_fi\_fi
\_egroup
}
@@ -134,6 +136,7 @@ described in the \code{fams-ini.opm} file.
\_endcode % -------------------------------------
+2023-03-09 \_famsrc introduced
2022-07-11 \_raggedbottom added
2022-02-22 \_ttfixed, \footline set as global, bug fixed
2020-02-26 released
diff --git a/macros/optex/base/fonts-resize.opm b/macros/optex/base/fonts-resize.opm
index e76596611b..4fc8ab1e28 100644
--- a/macros/optex/base/fonts-resize.opm
+++ b/macros/optex/base/fonts-resize.opm
@@ -186,8 +186,8 @@ gives the extended syntax:
% or
\font \<font switch> = {<font name>:<font features>} <size spec>
\endtt
-where <font file name> is name of the OpenType font file without extension
-(extensions `.otf` or `.ttf` are assumed). The braces in the syntax
+where <font file name> is name of the OpenType font file with the extension
+`.otf` or `.ttf` or without it. The braces in the syntax
are optional, use them when the <font file name> or <font name> includes spaces.
The original syntax for `tfm` files is also available. Example:
\begtt
@@ -206,14 +206,32 @@ You can use \^`\ufont` macro which runs \^`\initunifonts` followed by `\font`
primitive. And \^`\fontfam` does (among other things) \^`\initunifonts`
too. You need not to specify \^`\initunifonts` if \^`\fontfam` or \^`\ufont` is used.
-It seems that you must decide about final size of the font before it is
-loaded by the `\font` primitive. It is not exactly true; \OpTeX/ offers
-powerful possibility to resize the font already loaded on demand.
-See the example at the end of next subsection.
+When \^`\initunifonts` is declared then the `\font` primitive is ready to read
+Type1 fonts too. If you have `file.afm` and `file.pfb` then you can
+declare `\font\f=file.afm` and use `\f`. It means that you needn't to create
+`tfm` files nor `vf` files, you can use Type1 fonts directly.
+They behave as Unicode fonts if the `afm` metrics are implemented correctly
+(with correct names of all included glyphs). But we must to say that Type1
+font format is old technology, the loading of Type1 fonts is not optimized.
+Use OpenType fonts (`otf` of `ttf`) if it is possible.
+
+Let's sum it up. Suppose that \^`\initunifonts` was used.
+The `\font` primitive is able to load OpenType
+fonts (`otf` or `ttf`), Type1 fonts (`afm` and `pfb`) or classical `tfm` fonts.
+We strongly recommend to prefer OpenType format over Type1 format
+over `tfm` format. The last one desn't support Unicode. If there is nothing
+else left and you must to use `tfm`, then you must to implement re-encoding from
+Unicode to the `tfm` encoding at macro level, see the
+\ulink[http://petr.olsak.net/optex/optex-tricks.html\#nonunicode]{\OpTeX/ trick 0018}
+for example.
\secc[setfontsize] The `\setfontsize` macro
+It seems that you must decide about final size of the font before it is
+loaded by the `\font` primitive. It is not exactly true; \OpTeX/ offers
+powerful possibility to resize the font already loaded on demand.
+
The \^`\setfontsize` `{<size spec>}`
saves the information about `<size spec>`. This information is taken into
account when a variant selector (for example `\rm`, `\bf`, `\it`, `\bi`)
diff --git a/macros/optex/base/fonts-select.opm b/macros/optex/base/fonts-select.opm
index 6b10f75aff..3b5f02c3fa 100644
--- a/macros/optex/base/fonts-select.opm
+++ b/macros/optex/base/fonts-select.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \fontfam {Fonts selection system <2022-12-01>} % preloaded in format
+\_codedecl \fontfam {Fonts selection system <2023-03-09>} % preloaded in format
\_doc -----------------------------
The main principle of the Font Selection System is: run one or more
@@ -130,7 +130,9 @@
\_initunifonts \_unichars \_uniaccents
\_unless\_ifcsname _f:\_csstring#2:main.fam\_endcsname
\_isfont{#7}\_iffalse
- \_opwarning{Family [#1] skipped, font "#7" not found}\_ea\_ea\_ea\_endinput \_else
+ \_opwarning{Family [#1] skipped, font "#7" not found}\_endinput
+ \_lowercase{\_ifcsname _fams:#1\_endcsname}\_famsubstitute \_fi
+ \_else
\_edef\_currfamily {\_csstring #2}\_def\_mathfaminfo{#6}%
\_wterm {FONT: [#1] -- \_string#2 \_detokenize{(#3)^^J mods:{#4} vars:{#5} math:{#6}}}%
\_unless \_ifx #2\_undefined
@@ -138,7 +140,7 @@
\_protected\_edef#2{\_def\_noexpand\_currfamily{\_csstring #2}\_unexpanded{#8\_resetfam}}%
\_ea \_let \_csname _f:\_currfamily:main.fam\_endcsname =#2%
\_fi
- \_else \_csname _f:\_csstring#2:main.fam\_endcsname \_rm \_ea \_endinput \_fi
+ \_else \_csname _f:\_csstring#2:main.fam\_endcsname \_rm \_endinput \_empty\_fi
}
\_def\_initfontfamily{%
\_csname _f:\_currfamily:main.fam\_endcsname \_rm
@@ -308,18 +310,21 @@
\_cod -----------------------------
\_protected\_def \_fontfam [#1]{%
- \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}%
+ \_lowercase{\_edef\_famname{\_ea\_removespaces \_expanded{#1} {} }}%
\_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}%
\_else
\_tryloadfamslocal
\_edef\_famfile{\_trycs{_famf:\_famname}{}}%
- \_ifx\_famfile\_empty \_listfamnames
+ \_ifx\_famfile\_empty
+ \_ifcsname _fams:\_famname \_endcsname \_famsubstitute
+ \_else \_listfamnames
+ \_fi
\_else \_opinput {\_famfile.opm}%
- \_fi\_fi
+ \_fi\_empty\_fi
}
\_def\_tryloadfamslocal{%
\_isfile {fams-local.opm}\_iftrue
- \_opinput {fams-local.opm}\_famfrom={}%
+ \_opinput {fams-local.opm}\_famfrom={}\_famsrc={}%
\_fi
\_let \_tryloadfamslocal=\_relax % need not to load fams-local.opm twice
}
@@ -341,6 +346,27 @@
\_public \fontfam ;
\_doc -----------------------------
+ \`\fontfamsub` `[<Family>][<byFamily>]` declares automatic substitution of
+ <Family> by <byFamily> which is done when <Family> is not installed. I.e.
+ if there is no `f-<family>.opm` file or there is no regular font of the
+ family installed.
+ \`\_famsubstitute` is internal macro used in \^`\fontfam` and \^`\_famdecl` macros.
+ It consumes the rest of the macro, runs \^`\nospacefuturelet` in order to
+ do `\endpinput` to the current `f-file` and runs \^`\fontfam` again.
+ The table of such substutitions are saved in the macros `\_fams:<family>`.
+ \_cod -----------------------------
+
+\_def \_fontfamsub [#1]#2[#3]{\_lowercase{\_sxdef{_fams:#1}{#3}}}
+
+\_def\_famsubstitute #1\_empty\_fi{\_fi\_fi\_fi
+ \_wterm {FONT: Family [\_famname] not found, substituted by [\_cs{_fams:\_famname}]}%
+ \_nospacefuturelet\_tmp\_famsubstituteA % we want to \endinput current f-file
+}
+\_def\_famsubstituteA{\_fontfam[\_cs{_fams:\_famname}]}
+
+\_public \fontfamsub ;
+
+ \_doc -----------------------------
When the `fams-ini.opm` or `fams-local.opm` files are read then we need
to save only a mapping from family names or alias names to the font family file
names. All other information is ignored in this case. But if these files
@@ -360,6 +386,9 @@
\`\_famfrom` declares type foundry or owner or designer of the font family.
It can be used in `fams-ini.opm` or `fams-local.opm` and it is printed
in the font catalog.
+ \nl
+ \`\_famsrc` declares the source, where is the font family from (used in `fams-ini.opm`
+ and if the font isn't found when the fonts catalog is printed).
\_cod -----------------------------
\_def\_famtext #1{}
@@ -372,10 +401,10 @@
\_lowercase{\_edef\_tmpa{\_ea\_removespaces #1 {} }}%
\_sdef{_famf:\_tmpa\_ea}\_ea{\_famfile}%
}
-\_newtoks\_famfrom
+\_newtoks\_famfrom \_newtoks\_famsrc
\_input fams-ini.opm
\_let\_famfile=\_undefined
-\_famfrom={}
+\_famfrom={} \_famsrc={}
\_doc -----------------------------
When the \^`\fontfam``[catalog]` is used then the file
@@ -899,6 +928,7 @@ with Unicode fonts loaded by \^`\fontfam`.
\endinput
+2023-03-09 \_famsrc, \fontfamsub introduced
2022-12-01 \faminfo saves f-<filename> to the format only when needed
2022-11-08 \protected: \fontdef, \famvardef, \fontfam
2022-02-22 Font Selection System reimplemented, \fontsel introduced
diff --git a/macros/optex/base/graphics.opm b/macros/optex/base/graphics.opm
index 77e78cef23..6a095343d6 100644
--- a/macros/optex/base/graphics.opm
+++ b/macros/optex/base/graphics.opm
@@ -7,9 +7,6 @@
or new syntax `\inspic{<filename>}`. So, we need to define
two auxiliary macros \`\_inspicA` and \`\_inspicB`.
- You can include more `\pdfximage` parameters (like `page<number>`)
- in the \`\_picparams` macro.
-
All `\inspic` macros are surrounded in `\hbox` in order user can
write `\moveright\inspic ...` or something similar.
\_cod -----------------------------
@@ -19,11 +16,9 @@
\_def\_inspicB #1{%
\_pdfximage \_ifdim\_picwidth=\_zo \_else width\_picwidth\_fi
\_ifdim\_picheight=\_zo \_else height\_picheight\_fi
- \_picparams {\_the\_picdir#1}%
+ \_the\_picparams {\_the\_picdir#1}%
\_pdfrefximage\_pdflastximage\_egroup}
-\_def\_picparams{}
-
\_public \inspic ;
\_doc -----------------------------
@@ -48,7 +43,7 @@
\_newtoks\_inkdefs \_inkdefs={%
\_def\makeatletter#1\makeatother{}%
\_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_fin \_inspic{\_the\_tmptoks}\_hss}%
- \_def\_inkscanpage#1page=#2,#3\_fin{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}%
+ \_def\_inkscanpage#1page=#2,#3\_fin{\_ifx,#2,\_else\_picparams{page#2}\_fi}%
\_def\put(#1,#2)#3{\_nointerlineskip\_vbox to\_zo{\_vss\_hbox to\_zo{\_kern#1\_picwidth
\_pdfsave\_hbox to\_zo{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}%
\_def\begin#1{\_csname _begin#1\_endcsname}%
diff --git a/macros/optex/base/hi-syntax.opm b/macros/optex/base/hi-syntax.opm
index c708be0563..7e5b77b826 100644
--- a/macros/optex/base/hi-syntax.opm
+++ b/macros/optex/base/hi-syntax.opm
@@ -144,7 +144,7 @@ file name must include it in lowercase letters. For example, the file
\printdoc hisyntax-c.opm
-\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files.
+\OpTeX/ provides `hisyntax-{c,lua,python,tex,html}.opm` files.
You can take inspiration from these files and declare more languages.
Users can re-declare default colors by \^`\hicolors``={<list of color declarations>}`.
diff --git a/macros/optex/base/hisyntax-c.opm b/macros/optex/base/hisyntax-c.opm
index d0a4217b31..07d6a6570c 100644
--- a/macros/optex/base/hisyntax-c.opm
+++ b/macros/optex/base/hisyntax-c.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2020-04-03>}
+\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2023-03-02>}
\_newtoks \_hisyntaxc \_newtoks \_hicolorsc
@@ -25,10 +25,15 @@
\_ea \_foreach \_tmpa
\_do {\_replthis{#1}{\n\o#1\n}}
\_foreach % keywords
- {auto}{break}{case}{char}{continue}{default}{do}{double}%
- {else}{entry}{enum}{extern}{float}{for}{goto}{if}{int}{long}{register}%
- {return}{short}{sizeof}{static}{struct}{switch}{typedef}{union}%
- {unsigned}{void}{while}
+ {alignas}{alignof}{auto}{bool}{break}{case}{char}{const}%
+ {constexpr}{continue}{default}{do}{double}{else}{enum}{extern}%
+ {false}{float}{for}{goto}{if}{inline}{int}{long}{nullptr}%
+ {register}{restrict}{return}{short}{signed}{sizeof}{static}%
+ {static_assert}{struct}{switch}{thread_local}{true}{typedef}%
+ {typeof}{typeof_unqual}{union}{unsigned}{void}{volatile}{while}%
+ {_Alignas}{_Alignof}{_Atomic}{_BitInt}{_Bool}{_Complex}%
+ {_Decimal128}{_Decimal32}{_Decimal64}{_Generic}{_Imaginary}%
+ {_Noreturn}{_Static_assert}{_Thread_local}
\_do {\_replthis{\n#1\n}{\z K{#1}}}
\_replthis{.}{\n.\n} % numbers
\_foreach 0123456789
@@ -64,3 +69,8 @@ keyword is applied in the `\foreach` loop too.
See `hi-sytax.opm` for more information about `\hicolor`, `\replfromto` and
`\replthis` macros.
+
+\endinput
+
+2023-03-02: more C keywords added
+2020-04-03: released
diff --git a/macros/optex/base/lists.opm b/macros/optex/base/lists.opm
index 57b057d6c8..e7785678dd 100644
--- a/macros/optex/base/lists.opm
+++ b/macros/optex/base/lists.opm
@@ -1,25 +1,21 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \begitems {Lists: begitems, enditems <2021-03-10>} % preloaded in format
+\_codedecl \begitems {Lists: begitems, enditems <2022-02-25>} % preloaded in format
\_doc -----------------------------
\`\_aboveliskip` is used above the list of items,\nl
- \`\_belowliskip` is used below the list of items and\nl
- \`\_interliskip` is used between items.\nl
- \`\_listskipA` is used as `\listskipamount` at level 1 of items.\nl
- \`\_listskipB` is used as `\listskipamount` at other levels.\nl
- \`\_setlistskip` sets the skip dependent on the current level of items
+ \`\_belowliskip` is used below the list of items,\nl
+ \`\_setlistskip` sets the skip dependent on the current level of items,\nl
+ \`\_listskipab` is \^`\ilistskipamount` or \^`\olistskipamount`.
\_cod -----------------------------
-\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipamount}
-\_def\_belowliskip {\_penalty-200 \_vskip\_listskipamount}
-\_def\_interliskip {}
-\_def\_listskipA {\_medskipamount}
-\_def\_listskipB {0pt plus.5\_smallskipamount}
+\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipab}
+\_def\_belowliskip {\_penalty-200 \_vskip\_listskipab}
+\_newskip\_listskipab
\_def\_setlistskip {%
- \_ifnum \_ilevel = 1 \_listskipamount = \_listskipA \_relax
- \_else \_listskipamount = \_listskipB \_relax
+ \_ifnum \_ilevel = 1 \_listskipab = \_olistskipamount \_relax
+ \_else \_listskipab = \_ilistskipamount \_relax
\_fi}
\_doc -----------------------------
@@ -54,17 +50,19 @@
}
\_def\_enditems{\_par\_belowliskip\_egroup \_isnextchar\_par{}{\_noindent}}
-\_def\_startitem{\_par \_ifnum\_itemnum>0 \_interliskip \_fi
+\_def\_startitem{\_par \_ifnum\_itemnum>0 \_vskip\_itemskipamount \_fi
\_advance\_itemnum by1
\_the\_everyitem \_noindent\_llap{\_the\_printitem}\_ignorespaces
}
\_public \begitems \enditems \itemnum ;
\_doc ----------------------------
- \`\novspaces` sets \^`\listskipamount` to 0pt.
+ \`\novspaces` sets \^`\_listskipab` and \^`\itemskipamount` to 0pt.
+ Moreover, it deactivates \^`\_setlistskip` (for inner lists).
\_cod ----------------------------
-\_def\_novspaces {\_removelastskip \_listskipamount=0pt \_relax}
+\_def\_novspaces {\_removelastskip
+ \_listskipab=\_zoskip \_itemskipamount=\_zoskip \_let\_setlistskip=\_relax}
\_public \novspaces ;
\_doc -----------------------------
@@ -123,6 +121,7 @@
\_endcode % -------------------------------------
+2022-02-25 \olistskipamount, \ilistskipamount, \itemskipamount introduced
2021-03-10 \_ifmmode*\_else\_ea\_startitem\_fi added to * defintition
2020-04-21 \isnextchar\par added to \enditems
2020-03-18 introduced
diff --git a/macros/optex/base/optex.ini b/macros/optex/base/optex.ini
index 3266cf0ab1..ebf31ea4c2 100644
--- a/macros/optex/base/optex.ini
+++ b/macros/optex/base/optex.ini
@@ -21,7 +21,7 @@
% OpTeX version
-\def\optexversion{1.10 Feb 2023}
+\def\optexversion{1.11 Mar 2023}
\def\fmtname{OpTeX}
\let\fmtversion=\optexversion
diff --git a/macros/optex/base/parameters.opm b/macros/optex/base/parameters.opm
index 855969f4de..8867f4477a 100644
--- a/macros/optex/base/parameters.opm
+++ b/macros/optex/base/parameters.opm
@@ -197,12 +197,16 @@
parameters locally in the group where \^`\inspic` is used in order to not
influence the dimensions of other images. But there exist many
situations you need to put the same dimensions to more images,
- so you can set this parameter only once before more \^`\inspic` macros.
+ so you can set this parameter only once before more \^`\inspic` macros.\nl
+ More parameters accepted by `\pdfximage` primitive can be set in the
+ \`\picparams` tokens list. For example `\picparams={page3}`
+ selects page 3 from included PDF file.
\_cod -----------------------------
\_newdimen\_picwidth \_picwidth=0pt \_let\picw=\_picwidth
\_newdimen\_picheight \_picheight=0pt
-\_public \picwidth \picheight ;
+\_newtoks\_picparams
+\_public \picwidth \picheight \picparams ;
\_doc -----------------------------
\`\kvdict` is dictionary name when \~`\readkv`, \~`\kvx`, \~`\kv`, and \~`\iskv` are
@@ -310,16 +314,25 @@
\nl
The \`\ilevel` keeps the value of the current nesting level of the items list.
\nl
- The \`\listskipamount` gives vertical skip above and below the items list
- if `\ilevel=1`.
+ The \`\olistskipamount` is vertical skip above and below the items list
+ if `\ilevel=1`.\nl
+ The \`\ilistskipamount` is vertical skip above and below the items list
+ if `\ilevel>1`.\nl
+ The \`\itemskipamount` is vertical skip between list items, but not above the firts
+ and below the last.
\_cod -----------------------------
-\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace}
+\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace}
\_newtoks\_everyitem
\_newtoks\_everylist
-\_newskip \_listskipamount \_listskipamount=\_medskipamount
\_newcount \_ilevel
-\_public \defaultitem \everyitem \everylist \listskipamount \ilevel ;
+\_newskip\_olistskipamount \_olistskipamount=\_medskipamount
+\_newskip\_ilistskipamount \_ilistskipamount=0pt plus.5\_smallskipamount
+\_newskip\_itemskipamount \_itemskipamount=0pt
+
+\_public \defaultitem \everyitem \everylist \ilevel
+ \olistskipamount \ilistskipamount \itemskipamount ;
+\_let \listskipamount = \_olistskipamount % for backward compatibility
\_doc -----------------------------
The \^`\tit` macro includes `\vglue`\`\titskip` above the title of the document.
diff --git a/macros/optex/doc/optex-doc.pdf b/macros/optex/doc/optex-doc.pdf
index ed937d191e..d300514088 100644
--- a/macros/optex/doc/optex-doc.pdf
+++ b/macros/optex/doc/optex-doc.pdf
Binary files differ
diff --git a/macros/optex/doc/optex-doc.tex b/macros/optex/doc/optex-doc.tex
index bbb19e44f2..4b0082ee35 100644
--- a/macros/optex/doc/optex-doc.tex
+++ b/macros/optex/doc/optex-doc.tex
@@ -21,7 +21,7 @@
\tit Format Based on Plain \TeX/ and OPmac\fnotemark1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\hfill Version 1.10
+\hfill Version 1.11
\centerline{\it Petr Olšák, 2020, 2021, 2022, 2023}
diff --git a/macros/optex/doc/optex-userdoc.tex b/macros/optex/doc/optex-userdoc.tex
index 937952079a..4ae414cfbc 100644
--- a/macros/optex/doc/optex-userdoc.tex
+++ b/macros/optex/doc/optex-userdoc.tex
@@ -1062,7 +1062,7 @@ The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of
codes. Automatic syntax highlighting is possible, for example
`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or
`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes.
-\OpTeX/ implements C, Python, \TeX/, HTML and XML syntax highlighting.
+\OpTeX/ implements C, Lua, Python, \TeX/, HTML and XML syntax highlighting.
More languages can be declared, see the section~\ref[hisyntax].
If the code is read by \^`\verbinput` and there are comment lines prefixed
@@ -1459,6 +1459,7 @@ by default, this means that the image files are searched in the
current directory. Example: \^`\picdir={img/}` supposes that image files are
in `img` subdirectory. Note: the directory name must end by `/` in
the \^`\picdir` declaration.
+More parameters can be inclued using the \^`\picparams` token list.
Inkscape\fnote
{A powerful and free Wysiwyg editor for creating vector graphics.}
diff --git a/macros/optex/pkg/tikz.opm b/macros/optex/pkg/tikz.opm
index 87b2f7369a..4da799a4aa 100644
--- a/macros/optex/pkg/tikz.opm
+++ b/macros/optex/pkg/tikz.opm
@@ -1,6 +1,6 @@
% This is macro package used by OpTeX, see http://petr.olsak.net/optex
-\_codedecl \tikzpicture {TikZ for OpTeX <2022-02-18>}
+\_codedecl \tikzpicture {TikZ for OpTeX <2023-03-04>}
\_namespace{pgf}
\_catcode`\@=11
\_let\_optexforeach=\foreach
@@ -155,11 +155,17 @@
\_let\.foreach=\pgffor@foreach % \_pgf_foreach is \pgffor@foreach
\_let\foreach=\_optexforeach % \foreach is OpTeX's \foreach
+\_let\.usetikzlibrary=\usetikzlibrary
+\_def\usetikzlibrary#1{\_let\foreach=\.foreach
+ \.usetikzlibrary{#1}\let\foreach=\_optexforeach
+}
+
% don't worry about reseting catcodes - we are at the end of \opinput'ed file
\_endnamespace
\_endcode
History:
+2023-03-04 \_tikz_foreach used during \usetikzlibrary (bug fix).
2022-03-18 Tikz's \foreach only in its environment.
2022-03-05 resources management re-implemented.
2021-07-15 released
diff --git a/support/tlaunch/COPYING b/obsolete/support/tlaunch/COPYING
index 94a9ed024d..94a9ed024d 100644
--- a/support/tlaunch/COPYING
+++ b/obsolete/support/tlaunch/COPYING
diff --git a/support/tlaunch/Changes b/obsolete/support/tlaunch/Changes
index 148a562466..148a562466 100644
--- a/support/tlaunch/Changes
+++ b/obsolete/support/tlaunch/Changes
diff --git a/support/tlaunch/README b/obsolete/support/tlaunch/README
index 5fe26a136a..5fe26a136a 100644
--- a/support/tlaunch/README
+++ b/obsolete/support/tlaunch/README
diff --git a/support/tlaunch/figures/custom_ed.png b/obsolete/support/tlaunch/figures/custom_ed.png
index 566ffda27d..566ffda27d 100644
--- a/support/tlaunch/figures/custom_ed.png
+++ b/obsolete/support/tlaunch/figures/custom_ed.png
Binary files differ
diff --git a/support/tlaunch/figures/tlaunch_rug.png b/obsolete/support/tlaunch/figures/tlaunch_rug.png
index 86390b8e9b..86390b8e9b 100644
--- a/support/tlaunch/figures/tlaunch_rug.png
+++ b/obsolete/support/tlaunch/figures/tlaunch_rug.png
Binary files differ
diff --git a/support/tlaunch/figures/tlaunch_window.png b/obsolete/support/tlaunch/figures/tlaunch_window.png
index 4570f8efd3..4570f8efd3 100644
--- a/support/tlaunch/figures/tlaunch_window.png
+++ b/obsolete/support/tlaunch/figures/tlaunch_window.png
Binary files differ
diff --git a/support/tlaunch/tlaunch.ini b/obsolete/support/tlaunch/tlaunch.ini
index c5b3c154f7..c5b3c154f7 100644
--- a/support/tlaunch/tlaunch.ini
+++ b/obsolete/support/tlaunch/tlaunch.ini
diff --git a/support/tlaunch/tlaunch.pdf b/obsolete/support/tlaunch/tlaunch.pdf
index e8de54dbdd..e8de54dbdd 100644
--- a/support/tlaunch/tlaunch.pdf
+++ b/obsolete/support/tlaunch/tlaunch.pdf
Binary files differ
diff --git a/support/tlaunch/tlaunch.tex b/obsolete/support/tlaunch/tlaunch.tex
index bda2369063..bda2369063 100644
--- a/support/tlaunch/tlaunch.tex
+++ b/obsolete/support/tlaunch/tlaunch.tex
diff --git a/support/tlaunch/tlaunchmode.pl b/obsolete/support/tlaunch/tlaunchmode.pl
index e589ffbcaf..e589ffbcaf 100644
--- a/support/tlaunch/tlaunchmode.pl
+++ b/obsolete/support/tlaunch/tlaunchmode.pl
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 1f1b925a4a..17473cbbf1 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -18,11 +18,13 @@ $mirrors = {
'https://mirrors.hit.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
'https://mirrors.pku.edu.cn/ctan/' => 1,
- 'https://mirrors.sjtug.sjtu.edu.cn/ctan/' => 1,
'https://mirrors.sustech.edu.cn/CTAN/' => 1,
'https://mirrors.tuna.tsinghua.edu.cn/CTAN/' => 1,
'https://mirrors.ustc.edu.cn/CTAN/' => 1,
},
+ 'Hong Kong' => {
+ 'https://mirror-hk.koddos.net/CTAN/' => 1,
+ },
'India' => {
'https://mirror.niser.ac.in/ctan/' => 1,
},
@@ -38,7 +40,6 @@ $mirrors = {
'http://ring.airnet.ne.jp/archives/text/CTAN/' => 1,
'https://ftp.jaist.ac.jp/pub/CTAN/' => 1,
'https://ftp.kddilabs.jp/CTAN/' => 1,
- 'https://ftp.yz.yamagata-u.ac.jp/pub/CTAN/' => 1,
},
'Korea' => {
'http://ftp.ktug.org/tex-archive/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 2586b28374..d15343e930 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/66464
+depend revision/66484
name 00texlive.image
category TLCore
@@ -4711,7 +4711,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 66415
+revision 66467
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -36730,20 +36730,20 @@ catalogue-version 2.19
name biber-ms
category Package
-revision 64213
+revision 66479
shortdesc A BibTeX replacement for users of BibLaTeX (multiscript version)
longdesc This is the multiscript version of biber (biber-ms) and must be
longdesc used with the multiscript version of biblatex-ms
depend biber-ms.ARCH
-containersize 500
-containerchecksum d9786beaacd2b6f2a726d9f5c81879badac030810ed483b614e3694a96e47f5d90d99c70fafb5048705c283e7f318ae5567790a1fc652ec286ad6b33bd3b6f46
-doccontainersize 258716
-doccontainerchecksum 4eab219d327bdde07b90b9d2a14137a8d461cff2b3bd81a2dba61beeeefc13d67e9b3a0c1491fb1ccc36fbab24e54a6c7da4936ec887d9238feb334213f575e1
+containersize 504
+containerchecksum 8a0bc3d5e6d4cf3991ee7b0090d62358e3d691af9e901a1cc91396a0a01cb59ac2e707b941d32d18c35345987180bf60c9fc0ec259dfd9d25fd18dbe216f8bb8
+doccontainersize 261028
+doccontainerchecksum 5cfd427c1324b83b33a5a5a93c727e9f6551b292d63e5e7659d8bcf2d1dc4c323bb58c40017977b9545930624ce1deb92ced28ac80a5a91df80d207a4f1495c1
docfiles size=65
texmf-dist/doc/bibtex/biber-ms/biber-ms.pdf details="Manual"
-srccontainersize 945480
-srccontainerchecksum bfe12e12b49e6859a3d183964a55b1f350bc0267db77b8ceea56e23af581d68124bf84c50d2113d7763128cda71ab917755e4afbb66cc51192aa2bb4943e9893
-srcfiles size=300
+srccontainersize 957440
+srccontainerchecksum 9d68fa2f2a1e28c12b34e21c08211de8582c613c35693ef59bcb7f592a650a043ed81719cad6764952403ce19c435465b990f6701ebd7127c3c8fcb8010b4b9e
+srcfiles size=303
texmf-dist/source/bibtex/biber-ms/Changes
texmf-dist/source/bibtex/biber-ms/README.biber-ms-linux
texmf-dist/source/bibtex/biber-ms/README.biber-ms-macos
@@ -36758,50 +36758,50 @@ catalogue-contact-repository https://github.com/plk/biber
catalogue-ctan /biblio/biber-ms/base
catalogue-license artistic2
catalogue-topics biblio
-catalogue-version 4.0
+catalogue-version 4.0-1
name biber-ms.i386-linux
category Package
-revision 64180
+revision 66479
shortdesc i386-linux files of biber-ms
-containersize 21092560
-containerchecksum 2f9d09d4a8469a6ce79aaac0a059fdb485356f09aaf5ae3e4a5e06c47453318933807683ec79b5336e51b40f6caf19373a49f5730e87d01e2412bac1a450ee68
+containersize 21092224
+containerchecksum 1ffe9138d0fa80546a320d75382f66b8a5e084a525207fed971d7d88c9cf54266d186809480e5a6fe5eb8120032fc3f22c7420b684f7fcdcc5b545f71984c0b4
binfiles arch=i386-linux size=6563
bin/i386-linux/biber-ms
name biber-ms.universal-darwin
category Package
-revision 64180
+revision 66479
shortdesc universal-darwin files of biber-ms
-containersize 86793064
-containerchecksum 676716c63a1f8c2179b3bda7e2d43b3054dc511c76fbc23a7f40b66cac2480db42722b6edd2ca394fd992d7ab4ce02f3871a260111ace708d6ba6688e0ae8db6
-binfiles arch=universal-darwin size=24534
+containersize 87344364
+containerchecksum 17e4329e263818e3f8519fbab4637b64d8c6b02f2121f19f890a090502cd3bcb26ea5a61f0e1ea62e9f80d6472a2bdae14a5d2336dbc61dabe3d279e84a59d11
+binfiles arch=universal-darwin size=24679
bin/universal-darwin/biber-ms
name biber-ms.win32
category Package
-revision 64180
+revision 66479
shortdesc win32 files of biber-ms
-containersize 22842996
-containerchecksum e523d4a8fd77e85067bbe1bdf8dcc6d51794f318c687cc3de6d752c0e38c5b1027dddfac040dead4dc74613be73393618d4cfd82c8ace79dcf060c48663c08da
+containersize 22843076
+containerchecksum 01da912934219c70f6466c0cc55bbd36907af64addd73ddf35cadd651389e9c52d29e4edd884fbf3c80568efcf362a0033fd7c6e21fe63479ee1a1a7dbc4b809
binfiles arch=win32 size=7291
bin/win32/biber-ms.exe
name biber-ms.x86_64-darwinlegacy
category Package
-revision 64180
+revision 66479
shortdesc x86_64-darwinlegacy files of biber-ms
-containersize 35440240
-containerchecksum ad3c270f3cdb8157c6107fa71d61d435f739717280ead6890b3a5747bdf6b5a9eb30735a3fab0c947a734e4dafb5f344d6387bd0dbda29fb557f7a2f784dc5e9
+containersize 35442280
+containerchecksum 56a7a8fe903318f61d2635982d4010907d37b0031d2b75f4e641f4683f49b53a3176ccd7003ce270fd8579c1a1312d4080ddd5794959631251536fac4adcf52d
binfiles arch=x86_64-darwinlegacy size=10220
bin/x86_64-darwinlegacy/biber-ms
name biber-ms.x86_64-linux
category Package
-revision 64180
+revision 66479
shortdesc x86_64-linux files of biber-ms
-containersize 23549548
-containerchecksum 84e7bb39053e3642210e545db13e234ca4bfc85c8782bee5c90b7215f6eeeed0e9991357093ae90ea8a09f2265f7d58e09d67d3c74521eecd502b175f36dd83a
+containersize 23551308
+containerchecksum eb507b13186d327b5e8ad601b8da655ee99c234a22e0eb412cdef479cd9b457d66f1b39ae4cc672c90a77399cb9a9bba03fa4b042f52127a16974b3a745b8c6e
binfiles arch=x86_64-linux size=7333
bin/x86_64-linux/biber-ms
@@ -39401,7 +39401,7 @@ catalogue-version 1.3.1
name biblatex-ms
category Package
-revision 64180
+revision 66481
shortdesc Sophisticated Bibliographies in LaTeX (multiscript version)
relocated 1
longdesc This package is the "multiscript" version of the BibLaTeX
@@ -39424,17 +39424,16 @@ depend kvoptions
depend logreq
depend pdftexcmds
depend url
-containersize 248772
-containerchecksum cef1cecae6fa89d761f5eda158e495e40e0e77500eec84e4a08df7bacfa3a03fffe1b8e50b27e9456cbd6f393fae6293e61df69faa21e5a245e18c2b13722d86
-doccontainersize 7479136
-doccontainerchecksum 9dce37ce0bc21b81bfbaeb2855b81089fb32c3a8b4547ec8197638d1063f2b126f4e94e3dab6164beab71abb66f8a2cce9e4f7efd5494295556156c55679f586
-docfiles size=4997
- RELOC/doc/latex/biblatex-ms/CHANGES-ms.md details="Release notes for current version" language="en"
+containersize 262168
+containerchecksum 5bbf3e0d88a7bb26e141329fd6347736d27236156b999d362d4d23c42260591f01921f5bf269697d273ecf74dc736a79d8e4780f408b867fcc5600ab54f94c48
+doccontainersize 7467104
+doccontainerchecksum 837b364abe2c9c5d496014a099c6cf077ad3135e007b17e1f0cf3afb931223dbbe7b51aaf78719f209d632f9ed3d2f3afdc17188a9e82a4da7f369a4a75826f8
+docfiles size=5046
+ RELOC/doc/latex/biblatex-ms/CHANGES.md details="Release notes for current version" language="en"
RELOC/doc/latex/biblatex-ms/README details="Readme" language="en"
RELOC/doc/latex/biblatex-ms/biber/bltxml/biblatex-examples-ms.bltxml
RELOC/doc/latex/biblatex-ms/biblatex-ms.pdf details="Package documentation (English)" language="en"
RELOC/doc/latex/biblatex-ms/biblatex-ms.tex
- RELOC/doc/latex/biblatex-ms/bibtex/bib/biblatex/biblatex-examples-ms.bib
RELOC/doc/latex/biblatex-ms/examples/01-introduction-biber-ms.pdf
RELOC/doc/latex/biblatex-ms/examples/01-introduction-bibtex-ms.pdf
RELOC/doc/latex/biblatex-ms/examples/01-introduction-ms.tex
@@ -39592,7 +39591,8 @@ docfiles size=4997
RELOC/doc/latex/biblatex-ms/examples/98-multiscript-ms.tex
RELOC/doc/latex/biblatex-ms/examples/biblatex-examples-ms.bib
RELOC/doc/latex/biblatex-ms/examples/biblatex-examples-ms.bltxml
-runfiles size=628
+runfiles size=645
+ RELOC/bibtex/bib/biblatex-ms/biblatex/biblatex-examples-ms.bib
RELOC/bibtex/bst/biblatex-ms/biblatex-ms.bst
RELOC/tex/latex/biblatex-ms/bbx/alphabetic-ms.bbx
RELOC/tex/latex/biblatex-ms/bbx/alphabetic-verb-ms.bbx
@@ -39717,7 +39717,7 @@ catalogue-contact-repository https://github.com/plk/biblatex.git
catalogue-ctan /macros/latex/contrib/biblatex-ms
catalogue-license lppl1.3
catalogue-topics biblio biblatex etex
-catalogue-version 4.0
+catalogue-version 4.0-1
name biblatex-multiple-dm
category Package
@@ -130460,7 +130460,7 @@ catalogue-version 1.3
name frenchmath
category Package
-revision 66155
+revision 66477
shortdesc Typesetting mathematics according to French rules
relocated 1
longdesc The package provides: capital letters in roman (upright shape)
@@ -130472,23 +130472,23 @@ longdesc macros and aliases for symbols used in France: \infeg, \supeg,
longdesc \paral, ... several macros for writing french operator names
longdesc like pgcd, ppcm, Card, rg, Vect, ...
containersize 2832
-containerchecksum da1c5297a436f6efa55050b23415c3115126a2c4c8beeda7478e5ca6aaa64eb11c26decc438c28f26379d112b0ba37789302fd6b403beca4d8b3f0dfc2c06db9
-doccontainersize 234988
-doccontainerchecksum 7d94fa856ae1621b6438025e9d01223b2e81b6cdf206f1e27ad648a75523403f1d1589a819b0333088ed7df7501c07b55367058b06c310e281e367c56531d359
-docfiles size=67
+containerchecksum 8ab615a8b88c4b09bc2f3a2485d5f07a8ff140abd4cfaf64e3239944cfdcdc123879fcb6146331aa27a17f7a102251dc5f20538302cba72e2ce2b40714af8629
+doccontainersize 234896
+doccontainerchecksum a112495f232ec33ddd9f8c942892036029b6ebc3ed18e9a416188ab29907e0455051949a593ddd94efb96f97b71027197e9e3b8288c46c09b3c82fa7c3e80eca
+docfiles size=66
RELOC/doc/latex/frenchmath/README.md details="Readme"
RELOC/doc/latex/frenchmath/frenchmath.pdf details="Package documentation" language="fr"
-srccontainersize 13552
-srccontainerchecksum 762c83b6ea85ea0565ec7a604c181b2b5f4fdd7c00e2972429d8060f187e1ab21d230b08d1a5b2f397de090aef111b7698ef3440db3173f6662eb19898df2aa0
+srccontainersize 13568
+srccontainerchecksum b881d4858903b8d401fe4ab0e4819d657a2da0fe90df238e19f80d5b7eb250fe79e82f7a16b3f0107c902c4d2cc9b5717a733e922ad1a7d10d20287341584e65
srcfiles size=12
RELOC/source/latex/frenchmath/frenchmath.dtx
RELOC/source/latex/frenchmath/frenchmath.ins
-runfiles size=3
+runfiles size=2
RELOC/tex/latex/frenchmath/frenchmath.sty
catalogue-ctan /macros/latex/contrib/frenchmath
catalogue-license lppl1.3
catalogue-topics maths french
-catalogue-version 2.5
+catalogue-version 2.6
name frimurer
category Package
@@ -170893,7 +170893,7 @@ catalogue-topics latex3 expl3 macro-supp pre-release
name l3build
category Package
-revision 66194
+revision 66476
shortdesc A testing and building system for (La)TeX
longdesc The build system supports testing and building LaTeX3 code, on
longdesc Linux, Mac OS X and Windows systems. The package offers: A unit
@@ -170905,22 +170905,22 @@ longdesc material released by the LaTeX3 team, and may be updated on a
longdesc different schedule.
depend l3build.ARCH
depend luatex
-containersize 35868
-containerchecksum 94505be2969e66b5665b9b4e1d836d337551b16d3b6077b539c4771f2a708debcf99f14a2597affd622f0f553173801a701f7911e9005af7ef6f74b2c030d738
-doccontainersize 743768
-doccontainerchecksum 6af7e83f90f3e1536d72409e556ffd476bb3622909bee2f7fd1197ae36459849c7e7b58a2a68afb640c6997edf89e034554cd8a6c6fa8a39763841bd2230d410
+containersize 36100
+containerchecksum 448eb99216ab32847ca682083ec700ef04851f3a680b67b6e2abcb7eb5e0b1d705260776f23073e5e8c43ff0dac9bfe343a6d271aaa5b99392c0603538f23bac
+doccontainersize 743760
+doccontainerchecksum a1b2a775a1b12937afe34c4843aa6374f6e2bfe3e29004bb2b05f16d81f440921503c6373f7a44f5c72fa1185c7d0e7d06a7a2c5113986fc6b35d66b4b6d6f49
docfiles size=193
texmf-dist/doc/latex/l3build/CHANGELOG.md
texmf-dist/doc/latex/l3build/README.md details="Readme"
texmf-dist/doc/latex/l3build/l3build.pdf details="Package documentation"
texmf-dist/doc/man/man1/l3build.1
texmf-dist/doc/man/man1/l3build.man1.pdf
-srccontainersize 30984
-srccontainerchecksum 056f604ac2b327cc2b539f193cb7930215b424e2a08dc20a7a86dc3e440985616523512a92cc938d54ecc752fa90f6db72dc9a2c297a470a1d863de976eb4565
+srccontainersize 30996
+srccontainerchecksum 35f6b8a5c72b5e4d7e019ec7d4954fef929f3958dc0667f554728034c28f2aab63df3c82f5d2101502906534ee02f51a6fbc1e88b49f8da8c017355c9cd7fdb2
srcfiles size=29
texmf-dist/source/latex/l3build/l3build.dtx
texmf-dist/source/latex/l3build/l3build.ins
-runfiles size=46
+runfiles size=47
texmf-dist/scripts/l3build/l3build-arguments.lua
texmf-dist/scripts/l3build/l3build-aux.lua
texmf-dist/scripts/l3build/l3build-check.lua
@@ -187905,7 +187905,7 @@ catalogue-version 2.0
name light-latex-make
category Package
-revision 60558
+revision 66474
shortdesc llmk: A build tool for LaTeX documents
longdesc Light LaTeX Make (llmk) is yet another build tool specific for
longdesc LaTeX documents. Its aim is to provide a simple way to specify
@@ -187925,11 +187925,11 @@ longdesc that for a LaTeX document with an llmk setup, the process of
longdesc typesetting the document will be reproduced in any TeX
longdesc environment with the program.
depend light-latex-make.ARCH
-containersize 10568
-containerchecksum 10ebf02409748bfcd1f7d2a202f22eafc309ae8bf0633da7b0fbad84eef7e94cad6f716085e953205b7f6aeefc78ea9a52fd5459582f4fcdaab9020af81d965f
-doccontainersize 185760
-doccontainerchecksum 9d7c6c8c11f93fe9019e593d6b63983e7b5235c6270d8940e5de6352c31586bf4afb81cd38b9b0c769d26058b150864c6a19f133fbb1a6249416266f03d07dc1
-docfiles size=67
+containersize 10744
+containerchecksum e069afa8933cf7389014409342159462d2f04fed07cb9857bbaa828ae7752e89a2c21bf9814cee4d0a7763045986761f41cd92fd0bdf1b697815a37212832a16
+doccontainersize 200260
+doccontainerchecksum 53b2edb93b66c7addbbb4c8bb98ad7a9da4ca38ad33ccd8d5df38281bcb86ab6ea16aeb3babc3d0d18f8e355d5c678caf82f7bf3eaebd927a669e04274e4d5ab
+docfiles size=73
texmf-dist/doc/man/man1/llmk.1
texmf-dist/doc/man/man1/llmk.man1.pdf
texmf-dist/doc/support/light-latex-make/LICENSE
@@ -187947,7 +187947,7 @@ catalogue-contact-repository https://github.com/wtsnjp/llmk
catalogue-ctan /support/light-latex-make
catalogue-license mit
catalogue-topics comp-supp compilation use-lua
-catalogue-version 1.1.0
+catalogue-version 1.2.0
name light-latex-make.aarch64-linux
category Package
@@ -312867,7 +312867,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 66415
+revision 66467
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -312876,9 +312876,9 @@ depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
containersize 113808
-containerchecksum f2a649ec7d4f2b93b570ac140b467bcf5019bae6739503c61d7f43a8dd4a79aa14ec99d2d868cbe22743835c73cff1bf7f285a5c7aff67fcb251af5b46633687
-doccontainersize 424868
-doccontainerchecksum bb3e0c1c2b1d5653d9f0f2e9cf2bd760f9627f869155f974df18e61ca7a51309ca1217aaf3ce8f6059d9900318b42e5f2793f89aa3dc2f57b5c0e0f278e1268e
+containerchecksum 67b58056a3310540a2736f645ffc45d147dde0ba7b376adc463418eedef45116adf9e43822b6a72976a197af24b2667ae465a23fbb771d0a49d98d81bc89d2af
+doccontainersize 424864
+doccontainerchecksum 1aba8e2e569c5c8bbd1569440f96e359926b5dd0d8dc458dd132ff5b68eaaf830c7b7a507ee6c8dfa13f7dcab8b6f666b00eee8e8d0a4e0f702719d1e4675234
docfiles size=534
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -352054,7 +352054,7 @@ catalogue-version 1.00
name xduts
category Package
-revision 66368
+revision 66475
shortdesc Xidian University TeX Suite
relocated 1
longdesc XDUTS is designed to help Xidian University students use LaTeX
@@ -352063,15 +352063,15 @@ longdesc package that meets the school's requirements and can be applied
longdesc to any document class. In addition, there are thesis and thesis
longdesc proposal templates for both undergraduate and postgraduate that
longdesc meet the school's requirements.
-containersize 524312
-containerchecksum 2e6fa40b6c87c95f823d55f71ceb1d72a60ce1efc65f55f68bb929b464f6f76b745160a9ca8a88aecd83cd886120ac80274b8af48ae199196e19a1333bfa0cae
-doccontainersize 329612
-doccontainerchecksum a200ccfb0c8eb8a61aa2ca8bdff35ff890cd321ca4a248b1c628f4a446ebd569da2c34b6db31518891190d7952b39571ed9c52f25dff9e864b874b2e50fa2cfe
+containersize 524328
+containerchecksum 9d658106d7967f25be235aca3421d20d601b3d8c642a1449df714ce2ed22953f78bdd43158628ce51793428b5d6c38f75beacf20e06d2f076b2c6a2393280831
+doccontainersize 329916
+doccontainerchecksum 9d4d2bf5936a686053015f62a77de81948ff391f498c9a36d0ccda0da49722aaadc07c4b58f92d1ce16de3e197a8763fc345f543edde65c7dd2b53cb68408dc4
docfiles size=83
RELOC/doc/xelatex/xduts/README.md details="Readme"
RELOC/doc/xelatex/xduts/xduts.pdf details="Package documentation" language="zh"
-srccontainersize 45480
-srccontainerchecksum b59ef755933e7eac238136677aca33adb5b75eb9c09f794ee47757505b645b09e49cdb6f8a74250300d244ecc600e0409c68da94155f19a4ab3bd1cc0c181d4f
+srccontainersize 45552
+srccontainerchecksum c52367e3fc873b50a8c919f1492392f731d9770f8474319e8e5aace94a7c96a7d84036722b3580ed323fcb7f450a1280c3d1ba448a30f71fd0a0fa056384fb5a
srcfiles size=72
RELOC/source/xelatex/xduts/xduts.dtx
RELOC/source/xelatex/xduts/xduts.ins
@@ -352089,7 +352089,7 @@ catalogue-contact-support https://github.com/note286/xduts/discussions
catalogue-ctan /macros/xetex/latex/xduts
catalogue-license lppl1.3c
catalogue-topics dissertation proposal class expl3 xetex
-catalogue-version 6.1.0.1
+catalogue-version 6.1.2.0
name xdvi
category TLCore
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index aafa9fb187..9ac255197c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-3d6c27d10da8534e052233652efb82c9 texlive.tlpdb
+72a48c2f09ee4cd3f2c2da8ab96954fe texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 6f3c4c7a73..37ebaa73fe 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-d32fb72b126c1d578820df69b204edd40fceaec90ca557670ac145c6c8c6e16ea5627903f5c754a53a76aa9588eb783b26f13745c8e34e410b3a3d2d17d50f0a texlive.tlpdb
+f10d0498c32c317585781711230f31244d3ef939b04fe902602ebaeda6aae7383e7636bd4fec46d3783a9e417a9732b403560f81e462231ab1fb5ae79c132d7d texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 4edd9e2283..02adb7d84b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJkB/QjAAoJEEzhh34ZQ4xwMqgH/A2UQ4Ceqi78jEfDqjfSAb7k
-RAnfxC1gAIo8SYUxA/DYPE1wfxNm0jO/0lHELNH/Ie9r9jPLEVw7xXnOhDz32s3V
-kLxsIJm+rEOWwkjDnotsNRtOjQ9bT+rgMfRJNW/qhweghzi6UqDFBivwTQyiPynr
-lJ+P4e0QIViuUP+JzWFGiorfkXx+2BlAwj2eXgiVrgQAfQCstwMemMnyI49g5KXB
-dX1g4rrZcUppaT+NR/WNxYsV9lG87WWaW3WLUMoMWgpkm06AhzLXjzAF6gKuJDeb
-DD7E5aBfEV9nO8B00gLeFqbDsEtpswKqssDnbEIVudd1VJmoG7EBjftRyIsKgds=
-=Pm+5
+iQEcBAEBCgAGBQJkCUXtAAoJEEzhh34ZQ4xwGa0H/R1sFxOULHznLrvctgXRfWTL
+nwbkan1ZV6eDp23lKeWAdl4wXYWRYcJNb6zSC+cxcX36e7qy6tjGNf3IIsu02T+f
+AOZg6/MevljcIf8wTVzMYVIoG90B+uq5/gg/0/41uUs4cf252CsXiD83HDK9Wjvg
+uS5UEpFGDRLuzmQsGA+RYV0Ao7jF3+t+Jvn0WLbbKZMgZSIDOJUdJGMwEozewlPo
+IUh2j+Ey6GFf9jp3x+2i4LzbgqnsKqz9wC2Wy8KXRqQWF9GV0uX/2sGKEdtjWhQR
+U+cb6+P3i6/U8BvFl+WPF4a0kaTevHfh5F6UaX7oOq6tmjoTRCkoqTkSw94LXi8=
+=1qgM
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index e8af2affc8..4cf9f7a5e5 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index b342002bb8..65dc567cc5 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2023-03-09-02-02
+2023-03-10-02-02