From deda1937c52481b2259e1061840b99e18e8ca361 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 15 Sep 2023 03:02:43 +0000 Subject: CTAN sync 202309150302 --- FILES.byname | 300 +- FILES.byname.gz | Bin 2549097 -> 2549192 bytes FILES.last07days | 2088 +--------- biblio/ctan-bibdata/ctan.bib | 16 +- biblio/ctan-bibdata/ctan.pdf | Bin 3710112 -> 3710053 bytes fonts/parsimatn/ParsiMatn-Bold.ttf | Bin 84572 -> 85908 bytes fonts/parsimatn/ParsiMatn-BoldItalic.ttf | Bin 87512 -> 88940 bytes fonts/parsimatn/ParsiMatn-Italic.ttf | Bin 90440 -> 91880 bytes fonts/parsimatn/ParsiMatn-Regular.ttf | Bin 87168 -> 88568 bytes fonts/parsimatn/README.md | 2 +- fonts/parsimatn/parsimatn-example-of-use.pdf | Bin 91046 -> 91078 bytes fonts/parsimatn/parsimatn-example-of-use.tex | 4 +- fonts/utilities/fontools/bin/afm2afm | 4 +- fonts/utilities/fontools/bin/autoinst | 222 +- fonts/utilities/fontools/bin/ot2kpx | 4 +- fonts/utilities/fontools/bin/splitttc | 4 +- fonts/utilities/fontools/doc/afm2afm.pdf | Bin 26775 -> 26954 bytes fonts/utilities/fontools/doc/autoinst.pdf | Bin 71157 -> 72654 bytes fonts/utilities/fontools/doc/ot2kpx.pdf | Bin 27149 -> 27320 bytes fonts/utilities/fontools/doc/splitttc.pdf | Bin 20367 -> 20437 bytes macros/latex-dev/required/latex-lab/README.md | 2 +- .../latex-dev/required/latex-lab/blocks-code.pdf | Bin 878830 -> 886155 bytes .../latex-dev/required/latex-lab/blocks-code.tex | 2 +- macros/latex-dev/required/latex-lab/blocks-doc.pdf | Bin 439729 -> 440245 bytes macros/latex-dev/required/latex-lab/blocks-doc.tex | 2 +- macros/latex-dev/required/latex-lab/changes.txt | 62 +- .../latex-lab/documentmetadata-support-code.pdf | Bin 519336 -> 523606 bytes .../latex-lab/documentmetadata-support-doc.pdf | Bin 385426 -> 389235 bytes .../latex-lab/documentmetadata-support.dtx | 65 +- .../required/latex-lab/latex-lab-amsmath.pdf | Bin 357259 -> 357811 bytes .../latex-dev/required/latex-lab/latex-lab-bib.dtx | 11 +- .../latex-dev/required/latex-lab/latex-lab-bib.pdf | Bin 412227 -> 411100 bytes .../required/latex-lab/latex-lab-block-tagging.dtx | 4055 ------------------- .../required/latex-lab/latex-lab-block-tagging.pdf | Bin 878830 -> 0 bytes .../required/latex-lab/latex-lab-block.dtx | 4101 ++++++++++++++++++++ .../required/latex-lab/latex-lab-block.pdf | Bin 0 -> 886155 bytes .../required/latex-lab/latex-lab-firstaid.dtx | 62 +- .../required/latex-lab/latex-lab-firstaid.pdf | Bin 271638 -> 272876 bytes .../required/latex-lab/latex-lab-float.dtx | 60 +- .../required/latex-lab/latex-lab-float.pdf | Bin 442979 -> 444989 bytes .../required/latex-lab/latex-lab-footnotes.dtx | 985 +++-- .../required/latex-lab/latex-lab-footnotes.pdf | Bin 800571 -> 815832 bytes .../required/latex-lab/latex-lab-graphic.dtx | 8 +- .../required/latex-lab/latex-lab-graphic.pdf | Bin 497530 -> 497260 bytes .../required/latex-lab/latex-lab-math.dtx | 1314 +++++++ .../required/latex-lab/latex-lab-math.pdf | Bin 0 -> 612561 bytes .../required/latex-lab/latex-lab-mathpkg.pdf | Bin 302091 -> 302644 bytes .../required/latex-lab/latex-lab-mathtagging.dtx | 1280 ------ .../required/latex-lab/latex-lab-mathtagging.pdf | Bin 609434 -> 0 bytes .../required/latex-lab/latex-lab-mathtools.pdf | Bin 357259 -> 357811 bytes .../required/latex-lab/latex-lab-minipage.dtx | 21 +- .../required/latex-lab/latex-lab-minipage.pdf | Bin 277702 -> 278305 bytes .../required/latex-lab/latex-lab-namespace.dtx | 100 + .../required/latex-lab/latex-lab-namespace.pdf | Bin 0 -> 234661 bytes .../required/latex-lab/latex-lab-new-or-1.dtx | 57 +- .../required/latex-lab/latex-lab-new-or-1.pdf | Bin 383591 -> 389733 bytes .../required/latex-lab/latex-lab-new-or-2.dtx | 341 +- .../required/latex-lab/latex-lab-new-or-2.pdf | Bin 530241 -> 632322 bytes .../latex-dev/required/latex-lab/latex-lab-sec.dtx | 67 +- .../latex-dev/required/latex-lab/latex-lab-sec.pdf | Bin 527667 -> 528176 bytes .../required/latex-lab/latex-lab-testphase.dtx | 46 +- .../required/latex-lab/latex-lab-testphase.pdf | Bin 298138 -> 298669 bytes .../required/latex-lab/latex-lab-text.dtx | 12 +- .../required/latex-lab/latex-lab-text.pdf | Bin 308879 -> 307823 bytes .../latex-lab/latex-lab-toc-hyperref-changes.dtx | 4 +- .../latex-lab/latex-lab-toc-hyperref-changes.pdf | Bin 296522 -> 296136 bytes .../latex-lab/latex-lab-toc-kernel-changes.dtx | 23 +- .../latex-lab/latex-lab-toc-kernel-changes.pdf | Bin 357477 -> 356743 bytes .../latex-lab/latex-lab-toc-tagging-functions.dtx | 365 -- .../latex-lab/latex-lab-toc-tagging-functions.pdf | Bin 379087 -> 0 bytes .../latex-dev/required/latex-lab/latex-lab-toc.dtx | 377 ++ .../latex-dev/required/latex-lab/latex-lab-toc.pdf | Bin 0 -> 377490 bytes macros/latex-dev/required/latex-lab/latex-lab.ins | 110 +- macros/latex/contrib/zref/README.md | 5 +- macros/latex/contrib/zref/zref.dtx | 165 +- macros/latex/contrib/zref/zref.pdf | Bin 699064 -> 699604 bytes .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 3 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb | 134 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 16 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2475492 -> 2476204 bytes timestamp | 2 +- 83 files changed, 7814 insertions(+), 8691 deletions(-) delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-block.dtx create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-block.pdf create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-math.dtx create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-math.pdf delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx delete mode 100644 macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-toc.dtx create mode 100644 macros/latex-dev/required/latex-lab/latex-lab-toc.pdf diff --git a/FILES.byname b/FILES.byname index d33ee90ff4..4dab002985 100644 --- a/FILES.byname +++ b/FILES.byname @@ -2059,12 +2059,12 @@ 2023/09/07 | 1710 | biblio/citation-style-language/README.md 2023/09/07 | 12878 | biblio/citation-style-language/vancouver.csl 2023/09/07 | 4530946 | biblio/citation-style-language.zip -2023/09/13 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/09/14 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx -2023/09/13 | 2812622 | biblio/ctan-bibdata/ctan.bib -2023/09/13 | 3709441 | biblio/ctan-bibdata/ctan.pdf +2023/09/14 | 2812990 | biblio/ctan-bibdata/ctan.bib +2023/09/14 | 3710112 | biblio/ctan-bibdata/ctan.pdf 2023/01/16 | 1489 | biblio/ctan-bibdata/README -2023/09/13 | 4111065 | biblio/ctan-bibdata.zip +2023/09/14 | 4112043 | 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 @@ -2221,7 +2221,7 @@ 1989/12/11 | 6196 | biblio/tib/tib.man 1989/03/29 | 23265 | biblio/tib/vitaMake 2005/12/15 | 366385 | biblio/tib.zip -2023/09/04 | 18232 | CTAN.sites +2023/09/14 | 18202 | 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 @@ -5424,7 +5424,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/09/13 | 205945 | FILES.last07days +2023/09/14 | 260659 | 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 @@ -112215,14 +112215,14 @@ 2014/09/13 | 1618746 | fonts/parisa/source/parisa-shadow.sfd 2014/09/13 | 5749842 | fonts/parisa.zip 2023/09/13 | 4497 | fonts/parsimatn/OFL.txt -2023/09/13 | 87512 | fonts/parsimatn/ParsiMatn-BoldItalic.ttf -2023/09/13 | 84572 | fonts/parsimatn/ParsiMatn-Bold.ttf -2023/09/13 | 91046 | fonts/parsimatn/parsimatn-example-of-use.pdf -2023/09/13 | 10246 | fonts/parsimatn/parsimatn-example-of-use.tex -2023/09/13 | 90440 | fonts/parsimatn/ParsiMatn-Italic.ttf -2023/09/13 | 87168 | fonts/parsimatn/ParsiMatn-Regular.ttf -2023/09/13 | 766 | fonts/parsimatn/README.md -2023/09/13 | 289668 | fonts/parsimatn.zip +2023/09/14 | 88940 | fonts/parsimatn/ParsiMatn-BoldItalic.ttf +2023/09/14 | 85908 | fonts/parsimatn/ParsiMatn-Bold.ttf +2023/09/14 | 91078 | fonts/parsimatn/parsimatn-example-of-use.pdf +2023/09/14 | 10246 | fonts/parsimatn/parsimatn-example-of-use.tex +2023/09/14 | 91880 | fonts/parsimatn/ParsiMatn-Italic.ttf +2023/09/14 | 88568 | fonts/parsimatn/ParsiMatn-Regular.ttf +2023/09/14 | 766 | fonts/parsimatn/README.md +2023/09/14 | 291894 | fonts/parsimatn.zip 2023/09/08 | 4498 | fonts/parsinevis/OFL.txt 2023/09/08 | 102236 | fonts/parsinevis/ParsiNevis-BoldItalic.ttf 2023/09/08 | 90716 | fonts/parsinevis/ParsiNevis-Bold.ttf @@ -147661,33 +147661,33 @@ 1995/01/27 | 48128 | fonts/utilities/fontload/vms/subfont.exe-alpha 1995/01/27 | 89600 | fonts/utilities/fontload/vms/subfont.exe-vax 2007/11/24 | 136238 | fonts/utilities/fontload.zip -2023/02/01 | 13334 | fonts/utilities/fontools/bin/afm2afm -2023/02/01 | 168174 | fonts/utilities/fontools/bin/autoinst -2023/02/01 | 27582 | fonts/utilities/fontools/bin/ot2kpx -2023/02/01 | 9480 | fonts/utilities/fontools/bin/splitttc -2023/02/01 | 26775 | fonts/utilities/fontools/doc/afm2afm.pdf -2023/02/01 | 71157 | fonts/utilities/fontools/doc/autoinst.pdf -2023/02/01 | 27149 | fonts/utilities/fontools/doc/ot2kpx.pdf -2023/02/01 | 20367 | fonts/utilities/fontools/doc/splitttc.pdf -2023/02/01 | 17997 | fonts/utilities/fontools/GPLv2.txt -2023/02/01 | 3003 | fonts/utilities/fontools/README -2023/02/01 | 3420 | fonts/utilities/fontools/share/fontools_cs.enc -2023/02/01 | 3409 | fonts/utilities/fontools/share/fontools_l7x.enc -2023/02/01 | 17241 | fonts/utilities/fontools/share/fontools_lgr.enc -2023/02/01 | 3366 | fonts/utilities/fontools/share/fontools_ly1.enc -2023/02/01 | 3318 | fonts/utilities/fontools/share/fontools_oml.enc -2023/02/01 | 3318 | fonts/utilities/fontools/share/fontools_ot1.enc -2023/02/01 | 3448 | fonts/utilities/fontools/share/fontools_qx.enc -2023/02/01 | 3478 | fonts/utilities/fontools/share/fontools_t1.enc -2023/02/01 | 3542 | fonts/utilities/fontools/share/fontools_t2a.enc -2023/02/01 | 4364 | fonts/utilities/fontools/share/fontools_t2b.enc -2023/02/01 | 4286 | fonts/utilities/fontools/share/fontools_t2c.enc -2023/02/01 | 5468 | fonts/utilities/fontools/share/fontools_t3.enc -2023/02/01 | 3664 | fonts/utilities/fontools/share/fontools_t4.enc -2023/02/01 | 3844 | fonts/utilities/fontools/share/fontools_t5.enc -2023/02/01 | 3592 | fonts/utilities/fontools/share/fontools_ts1.enc -2023/02/01 | 5420 | fonts/utilities/fontools/share/fontools_ts3.enc -2023/02/01 | 217823 | fonts/utilities/fontools.zip +2023/09/14 | 13334 | fonts/utilities/fontools/bin/afm2afm +2023/09/14 | 175638 | fonts/utilities/fontools/bin/autoinst +2023/09/14 | 27582 | fonts/utilities/fontools/bin/ot2kpx +2023/09/14 | 9480 | fonts/utilities/fontools/bin/splitttc +2023/09/14 | 26954 | fonts/utilities/fontools/doc/afm2afm.pdf +2023/09/14 | 72654 | fonts/utilities/fontools/doc/autoinst.pdf +2023/09/14 | 27320 | fonts/utilities/fontools/doc/ot2kpx.pdf +2023/09/14 | 20437 | fonts/utilities/fontools/doc/splitttc.pdf +2023/09/14 | 17997 | fonts/utilities/fontools/GPLv2.txt +2023/09/14 | 3003 | fonts/utilities/fontools/README +2023/09/14 | 3420 | fonts/utilities/fontools/share/fontools_cs.enc +2023/09/14 | 3409 | fonts/utilities/fontools/share/fontools_l7x.enc +2023/09/14 | 17241 | fonts/utilities/fontools/share/fontools_lgr.enc +2023/09/14 | 3366 | fonts/utilities/fontools/share/fontools_ly1.enc +2023/09/14 | 3318 | fonts/utilities/fontools/share/fontools_oml.enc +2023/09/14 | 3318 | fonts/utilities/fontools/share/fontools_ot1.enc +2023/09/14 | 3448 | fonts/utilities/fontools/share/fontools_qx.enc +2023/09/14 | 3478 | fonts/utilities/fontools/share/fontools_t1.enc +2023/09/14 | 3542 | fonts/utilities/fontools/share/fontools_t2a.enc +2023/09/14 | 4364 | fonts/utilities/fontools/share/fontools_t2b.enc +2023/09/14 | 4286 | fonts/utilities/fontools/share/fontools_t2c.enc +2023/09/14 | 5468 | fonts/utilities/fontools/share/fontools_t3.enc +2023/09/14 | 3664 | fonts/utilities/fontools/share/fontools_t4.enc +2023/09/14 | 3844 | fonts/utilities/fontools/share/fontools_t5.enc +2023/09/14 | 3592 | fonts/utilities/fontools/share/fontools_ts1.enc +2023/09/14 | 5420 | fonts/utilities/fontools/share/fontools_ts3.enc +2023/09/14 | 220535 | fonts/utilities/fontools.zip 2007/11/26 | 1775673 | fonts/utilities/freetype/freetype-2.3.5.tar.gz 2007/11/26 | 189 | fonts/utilities/freetype/freetype-2.3.5.tar.gz.sig 2007/11/26 | 117706 | fonts/utilities/freetype/freetype-doc-2.3.5.tar.gz @@ -194871,7 +194871,7 @@ 2023/09/13 | 2795752 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip 2023/09/13 | 257201 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip 2023/06/11 | 3111045 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip -2023/06/11 | 10417970 | install/macros/latex-dev/required/latex-lab-dev.tds.zip +2023/09/14 | 10803422 | install/macros/latex-dev/required/latex-lab-dev.tds.zip 2023/06/11 | 7340085 | install/macros/latex-dev/required/latex-tools-dev.tds.zip 2023/06/19 | 40739586 | install/macros/latex/latex-base.tds.zip 2020/06/01 | 1578753 | install/macros/latex/required/amscls.tds.zip @@ -243974,7 +243974,7 @@ 2023/08/14 | 129389 | macros/latex/contrib/zref-clever/zref-clever-doc.tex 2023/08/14 | 345946 | macros/latex/contrib/zref-clever/zref-clever.dtx 2023/08/14 | 3187 | macros/latex/contrib/zref-clever/zref-clever.ins -2022/04/07 | 581 | macros/latex/contrib/zref/README.md +2023/09/14 | 582 | macros/latex/contrib/zref/README.md 2023/08/15 | 2386 | macros/latex/contrib/zref-vario/CHANGELOG.md 2023/08/15 | 31 | macros/latex/contrib/zref-vario/DEPENDS.txt 2023/08/15 | 578 | macros/latex/contrib/zref-vario/README.md @@ -243985,9 +243985,9 @@ 2023/08/15 | 14399 | macros/latex/contrib/zref-vario/zref-vario-doc.tex 2023/08/15 | 37544 | macros/latex/contrib/zref-vario/zref-vario.dtx 2023/08/15 | 2607 | macros/latex/contrib/zref-vario/zref-vario.ins -2022/04/07 | 706755 | macros/latex/contrib/zref.zip -2022/04/07 | 197178 | macros/latex/contrib/zref/zref.dtx -2022/04/07 | 699064 | macros/latex/contrib/zref/zref.pdf +2023/09/14 | 707422 | macros/latex/contrib/zref.zip +2023/09/14 | 198236 | macros/latex/contrib/zref/zref.dtx +2023/09/14 | 699604 | macros/latex/contrib/zref/zref.pdf 2008/02/10 | 19110 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/License.txt 2008/06/15 | 248047 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.pdf 2008/06/15 | 3902 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.tex @@ -244382,58 +244382,60 @@ 2023/06/11 | 10753 | macros/latex-dev/required/graphics/trig.dtx 2023/06/11 | 199268 | macros/latex-dev/required/graphics/trig.pdf 2023/06/11 | 3073339 | macros/latex-dev/required/graphics.zip -2023/06/11 | 878830 | macros/latex-dev/required/latex-lab/blocks-code.pdf -2023/06/11 | 116 | macros/latex-dev/required/latex-lab/blocks-code.tex -2023/06/11 | 439729 | macros/latex-dev/required/latex-lab/blocks-doc.pdf -2023/06/11 | 113 | macros/latex-dev/required/latex-lab/blocks-doc.tex -2023/06/11 | 4222 | macros/latex-dev/required/latex-lab/changes.txt -2023/06/11 | 519336 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf -2023/06/11 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex -2023/06/11 | 385426 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf -2023/06/11 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex -2023/06/11 | 16946 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx -2023/06/11 | 6221 | macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex -2023/06/11 | 3179 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx -2023/06/11 | 357259 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf -2023/06/11 | 13941 | macros/latex-dev/required/latex-lab/latex-lab-bib.dtx -2023/06/11 | 412227 | macros/latex-dev/required/latex-lab/latex-lab-bib.pdf -2023/06/11 | 132264 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx -2023/06/11 | 878830 | macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf -2023/06/11 | 4619 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx -2023/06/11 | 271638 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf -2023/06/11 | 15749 | macros/latex-dev/required/latex-lab/latex-lab-float.dtx -2023/06/11 | 442979 | macros/latex-dev/required/latex-lab/latex-lab-float.pdf -2023/06/11 | 82448 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx -2023/06/11 | 800571 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf -2023/06/11 | 34485 | macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx -2023/06/11 | 497530 | macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf -2023/06/11 | 5643 | macros/latex-dev/required/latex-lab/latex-lab.ins -2023/06/11 | 2453 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx -2023/06/11 | 302091 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf -2023/06/11 | 35607 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx -2023/06/11 | 609434 | macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf -2023/06/11 | 6134 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx -2023/06/11 | 357259 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf -2023/06/11 | 5835 | macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx -2023/06/11 | 277702 | macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf -2023/06/11 | 4881 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx -2023/06/11 | 383591 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf -2023/06/11 | 16161 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx -2023/06/11 | 530241 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf -2023/06/11 | 26828 | macros/latex-dev/required/latex-lab/latex-lab-sec.dtx -2023/06/11 | 527667 | macros/latex-dev/required/latex-lab/latex-lab-sec.pdf -2023/06/11 | 4809 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx -2023/06/11 | 298138 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf -2023/06/11 | 3523 | macros/latex-dev/required/latex-lab/latex-lab-text.dtx -2023/06/11 | 308879 | macros/latex-dev/required/latex-lab/latex-lab-text.pdf -2023/06/11 | 5646 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx -2023/06/11 | 296522 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf -2023/06/11 | 17473 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx -2023/06/11 | 357477 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf -2023/06/11 | 11376 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx -2023/06/11 | 379087 | macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf -2023/06/11 | 1156 | macros/latex-dev/required/latex-lab/README.md -2023/06/11 | 10342773 | macros/latex-dev/required/latex-lab.zip +2023/09/14 | 886155 | macros/latex-dev/required/latex-lab/blocks-code.pdf +2023/09/14 | 108 | macros/latex-dev/required/latex-lab/blocks-code.tex +2023/09/14 | 440245 | macros/latex-dev/required/latex-lab/blocks-doc.pdf +2023/09/14 | 105 | macros/latex-dev/required/latex-lab/blocks-doc.tex +2023/09/14 | 5826 | macros/latex-dev/required/latex-lab/changes.txt +2023/09/14 | 523606 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf +2023/09/14 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex +2023/09/14 | 389235 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf +2023/09/14 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex +2023/09/14 | 19447 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx +2023/09/14 | 6221 | macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex +2023/09/14 | 3179 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx +2023/09/14 | 357811 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf +2023/09/14 | 14027 | macros/latex-dev/required/latex-lab/latex-lab-bib.dtx +2023/09/14 | 411100 | macros/latex-dev/required/latex-lab/latex-lab-bib.pdf +2023/09/14 | 135159 | macros/latex-dev/required/latex-lab/latex-lab-block.dtx +2023/09/14 | 886155 | macros/latex-dev/required/latex-lab/latex-lab-block.pdf +2023/09/14 | 4566 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx +2023/09/14 | 272876 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf +2023/09/14 | 16852 | macros/latex-dev/required/latex-lab/latex-lab-float.dtx +2023/09/14 | 444989 | macros/latex-dev/required/latex-lab/latex-lab-float.pdf +2023/09/14 | 87749 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx +2023/09/14 | 815832 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf +2023/09/14 | 34616 | macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx +2023/09/14 | 497260 | macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf +2023/09/14 | 5946 | macros/latex-dev/required/latex-lab/latex-lab.ins +2023/09/14 | 36968 | macros/latex-dev/required/latex-lab/latex-lab-math.dtx +2023/09/14 | 612561 | macros/latex-dev/required/latex-lab/latex-lab-math.pdf +2023/09/14 | 2453 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx +2023/09/14 | 302644 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf +2023/09/14 | 6134 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx +2023/09/14 | 357811 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf +2023/09/14 | 6145 | macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx +2023/09/14 | 278305 | macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf +2023/09/14 | 2882 | macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx +2023/09/14 | 234661 | macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf +2023/09/14 | 5684 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx +2023/09/14 | 389733 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf +2023/09/14 | 23812 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx +2023/09/14 | 632322 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf +2023/09/14 | 27043 | macros/latex-dev/required/latex-lab/latex-lab-sec.dtx +2023/09/14 | 528176 | macros/latex-dev/required/latex-lab/latex-lab-sec.pdf +2023/09/14 | 4770 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx +2023/09/14 | 298669 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf +2023/09/14 | 3669 | macros/latex-dev/required/latex-lab/latex-lab-text.dtx +2023/09/14 | 307823 | macros/latex-dev/required/latex-lab/latex-lab-text.pdf +2023/09/14 | 11652 | macros/latex-dev/required/latex-lab/latex-lab-toc.dtx +2023/09/14 | 5733 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx +2023/09/14 | 296136 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf +2023/09/14 | 17593 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx +2023/09/14 | 356743 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf +2023/09/14 | 377490 | macros/latex-dev/required/latex-lab/latex-lab-toc.pdf +2023/09/14 | 1156 | macros/latex-dev/required/latex-lab/README.md +2023/09/14 | 10726234 | macros/latex-dev/required/latex-lab.zip 2023/06/11 | 14072 | macros/latex-dev/required/tools/afterpage.dtx 2023/06/11 | 2538 | macros/latex-dev/required/tools/afterpage.ins 2023/06/11 | 197735 | macros/latex-dev/required/tools/afterpage.pdf @@ -248922,7 +248924,7 @@ 2023/04/02 | 24594 | macros/texinfo/latest/htmlxref.cnf 2022/11/30 | 58633 | macros/texinfo/latest/texi2dvi 2022/11/30 | 1165 | macros/texinfo/latest/texi2pdf -2023/08/15 | 382911 | macros/texinfo/latest/texinfo.tex +2023/09/13 | 383157 | macros/texinfo/latest/texinfo.tex 2022/12/01 | 67 | macros/texinfo/texinfo/ABOUT-NLS 2023/03/26 | 48078 | macros/texinfo/texinfo/aclocal.m4 2022/02/11 | 2201 | macros/texinfo/texinfo/AUTHORS @@ -292445,8 +292447,8 @@ 2022/04/08 | 38440 | systems/texlive/tlnet/archive/circ.source.r62977.tar.xz 2023/06/25 | 1809960 | systems/texlive/tlnet/archive/circuitikz.doc.r67458.tar.xz 2023/06/25 | 173848 | systems/texlive/tlnet/archive/circuitikz.r67458.tar.xz -2023/06/02 | 3325520 | systems/texlive/tlnet/archive/circuit-macros.doc.r67259.tar.xz -2023/06/02 | 1500 | systems/texlive/tlnet/archive/circuit-macros.r67259.tar.xz +2023/09/14 | 3331920 | systems/texlive/tlnet/archive/circuit-macros.doc.r68264.tar.xz +2023/09/14 | 1500 | systems/texlive/tlnet/archive/circuit-macros.r68264.tar.xz 2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.aarch64-linux.r64151.tar.xz 2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.amd64-freebsd.r64151.tar.xz 2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.amd64-netbsd.r64151.tar.xz @@ -292692,7 +292694,7 @@ 2022/02/27 | 584 | systems/texlive/tlnet/archive/collection-formatsextra.r62226.tar.xz 2023/07/14 | 612 | systems/texlive/tlnet/archive/collection-games.r67619.tar.xz 2023/08/17 | 604 | systems/texlive/tlnet/archive/collection-humanities.r67944.tar.xz -2023/09/13 | 472 | systems/texlive/tlnet/archive/collection-langarabic.r68250.tar.xz +2023/09/14 | 476 | systems/texlive/tlnet/archive/collection-langarabic.r68271.tar.xz 2022/07/29 | 552 | systems/texlive/tlnet/archive/collection-langchinese.r63995.tar.xz 2023/02/14 | 588 | systems/texlive/tlnet/archive/collection-langcjk.r65824.tar.xz 2020/03/04 | 608 | systems/texlive/tlnet/archive/collection-langcyrillic.r54074.tar.xz @@ -296211,9 +296213,9 @@ 2019/02/28 | 157728 | systems/texlive/tlnet/archive/includernw.doc.r47557.tar.xz 2019/02/28 | 3116 | systems/texlive/tlnet/archive/includernw.r47557.tar.xz 2020/03/24 | 179192 | systems/texlive/tlnet/archive/inconsolata.doc.r54512.tar.xz -2023/09/13 | 77520 | systems/texlive/tlnet/archive/inconsolata-nerd-font.doc.r68248.tar.xz -2023/09/13 | 1573116 | systems/texlive/tlnet/archive/inconsolata-nerd-font.r68248.tar.xz -2023/09/13 | 4388 | systems/texlive/tlnet/archive/inconsolata-nerd-font.source.r68248.tar.xz +2023/09/14 | 1320736 | systems/texlive/tlnet/archive/inconsolata-nerd-font.doc.r68263.tar.xz +2023/09/14 | 1573108 | systems/texlive/tlnet/archive/inconsolata-nerd-font.r68263.tar.xz +2023/09/14 | 4736 | systems/texlive/tlnet/archive/inconsolata-nerd-font.source.r68263.tar.xz 2020/03/24 | 299536 | systems/texlive/tlnet/archive/inconsolata.r54512.tar.xz 2019/02/28 | 156688 | systems/texlive/tlnet/archive/index.doc.r24099.tar.xz 2019/02/28 | 11040 | systems/texlive/tlnet/archive/index.r24099.tar.xz @@ -296387,8 +296389,8 @@ 2023/06/26 | 255780 | systems/texlive/tlnet/archive/japanese-otf.r67475.tar.xz 2023/06/26 | 68800 | systems/texlive/tlnet/archive/japanese-otf.source.r67475.tar.xz 2019/11/12 | 9792 | systems/texlive/tlnet/archive/jbact.r52717.tar.xz -2023/08/09 | 7935092 | systems/texlive/tlnet/archive/jeuxcartes.doc.r67849.tar.xz -2023/08/09 | 6716028 | systems/texlive/tlnet/archive/jeuxcartes.r67849.tar.xz +2023/09/14 | 7937488 | systems/texlive/tlnet/archive/jeuxcartes.doc.r68266.tar.xz +2023/09/14 | 6716004 | systems/texlive/tlnet/archive/jeuxcartes.r68266.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.aarch64-linux.r46228.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-freebsd.r44835.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-netbsd.r44835.tar.xz @@ -296686,13 +296688,13 @@ 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/09/08 | 746452 | systems/texlive/tlnet/archive/l3build.doc.r68198.tar.xz +2023/09/14 | 746672 | systems/texlive/tlnet/archive/l3build.doc.r68270.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/09/08 | 36448 | systems/texlive/tlnet/archive/l3build.r68198.tar.xz -2023/09/08 | 31512 | systems/texlive/tlnet/archive/l3build.source.r68198.tar.xz +2023/09/14 | 36544 | systems/texlive/tlnet/archive/l3build.r68270.tar.xz +2023/09/14 | 31580 | systems/texlive/tlnet/archive/l3build.source.r68270.tar.xz 2021/02/25 | 340 | systems/texlive/tlnet/archive/l3build.universal-darwin.r57908.tar.xz 2023/02/20 | 2308 | systems/texlive/tlnet/archive/l3build.windows.r65891.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/l3build.x86_64-cygwin.r46894.tar.xz @@ -296812,14 +296814,14 @@ 2019/02/28 | 816780 | systems/texlive/tlnet/archive/latex4wp-it.doc.r36000.tar.xz 2019/02/28 | 420 | systems/texlive/tlnet/archive/latex4wp-it.r36000.tar.xz 2023/08/29 | 476 | systems/texlive/tlnet/archive/latex4wp.r68096.tar.xz -2023/06/11 | 2420480 | systems/texlive/tlnet/archive/latex-amsmath-dev.doc.r67328.tar.xz -2023/06/11 | 31040 | systems/texlive/tlnet/archive/latex-amsmath-dev.r67328.tar.xz -2023/06/11 | 66360 | systems/texlive/tlnet/archive/latex-amsmath-dev.source.r67328.tar.xz +2023/09/14 | 2420584 | systems/texlive/tlnet/archive/latex-amsmath-dev.doc.r68270.tar.xz +2023/09/14 | 31044 | systems/texlive/tlnet/archive/latex-amsmath-dev.r68270.tar.xz +2023/09/14 | 66360 | systems/texlive/tlnet/archive/latex-amsmath-dev.source.r68270.tar.xz 2020/06/08 | 147412 | systems/texlive/tlnet/archive/latexbangla.doc.r55475.tar.xz 2020/06/08 | 3268 | systems/texlive/tlnet/archive/latexbangla.r55475.tar.xz -2023/06/11 | 32780120 | systems/texlive/tlnet/archive/latex-base-dev.doc.r67328.tar.xz -2023/06/11 | 234884 | systems/texlive/tlnet/archive/latex-base-dev.r67328.tar.xz -2023/06/11 | 736152 | systems/texlive/tlnet/archive/latex-base-dev.source.r67328.tar.xz +2023/09/14 | 34655660 | systems/texlive/tlnet/archive/latex-base-dev.doc.r68270.tar.xz +2023/09/14 | 237284 | systems/texlive/tlnet/archive/latex-base-dev.r68270.tar.xz +2023/09/14 | 749456 | systems/texlive/tlnet/archive/latex-base-dev.source.r68270.tar.xz 2020/03/03 | 384 | systems/texlive/tlnet/archive/latex-bin.aarch64-linux.r54018.tar.xz 2020/03/03 | 384 | systems/texlive/tlnet/archive/latex-bin.amd64-freebsd.r54018.tar.xz 2020/03/03 | 380 | systems/texlive/tlnet/archive/latex-bin.amd64-netbsd.r54018.tar.xz @@ -296919,9 +296921,9 @@ 2019/02/28 | 348 | systems/texlive/tlnet/archive/latexfileversion.x86_64-linuxmusl.r46840.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexfileversion.x86_64-linux.r25012.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexfileversion.x86_64-solaris.r25012.tar.xz -2023/05/27 | 263200 | systems/texlive/tlnet/archive/latex-firstaid-dev.doc.r67225.tar.xz -2023/05/27 | 3116 | systems/texlive/tlnet/archive/latex-firstaid-dev.r67225.tar.xz -2023/05/27 | 7960 | systems/texlive/tlnet/archive/latex-firstaid-dev.source.r67225.tar.xz +2023/09/14 | 247104 | systems/texlive/tlnet/archive/latex-firstaid-dev.doc.r68270.tar.xz +2023/09/14 | 2880 | systems/texlive/tlnet/archive/latex-firstaid-dev.r68270.tar.xz +2023/09/14 | 6984 | systems/texlive/tlnet/archive/latex-firstaid-dev.source.r68270.tar.xz 2019/02/28 | 1128 | systems/texlive/tlnet/archive/latex-fonts.doc.r28888.tar.xz 2019/02/28 | 17972 | systems/texlive/tlnet/archive/latex-fonts.r28888.tar.xz 2022/10/09 | 2009952 | systems/texlive/tlnet/archive/latex-for-undergraduates.doc.r64647.tar.xz @@ -296955,14 +296957,14 @@ 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.amd64-freebsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.amd64-netbsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.armhf-linux.r32150.tar.xz -2023/09/10 | 1336736 | systems/texlive/tlnet/archive/latexindent.doc.r68225.tar.xz +2023/09/14 | 1335380 | systems/texlive/tlnet/archive/latexindent.doc.r68268.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-freebsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-linux.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-netbsd.r32150.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.i386-solaris.r32150.tar.xz -2023/09/10 | 74524 | systems/texlive/tlnet/archive/latexindent.r68225.tar.xz +2023/09/14 | 74560 | systems/texlive/tlnet/archive/latexindent.r68268.tar.xz 2021/02/25 | 344 | systems/texlive/tlnet/archive/latexindent.universal-darwin.r57908.tar.xz -2023/09/10 | 4752928 | systems/texlive/tlnet/archive/latexindent.windows.r68225.tar.xz +2023/09/14 | 4753336 | systems/texlive/tlnet/archive/latexindent.windows.r68268.tar.xz 2019/02/28 | 344 | systems/texlive/tlnet/archive/latexindent.x86_64-cygwin.r33557.tar.xz 2019/02/28 | 352 | systems/texlive/tlnet/archive/latexindent.x86_64-darwinlegacy.r43871.tar.xz 2019/02/28 | 348 | systems/texlive/tlnet/archive/latexindent.x86_64-linuxmusl.r46840.tar.xz @@ -297725,9 +297727,9 @@ 2020/02/18 | 20788 | systems/texlive/tlnet/archive/luatodonotes.source.r53825.tar.xz 2023/08/16 | 94296 | systems/texlive/tlnet/archive/luatruthtable.doc.r67938.tar.xz 2023/08/16 | 2276 | systems/texlive/tlnet/archive/luatruthtable.r67938.tar.xz -2023/04/30 | 284504 | systems/texlive/tlnet/archive/lua-typo.doc.r66969.tar.xz -2023/04/30 | 11972 | systems/texlive/tlnet/archive/lua-typo.r66969.tar.xz -2023/04/30 | 27688 | systems/texlive/tlnet/archive/lua-typo.source.r66969.tar.xz +2023/09/14 | 293356 | systems/texlive/tlnet/archive/lua-typo.doc.r68267.tar.xz +2023/09/14 | 12840 | systems/texlive/tlnet/archive/lua-typo.r68267.tar.xz +2023/09/14 | 29212 | systems/texlive/tlnet/archive/lua-typo.source.r68267.tar.xz 2021/11/11 | 75516 | systems/texlive/tlnet/archive/lua-uca.doc.r61023.tar.xz 2021/11/11 | 74192 | systems/texlive/tlnet/archive/lua-uca.r61023.tar.xz 2021/11/11 | 1136 | systems/texlive/tlnet/archive/lua-uca.source.r61023.tar.xz @@ -299279,6 +299281,8 @@ 2019/02/28 | 134028 | systems/texlive/tlnet/archive/parselines.doc.r21475.tar.xz 2019/02/28 | 1872 | systems/texlive/tlnet/archive/parselines.r21475.tar.xz 2019/02/28 | 9128 | systems/texlive/tlnet/archive/parselines.source.r21475.tar.xz +2023/09/14 | 94436 | systems/texlive/tlnet/archive/parsimatn.doc.r68271.tar.xz +2023/09/14 | 122964 | systems/texlive/tlnet/archive/parsimatn.r68271.tar.xz 2023/09/09 | 58516 | systems/texlive/tlnet/archive/parsinevis.doc.r68214.tar.xz 2023/09/09 | 131036 | systems/texlive/tlnet/archive/parsinevis.r68214.tar.xz 2021/03/15 | 312668 | systems/texlive/tlnet/archive/parskip.doc.r58358.tar.xz @@ -300057,8 +300061,8 @@ 2023/09/04 | 37280 | systems/texlive/tlnet/archive/proflycee.r68162.tar.xz 2023/09/10 | 178328 | systems/texlive/tlnet/archive/profmaquette.doc.r68222.tar.xz 2023/09/10 | 13760 | systems/texlive/tlnet/archive/profmaquette.r68222.tar.xz -2023/08/25 | 316752 | systems/texlive/tlnet/archive/profsio.doc.r68045.tar.xz -2023/08/25 | 8608 | systems/texlive/tlnet/archive/profsio.r68045.tar.xz +2023/09/14 | 330952 | systems/texlive/tlnet/archive/profsio.doc.r68265.tar.xz +2023/09/14 | 10292 | systems/texlive/tlnet/archive/profsio.r68265.tar.xz 2019/02/28 | 49880 | systems/texlive/tlnet/archive/program.doc.r44214.tar.xz 2019/02/28 | 11780 | systems/texlive/tlnet/archive/program.r44214.tar.xz 2019/02/28 | 86236 | systems/texlive/tlnet/archive/progressbar.doc.r33822.tar.xz @@ -300930,12 +300934,12 @@ 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.amd64-freebsd.r68232.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.amd64-netbsd.r68232.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.armhf-linux.r68232.tar.xz -2023/09/11 | 2448 | systems/texlive/tlnet/archive/runtexshebang.doc.r68232.tar.xz +2023/09/14 | 2528 | systems/texlive/tlnet/archive/runtexshebang.doc.r68269.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.i386-freebsd.r68232.tar.xz 2023/09/11 | 340 | systems/texlive/tlnet/archive/runtexshebang.i386-linux.r68232.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.i386-netbsd.r68232.tar.xz 2023/09/11 | 340 | systems/texlive/tlnet/archive/runtexshebang.i386-solaris.r68232.tar.xz -2023/09/11 | 1896 | systems/texlive/tlnet/archive/runtexshebang.r68232.tar.xz +2023/09/14 | 2180 | systems/texlive/tlnet/archive/runtexshebang.r68269.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.universal-darwin.r68232.tar.xz 2023/09/11 | 2308 | systems/texlive/tlnet/archive/runtexshebang.windows.r68232.tar.xz 2023/09/11 | 344 | systems/texlive/tlnet/archive/runtexshebang.x86_64-cygwin.r68232.tar.xz @@ -302246,7 +302250,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/09/13 | 429604 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68247.tar.xz +2023/09/14 | 429632 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68262.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 @@ -302268,7 +302272,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/09/13 | 114132 | systems/texlive/tlnet/archive/texlive-scripts.r68247.tar.xz +2023/09/14 | 114132 | systems/texlive/tlnet/archive/texlive-scripts.r68262.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -302808,7 +302812,7 @@ 2019/02/28 | 348 | systems/texlive/tlnet/archive/tlcockpit.x86_64-linuxmusl.r47036.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/tlcockpit.x86_64-linux.r46798.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/tlcockpit.x86_64-solaris.r46798.tar.xz -2023/06/27 | 8898712 | systems/texlive/tlnet/archive/tlgs.windows.r67478.tar.xz +2023/09/14 | 8815484 | systems/texlive/tlnet/archive/tlgs.windows.r68272.tar.xz 2023/06/25 | 163104 | systems/texlive/tlnet/archive/tlmgrbasics.doc.r67460.tar.xz 2023/06/25 | 424 | systems/texlive/tlnet/archive/tlmgrbasics.r67460.tar.xz 2021/05/07 | 444724 | systems/texlive/tlnet/archive/tlmgr-intro-zh-cn.doc.r59100.tar.xz @@ -304146,16 +304150,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 2023/08/07 | 125713 | systems/texlive/tlnet/install-tl -2023/09/13 | 5742203 | systems/texlive/tlnet/install-tl-unx.tar.gz -2023/09/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2023/09/13 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/09/14 | 5742573 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/09/14 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/09/14 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat -2023/09/13 | 21038779 | systems/texlive/tlnet/install-tl-windows.exe -2023/09/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2023/09/13 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/09/13 | 26028708 | systems/texlive/tlnet/install-tl.zip -2023/09/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2023/09/13 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/09/14 | 21037822 | systems/texlive/tlnet/install-tl-windows.exe +2023/09/14 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/09/14 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/09/14 | 26028702 | systems/texlive/tlnet/install-tl.zip +2023/09/14 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/09/14 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2023/03/19 | 1229 | systems/texlive/tlnet/README.md 2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023 2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -304165,7 +304169,7 @@ 2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2023/08/03 | 50576 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2023/09/12 | 7363 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2023/09/13 | 7317 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/08/23 | 221470 | 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 @@ -304207,12 +304211,12 @@ 2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2023/09/13 | 18257627 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2023/09/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/09/14 | 18259638 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/09/14 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/02/20 | 86803 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2023/09/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2023/09/13 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/09/13 | 2478300 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/09/14 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/09/14 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/09/14 | 2475492 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -314954,7 +314958,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/09/14 | 186 | timestamp +2023/09/15 | 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 4d46643fa7..75303fb38e 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 24c3ffcc8c..45d8940b0c 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,3 +1,151 @@ +2023/09/14 | 9480 | fonts/utilities/fontools/bin/splitttc +2023/09/14 | 94436 | systems/texlive/tlnet/archive/parsimatn.doc.r68271.tar.xz +2023/09/14 | 91880 | fonts/parsimatn/ParsiMatn-Italic.ttf +2023/09/14 | 91078 | fonts/parsimatn/parsimatn-example-of-use.pdf +2023/09/14 | 88940 | fonts/parsimatn/ParsiMatn-BoldItalic.ttf +2023/09/14 | 886155 | macros/latex-dev/required/latex-lab/latex-lab-block.pdf +2023/09/14 | 886155 | macros/latex-dev/required/latex-lab/blocks-code.pdf +2023/09/14 | 88568 | fonts/parsimatn/ParsiMatn-Regular.ttf +2023/09/14 | 8815484 | systems/texlive/tlnet/archive/tlgs.windows.r68272.tar.xz +2023/09/14 | 87749 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx +2023/09/14 | 85908 | fonts/parsimatn/ParsiMatn-Bold.ttf +2023/09/14 | 815832 | macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf +2023/09/14 | 7937488 | systems/texlive/tlnet/archive/jeuxcartes.doc.r68266.tar.xz +2023/09/14 | 766 | fonts/parsimatn/README.md +2023/09/14 | 749456 | systems/texlive/tlnet/archive/latex-base-dev.source.r68270.tar.xz +2023/09/14 | 746672 | systems/texlive/tlnet/archive/l3build.doc.r68270.tar.xz +2023/09/14 | 74560 | systems/texlive/tlnet/archive/latexindent.r68268.tar.xz +2023/09/14 | 72654 | fonts/utilities/fontools/doc/autoinst.pdf +2023/09/14 | 707422 | macros/latex/contrib/zref.zip +2023/09/14 | 699604 | macros/latex/contrib/zref/zref.pdf +2023/09/14 | 6984 | systems/texlive/tlnet/archive/latex-firstaid-dev.source.r68270.tar.xz +2023/09/14 | 6716004 | systems/texlive/tlnet/archive/jeuxcartes.r68266.tar.xz +2023/09/14 | 66360 | systems/texlive/tlnet/archive/latex-amsmath-dev.source.r68270.tar.xz +2023/09/14 | 632322 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf +2023/09/14 | 6221 | macros/latex-dev/required/latex-lab/glyphtounicode-cmex.tex +2023/09/14 | 6145 | macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx +2023/09/14 | 6134 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx +2023/09/14 | 612561 | macros/latex-dev/required/latex-lab/latex-lab-math.pdf +2023/09/14 | 5946 | macros/latex-dev/required/latex-lab/latex-lab.ins +2023/09/14 | 582 | macros/latex/contrib/zref/README.md +2023/09/14 | 5826 | macros/latex-dev/required/latex-lab/changes.txt +2023/09/14 | 5742573 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/09/14 | 5733 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.dtx +2023/09/14 | 5684 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.dtx +2023/09/14 | 5468 | fonts/utilities/fontools/share/fontools_t3.enc +2023/09/14 | 5420 | fonts/utilities/fontools/share/fontools_ts3.enc +2023/09/14 | 528176 | macros/latex-dev/required/latex-lab/latex-lab-sec.pdf +2023/09/14 | 523606 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf +2023/09/14 | 497260 | macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf +2023/09/14 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/09/14 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/09/14 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/09/14 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/09/14 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/09/14 | 4770 | macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx +2023/09/14 | 476 | systems/texlive/tlnet/archive/collection-langarabic.r68271.tar.xz +2023/09/14 | 4753336 | systems/texlive/tlnet/archive/latexindent.windows.r68268.tar.xz +2023/09/14 | 4736 | systems/texlive/tlnet/archive/inconsolata-nerd-font.source.r68263.tar.xz +2023/09/14 | 4566 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx +2023/09/14 | 444989 | macros/latex-dev/required/latex-lab/latex-lab-float.pdf +2023/09/14 | 440245 | macros/latex-dev/required/latex-lab/blocks-doc.pdf +2023/09/14 | 4364 | fonts/utilities/fontools/share/fontools_t2b.enc +2023/09/14 | 429632 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68262.tar.xz +2023/09/14 | 4286 | fonts/utilities/fontools/share/fontools_t2c.enc +2023/09/14 | 4112043 | biblio/ctan-bibdata.zip +2023/09/14 | 411100 | macros/latex-dev/required/latex-lab/latex-lab-bib.pdf +2023/09/14 | 389733 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf +2023/09/14 | 389235 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf +2023/09/14 | 3844 | fonts/utilities/fontools/share/fontools_t5.enc +2023/09/14 | 377490 | macros/latex-dev/required/latex-lab/latex-lab-toc.pdf +2023/09/14 | 3710112 | biblio/ctan-bibdata/ctan.pdf +2023/09/14 | 36968 | macros/latex-dev/required/latex-lab/latex-lab-math.dtx +2023/09/14 | 3669 | macros/latex-dev/required/latex-lab/latex-lab-text.dtx +2023/09/14 | 3664 | fonts/utilities/fontools/share/fontools_t4.enc +2023/09/14 | 36544 | systems/texlive/tlnet/archive/l3build.r68270.tar.xz +2023/09/14 | 3592 | fonts/utilities/fontools/share/fontools_ts1.enc +2023/09/14 | 357811 | macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf +2023/09/14 | 357811 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf +2023/09/14 | 356743 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf +2023/09/14 | 3542 | fonts/utilities/fontools/share/fontools_t2a.enc +2023/09/14 | 3478 | fonts/utilities/fontools/share/fontools_t1.enc +2023/09/14 | 34655660 | systems/texlive/tlnet/archive/latex-base-dev.doc.r68270.tar.xz +2023/09/14 | 34616 | macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx +2023/09/14 | 3448 | fonts/utilities/fontools/share/fontools_qx.enc +2023/09/14 | 3420 | fonts/utilities/fontools/share/fontools_cs.enc +2023/09/14 | 3409 | fonts/utilities/fontools/share/fontools_l7x.enc +2023/09/14 | 3366 | fonts/utilities/fontools/share/fontools_ly1.enc +2023/09/14 | 3331920 | systems/texlive/tlnet/archive/circuit-macros.doc.r68264.tar.xz +2023/09/14 | 3318 | fonts/utilities/fontools/share/fontools_ot1.enc +2023/09/14 | 3318 | fonts/utilities/fontools/share/fontools_oml.enc +2023/09/14 | 330952 | systems/texlive/tlnet/archive/profsio.doc.r68265.tar.xz +2023/09/14 | 3179 | macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx +2023/09/14 | 31580 | systems/texlive/tlnet/archive/l3build.source.r68270.tar.xz +2023/09/14 | 31044 | systems/texlive/tlnet/archive/latex-amsmath-dev.r68270.tar.xz +2023/09/14 | 307823 | macros/latex-dev/required/latex-lab/latex-lab-text.pdf +2023/09/14 | 302644 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf +2023/09/14 | 3003 | fonts/utilities/fontools/README +2023/09/14 | 298669 | macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf +2023/09/14 | 296136 | macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf +2023/09/14 | 293356 | systems/texlive/tlnet/archive/lua-typo.doc.r68267.tar.xz +2023/09/14 | 29212 | systems/texlive/tlnet/archive/lua-typo.source.r68267.tar.xz +2023/09/14 | 291894 | fonts/parsimatn.zip +2023/09/14 | 2882 | macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx +2023/09/14 | 2880 | systems/texlive/tlnet/archive/latex-firstaid-dev.r68270.tar.xz +2023/09/14 | 2812990 | biblio/ctan-bibdata/ctan.bib +2023/09/14 | 278305 | macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf +2023/09/14 | 27582 | fonts/utilities/fontools/bin/ot2kpx +2023/09/14 | 27320 | fonts/utilities/fontools/doc/ot2kpx.pdf +2023/09/14 | 272876 | macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf +2023/09/14 | 27043 | macros/latex-dev/required/latex-lab/latex-lab-sec.dtx +2023/09/14 | 26954 | fonts/utilities/fontools/doc/afm2afm.pdf +2023/09/14 | 26028702 | systems/texlive/tlnet/install-tl.zip +2023/09/14 | 2528 | systems/texlive/tlnet/archive/runtexshebang.doc.r68269.tar.xz +2023/09/14 | 2475492 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/09/14 | 247104 | systems/texlive/tlnet/archive/latex-firstaid-dev.doc.r68270.tar.xz +2023/09/14 | 2453 | macros/latex-dev/required/latex-lab/latex-lab-mathpkg.dtx +2023/09/14 | 2420584 | systems/texlive/tlnet/archive/latex-amsmath-dev.doc.r68270.tar.xz +2023/09/14 | 23812 | macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx +2023/09/14 | 237284 | systems/texlive/tlnet/archive/latex-base-dev.r68270.tar.xz +2023/09/14 | 234661 | macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf +2023/09/14 | 220535 | fonts/utilities/fontools.zip +2023/09/14 | 2180 | systems/texlive/tlnet/archive/runtexshebang.r68269.tar.xz +2023/09/14 | 21037822 | systems/texlive/tlnet/install-tl-windows.exe +2023/09/14 | 20437 | fonts/utilities/fontools/doc/splitttc.pdf +2023/09/14 | 198236 | macros/latex/contrib/zref/zref.dtx +2023/09/14 | 19447 | macros/latex-dev/required/latex-lab/documentmetadata-support.dtx +2023/09/14 | 191 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.tex +2023/09/14 | 18259638 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/09/14 | 18202 | CTAN.sites +2023/09/14 | 17997 | fonts/utilities/fontools/GPLv2.txt +2023/09/14 | 17593 | macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx +2023/09/14 | 175638 | fonts/utilities/fontools/bin/autoinst +2023/09/14 | 17241 | fonts/utilities/fontools/share/fontools_lgr.enc +2023/09/14 | 16852 | macros/latex-dev/required/latex-lab/latex-lab-float.dtx +2023/09/14 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/09/14 | 1573108 | systems/texlive/tlnet/archive/inconsolata-nerd-font.r68263.tar.xz +2023/09/14 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/09/14 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/09/14 | 1500 | systems/texlive/tlnet/archive/circuit-macros.r68264.tar.xz +2023/09/14 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/09/14 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/09/14 | 14027 | macros/latex-dev/required/latex-lab/latex-lab-bib.dtx +2023/09/14 | 135159 | macros/latex-dev/required/latex-lab/latex-lab-block.dtx +2023/09/14 | 1335380 | systems/texlive/tlnet/archive/latexindent.doc.r68268.tar.xz +2023/09/14 | 13334 | fonts/utilities/fontools/bin/afm2afm +2023/09/14 | 1320736 | systems/texlive/tlnet/archive/inconsolata-nerd-font.doc.r68263.tar.xz +2023/09/14 | 12840 | systems/texlive/tlnet/archive/lua-typo.r68267.tar.xz +2023/09/14 | 122964 | systems/texlive/tlnet/archive/parsimatn.r68271.tar.xz +2023/09/14 | 117 | macros/latex-dev/required/latex-lab/documentmetadata-support-code.tex +2023/09/14 | 11652 | macros/latex-dev/required/latex-lab/latex-lab-toc.dtx +2023/09/14 | 1156 | macros/latex-dev/required/latex-lab/README.md +2023/09/14 | 114132 | systems/texlive/tlnet/archive/texlive-scripts.r68262.tar.xz +2023/09/14 | 108 | macros/latex-dev/required/latex-lab/blocks-code.tex +2023/09/14 | 10803422 | install/macros/latex-dev/required/latex-lab-dev.tds.zip +2023/09/14 | 10726234 | macros/latex-dev/required/latex-lab.zip +2023/09/14 | 105 | macros/latex-dev/required/latex-lab/blocks-doc.tex +2023/09/14 | 10292 | systems/texlive/tlnet/archive/profsio.r68265.tar.xz +2023/09/14 | 10246 | fonts/parsimatn/parsimatn-example-of-use.tex 2023/09/13 | 99 | macros/latex-dev/base/ltpara-code.tex 2023/09/13 | 9939629 | support/latexindent/bin/windows/latexindent.exe 2023/09/13 | 9935 | macros/latex-dev/base/ltnews21.tex @@ -10,24 +158,19 @@ 2023/09/13 | 9345 | macros/latex-dev/base/preload.dtx 2023/09/13 | 92954 | macros/latex-dev/base/ltdefns.dtx 2023/09/13 | 92280 | macros/latex-dev/base/utf8ienc.dtx -2023/09/13 | 91046 | fonts/parsimatn/parsimatn-example-of-use.pdf 2023/09/13 | 9068 | macros/latex-dev/base/lppl-1-0.txt 2023/09/13 | 90660 | macros/latex-dev/base/lttextcomp.dtx -2023/09/13 | 90440 | fonts/parsimatn/ParsiMatn-Italic.ttf 2023/09/13 | 8992 | systems/texlive/tlnet/archive/se2thesis.r68255.tar.xz 2023/09/13 | 89727 | macros/latex-dev/base/slides.dtx 2023/09/13 | 8970 | macros/latex-dev/base/ltnews17.tex 2023/09/13 | 8921 | macros/latex-dev/base/ltnews38.tex 2023/09/13 | 8893 | support/latexindent/LatexIndent/IfElseFi.pm 2023/09/13 | 8819 | support/latexindent/LatexIndent/FileExtension.pm -2023/09/13 | 87512 | fonts/parsimatn/ParsiMatn-BoldItalic.ttf 2023/09/13 | 8731 | macros/latex-dev/base/ltthm.dtx -2023/09/13 | 87168 | fonts/parsimatn/ParsiMatn-Regular.ttf 2023/09/13 | 8663 | macros/latex-dev/required/amsmath/amsbsy.dtx 2023/09/13 | 8626 | macros/latex-dev/base/oldlfont.dtx 2023/09/13 | 85099 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty 2023/09/13 | 849336 | systems/texlive/tlnet/archive/minted.doc.r68252.tar.xz -2023/09/13 | 84572 | fonts/parsimatn/ParsiMatn-Bold.ttf 2023/09/13 | 84215 | macros/latex-dev/base/ltfssini.dtx 2023/09/13 | 838 | support/latexindent/LatexIndent/Version.pm 2023/09/13 | 8351 | macros/latex-dev/required/amsmath/changes.txt @@ -44,8 +187,6 @@ 2023/09/13 | 803891 | macros/latex-dev/base/ltfilehook-code.pdf 2023/09/13 | 7805 | macros/latex/contrib/l3build/l3build-arguments.lua 2023/09/13 | 77755 | graphics/pgf/contrib/profsio/tex/ProfSio.sty -2023/09/13 | 77520 | systems/texlive/tlnet/archive/inconsolata-nerd-font.doc.r68248.tar.xz -2023/09/13 | 766 | fonts/parsimatn/README.md 2023/09/13 | 756197 | macros/latex-dev/base/doc.pdf 2023/09/13 | 755724 | macros/latex-dev/base/lthooks-doc.pdf 2023/09/13 | 755624 | macros/latex-dev/base/ltcmdhooks-code.pdf @@ -57,6 +198,7 @@ 2023/09/13 | 744760 | macros/latex/contrib/l3build/l3build.pdf 2023/09/13 | 7445 | support/latexindent/LatexIndent/BackUpFileProcedure.pm 2023/09/13 | 7379 | support/latexindent/LatexIndent/MandatoryArgument.pm +2023/09/13 | 7317 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/09/13 | 72475 | macros/latex-dev/base/ltfsstrc.dtx 2023/09/13 | 7244 | macros/latex-dev/base/ltnews20.tex 2023/09/13 | 7216 | macros/latex-dev/base/exscale.dtx @@ -112,7 +254,6 @@ 2023/09/13 | 58551 | macros/latex-dev/base/ltfssaxes.dtx 2023/09/13 | 5825 | macros/latex-dev/base/ltnews10.tex 2023/09/13 | 5775 | macros/latex-dev/base/ltnews16.tex -2023/09/13 | 5742203 | systems/texlive/tlnet/install-tl-unx.tar.gz 2023/09/13 | 5732 | macros/latex-dev/base/ltnews08.tex 2023/09/13 | 5714 | macros/latex-dev/base/inputenc.ins 2023/09/13 | 5699 | macros/latex-dev/base/ltnews05.tex @@ -161,19 +302,13 @@ 2023/09/13 | 499095 | macros/latex-dev/base/ltcmdhooks-doc.pdf 2023/09/13 | 4972 | macros/latex/contrib/l3build/l3build-ctan.lua 2023/09/13 | 4945 | macros/latex-dev/base/lthyphen.dtx -2023/09/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/09/13 | 489290 | macros/latex-dev/base/ltsockets-doc.pdf -2023/09/13 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/09/13 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2023/09/13 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/09/13 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/09/13 | 4860 | support/latexindent/LatexIndent/BlankLines.pm 2023/09/13 | 47896 | macros/latex-dev/base/lttab.dtx 2023/09/13 | 477695 | macros/latex-dev/base/usrguide.pdf 2023/09/13 | 47724 | systems/texlive/tlnet/archive/minted.source.r68252.tar.xz 2023/09/13 | 4757 | macros/latex-dev/base/ltlength.dtx 2023/09/13 | 474 | macros/latex-dev/required/firstaid/README.md -2023/09/13 | 472 | systems/texlive/tlnet/archive/collection-langarabic.r68250.tar.xz 2023/09/13 | 470660 | macros/latex/contrib/arraycols.zip 2023/09/13 | 46467 | macros/latex-dev/base/ltspace.dtx 2023/09/13 | 464654 | macros/latex/contrib/arraycols/arraycols.pdf @@ -190,7 +325,6 @@ 2023/09/13 | 4402 | support/latexindent/documentation/latex-indent.bib 2023/09/13 | 4394 | fonts/inconsolata-nerd-font/OFL.txt 2023/09/13 | 4390 | macros/latex-dev/base/ec.ins -2023/09/13 | 4388 | systems/texlive/tlnet/archive/inconsolata-nerd-font.source.r68248.tar.xz 2023/09/13 | 4388 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm 2023/09/13 | 438602 | macros/latex-dev/base/usrguide-historic.pdf 2023/09/13 | 438360 | support/latexindent/documentation/latexindent.tex @@ -200,7 +334,6 @@ 2023/09/13 | 4324 | macros/latex-dev/base/cmfonts.ins 2023/09/13 | 432158 | macros/latex-dev/base/ltproperties-doc.pdf 2023/09/13 | 4298 | macros/latex-dev/base/ltalloc.dtx -2023/09/13 | 429604 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68247.tar.xz 2023/09/13 | 42831090 | macros/latex-dev/base.zip 2023/09/13 | 4273 | macros/latex-dev/base/docstrip.ins 2023/09/13 | 42708 | macros/latex-dev/base/changes.old.txt @@ -215,7 +348,6 @@ 2023/09/13 | 4150 | macros/latex/contrib/l3build/l3build-zip.lua 2023/09/13 | 41430 | macros/latex/contrib/jeuxcartes/doc/JeuxCartes-doc.tex 2023/09/13 | 41316 | macros/luatex/latex/lua-typo/lua-typo-2023-03-08.sty -2023/09/13 | 4111065 | biblio/ctan-bibdata.zip 2023/09/13 | 4087 | macros/latex-dev/base/classes.ins 2023/09/13 | 4079 | macros/latex-dev/base/lablst.tex 2023/09/13 | 402877 | macros/latex-dev/base/changes.txt @@ -223,6 +355,7 @@ 2023/09/13 | 3976 | support/runtexshebang/README.md 2023/09/13 | 3960 | macros/latex-dev/base/olddc.ins 2023/09/13 | 38730 | macros/latex-dev/base/latex209.dtx +2023/09/13 | 383157 | macros/texinfo/latest/texinfo.tex 2023/09/13 | 38226 | macros/latex-dev/base/ltnews35.tex 2023/09/13 | 379733 | macros/latex-dev/base/ltnews26.pdf 2023/09/13 | 3796 | support/latexindent/LatexIndent/Replacement.pm @@ -232,7 +365,6 @@ 2023/09/13 | 375493 | macros/latex-dev/base/slides.pdf 2023/09/13 | 37436 | macros/latex/contrib/l3build/l3build-check.lua 2023/09/13 | 3725 | macros/latex-dev/base/ltlogos.dtx -2023/09/13 | 3709441 | biblio/ctan-bibdata/ctan.pdf 2023/09/13 | 369 | macros/latex-dev/required/amsmath/manifest.txt 2023/09/13 | 3679102 | graphics/circuit_macros.zip 2023/09/13 | 36154 | macros/latex-dev/base/ltlists.dtx @@ -281,7 +413,6 @@ 2023/09/13 | 292600 | macros/latex-dev/base/cmfonts.pdf 2023/09/13 | 291143 | macros/latex-dev/base/tlc2.pdf 2023/09/13 | 2896 | macros/latex-dev/base/syntonly.ins -2023/09/13 | 289668 | fonts/parsimatn.zip 2023/09/13 | 2893 | macros/latex-dev/base/nfssfont.ins 2023/09/13 | 2892 | macros/latex-dev/base/graphpap.ins 2023/09/13 | 2892 | macros/latex-dev/base/fix-cm.ins @@ -290,7 +421,6 @@ 2023/09/13 | 287727 | macros/latex-dev/base/fix-cm.pdf 2023/09/13 | 286824 | macros/latex-dev/base/ltnews23.pdf 2023/09/13 | 282095 | macros/latex-dev/base/latexrelease.pdf -2023/09/13 | 2812622 | biblio/ctan-bibdata/ctan.bib 2023/09/13 | 2795752 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip 2023/09/13 | 2762546 | macros/latex-dev/required/amsmath.zip 2023/09/13 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua @@ -305,7 +435,6 @@ 2023/09/13 | 265497 | macros/latex-dev/base/ltnews24.pdf 2023/09/13 | 264168 | macros/latex-dev/base/cfgguide.pdf 2023/09/13 | 2625 | macros/latex-dev/required/firstaid/firstaid.ins -2023/09/13 | 26028708 | systems/texlive/tlnet/install-tl.zip 2023/09/13 | 257825 | macros/latex-dev/base/modguide.pdf 2023/09/13 | 257359 | macros/latex-dev/base/cyrguide.pdf 2023/09/13 | 257201 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip @@ -315,7 +444,6 @@ 2023/09/13 | 252497 | macros/latex-dev/base/lb2.pdf 2023/09/13 | 252465 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf 2023/09/13 | 251283 | macros/latex-dev/base/ltnews27.pdf -2023/09/13 | 2478300 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2023/09/13 | 2473 | macros/latex/contrib/l3build/l3build-help.lua 2023/09/13 | 245228 | macros/latex-dev/base/ltnews21.pdf 2023/09/13 | 24449 | support/latexindent/LatexIndent/Arguments.pm @@ -362,7 +490,6 @@ 2023/09/13 | 21488 | macros/latex-dev/base/ltnews.cls 2023/09/13 | 21229 | macros/latex-dev/base/lgc2.err 2023/09/13 | 211171 | macros/latex-dev/base/nfssfont.pdf -2023/09/13 | 21038779 | systems/texlive/tlnet/install-tl-windows.exe 2023/09/13 | 20870 | support/latexindent/LatexIndent/Indent.pm 2023/09/13 | 205100 | macros/latex-dev/base/ltnews25.pdf 2023/09/13 | 204708 | macros/latex-dev/base/exscale.pdf @@ -389,7 +516,6 @@ 2023/09/13 | 18399 | macros/latex-dev/base/nfssfont.dtx 2023/09/13 | 183132 | macros/latex-dev/base/ltcmd.dtx 2023/09/13 | 18299 | macros/latex-dev/base/ltx3info.tex -2023/09/13 | 18257627 | systems/texlive/tlnet/tlpkg/texlive.tlpdb 2023/09/13 | 182483 | macros/latex-dev/base/ltnews13.pdf 2023/09/13 | 1816 | macros/latex/contrib/l3build/l3build.1 2023/09/13 | 179951 | macros/latex-dev/required/amsmath/amscd.pdf @@ -407,7 +533,6 @@ 2023/09/13 | 1694 | macros/latex-dev/base/small2e.tex 2023/09/13 | 169433 | macros/latex-dev/base/ltnews10.pdf 2023/09/13 | 16859 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf -2023/09/13 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2023/09/13 | 166269 | macros/latex-dev/base/ltnews17.pdf 2023/09/13 | 165816 | macros/latex-dev/base/makeindx.pdf 2023/09/13 | 16500 | macros/latex-dev/base/modguide.tex @@ -415,7 +540,6 @@ 2023/09/13 | 161722 | macros/latex-dev/base/graphpap.pdf 2023/09/13 | 159652 | systems/texlive/tlnet/archive/pdfjam.doc.r68257.tar.xz 2023/09/13 | 157676 | systems/texlive/tlnet/archive/hyperxmp.source.r68251.tar.xz -2023/09/13 | 1573116 | systems/texlive/tlnet/archive/inconsolata-nerd-font.r68248.tar.xz 2023/09/13 | 15703 | macros/latex-dev/base/slifonts.fdd 2023/09/13 | 156764 | macros/latex-dev/base/ltnews12.pdf 2023/09/13 | 156238 | macros/latex-dev/base/classes.dtx @@ -424,9 +548,7 @@ 2023/09/13 | 155442 | macros/latex-dev/base/ltnews08.pdf 2023/09/13 | 15431 | macros/latex-dev/base/source2e.tex 2023/09/13 | 1540 | macros/latex/contrib/l3build/l3build.ins -2023/09/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 2023/09/13 | 15384 | macros/latex-dev/base/ltvers.dtx -2023/09/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 2023/09/13 | 152551 | macros/latex-dev/base/ltnews04.pdf 2023/09/13 | 15208498 | macros/latex/contrib/jeuxcartes.zip 2023/09/13 | 151773 | macros/latex-dev/base/ltnews02.pdf @@ -444,11 +566,9 @@ 2023/09/13 | 148294 | macros/latex-dev/base/ltoutenc.dtx 2023/09/13 | 147459 | macros/latex-dev/required/amsmath/technote.pdf 2023/09/13 | 146199 | macros/latex-dev/base/webcomp.pdf -2023/09/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 2023/09/13 | 1456060 | systems/texlive/tlnet/archive/tex4ht.source.r68260.tar.xz 2023/09/13 | 14543 | fonts/inconsolata-nerd-font/inconsolata-nerd-font.dtx 2023/09/13 | 145334 | macros/latex-dev/base/ltclass.dtx -2023/09/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2023/09/13 | 14421 | macros/latex-dev/base/lppl-1-2.txt 2023/09/13 | 14341 | macros/latex-dev/base/lppl-1-1.txt 2023/09/13 | 142867 | macros/latex-dev/base/ltnews06.pdf @@ -487,7 +607,6 @@ 2023/09/13 | 1165076 | systems/texlive/tlnet/archive/hyperxmp.doc.r68251.tar.xz 2023/09/13 | 1154 | fonts/inconsolata-nerd-font/CHANGELOG.md 2023/09/13 | 11463 | macros/latex-dev/base/manifest.txt -2023/09/13 | 114132 | systems/texlive/tlnet/archive/texlive-scripts.r68247.tar.xz 2023/09/13 | 11398 | macros/latex-dev/required/amsmath/amstext.dtx 2023/09/13 | 11358 | support/latexindent/LatexIndent/FileContents.pm 2023/09/13 | 113560 | macros/latex-dev/required/amsmath/amsxtra.pdf @@ -521,7 +640,6 @@ 2023/09/13 | 102 | macros/latex-dev/base/lthooks-code.tex 2023/09/13 | 10251 | macros/latex-dev/base/webcomp.err 2023/09/13 | 1024932 | systems/texlive/tlnet/archive/babel.doc.r68258.tar.xz -2023/09/13 | 10246 | fonts/parsimatn/parsimatn-example-of-use.tex 2023/09/13 | 1019 | macros/latex/contrib/l3build/README.md 2023/09/13 | 10199 | macros/latex-dev/required/amsmath/amsopn.dtx 2023/09/13 | 10088 | systems/texlive/tlnet/archive/minted.r68252.tar.xz @@ -541,7 +659,6 @@ 2023/09/12 | 780659 | macros/latex/required/babel/base/babel.dtx 2023/09/12 | 77573 | language/greek/greek-fontenc/test-tuenc-greek.pdf 2023/09/12 | 75790 | language/greek/greek-fontenc/tuenc-greek.def.html -2023/09/12 | 7363 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/09/12 | 734 | macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex 2023/09/12 | 712 | macros/latex/contrib/minted/README 2023/09/12 | 70276 | systems/texlive/tlnet/archive/newpax.doc.r68242.tar.xz @@ -953,7 +1070,6 @@ 2023/09/11 | 25103 | graphics/circuit_macros/examples/dpv/examplesDPVs.htmx 2023/09/11 | 25098 | graphics/circuit_macros/examples/dpv/examplesDPV.htmx 2023/09/11 | 245 | graphics/circuit_macros/examples/extras/Ccurve.m4 -2023/09/11 | 2448 | systems/texlive/tlnet/archive/runtexshebang.doc.r68232.tar.xz 2023/09/11 | 2443 | graphics/circuit_macros/examples/dpv/ex00DPV.m4 2023/09/11 | 2442 | graphics/circuit_macros/examples/Optoiso.m4 2023/09/11 | 2427 | graphics/circuit_macros/doc/AlogixMan.m4 @@ -1035,7 +1151,6 @@ 2023/09/11 | 1916 | graphics/circuit_macros/examples/extras/venus.m4 2023/09/11 | 1906 | graphics/circuit_macros/examples/extras/SPM.m4 2023/09/11 | 1902836 | graphics/circuit_macros/examples/examples.pdf -2023/09/11 | 1896 | systems/texlive/tlnet/archive/runtexshebang.r68232.tar.xz 2023/09/11 | 1894 | graphics/circuit_macros/examples/dpv/ArrowFnDPV.m4 2023/09/11 | 1893 | graphics/circuit_macros/examples/dpv/ex16DPV.m4 2023/09/11 | 1891 | graphics/circuit_macros/examples/dpv/ex04DPV.m4 @@ -1296,7 +1411,6 @@ 2023/09/10 | 7554 | systems/win32/miktex/tm/packages/highlightx__source.tar.lzma 2023/09/10 | 74711 | systems/win32/miktex/tm/packages/latexindent.tar.lzma 2023/09/10 | 74614 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2023/09/10 | 74524 | systems/texlive/tlnet/archive/latexindent.r68225.tar.xz 2023/09/10 | 737654 | systems/win32/miktex/tm/packages/l3build__doc.tar.lzma 2023/09/10 | 73266 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma 2023/09/10 | 7313 | systems/win32/miktex/tm/packages/wrapfig2.tar.lzma @@ -1353,7 +1467,6 @@ 2023/09/10 | 48043 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma 2023/09/10 | 4794924 | systems/win32/miktex/tm/packages/newpx.tar.lzma 2023/09/10 | 4764 | systems/texlive/tlnet/archive/ucph-revy.r68224.tar.xz -2023/09/10 | 4752928 | systems/texlive/tlnet/archive/latexindent.windows.r68225.tar.xz 2023/09/10 | 473098 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma 2023/09/10 | 47308 | usergrps/usergrps/lugs.pdf 2023/09/10 | 471683 | systems/win32/miktex/tm/packages/marginnote__doc.tar.lzma @@ -1490,7 +1603,6 @@ 2023/09/10 | 137601 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma 2023/09/10 | 13600 | systems/win32/miktex/tm/packages/robust-externalize.tar.lzma 2023/09/10 | 1340823 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2023/09/10 | 1336736 | systems/texlive/tlnet/archive/latexindent.doc.r68225.tar.xz 2023/09/10 | 131824 | systems/win32/miktex/tm/packages/parsinevis.tar.lzma 2023/09/10 | 1288 | systems/win32/miktex/tm/packages/curriculum-vitae.tar.lzma 2023/09/10 | 126743 | systems/win32/miktex/tm/packages/latexindent__source.tar.lzma @@ -1573,8 +1685,6 @@ 2023/09/08 | 87552 | fonts/parsinevis/ParsiNevis-Regular.ttf 2023/09/08 | 80 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln8.tex 2023/09/08 | 80 | macros/latex/contrib/runcode/generated/runcode_troubleshoot_inln7.tex -2023/09/08 | 799 | macros/latex/contrib/curriculum-vitae/README.md -2023/09/08 | 746452 | systems/texlive/tlnet/archive/l3build.doc.r68198.tar.xz 2023/09/08 | 710 | fonts/parsinevis/parsinevis-sample.tex 2023/09/08 | 671 | fonts/parsinevis/README.md 2023/09/08 | 669 | graphics/pstricks/contrib/pst-3dplot/README @@ -1599,11 +1709,9 @@ 2023/09/08 | 3989 | macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex 2023/09/08 | 391 | fonts/firamath-otf/README.md 2023/09/08 | 376 | systems/texlive/tlnet/archive/lshort-slovenian.r68204.tar.xz -2023/09/08 | 36448 | systems/texlive/tlnet/archive/l3build.r68198.tar.xz 2023/09/08 | 3364 | systems/texlive/tlnet/archive/korigamik.r68204.tar.xz 2023/09/08 | 3312 | systems/texlive/tlnet/archive/marginnote.r68204.tar.xz 2023/09/08 | 32822 | fonts/firamath-otf/doc/firamath-otf-doc.tex -2023/09/08 | 31512 | systems/texlive/tlnet/archive/l3build.source.r68198.tar.xz 2023/09/08 | 3033906 | graphics/pstricks/contrib/pst-3dplot/doc/pst-3dplot-doc.pdf 2023/09/08 | 293 | fonts/firamath-otf/Changes 2023/09/08 | 2914 | fonts/firamath-otf/latex/firamath-otf.sty @@ -1652,7 +1760,6 @@ 2023/09/08 | 1620 | macros/latex/contrib/ppt-slides/README.md 2023/09/08 | 161688 | macros/latex/contrib/runcode/runcode_troubleshoot.pdf 2023/09/08 | 1521 | fonts/simpleicons/tex/simpleicons.sty -2023/09/08 | 148853 | support/TeX4ht/source/tex4ht-mathml.tex 2023/09/08 | 14808 | systems/texlive/tlnet/archive/suftesi.r68204.tar.xz 2023/09/08 | 1449 | macros/latex/contrib/runcode/README 2023/09/08 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light.tex @@ -1693,1898 +1800,3 @@ 2023/09/08 | 102236 | fonts/parsinevis/ParsiNevis-BoldItalic.ttf 2023/09/08 | 10208 | systems/texlive/tlnet/archive/marginnote.source.r68204.tar.xz 2023/09/08 | 1019134 | macros/latex/contrib/ppt-slides.zip -2023/09/07 | 9951 | macros/latex/contrib/profcollege/latex/PfCTriominos.tex -2023/09/07 | 9938 | biblio/citation-style-language/citation-style-language-init.sty -2023/09/07 | 992 | fonts/plex/tfm/plxMono-ExtLtItalic-sup-ot1.tfm -2023/09/07 | 9924 | fonts/plex/tfm/plxSansCond-Bold-tlf-ot1.tfm -2023/09/07 | 9902 | macros/latex/contrib/profcollege/latex/PfCDecDeci.tex -2023/09/07 | 988 | fonts/plex/tfm/plxMono-ThinItalic-sup-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-tlf-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-Thin-tlf-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-Text-tlf-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-SmBld-tlf-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-Medm-tlf-ot1.tfm -2023/09/07 | 976 | fonts/plex/tfm/plxMono-ExtLt-tlf-ot1.tfm -2023/09/07 | 9734 | macros/latex/contrib/profcollege/latex/PfCVueCubes.tex -2023/09/07 | 972 | fonts/plex/tfm/plxMono-Light-tlf-ot1.tfm -2023/09/07 | 97289 | macros/luatex/latex/odsfile/odsfile.pdf -2023/09/07 | 968 | fonts/plex/tfm/plxMono-Bold-tlf-ot1.tfm -2023/09/07 | 9681 | macros/luatex/latex/odsfile/odsfile.lua -2023/09/07 | 95620 | fonts/plex/map/plex.map -2023/09/07 | 9555 | fonts/plex/latex/TS1plxSans-TLF.fd -2023/09/07 | 9555 | fonts/plex/latex/OT1plxSans-TLF.fd -2023/09/07 | 9555 | fonts/plex/latex/OT1plxSans-Sup.fd -2023/09/07 | 9555 | fonts/plex/latex/LY1plxSans-TLF.fd -2023/09/07 | 9555 | fonts/plex/latex/LY1plxSans-Sup.fd -2023/09/07 | 9555 | fonts/plex/latex/LGRplxSans-TLF.fd -2023/09/07 | 9555 | fonts/plex/latex/LGRplxSans-Sup.fd -2023/09/07 | 9501 | macros/latex/contrib/profcollege/latex/PfCLabyrintheJeu.tex -2023/09/07 | 94862 | fonts/plex/type1/plxSansCond-BoldItalic.pfb -2023/09/07 | 9451 | biblio/citation-style-language/citeproc-context.lua -2023/09/07 | 944 | fonts/plex/tfm/plxMono-Thin-sup-ot1.tfm -2023/09/07 | 944 | fonts/plex/tfm/plxMono-Text-sup-ot1.tfm -2023/09/07 | 944 | fonts/plex/tfm/plxMono-sup-ot1.tfm -2023/09/07 | 944 | fonts/plex/tfm/plxMono-SmBld-sup-ot1.tfm -2023/09/07 | 944 | fonts/plex/tfm/plxMono-Medm-sup-ot1.tfm -2023/09/07 | 944 | fonts/plex/tfm/plxMono-ExtLt-sup-ot1.tfm -2023/09/07 | 9433 | fonts/plex/latex/T1plxSans-TLF.fd -2023/09/07 | 9433 | fonts/plex/latex/T1plxSans-Sup.fd -2023/09/07 | 940 | fonts/plex/tfm/plxMono-Light-sup-ot1.tfm -2023/09/07 | 9408 | biblio/citation-style-language/citeproc-unicode.lua -2023/09/07 | 9404 | macros/latex/contrib/profcollege/latex/PfCPyramideCalculs.tex -2023/09/07 | 93750 | fonts/plex/type1/plxSansCond-SmBldItalic.pfb -2023/09/07 | 936 | fonts/plex/tfm/plxMono-Bold-sup-ot1.tfm -2023/09/07 | 93076 | fonts/plex/type1/plxSansCond-MedmItalic.pfb -2023/09/07 | 9288098 | macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf -2023/09/07 | 9209 | biblio/citation-style-language/citeproc-cli.lua -2023/09/07 | 9197 | macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex -2023/09/07 | 91690 | fonts/plex/type1/plxSansCond-TextItalic.pfb -2023/09/07 | 91220 | biblio/citation-style-language/citeproc-bibtex-data.lua -2023/09/07 | 90742 | fonts/plex/type1/plxSansCond-Italic.pfb -2023/09/07 | 907040 | systems/texlive/tlnet/archive/beebe.r68190.tar.xz -2023/09/07 | 904 | fonts/plex/tfm/plxSansCond-TextItalic-sup-lgr.tfm -2023/09/07 | 904 | fonts/plex/tfm/plxSansCond-Italic-sup-lgr.tfm -2023/09/07 | 90360 | fonts/plex/type1/plxSansCond-LightItalic.pfb -2023/09/07 | 900 | fonts/plex/tfm/plxSansCond-TextItalic-sup-lgr--base.tfm -2023/09/07 | 900 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-lgr.tfm -2023/09/07 | 900 | fonts/plex/tfm/plxSansCond-Italic-sup-lgr--base.tfm -2023/09/07 | 896 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-lgr.tfm -2023/09/07 | 896 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-lgr--base.tfm -2023/09/07 | 896 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-lgr.tfm -2023/09/07 | 8956 | macros/latex/contrib/profcollege/latex/PfCBillard.tex -2023/09/07 | 892 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-lgr--base.tfm -2023/09/07 | 892 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-lgr--base.tfm -2023/09/07 | 888 | fonts/plex/tfm/plxSansCond-LightItalic-sup-lgr.tfm -2023/09/07 | 888 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-lgr.tfm -2023/09/07 | 88768 | fonts/plex/type1/plxSansCond-ExtLtItalic.pfb -2023/09/07 | 8870 | macros/latex/contrib/profcollege/latex/PfCCalisson.tex -2023/09/07 | 884 | fonts/plex/tfm/plxSansCond-LightItalic-sup-lgr--base.tfm -2023/09/07 | 884 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-lgr--base.tfm -2023/09/07 | 884 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-lgr.tfm -2023/09/07 | 880 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-lgr--base.tfm -2023/09/07 | 87339 | fonts/plex/type1/plxSansCond-ThinItalic.pfb -2023/09/07 | 8711 | macros/latex/contrib/profcollege/latex/PfCShikaku.tex -2023/09/07 | 868 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-lgr--base.tfm -2023/09/07 | 8676 | macros/latex/contrib/profcollege/latex/PfCYohaku.tex -2023/09/07 | 864 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-lgr--base.tfm -2023/09/07 | 864 | fonts/plex/tfm/plxSansCond-Italic-tlf-lgr--base.tfm -2023/09/07 | 86487 | fonts/plex/type1/plxSansCond-Bold.pfb -2023/09/07 | 860 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-lgr--base.tfm -2023/09/07 | 860 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-lgr--base.tfm -2023/09/07 | 860 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-lgr--base.tfm -2023/09/07 | 860 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-lgr--base.tfm -2023/09/07 | 856 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-lgr--base.tfm -2023/09/07 | 85548 | fonts/plex/type1/plxSansCond-SmBld.pfb -2023/09/07 | 848623 | macros/latex/contrib/suftesi/suftesi.pdf -2023/09/07 | 844 | fonts/plex/tfm/plxSansCond-SmBld-sup-lgr.tfm -2023/09/07 | 840 | fonts/plex/tfm/plxSansCond-SmBld-sup-lgr--base.tfm -2023/09/07 | 8392 | macros/luatex/latex/odsfile/odsfile.sty -2023/09/07 | 83905 | fonts/plex/type1/plxSansCond-Medm.pfb -2023/09/07 | 836 | fonts/plex/tfm/plxSansCond-Text-sup-lgr.tfm -2023/09/07 | 836 | fonts/plex/tfm/plxSansCond-Medm-sup-lgr.tfm -2023/09/07 | 832 | fonts/plex/tfm/plxSansCond-Thin-sup-lgr.tfm -2023/09/07 | 832 | fonts/plex/tfm/plxSansCond-Text-sup-lgr--base.tfm -2023/09/07 | 832 | fonts/plex/tfm/plxSansCond-SmBld-tlf-lgr--base.tfm -2023/09/07 | 832 | fonts/plex/tfm/plxSansCond-Medm-sup-lgr--base.tfm -2023/09/07 | 831 | macros/latex/contrib/profcollege/latex/PfCDobble.tex -2023/09/07 | 83133 | macros/latex/contrib/profcollege/latex/PfCStatistiques.tex -2023/09/07 | 8307 | macros/latex/contrib/profcollege/latex/PfCTortueBase.tex -2023/09/07 | 828 | fonts/plex/tfm/plxSansCond-Thin-sup-lgr--base.tfm -2023/09/07 | 828 | fonts/plex/tfm/plxSansCond-Text-tlf-lgr--base.tfm -2023/09/07 | 828 | fonts/plex/tfm/plxSansCond-Medm-tlf-lgr--base.tfm -2023/09/07 | 828 | fonts/plex/tfm/plxSansCond-ExtLt-sup-lgr.tfm -2023/09/07 | 828 | fonts/plex/tfm/plxSansCond-Bold-sup-lgr.tfm -2023/09/07 | 82712 | fonts/plex/type1/plxSansCond-Text.pfb -2023/09/07 | 82698 | macros/latex/contrib/profcollege/latex/PfCTableauxUnites.tex -2023/09/07 | 824 | fonts/plex/tfm/plxSansCond-Thin-tlf-lgr--base.tfm -2023/09/07 | 824 | fonts/plex/tfm/plxSansCond-sup-lgr.tfm -2023/09/07 | 824 | fonts/plex/tfm/plxSansCond-Light-sup-lgr.tfm -2023/09/07 | 824 | fonts/plex/tfm/plxSansCond-ExtLt-sup-lgr--base.tfm -2023/09/07 | 824 | fonts/plex/tfm/plxSansCond-Bold-sup-lgr--base.tfm -2023/09/07 | 82337 | fonts/plex/type1/plxSansCond.pfb -2023/09/07 | 82220 | fonts/plex/doc/plex-samples.pdf -2023/09/07 | 820 | fonts/plex/tfm/plxSansCond-sup-lgr--base.tfm -2023/09/07 | 820 | fonts/plex/tfm/plxSansCond-Light-sup-lgr--base.tfm -2023/09/07 | 820 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-lgr--base.tfm -2023/09/07 | 820 | fonts/plex/tfm/plxSansCond-Bold-tlf-lgr--base.tfm -2023/09/07 | 816 | fonts/plex/tfm/plxSansCond-tlf-lgr--base.tfm -2023/09/07 | 816 | fonts/plex/tfm/plxSansCond-Light-tlf-lgr--base.tfm -2023/09/07 | 8166 | macros/latex/contrib/profcollege/latex/PfCPourcentage.tex -2023/09/07 | 8131 | biblio/citation-style-language/citeproc-node-choose.lua -2023/09/07 | 8128 | biblio/citation-style-language/elsevier-harvard.csl -2023/09/07 | 81036 | fonts/plex/opentype/IBMPlexMono-SemiBoldItalic.otf -2023/09/07 | 80926 | fonts/plex/type1/plxSansCond-Light.pfb -2023/09/07 | 80684 | fonts/plex/opentype/IBMPlexMono-MediumItalic.otf -2023/09/07 | 8052 | biblio/citation-style-language/american-political-science-association.csl -2023/09/07 | 80244 | fonts/plex/opentype/IBMPlexMono-TextItalic.otf -2023/09/07 | 80140 | fonts/plex/type1/plxSansCond-ExtLt.pfb -2023/09/07 | 7962 | macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex -2023/09/07 | 7961 | macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex -2023/09/07 | 7948 | systems/texlive/tlnet/archive/numerica-tables.r68193.tar.xz -2023/09/07 | 79484 | fonts/plex/opentype/IBMPlexMono-BoldItalic.otf -2023/09/07 | 78904 | fonts/plex/opentype/IBMPlexSansCondensed-SemiBoldItalic.otf -2023/09/07 | 78698 | fonts/plex/type1/plxSansCond-Thin.pfb -2023/09/07 | 78628 | fonts/plex/opentype/IBMPlexSansCondensed-MediumItalic.otf -2023/09/07 | 7857 | macros/latex/contrib/profcollege/latex/PfCMulJap.tex -2023/09/07 | 7797 | macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex -2023/09/07 | 77712 | fonts/plex/opentype/IBMPlexSansCondensed-TextItalic.otf -2023/09/07 | 77680 | fonts/plex/opentype/IBMPlexMono-Italic.otf -2023/09/07 | 77400 | fonts/plex/opentype/IBMPlexMono-LightItalic.otf -2023/09/07 | 7733 | macros/latex/contrib/profcollege/latex/PfCProbabilites.tex -2023/09/07 | 77240 | fonts/plex/opentype/IBMPlexMono-ExtraLightItalic.otf -2023/09/07 | 77161 | macros/latex/contrib/profcollege/latex/PfCReperage.tex -2023/09/07 | 76844 | fonts/plex/opentype/IBMPlexSansCondensed-BoldItalic.otf -2023/09/07 | 75908 | fonts/plex/opentype/IBMPlexSansCondensed-Italic.otf -2023/09/07 | 75896 | fonts/plex/opentype/IBMPlexSansCondensed-LightItalic.otf -2023/09/07 | 75628 | fonts/plex/opentype/IBMPlexSansCondensed-ExtraLightItalic.otf -2023/09/07 | 7497 | macros/latex/contrib/profcollege/latex/PfCCible.tex -2023/09/07 | 74968 | fonts/plex/opentype/IBMPlexMono-ThinItalic.otf -2023/09/07 | 7476 | systems/texlive/tlnet/archive/arsenal.source.r68191.tar.xz -2023/09/07 | 7472987 | fonts/newpx.zip -2023/09/07 | 74636 | fonts/plex/opentype/IBMPlexMono-SemiBold.otf -2023/09/07 | 74500 | fonts/plex/opentype/IBMPlexSansCondensed-ThinItalic.otf -2023/09/07 | 74032 | fonts/plex/opentype/IBMPlexMono-Medium.otf -2023/09/07 | 73960 | fonts/plex/opentype/IBMPlexSansCondensed-SemiBold.otf -2023/09/07 | 73380 | fonts/plex/opentype/IBMPlexMono-Bold.otf -2023/09/07 | 73352 | fonts/plex/opentype/IBMPlexSansCondensed-Light.otf -2023/09/07 | 73308 | fonts/plex/opentype/IBMPlexSansCondensed-Medium.otf -2023/09/07 | 73300 | fonts/plex/opentype/IBMPlexSansCondensed-Text.otf -2023/09/07 | 7314 | macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex -2023/09/07 | 7305 | macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex -2023/09/07 | 72828 | fonts/plex/opentype/IBMPlexSansCondensed-Bold.otf -2023/09/07 | 72468 | fonts/plex/opentype/IBMPlexMono-Text.otf -2023/09/07 | 7244 | macros/latex/contrib/profcollege/latex/PfCFrise.tex -2023/09/07 | 72236 | fonts/plex/opentype/IBMPlexSansCondensed-Regular.otf -2023/09/07 | 72108 | fonts/plex/opentype/IBMPlexSansCondensed-ExtraLight.otf -2023/09/07 | 7177 | biblio/citation-style-language/citeproc-node-text.lua -2023/09/07 | 71552 | fonts/plex/opentype/IBMPlexMono-Light.otf -2023/09/07 | 7148 | macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex -2023/09/07 | 71400 | fonts/plex/opentype/IBMPlexMono-ExtraLight.otf -2023/09/07 | 71272 | fonts/plex/opentype/IBMPlexMono-Regular.otf -2023/09/07 | 7105 | macros/latex/contrib/profcollege/latex/PfCHorloge.tex -2023/09/07 | 7102 | macros/latex/contrib/profcollege/latex/PfCPuzzleSommePyramide.tex -2023/09/07 | 70896 | fonts/plex/opentype/IBMPlexSansCondensed-Thin.otf -2023/09/07 | 7088 | macros/latex/contrib/profcollege/latex/PfCColorilude.tex -2023/09/07 | 7072 | macros/latex/contrib/profcollege/latex/PfCPuissanceQuatre.tex -2023/09/07 | 7011 | biblio/citation-style-language/citeproc-node-locale.lua -2023/09/07 | 69636 | fonts/plex/opentype/IBMPlexMono-Thin.otf -2023/09/07 | 6941 | macros/latex/contrib/profcollege/latex/PfCGrimuku.tex -2023/09/07 | 6885 | graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua -2023/09/07 | 68764 | fonts/plex/tfm/plxSerif-LightItalic-tlf-t1.tfm -2023/09/07 | 68756 | fonts/plex/tfm/plxSerif-LightItalic-tosf-t1.tfm -2023/09/07 | 68372 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-t1.tfm -2023/09/07 | 68368 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-t1.tfm -2023/09/07 | 6813 | biblio/citation-style-language/citeproc-node-sort.lua -2023/09/07 | 679693 | macros/latex/contrib/suftesi/templates.zip -2023/09/07 | 67840 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-t1.tfm -2023/09/07 | 67836 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-t1.tfm -2023/09/07 | 6760 | graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf -2023/09/07 | 67480 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-t1.tfm -2023/09/07 | 67476 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-t1.tfm -2023/09/07 | 67064 | fonts/plex/tfm/plxSerif-TextItalic-tlf-t1.tfm -2023/09/07 | 67060 | fonts/plex/tfm/plxSerif-TextItalic-tosf-t1.tfm -2023/09/07 | 662428 | systems/texlive/tlnet/archive/numerica-tables.doc.r68193.tar.xz -2023/09/07 | 6582 | fonts/plex/latex/plex-sans.sty -2023/09/07 | 6570 | macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex -2023/09/07 | 65612 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-t1.tfm -2023/09/07 | 65380 | fonts/plex/tfm/plxSerif-Medium-tosf-t1.tfm -2023/09/07 | 65380 | fonts/plex/tfm/plxSerif-Medium-tlf-t1.tfm -2023/09/07 | 6525 | macros/latex/contrib/profcollege/latex/PfCMentalo.tex -2023/09/07 | 6503 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex -2023/09/07 | 65012 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-t1.tfm -2023/09/07 | 64836 | fonts/plex/tfm/plxSerif-SemiBold-tosf-t1.tfm -2023/09/07 | 64836 | fonts/plex/tfm/plxSerif-SemiBold-tlf-t1.tfm -2023/09/07 | 64504 | fonts/plex/tfm/plxSerif-Light-tosf-t1.tfm -2023/09/07 | 64504 | fonts/plex/tfm/plxSerif-Light-tlf-t1.tfm -2023/09/07 | 64236 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-t1.tfm -2023/09/07 | 64236 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-t1.tfm -2023/09/07 | 64232 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-t1.tfm -2023/09/07 | 64194 | biblio/citation-style-language/citeproc-output.lua -2023/09/07 | 63860 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-t1.tfm -2023/09/07 | 63852 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-t1.tfm -2023/09/07 | 63444 | fonts/plex/tfm/plxSerif-Text-tosf-t1.tfm -2023/09/07 | 63444 | fonts/plex/tfm/plxSerif-Text-tlf-t1.tfm -2023/09/07 | 63440 | fonts/plex/tfm/plxSans-LightItalic-tosf-t1.tfm -2023/09/07 | 63440 | fonts/plex/tfm/plxSans-LightItalic-tlf-t1.tfm -2023/09/07 | 63244 | biblio/citation-style-language/apa.csl -2023/09/07 | 63228 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-t1.tfm -2023/09/07 | 63224 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-t1.tfm -2023/09/07 | 63024 | fonts/plex/tfm/plxSerif-Italic-tosf-t1.tfm -2023/09/07 | 63020 | fonts/plex/tfm/plxSerif-Italic-tlf-t1.tfm -2023/09/07 | 62940 | fonts/plex/tfm/plxSansCond-Italic-tlf-t1.tfm -2023/09/07 | 6260 | macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex -2023/09/07 | 62560 | fonts/plex/tfm/plxSans-MedmItalic-tosf-t1.tfm -2023/09/07 | 62560 | fonts/plex/tfm/plxSans-MedmItalic-tlf-t1.tfm -2023/09/07 | 62352 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-t1.tfm -2023/09/07 | 62328 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-t1.tfm -2023/09/07 | 62224 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-t1.tfm -2023/09/07 | 62220 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-t1.tfm -2023/09/07 | 6199 | biblio/citation-style-language/CHANGELOG.md -2023/09/07 | 617 | biblio/citation-style-language/citeproc-lua.1 -2023/09/07 | 61600 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-t1.tfm -2023/09/07 | 61596 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-t1.tfm -2023/09/07 | 61468 | fonts/plex/tfm/plxSerif-Bold-tosf-t1.tfm -2023/09/07 | 61468 | fonts/plex/tfm/plxSerif-Bold-tlf-t1.tfm -2023/09/07 | 61292 | fonts/plex/tfm/plxSans-ThinItalic-tosf-t1.tfm -2023/09/07 | 61292 | fonts/plex/tfm/plxSans-ThinItalic-tlf-t1.tfm -2023/09/07 | 60776 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-t1.tfm -2023/09/07 | 6073 | biblio/citation-style-language/citeproc-ir-node.lua -2023/09/07 | 6072 | systems/texlive/tlnet/archive/exesheet.r68192.tar.xz -2023/09/07 | 60724 | fonts/plex/tfm/plxSans-TextItalic-tlf-t1.tfm -2023/09/07 | 60720 | fonts/plex/tfm/plxSans-TextItalic-tosf-t1.tfm -2023/09/07 | 6030 | macros/latex/contrib/profcollege/latex/PfCTectonic.tex -2023/09/07 | 60304 | fonts/plex/tfm/plxSerif-Thin-tosf-t1.tfm -2023/09/07 | 60304 | fonts/plex/tfm/plxSerif-Thin-tlf-t1.tfm -2023/09/07 | 5960298 | macros/latex/contrib/profcollege/doc/ProfCollege-doc.zip -2023/09/07 | 5871 | biblio/citation-style-language/citeproc-node-style.lua -2023/09/07 | 58693 | macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp -2023/09/07 | 58611 | macros/latex/contrib/profcollege/latex/PfCDistributivite.tex -2023/09/07 | 58512 | fonts/plex/tfm/plxSerif-Regular-tosf-t1.tfm -2023/09/07 | 58512 | fonts/plex/tfm/plxSerif-Regular-tlf-t1.tfm -2023/09/07 | 58460 | fonts/plex/tfm/plxSans-BoldItalic-tosf-t1.tfm -2023/09/07 | 58460 | fonts/plex/tfm/plxSans-BoldItalic-tlf-t1.tfm -2023/09/07 | 5824 | macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex -2023/09/07 | 580 | fonts/plex/vf/plxSerif-ExtraLightItalic-tosf-ts1.vf -2023/09/07 | 580 | fonts/plex/vf/plxSerif-ExtraLightItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSerif-SemiBoldItalic-tosf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSerif-SemiBoldItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSerif-MediumItalic-tosf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSerif-MediumItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSerif-LightItalic-tosf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-ThinItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-TextItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-SmBldItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-MedmItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-LightItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-ExtLtItalic-tlf-ts1.vf -2023/09/07 | 576 | fonts/plex/vf/plxSansCond-BoldItalic-tlf-ts1.vf -2023/09/07 | 57660 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-t1.tfm -2023/09/07 | 572 | fonts/plex/vf/plxSerif-ThinItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-ThinItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-TextItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-TextItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-SemiBold-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-SemiBold-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-Regular-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-LightItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-ExtraLight-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-ExtraLight-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-BoldItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSerif-BoldItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-ThinItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-ThinItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-TextItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-TextItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-SmBldItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-SmBldItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-MedmItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-MedmItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-LightItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-LightItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-ExtLtItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-ExtLtItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSansCond-SmBld-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSansCond-Light-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSansCond-Italic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSansCond-ExtLt-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-BoldItalic-tosf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxSans-BoldItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-ThinItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-TextItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-SmBldItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-MedmItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-LightItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-ExtLtItalic-tlf-ts1.vf -2023/09/07 | 572 | fonts/plex/vf/plxMono-BoldItalic-tlf-ts1.vf -2023/09/07 | 56982 | macros/latex/contrib/profcollege/latex/PfCThales.tex -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Thin-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Thin-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Text-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Text-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Regular-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Medium-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Medium-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Light-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Light-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Italic-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Italic-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Bold-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSerif-Bold-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Thin-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Text-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-SmBld-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-SmBld-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Medm-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Light-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Light-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Italic-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Italic-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-ExtLt-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-ExtLt-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSansCond-Thin-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSansCond-Text-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSansCond-Medm-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSansCond-Bold-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxSans-Bold-tosf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxMono-SmBld-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxMono-Light-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxMono-Italic-tlf-ts1.vf -2023/09/07 | 568 | fonts/plex/vf/plxMono-ExtLt-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxSans-Thin-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxSans-Text-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxSans-Medm-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxSansCond-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxSans-Bold-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxMono-Thin-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxMono-Text-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxMono-Medm-tlf-ts1.vf -2023/09/07 | 564 | fonts/plex/vf/plxMono-Bold-tlf-ts1.vf -2023/09/07 | 560 | fonts/plex/vf/plxSans-tosf-ts1.vf -2023/09/07 | 560 | fonts/plex/vf/plxSans-tlf-ts1.vf -2023/09/07 | 560 | fonts/plex/vf/plxMono-tlf-ts1.vf -2023/09/07 | 55720 | fonts/plex/tfm/plxSans-Italic-tlf-t1.tfm -2023/09/07 | 55716 | fonts/plex/tfm/plxSans-Italic-tosf-t1.tfm -2023/09/07 | 5554 | macros/latex/contrib/profcollege/latex/PfCOperationsTrou.tex -2023/09/07 | 5421 | graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty -2023/09/07 | 5365 | macros/latex/contrib/profcollege/latex/PfCMidpoint.tex -2023/09/07 | 53064 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-ly1.tfm -2023/09/07 | 53060 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-ly1.tfm -2023/09/07 | 5288 | biblio/citation-style-language/nature.csl -2023/09/07 | 52772 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-ly1.tfm -2023/09/07 | 52768 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-ly1.tfm -2023/09/07 | 5257 | fonts/plex/latex/TS1plxSerif-TOsF.fd -2023/09/07 | 5257 | fonts/plex/latex/OT1plxSerif-TOsF.fd -2023/09/07 | 5257 | fonts/plex/latex/LY1plxSerif-TOsF.fd -2023/09/07 | 5257 | fonts/plex/latex/LGRplxSerif-TOsF.fd -2023/09/07 | 52552 | fonts/plex/tfm/plxSansCond-Medm-tlf-t1.tfm -2023/09/07 | 52516 | fonts/plex/tfm/plxSerif-LightItalic-tlf-ly1.tfm -2023/09/07 | 52508 | fonts/plex/tfm/plxSerif-LightItalic-tosf-ly1.tfm -2023/09/07 | 5223 | macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex -2023/09/07 | 52200 | fonts/plex/tfm/plxSerif-TextItalic-tlf-ly1.tfm -2023/09/07 | 52196 | fonts/plex/tfm/plxSerif-TextItalic-tosf-ly1.tfm -2023/09/07 | 52020 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-ly1.tfm -2023/09/07 | 52016 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-ly1.tfm -2023/09/07 | 51952 | fonts/plex/tfm/plxSansCond-Text-tlf-t1.tfm -2023/09/07 | 5193 | fonts/plex/latex/T1plxSerif-TOsF.fd -2023/09/07 | 5164 | fonts/plex/latex/TS1plxSerif-TLF.fd -2023/09/07 | 5164 | fonts/plex/latex/OT1plxSerif-TLF.fd -2023/09/07 | 5164 | fonts/plex/latex/OT1plxSerif-Sup.fd -2023/09/07 | 5164 | fonts/plex/latex/LY1plxSerif-TLF.fd -2023/09/07 | 5164 | fonts/plex/latex/LY1plxSerif-Sup.fd -2023/09/07 | 5164 | fonts/plex/latex/LGRplxSerif-TLF.fd -2023/09/07 | 5164 | fonts/plex/latex/LGRplxSerif-Sup.fd -2023/09/07 | 51582 | biblio/citation-style-language/citeproc-node-citation.lua -2023/09/07 | 51532 | fonts/plex/tfm/plxSans-Light-tosf-t1.tfm -2023/09/07 | 51532 | fonts/plex/tfm/plxSans-Light-tlf-t1.tfm -2023/09/07 | 51528 | fonts/plex/tfm/plxSansCond-tlf-t1.tfm -2023/09/07 | 5116 | fonts/plex/latex/TS1plxSans-TOsF.fd -2023/09/07 | 5116 | fonts/plex/latex/OT1plxSans-TOsF.fd -2023/09/07 | 5116 | fonts/plex/latex/LY1plxSans-TOsF.fd -2023/09/07 | 5116 | fonts/plex/latex/LGRplxSans-TOsF.fd -2023/09/07 | 5100 | fonts/plex/latex/T1plxSerif-TLF.fd -2023/09/07 | 5100 | fonts/plex/latex/T1plxSerif-Sup.fd -2023/09/07 | 5052 | fonts/plex/latex/T1plxSans-TOsF.fd -2023/09/07 | 50452 | fonts/plex/tfm/plxSansCond-Light-tlf-t1.tfm -2023/09/07 | 5042 | fonts/plex/latex/TS1plxMono-TLF.fd -2023/09/07 | 5042 | fonts/plex/latex/OT1plxMono-TLF.fd -2023/09/07 | 5042 | fonts/plex/latex/OT1plxMono-Sup.fd -2023/09/07 | 5042 | fonts/plex/latex/LY1plxMono-TLF.fd -2023/09/07 | 5042 | fonts/plex/latex/LY1plxMono-Sup.fd -2023/09/07 | 50340 | fonts/plex/tfm/plxSansCond-SmBld-tlf-t1.tfm -2023/09/07 | 49936 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-ly1.tfm -2023/09/07 | 49884 | fonts/plex/tfm/plxSerif-Medium-tosf-ly1.tfm -2023/09/07 | 49884 | fonts/plex/tfm/plxSerif-Medium-tlf-ly1.tfm -2023/09/07 | 49872 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-ly1.tfm -2023/09/07 | 49864 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-ly1.tfm -2023/09/07 | 49844 | fonts/plex/tfm/plxSerif-Light-tosf-ly1.tfm -2023/09/07 | 49844 | fonts/plex/tfm/plxSerif-Light-tlf-ly1.tfm -2023/09/07 | 4978 | fonts/plex/latex/T1plxMono-TLF.fd -2023/09/07 | 4978 | fonts/plex/latex/T1plxMono-Sup.fd -2023/09/07 | 49748 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-ly1.tfm -2023/09/07 | 49612 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-ly1.tfm -2023/09/07 | 49612 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-ly1.tfm -2023/09/07 | 49540 | fonts/plex/tfm/plxSerif-SemiBold-tosf-ly1.tfm -2023/09/07 | 49540 | fonts/plex/tfm/plxSerif-SemiBold-tlf-ly1.tfm -2023/09/07 | 49460 | fonts/plex/tfm/plxSans-Medm-tosf-t1.tfm -2023/09/07 | 49460 | fonts/plex/tfm/plxSans-Medm-tlf-t1.tfm -2023/09/07 | 49316 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-ly1.tfm -2023/09/07 | 49148 | fonts/plex/tfm/plxSans-ExtLt-tosf-t1.tfm -2023/09/07 | 49148 | fonts/plex/tfm/plxSans-ExtLt-tlf-t1.tfm -2023/09/07 | 49016 | fonts/plex/tfm/plxSans-LightItalic-tosf-ly1.tfm -2023/09/07 | 49016 | fonts/plex/tfm/plxSans-LightItalic-tlf-ly1.tfm -2023/09/07 | 48996 | fonts/plex/tfm/plxSans-SmBld-tosf-t1.tfm -2023/09/07 | 48996 | fonts/plex/tfm/plxSans-SmBld-tlf-t1.tfm -2023/09/07 | 48969 | biblio/citation-style-language/chicago-fullnote-bibliography.csl -2023/09/07 | 48860 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-ly1.tfm -2023/09/07 | 48856 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-ly1.tfm -2023/09/07 | 48624 | fonts/plex/tfm/plxSerif-Text-tosf-ly1.tfm -2023/09/07 | 48624 | fonts/plex/tfm/plxSerif-Text-tlf-ly1.tfm -2023/09/07 | 48608 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-t1.tfm -2023/09/07 | 48592 | fonts/plex/tfm/plxSerif-Italic-tosf-ly1.tfm -2023/09/07 | 48588 | fonts/plex/tfm/plxSerif-Italic-tlf-ly1.tfm -2023/09/07 | 483315 | macros/latex/contrib/marginnote/marginnote.pdf -2023/09/07 | 48204 | fonts/plex/tfm/plxSansCond-Italic-tlf-ly1.tfm -2023/09/07 | 48184 | fonts/plex/tfm/plxSans-Bold-tosf-t1.tfm -2023/09/07 | 48184 | fonts/plex/tfm/plxSans-Bold-tlf-t1.tfm -2023/09/07 | 48176 | fonts/plex/tfm/plxSans-Text-tosf-t1.tfm -2023/09/07 | 48176 | fonts/plex/tfm/plxSans-Text-tlf-t1.tfm -2023/09/07 | 48092 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-ly1.tfm -2023/09/07 | 48088 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-ly1.tfm -2023/09/07 | 47952 | fonts/plex/tfm/plxSansCond-Bold-tlf-t1.tfm -2023/09/07 | 479130 | macros/latex/contrib/marginnote.zip -2023/09/07 | 47884 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-ly1.tfm -2023/09/07 | 47868 | fonts/plex/tfm/plxSans-MedmItalic-tlf-ly1.tfm -2023/09/07 | 47864 | fonts/plex/tfm/plxSans-MedmItalic-tosf-ly1.tfm -2023/09/07 | 47728 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-ly1.tfm -2023/09/07 | 47564 | fonts/plex/tfm/plxSansCond-Thin-tlf-t1.tfm -2023/09/07 | 47512 | fonts/plex/tfm/plxSans-ThinItalic-tosf-ly1.tfm -2023/09/07 | 47512 | fonts/plex/tfm/plxSans-ThinItalic-tlf-ly1.tfm -2023/09/07 | 4749 | macros/latex/contrib/profcollege/latex/PfCCryptarithme.tex -2023/09/07 | 47419 | biblio/citation-style-language/chicago-note-bibliography.csl -2023/09/07 | 47200 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-ly1.tfm -2023/09/07 | 47196 | fonts/plex/tfm/plxSans-Thin-tosf-t1.tfm -2023/09/07 | 47196 | fonts/plex/tfm/plxSans-Thin-tlf-t1.tfm -2023/09/07 | 47196 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-ly1.tfm -2023/09/07 | 47044 | fonts/plex/tfm/plxSerif-Bold-tosf-ly1.tfm -2023/09/07 | 47044 | fonts/plex/tfm/plxSerif-Bold-tlf-ly1.tfm -2023/09/07 | 46944 | fonts/plex/tfm/plxSans-tosf-t1.tfm -2023/09/07 | 46944 | fonts/plex/tfm/plxSans-tlf-t1.tfm -2023/09/07 | 4692 | macros/latex/contrib/profcollege/latex/PfCFutoshiki.tex -2023/09/07 | 46924 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-ly1.tfm -2023/09/07 | 4664 | macros/latex/contrib/profcollege/latex/PfCDiagrammeRadar.tex -2023/09/07 | 46588 | fonts/plex/tfm/plxSans-TextItalic-tlf-ly1.tfm -2023/09/07 | 46584 | fonts/plex/tfm/plxSans-TextItalic-tosf-ly1.tfm -2023/09/07 | 46472 | fonts/plex/tfm/plxSerif-Thin-tosf-ly1.tfm -2023/09/07 | 46472 | fonts/plex/tfm/plxSerif-Thin-tlf-ly1.tfm -2023/09/07 | 4589 | biblio/citation-style-language/citeproc-latex.lua -2023/09/07 | 454 | biblio/citation-style-language/citeproc.lua -2023/09/07 | 4548 | macros/latex/contrib/profcollege/latex/PfCMosaique.tex -2023/09/07 | 4538490 | install/biblio/citation-style-language.tds.zip -2023/09/07 | 4530946 | biblio/citation-style-language.zip -2023/09/07 | 45236 | fonts/plex/tfm/plxSerif-Regular-tosf-ly1.tfm -2023/09/07 | 45236 | fonts/plex/tfm/plxSerif-Regular-tlf-ly1.tfm -2023/09/07 | 44668 | fonts/plex/tfm/plxSans-BoldItalic-tosf-ly1.tfm -2023/09/07 | 44668 | fonts/plex/tfm/plxSans-BoldItalic-tlf-ly1.tfm -2023/09/07 | 44152 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-ly1.tfm -2023/09/07 | 4403 | macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex -2023/09/07 | 4363 | fonts/plex/doc/LICENSE.txt -2023/09/07 | 43455 | macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex -2023/09/07 | 42912 | fonts/plex/tfm/plxSans-Italic-tlf-ly1.tfm -2023/09/07 | 42908 | fonts/plex/tfm/plxSans-Italic-tosf-ly1.tfm -2023/09/07 | 4276 | biblio/citation-style-language/citation-style-language-compatible.sty -2023/09/07 | 4270 | biblio/citation-style-language/citation-style-language.sty -2023/09/07 | 4236 | macros/latex/contrib/profcollege/latex/PfCPixelArt.tex -2023/09/07 | 414592 | systems/texlive/tlnet/archive/robust-externalize.doc.r68194.tar.xz -2023/09/07 | 4125 | macros/latex/contrib/profcollege/latex/PfCMulPiecesPuzzle.tex -2023/09/07 | 41172 | fonts/plex/tfm/plxSansCond-Medm-tlf-ly1.tfm -2023/09/07 | 4113 | macros/latex/contrib/profcollege/latex/PfCDomino.tex -2023/09/07 | 4073 | fonts/plex/latex/plex-serif.sty -2023/09/07 | 40728 | fonts/plex/tfm/plxSansCond-Text-tlf-ly1.tfm -2023/09/07 | 40368 | fonts/plex/tfm/plxSans-Light-tosf-ly1.tfm -2023/09/07 | 40368 | fonts/plex/tfm/plxSans-Light-tlf-ly1.tfm -2023/09/07 | 40288 | fonts/plex/tfm/plxSansCond-tlf-ly1.tfm -2023/09/07 | 4027 | graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib -2023/09/07 | 3969 | macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex -2023/09/07 | 39681 | macros/latex/contrib/marginnote/marginnote.dtx -2023/09/07 | 39492 | fonts/plex/tfm/plxSansCond-Light-tlf-ly1.tfm -2023/09/07 | 39428 | fonts/plex/tfm/plxSansCond-SmBld-tlf-ly1.tfm -2023/09/07 | 39132 | fonts/plex/tfm/plxSans-Medm-tosf-ly1.tfm -2023/09/07 | 39132 | fonts/plex/tfm/plxSans-Medm-tlf-ly1.tfm -2023/09/07 | 38696 | fonts/plex/tfm/plxSans-ExtLt-tosf-ly1.tfm -2023/09/07 | 38696 | fonts/plex/tfm/plxSans-ExtLt-tlf-ly1.tfm -2023/09/07 | 38472 | fonts/plex/tfm/plxSans-SmBld-tosf-ly1.tfm -2023/09/07 | 38472 | fonts/plex/tfm/plxSans-SmBld-tlf-ly1.tfm -2023/09/07 | 3835 | macros/latex/contrib/profcollege/latex/PfCKenKen.tex -2023/09/07 | 38168 | fonts/plex/tfm/plxSans-Text-tosf-ly1.tfm -2023/09/07 | 38168 | fonts/plex/tfm/plxSans-Text-tlf-ly1.tfm -2023/09/07 | 38124 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-ly1.tfm -2023/09/07 | 3799 | fonts/plex/latex/plex-mono.sty -2023/09/07 | 3798 | macros/latex/contrib/profcollege/latex/PfCEratosthene.tex -2023/09/07 | 3765 | macros/latex/contrib/profcollege/latex/PfCEnquete.tex -2023/09/07 | 37596 | fonts/plex/tfm/plxSansCond-Bold-tlf-ly1.tfm -2023/09/07 | 37580 | fonts/plex/tfm/plxSans-Bold-tosf-ly1.tfm -2023/09/07 | 37580 | fonts/plex/tfm/plxSans-Bold-tlf-ly1.tfm -2023/09/07 | 37255 | biblio/citation-style-language/citeproc-node-names.lua -2023/09/07 | 37195 | macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex -2023/09/07 | 37088 | fonts/plex/tfm/plxSansCond-Thin-tlf-ly1.tfm -2023/09/07 | 36996 | fonts/plex/tfm/plxSans-Thin-tosf-ly1.tfm -2023/09/07 | 36996 | fonts/plex/tfm/plxSans-Thin-tlf-ly1.tfm -2023/09/07 | 36976 | fonts/plex/tfm/plxSans-tosf-ly1.tfm -2023/09/07 | 36976 | fonts/plex/tfm/plxSans-tlf-ly1.tfm -2023/09/07 | 3618 | macros/latex/contrib/profcollege/latex/PfCDecompFracDeci.tex -2023/09/07 | 35829 | macros/latex/contrib/profcollege/latex/PfCPavage.tex -2023/09/07 | 3466 | macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex -2023/09/07 | 3466 | macros/latex/contrib/profcollege/latex/PfCFubuki.tex -2023/09/07 | 3431 | macros/latex/contrib/profcollege/latex/PfCBarresCalculs.tex -2023/09/07 | 3409 | macros/latex/contrib/profcollege/latex/PfCDefiCalc.tex -2023/09/07 | 33931 | biblio/citation-style-language/citeproc-engine.lua -2023/09/07 | 336760 | systems/texlive/tlnet/archive/arsenal.doc.r68191.tar.xz -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-ThinItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-ThinItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-TextItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-TextItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-SmBldItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-SmBldItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-MedmItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-MedmItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-LightItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-LightItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-ExtLtItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-ExtLtItalic-sup-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-BoldItalic-tlf-lgr.vf -2023/09/07 | 332 | fonts/plex/vf/plxSansCond-BoldItalic-sup-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-SmBld-tlf-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-SmBld-sup-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-Light-tlf-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-Light-sup-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-Italic-tlf-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-Italic-sup-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-ExtLt-tlf-lgr.vf -2023/09/07 | 328 | fonts/plex/vf/plxSansCond-ExtLt-sup-lgr.vf -2023/09/07 | 3280 | macros/latex/contrib/profcollege/latex/PfCFicheMemo.tex -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Thin-tlf-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Thin-sup-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Text-tlf-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Text-sup-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Medm-tlf-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Medm-sup-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Bold-tlf-lgr.vf -2023/09/07 | 324 | fonts/plex/vf/plxSansCond-Bold-sup-lgr.vf -2023/09/07 | 3248 | fonts/plex/enc/plx_qnq2j3.enc -2023/09/07 | 3241 | fonts/plex/enc/plx_bigt6c.enc -2023/09/07 | 320 | fonts/plex/vf/plxSansCond-tlf-lgr.vf -2023/09/07 | 320 | fonts/plex/vf/plxSansCond-sup-lgr.vf -2023/09/07 | 3204 | fonts/plex/enc/plx_lfnaaq.enc -2023/09/07 | 3197 | fonts/plex/enc/plx_ecciqp.enc -2023/09/07 | 3190 | fonts/plex/enc/plx_5wdxh7.enc -2023/09/07 | 3149 | fonts/plex/enc/plx_koxhod.enc -2023/09/07 | 3144 | fonts/plex/enc/plx_h3p6bl.enc -2023/09/07 | 3122 | fonts/plex/enc/plx_rusc4d.enc -2023/09/07 | 3115 | fonts/plex/enc/plx_abnabb.enc -2023/09/07 | 30889 | biblio/citation-style-language/citeproc-util.lua -2023/09/07 | 3074 | biblio/citation-style-language/citeproc-node-label.lua -2023/09/07 | 3049 | macros/latex/contrib/profcollege/latex/PfCRLE.tex -2023/09/07 | 3032 | fonts/plex/enc/plx_jbbrju.enc -2023/09/07 | 2982 | fonts/plex/enc/plx_mr3nck.enc -2023/09/07 | 2981 | fonts/plex/enc/plx_bw3vxo.enc -2023/09/07 | 2976 | fonts/plex/enc/plx_sebx3h.enc -2023/09/07 | 2939 | macros/latex/contrib/profcollege/latex/PfCBarreNiveaux.tex -2023/09/07 | 29363 | macros/latex/contrib/profcollege/latex/PfCLabyrintheNombre.tex -2023/09/07 | 2931 | fonts/plex/enc/plx_gmchnq.enc -2023/09/07 | 2926 | fonts/plex/enc/plx_umrhwx.enc -2023/09/07 | 2926 | fonts/plex/enc/plx_be3ach.enc -2023/09/07 | 2919 | macros/latex/contrib/marginnote/README.md -2023/09/07 | 2916 | fonts/plex/enc/plx_qtqx7y.enc -2023/09/07 | 28872 | macros/latex/contrib/profcollege/latex/PfCSolides.tex -2023/09/07 | 2881 | fonts/plex/enc/plx_aytvzj.enc -2023/09/07 | 2878 | fonts/plex/enc/plx_gc6afx.enc -2023/09/07 | 2866 | fonts/plex/enc/plx_cj5svl.enc -2023/09/07 | 2848 | fonts/plex/enc/plx_errukl.enc -2023/09/07 | 2835 | fonts/plex/enc/plx_4rpw27.enc -2023/09/07 | 2830 | fonts/plex/enc/plx_nzsfse.enc -2023/09/07 | 2815 | macros/latex/contrib/profcollege/latex/PfCMotsCodes.tex -2023/09/07 | 28129 | macros/latex/contrib/profcollege/latex/PfCRappelsFormules.tex -2023/09/07 | 2800 | fonts/plex/enc/plx_6tuc4c.enc -2023/09/07 | 2785 | fonts/plex/enc/plx_i3ioen.enc -2023/09/07 | 2765 | fonts/plex/enc/plx_nercej.enc -2023/09/07 | 2709 | fonts/plex/enc/plx_lxmhqh.enc -2023/09/07 | 265 | biblio/citation-style-language/citeproc-lua.lua -2023/09/07 | 26426 | macros/latex/contrib/profcollege/latex/PfCPythagore.tex -2023/09/07 | 263 | biblio/citation-style-language/citation-style-language-data.sty -2023/09/07 | 2617 | macros/latex/contrib/profcollege/latex/PfCQuiSuisJe.tex -2023/09/07 | 2605 | macros/latex/contrib/profcollege/latex/PfCKakurasu.tex -2023/09/07 | 25814 | biblio/citation-style-language/csl-locales-ru-RU.xml -2023/09/07 | 25681 | macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex -2023/09/07 | 25302 | macros/latex/contrib/profcollege/latex/PfCQuestionsFlash.tex -2023/09/07 | 2503 | biblio/citation-style-language/citeproc-yaml.lua -2023/09/07 | 2499 | macros/latex/contrib/profcollege/latex/PfCSquaro.tex -2023/09/07 | 2470 | macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex -2023/09/07 | 24666 | macros/latex/contrib/profcollege/latex/PfCTrigonometrie.tex -2023/09/07 | 24565 | biblio/citation-style-language/csl-locales-bg-BG.xml -2023/09/07 | 24476 | systems/texlive/tlnet/archive/exesheet.source.r68192.tar.xz -2023/09/07 | 24444 | biblio/citation-style-language/csl-locales-hi-IN.xml -2023/09/07 | 2413 | fonts/plex/README -2023/09/07 | 240 | biblio/citation-style-language/DEPENDS.txt -2023/09/07 | 23895 | biblio/citation-style-language/citeproc-latex-data.lua -2023/09/07 | 23692 | biblio/citation-style-language/csl-locales-it-IT.xml -2023/09/07 | 23592 | biblio/citation-style-language/csl-locales-lv-LV.xml -2023/09/07 | 23566 | biblio/citation-style-language/csl-locales-th-TH.xml -2023/09/07 | 2341 | biblio/citation-style-language/citeproc-nodes.lua -2023/09/07 | 23275 | fonts/newpx/tex/newpxtext.sty -2023/09/07 | 23237 | macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex -2023/09/07 | 23220 | fonts/newpx/README -2023/09/07 | 23123 | biblio/citation-style-language/csl-locales-el-GR.xml -2023/09/07 | 230861 | macros/latex/contrib/suftesi/suftesi.dtx -2023/09/07 | 2301 | macros/latex/contrib/profcollege/latex/PfCQuestionsRelier.tex -2023/09/07 | 22987 | biblio/citation-style-language/chicago-author-date.csl -2023/09/07 | 229863 | biblio/citation-style-language/citation-style-language-doc.pdf -2023/09/07 | 22865 | biblio/citation-style-language/csl-locales-pt-BR.xml -2023/09/07 | 2285 | macros/latex/contrib/profcollege/latex/PfCGrades.tex -2023/09/07 | 22851 | biblio/citation-style-language/csl-locales-lt-LT.xml -2023/09/07 | 2276 | macros/latex/contrib/profcollege/latex/PfCKakuro.tex -2023/09/07 | 227648 | systems/texlive/tlnet/archive/exesheet.doc.r68192.tar.xz -2023/09/07 | 22715 | biblio/citation-style-language/csl-locales-pt-PT.xml -2023/09/07 | 22609 | biblio/citation-style-language/csl-locales-en-US.xml -2023/09/07 | 22536 | biblio/citation-style-language/csl-locales-es-MX.xml -2023/09/07 | 22456 | biblio/citation-style-language/csl-locales-nl-NL.xml -2023/09/07 | 22454 | biblio/citation-style-language/csl-locales-en-GB.xml -2023/09/07 | 22444 | biblio/citation-style-language/csl-locales-fr-FR.xml -2023/09/07 | 22436 | biblio/citation-style-language/csl-locales-fa-IR.xml -2023/09/07 | 22317 | biblio/citation-style-language/csl-locales-de-AT.xml -2023/09/07 | 22242 | biblio/citation-style-language/csl-locales-de-DE.xml -2023/09/07 | 2222 | macros/latex/contrib/profcollege/latex/PfCMotsCroises.tex -2023/09/07 | 22221 | biblio/citation-style-language/csl-locales-sr-RS.xml -2023/09/07 | 22197 | biblio/citation-style-language/csl-locales-fr-CA.xml -2023/09/07 | 2211 | macros/latex/contrib/profcollege/latex/PfCHiddenMessage.tex -2023/09/07 | 22065 | biblio/citation-style-language/csl-locales-km-KH.xml -2023/09/07 | 22040 | biblio/citation-style-language/csl-locales-mn-MN.xml -2023/09/07 | 21921 | biblio/citation-style-language/csl-locales-he-IL.xml -2023/09/07 | 21911 | biblio/citation-style-language/csl-locales-vi-VN.xml -2023/09/07 | 21814 | biblio/citation-style-language/csl-locales-sv-SE.xml -2023/09/07 | 21780 | biblio/citation-style-language/csl-locales-de-CH.xml -2023/09/07 | 21753 | biblio/citation-style-language/csl-locales-id-ID.xml -2023/09/07 | 21734 | biblio/citation-style-language/csl-locales-tr-TR.xml -2023/09/07 | 21722 | biblio/citation-style-language/csl-locales-fi-FI.xml -2023/09/07 | 21678 | biblio/citation-style-language/csl-locales-cs-CZ.xml -2023/09/07 | 21675 | biblio/citation-style-language/csl-locales-cy-GB.xml -2023/09/07 | 21673 | biblio/citation-style-language/csl-locales-sk-SK.xml -2023/09/07 | 21670 | biblio/citation-style-language/csl-locales-eu.xml -2023/09/07 | 21581 | biblio/citation-style-language/csl-locales-ja-JP.xml -2023/09/07 | 21569 | biblio/citation-style-language/csl-locales-da-DK.xml -2023/09/07 | 21568 | biblio/citation-style-language/csl-locales-is-IS.xml -2023/09/07 | 21565 | biblio/citation-style-language/csl-locales-hu-HU.xml -2023/09/07 | 21561 | biblio/citation-style-language/csl-locales-ro-RO.xml -2023/09/07 | 2155 | macros/latex/contrib/profcollege/latex/PfCGaram.tex -2023/09/07 | 21545 | biblio/citation-style-language/csl-locales-pl-PL.xml -2023/09/07 | 21532 | biblio/citation-style-language/csl-locales-af-ZA.xml -2023/09/07 | 21513 | biblio/citation-style-language/csl-locales-ko-KR.xml -2023/09/07 | 21505 | biblio/citation-style-language/csl-locales-es-CL.xml -2023/09/07 | 21462 | biblio/citation-style-language/csl-locales-hr-HR.xml -2023/09/07 | 21435 | biblio/citation-style-language/citation-style-language-bib.sty -2023/09/07 | 21429 | biblio/citation-style-language/csl-locales-sl-SI.xml -2023/09/07 | 21429 | biblio/citation-style-language/csl-locales-es-ES.xml -2023/09/07 | 21405 | biblio/citation-style-language/csl-locales-ca-AD.xml -2023/09/07 | 21401 | biblio/citation-style-language/csl-locales-la.xml -2023/09/07 | 21360 | biblio/citation-style-language/csl-locales-et-EE.xml -2023/09/07 | 2118 | biblio/citation-style-language/citeproc-node-layout.lua -2023/09/07 | 2106 | usergrps/usergrps/labels.tex -2023/09/07 | 20851 | biblio/citation-style-language/citeproc-element.lua -2023/09/07 | 20846 | biblio/citation-style-language/csl-locales-uk-UA.xml -2023/09/07 | 2072 | macros/latex/contrib/profcollege/latex/PfCBonSortie.tex -2023/09/07 | 202344 | systems/texlive/tlnet/archive/arsenal.r68191.tar.xz -2023/09/07 | 2013 | macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex -2023/09/07 | 1998 | biblio/citation-style-language/citeproc-node-number.lua -2023/09/07 | 19916 | biblio/citation-style-language/csl-locales-ar.xml -2023/09/07 | 19900 | macros/latex/contrib/profcollege/latex/PfCTrio.tex -2023/09/07 | 1976 | fonts/plex/tfm/plxSerif-MediumItalic-sup-ly1.tfm -2023/09/07 | 19749 | macros/latex/contrib/profcollege/latex/PfCRose.tex -2023/09/07 | 1972 | fonts/plex/tfm/plxSerif-SemiBoldItalic-sup-ly1.tfm -2023/09/07 | 1968 | fonts/plex/tfm/plxSerif-BoldItalic-sup-ly1.tfm -2023/09/07 | 1960 | fonts/plex/tfm/plxSerif-ExtraLightItalic-sup-ly1.tfm -2023/09/07 | 19522 | biblio/citation-style-language/csl-locales-zh-TW.xml -2023/09/07 | 19511 | macros/latex/contrib/profcollege/latex/ProfCollege.sty -2023/09/07 | 1940 | fonts/plex/tfm/plxSerif-LightItalic-sup-ly1.tfm -2023/09/07 | 1940 | fonts/plex/tfm/plxSans-SmBldItalic-sup-ly1.tfm -2023/09/07 | 1940 | fonts/plex/tfm/plxSans-MedmItalic-sup-ly1.tfm -2023/09/07 | 1936 | fonts/plex/tfm/plxSerif-ThinItalic-sup-ly1.tfm -2023/09/07 | 1928 | fonts/plex/tfm/plxSans-TextItalic-sup-ly1.tfm -2023/09/07 | 1920 | fonts/plex/tfm/plxSerif-SemiBoldItalic-sup-t1.tfm -2023/09/07 | 1916 | fonts/plex/tfm/plxSerif-TextItalic-sup-ly1.tfm -2023/09/07 | 1916 | fonts/plex/tfm/plxSerif-SemiBoldItalic-sup-t1--base.tfm -2023/09/07 | 1916 | fonts/plex/tfm/plxSerif-MediumItalic-sup-t1.tfm -2023/09/07 | 1916 | fonts/plex/tfm/plxSerif-BoldItalic-sup-t1.tfm -2023/09/07 | 1916 | fonts/plex/tfm/plxSans-BoldItalic-sup-ly1.tfm -2023/09/07 | 19161 | biblio/citation-style-language/csl-locales-zh-CN.xml -2023/09/07 | 1912 | fonts/plex/tfm/plxSerif-MediumItalic-sup-t1--base.tfm -2023/09/07 | 1912 | fonts/plex/tfm/plxSerif-BoldItalic-sup-t1--base.tfm -2023/09/07 | 1904 | fonts/plex/tfm/plxSerif-Italic-sup-ly1.tfm -2023/09/07 | 1904 | fonts/plex/tfm/plxSerif-ExtraLightItalic-sup-t1.tfm -2023/09/07 | 19028 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-lgr.tfm -2023/09/07 | 19024 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-lgr.tfm -2023/09/07 | 1900 | fonts/plex/tfm/plxSerif-ExtraLightItalic-sup-t1--base.tfm -2023/09/07 | 1900 | fonts/plex/tfm/plxSans-TextItalic-sup-t1.tfm -2023/09/07 | 1896 | fonts/plex/tfm/plxSerif-ThinItalic-sup-t1.tfm -2023/09/07 | 1896 | fonts/plex/tfm/plxSans-TextItalic-sup-t1--base.tfm -2023/09/07 | 1892 | fonts/plex/tfm/plxSerif-ThinItalic-sup-t1--base.tfm -2023/09/07 | 1892 | fonts/plex/tfm/plxSerif-LightItalic-sup-t1.tfm -2023/09/07 | 1892 | fonts/plex/tfm/plxSans-SmBldItalic-sup-t1.tfm -2023/09/07 | 1888 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-t1--base.tfm -2023/09/07 | 1888 | fonts/plex/tfm/plxSerif-LightItalic-sup-t1--base.tfm -2023/09/07 | 1888 | fonts/plex/tfm/plxSans-SmBldItalic-sup-t1--base.tfm -2023/09/07 | 1888 | fonts/plex/tfm/plxSans-MedmItalic-sup-t1.tfm -2023/09/07 | 1888 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-ly1.tfm -2023/09/07 | 1884 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-t1--base.tfm -2023/09/07 | 1884 | fonts/plex/tfm/plxSans-MedmItalic-sup-t1--base.tfm -2023/09/07 | 1884 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-ly1--base.tfm -2023/09/07 | 1884 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-ly1--base.tfm -2023/09/07 | 1884 | fonts/plex/tfm/plxSans-BoldItalic-sup-t1.tfm -2023/09/07 | 1880 | fonts/plex/tfm/plxSans-LightItalic-sup-ly1.tfm -2023/09/07 | 1880 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-ly1.tfm -2023/09/07 | 1880 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-ly1.tfm -2023/09/07 | 1880 | fonts/plex/tfm/plxSans-BoldItalic-sup-t1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-t1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-t1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSans-TextItalic-tlf-t1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-ly1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-TextItalic-sup-ly1.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-ly1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-ly1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-ly1--base.tfm -2023/09/07 | 1876 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-ly1--base.tfm -2023/09/07 | 18742 | biblio/citation-style-language/citation-style-language-cite.sty -2023/09/07 | 1872 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-t1--base.tfm -2023/09/07 | 1872 | fonts/plex/tfm/plxSans-TextItalic-tosf-t1--base.tfm -2023/09/07 | 1872 | fonts/plex/tfm/plxSansCond-TextItalic-sup-ly1--base.tfm -2023/09/07 | 1872 | fonts/plex/tfm/plxSansCond-Italic-sup-ly1.tfm -2023/09/07 | 18699 | biblio/citation-style-language/csl-locales-nb-NO.xml -2023/09/07 | 1868 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-t1--base.tfm -2023/09/07 | 1868 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-t1--base.tfm -2023/09/07 | 1868 | fonts/plex/tfm/plxSans-ExtLtItalic-sup-ly1.tfm -2023/09/07 | 1868 | fonts/plex/tfm/plxSansCond-Italic-sup-ly1--base.tfm -2023/09/07 | 18660 | fonts/plex/tfm/plxSerif-LightItalic-tosf-lgr.tfm -2023/09/07 | 18656 | fonts/plex/tfm/plxSerif-LightItalic-tlf-lgr.tfm -2023/09/07 | 1864 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-t1--base.tfm -2023/09/07 | 18645 | biblio/citation-style-language/csl-locales-nn-NO.xml -2023/09/07 | 1862 | macros/latex/contrib/profcollege/latex/PfCMotsEmpiles.tex -2023/09/07 | 1860 | fonts/plex/tfm/plxSans-MedmItalic-tosf-t1--base.tfm -2023/09/07 | 1860 | fonts/plex/tfm/plxSans-MedmItalic-tlf-t1--base.tfm -2023/09/07 | 1860 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-t1.tfm -2023/09/07 | 1856 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-t1--base.tfm -2023/09/07 | 1856 | fonts/plex/tfm/plxSerif-LightItalic-tlf-t1--base.tfm -2023/09/07 | 1856 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-t1--base.tfm -2023/09/07 | 1856 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-t1.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-t1--base.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSerif-Italic-sup-t1.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-t1--base.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSans-Italic-sup-ly1.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-t1--base.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSansCond-Italic-tlf-ly1--base.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSans-BoldItalic-tosf-t1--base.tfm -2023/09/07 | 1852 | fonts/plex/tfm/plxSans-BoldItalic-tlf-t1--base.tfm -2023/09/07 | 18504 | biblio/citation-style-language/citeproc-latex-parser.lua -2023/09/07 | 1848 | fonts/plex/tfm/plxSerif-TextItalic-sup-t1.tfm -2023/09/07 | 1848 | fonts/plex/tfm/plxSerif-LightItalic-tosf-t1--base.tfm -2023/09/07 | 1848 | fonts/plex/tfm/plxSerif-Italic-sup-t1--base.tfm -2023/09/07 | 1848 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-t1--base.tfm -2023/09/07 | 18472 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-lgr.tfm -2023/09/07 | 18468 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-lgr.tfm -2023/09/07 | 1844 | fonts/plex/tfm/plxSerif-TextItalic-sup-t1--base.tfm -2023/09/07 | 1844 | fonts/plex/tfm/plxSans-ThinItalic-sup-ly1.tfm -2023/09/07 | 1844 | fonts/plex/tfm/plxSansCond-TextItalic-sup-t1.tfm -2023/09/07 | 1844 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-t1--base.tfm -2023/09/07 | 1844 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-t1--base.tfm -2023/09/07 | 1840 | fonts/plex/tfm/plxSans-LightItalic-sup-t1.tfm -2023/09/07 | 1840 | fonts/plex/tfm/plxSansCond-LightItalic-sup-ly1.tfm -2023/09/07 | 1840 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-ly1--base.tfm -2023/09/07 | 1836 | fonts/plex/tfm/plxSans-LightItalic-sup-t1--base.tfm -2023/09/07 | 1836 | fonts/plex/tfm/plxSansCond-TextItalic-sup-t1--base.tfm -2023/09/07 | 1836 | fonts/plex/tfm/plxSansCond-LightItalic-sup-ly1--base.tfm -2023/09/07 | 1836 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-ly1.tfm -2023/09/07 | 1832 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-t1--base.tfm -2023/09/07 | 1832 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-ly1--base.tfm -2023/09/07 | 18324 | fonts/plex/tfm/plxSerif-TextItalic-tosf-lgr.tfm -2023/09/07 | 18312 | fonts/plex/tfm/plxSerif-TextItalic-tlf-lgr.tfm -2023/09/07 | 1828 | fonts/plex/tfm/plxSans-ThinItalic-sup-t1.tfm -2023/09/07 | 1828 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-t1.tfm -2023/09/07 | 1828 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-ly1--base.tfm -2023/09/07 | 1824 | fonts/plex/tfm/plxSans-ThinItalic-sup-t1--base.tfm -2023/09/07 | 1824 | fonts/plex/tfm/plxSansCond-Italic-sup-t1.tfm -2023/09/07 | 1820 | fonts/plex/tfm/plxSerif-TextItalic-tlf-t1--base.tfm -2023/09/07 | 1820 | fonts/plex/tfm/plxSerif-Italic-tosf-t1--base.tfm -2023/09/07 | 1820 | fonts/plex/tfm/plxSans-ExtLtItalic-sup-t1.tfm -2023/09/07 | 1820 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-t1--base.tfm -2023/09/07 | 1816 | fonts/plex/tfm/plxSerif-TextItalic-tosf-t1--base.tfm -2023/09/07 | 1816 | fonts/plex/tfm/plxSerif-Italic-tlf-t1--base.tfm -2023/09/07 | 1816 | fonts/plex/tfm/plxSans-ExtLtItalic-sup-t1--base.tfm -2023/09/07 | 1816 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-t1--base.tfm -2023/09/07 | 1816 | fonts/plex/tfm/plxSansCond-Italic-sup-t1--base.tfm -2023/09/07 | 1812 | fonts/plex/tfm/plxSans-LightItalic-tosf-t1--base.tfm -2023/09/07 | 1812 | fonts/plex/tfm/plxSans-LightItalic-tlf-t1--base.tfm -2023/09/07 | 1812 | fonts/plex/tfm/plxSans-Italic-sup-t1.tfm -2023/09/07 | 1808 | fonts/plex/tfm/plxSans-Italic-sup-t1--base.tfm -2023/09/07 | 1804 | fonts/plex/tfm/plxSansCond-LightItalic-sup-t1.tfm -2023/09/07 | 1800 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-ly1--base.tfm -2023/09/07 | 1800 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-ly1.tfm -2023/09/07 | 1796 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-ly1--base.tfm -2023/09/07 | 1796 | fonts/plex/tfm/plxSansCond-LightItalic-sup-t1--base.tfm -2023/09/07 | 1796 | fonts/plex/tfm/plxSansCond-Italic-tlf-t1--base.tfm -2023/09/07 | 1796 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-t1.tfm -2023/09/07 | 17940 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-lgr.tfm -2023/09/07 | 17936 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-lgr.tfm -2023/09/07 | 1792 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-t1--base.tfm -2023/09/07 | 1788 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-t1--base.tfm -2023/09/07 | 1788 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-t1--base.tfm -2023/09/07 | 1780 | fonts/plex/tfm/plxSans-ThinItalic-tosf-t1--base.tfm -2023/09/07 | 1780 | fonts/plex/tfm/plxSans-ThinItalic-tlf-t1--base.tfm -2023/09/07 | 1780 | fonts/plex/tfm/plxSans-Italic-tlf-t1--base.tfm -2023/09/07 | 1777 | macros/latex/contrib/profcollege/latex/PfCRapido.tex -2023/09/07 | 1776 | fonts/plex/tfm/plxSans-Italic-tosf-t1--base.tfm -2023/09/07 | 1776 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-t1--base.tfm -2023/09/07 | 1776 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-t1.tfm -2023/09/07 | 1772 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-t1--base.tfm -2023/09/07 | 17716 | fonts/plex/tfm/plxSerif-Light-tosf-lgr.tfm -2023/09/07 | 17708 | fonts/plex/tfm/plxSerif-Light-tlf-lgr.tfm -2023/09/07 | 1768 | fonts/plex/tfm/plxSerif-SemiBold-sup-ly1.tfm -2023/09/07 | 1768 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-t1--base.tfm -2023/09/07 | 1768 | fonts/plex/tfm/plxSans-Bold-sup-ly1.tfm -2023/09/07 | 1764 | fonts/plex/tfm/plxSerif-Bold-sup-ly1.tfm -2023/09/07 | 17644236 | macros/latex/contrib/profcollege.zip -2023/09/07 | 1760 | fonts/plex/tfm/plxSerif-Medium-sup-ly1.tfm -2023/09/07 | 1760 | fonts/plex/tfm/plxSans-Medm-sup-ly1.tfm -2023/09/07 | 1760 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-t1--base.tfm -2023/09/07 | 1752 | fonts/plex/tfm/plxSerif-MediumItalic-sup-lgr.tfm -2023/09/07 | 17496 | fonts/plex/tfm/plxSans-LightItalic-tosf-lgr.tfm -2023/09/07 | 1748 | fonts/plex/tfm/plxSerif-Text-sup-ly1.tfm -2023/09/07 | 1748 | fonts/plex/tfm/plxSerif-ExtraLight-sup-ly1.tfm -2023/09/07 | 17488 | fonts/plex/tfm/plxSans-LightItalic-tlf-lgr.tfm -2023/09/07 | 1740 | fonts/plex/tfm/plxSerif-Regular-sup-ly1.tfm -2023/09/07 | 1736 | fonts/plex/tfm/plxSans-Text-sup-ly1.tfm -2023/09/07 | 1736 | fonts/plex/tfm/plxSans-sup-ly1.tfm -2023/09/07 | 1736 | fonts/plex/tfm/plxSans-SmBld-sup-ly1.tfm -2023/09/07 | 1732 | fonts/plex/tfm/plxSerif-ExtraLightItalic-sup-lgr.tfm -2023/09/07 | 1732 | fonts/plex/tfm/plxSansCond-Medm-tlf-ly1--base.tfm -2023/09/07 | 17296 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-lgr.tfm -2023/09/07 | 1728 | fonts/plex/tfm/plxSerif-Light-sup-ly1.tfm -2023/09/07 | 1728 | fonts/plex/tfm/plxSerif-BoldItalic-sup-lgr.tfm -2023/09/07 | 1728 | fonts/plex/tfm/plxSansCond-SmBld-tlf-ly1--base.tfm -2023/09/07 | 1728 | fonts/plex/tfm/plxSansCond-Medm-sup-ly1.tfm -2023/09/07 | 17288 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-lgr.tfm -2023/09/07 | 17252 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-lgr.tfm -2023/09/07 | 1724 | fonts/plex/tfm/plxSerif-TextItalic-sup-lgr.tfm -2023/09/07 | 1724 | fonts/plex/tfm/plxSansCond-SmBld-sup-ly1.tfm -2023/09/07 | 1724 | fonts/plex/tfm/plxSansCond-Medm-sup-ly1--base.tfm -2023/09/07 | 17244 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-lgr.tfm -2023/09/07 | 1720 | fonts/plex/tfm/plxSerif-LightItalic-sup-lgr.tfm -2023/09/07 | 1720 | fonts/plex/tfm/plxSansCond-SmBld-sup-ly1--base.tfm -2023/09/07 | 1720 | fonts/plex/tfm/plxSans-Bold-sup-t1.tfm -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-ThinItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-TextItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-SmBldItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-MedmItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-LightItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-ExtLtItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/vf/plxSansCond-BoldItalic-tlf-t1.vf -2023/09/07 | 1716 | fonts/plex/tfm/plxSerif-Bold-sup-t1.tfm -2023/09/07 | 1716 | fonts/plex/tfm/plxSans-Medm-sup-t1.tfm -2023/09/07 | 1716 | fonts/plex/tfm/plxSans-Light-sup-ly1.tfm -2023/09/07 | 1716 | fonts/plex/tfm/plxSans-Bold-sup-t1--base.tfm -2023/09/07 | 17136 | fonts/plex/tfm/plxSerif-Medium-tosf-lgr.tfm -2023/09/07 | 1712 | fonts/plex/vf/plxSerif-ExtraLightItalic-tosf-t1.vf -2023/09/07 | 1712 | fonts/plex/vf/plxSerif-ExtraLightItalic-tlf-t1.vf -2023/09/07 | 1712 | fonts/plex/vf/plxSansCond-SmBld-tlf-t1.vf -2023/09/07 | 1712 | fonts/plex/vf/plxSansCond-Light-tlf-t1.vf -2023/09/07 | 1712 | fonts/plex/vf/plxSansCond-Italic-tlf-t1.vf -2023/09/07 | 1712 | fonts/plex/vf/plxSansCond-ExtLt-tlf-t1.vf -2023/09/07 | 1712 | fonts/plex/tfm/plxSerif-Thin-sup-ly1.tfm -2023/09/07 | 1712 | fonts/plex/tfm/plxSerif-SemiBold-sup-t1.tfm -2023/09/07 | 1712 | fonts/plex/tfm/plxSerif-Bold-sup-t1--base.tfm -2023/09/07 | 1712 | fonts/plex/tfm/plxSans-Medm-sup-t1--base.tfm -2023/09/07 | 1712 | fonts/plex/tfm/plxSansCond-Text-tlf-ly1--base.tfm -2023/09/07 | 1712 | fonts/plex/tfm/plxSans-BoldItalic-sup-lgr.tfm -2023/09/07 | 17128 | fonts/plex/tfm/plxSerif-Medium-tlf-lgr.tfm -2023/09/07 | 1710 | biblio/citation-style-language/README.md -2023/09/07 | 1708 | fonts/plex/vf/plxSerif-SemiBoldItalic-tosf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSerif-SemiBoldItalic-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSerif-MediumItalic-tosf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSerif-MediumItalic-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSerif-LightItalic-tosf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSansCond-Thin-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSansCond-Text-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSansCond-Medm-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/vf/plxSansCond-Bold-tlf-t1.vf -2023/09/07 | 1708 | fonts/plex/tfm/plxSerif-SemiBold-sup-t1--base.tfm -2023/09/07 | 1708 | fonts/plex/tfm/plxSerif-SemiBoldItalic-sup-lgr.tfm -2023/09/07 | 1708 | fonts/plex/tfm/plxSerif-Medium-sup-t1.tfm -2023/09/07 | 1708 | fonts/plex/tfm/plxSans-Thin-sup-ly1.tfm -2023/09/07 | 1708 | fonts/plex/tfm/plxSans-ExtLt-sup-ly1.tfm -2023/09/07 | 1708 | fonts/plex/tfm/plxSansCond-Text-sup-ly1.tfm -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-ThinItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-TextItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-TextItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-SemiBold-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-SemiBold-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-Regular-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-LightItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-ExtraLight-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-ExtraLight-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSerif-BoldItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-ThinItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-ThinItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-TextItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-TextItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-SmBldItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-SmBldItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-MedmItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-MedmItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-LightItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-LightItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-ExtLtItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-ExtLtItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSansCond-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-BoldItalic-tosf-t1.vf -2023/09/07 | 1704 | fonts/plex/vf/plxSans-BoldItalic-tlf-t1.vf -2023/09/07 | 1704 | fonts/plex/tfm/plxSerif-Medium-sup-t1--base.tfm -2023/09/07 | 1704 | fonts/plex/tfm/plxSansCond-Text-sup-ly1--base.tfm -2023/09/07 | 17036 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-lgr.tfm -2023/09/07 | 17032 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-lgr.tfm -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Thin-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Thin-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-ThinItalic-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Text-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Text-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Regular-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Medium-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Medium-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Light-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Light-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Italic-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Italic-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Bold-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-Bold-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSerif-BoldItalic-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Thin-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Text-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-SmBld-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-SmBld-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Medm-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Light-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Light-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Italic-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Italic-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-ExtLt-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-ExtLt-tlf-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-ThinItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-TextItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-SmBldItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-MedmItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-LightItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-ExtLtItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSansCond-BoldItalic-sup-t1.vf -2023/09/07 | 1700 | fonts/plex/vf/plxSans-Bold-tosf-t1.vf -2023/09/07 | 1700 | fonts/plex/tfm/plxSerif-Regular-sup-t1.tfm -2023/09/07 | 1700 | fonts/plex/tfm/plxSans-Text-sup-t1.tfm -2023/09/07 | 1700 | fonts/plex/tfm/plxSans-SmBld-sup-t1.tfm -2023/09/07 | 1700 | fonts/plex/tfm/plxSans-SmBldItalic-sup-lgr.tfm -2023/09/07 | 1696 | fonts/plex/vf/plxSerif-ExtraLightItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSans-Thin-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSans-Text-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSans-Medm-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Thin-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Text-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-SmBld-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Medm-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Light-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Italic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-ExtLt-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSansCond-Bold-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxSans-Bold-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-ThinItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-ThinItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-TextItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-TextItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-SmBldItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-SmBldItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-MedmItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-MedmItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-LightItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-LightItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-ExtLtItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-ExtLtItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-BoldItalic-tlf-t1.vf -2023/09/07 | 1696 | fonts/plex/vf/plxMono-BoldItalic-sup-t1.vf -2023/09/07 | 1696 | fonts/plex/tfm/plxSerif-ThinItalic-sup-lgr.tfm -2023/09/07 | 1696 | fonts/plex/tfm/plxSerif-Regular-sup-t1--base.tfm -2023/09/07 | 1696 | fonts/plex/tfm/plxSans-Text-sup-t1--base.tfm -2023/09/07 | 1696 | fonts/plex/tfm/plxSans-TextItalic-sup-lgr.tfm -2023/09/07 | 1696 | fonts/plex/tfm/plxSans-SmBld-sup-t1--base.tfm -2023/09/07 | 1696 | fonts/plex/tfm/plxSansCond-Medm-sup-t1.tfm -2023/09/07 | 1692 | fonts/plex/vf/plxSerif-SemiBoldItalic-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSerif-MediumItalic-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSerif-LightItalic-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSans-tosf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSans-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSansCond-SmBldItalic-tlf-ly1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSansCond-LightItalic-tlf-ly1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxSansCond-ExtLtItalic-tlf-ly1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Thin-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Thin-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Text-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Text-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-SmBld-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-SmBld-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Medm-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Medm-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Light-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Light-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Italic-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Italic-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-ExtLt-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-ExtLt-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Bold-tlf-t1.vf -2023/09/07 | 1692 | fonts/plex/vf/plxMono-Bold-sup-t1.vf -2023/09/07 | 1692 | fonts/plex/tfm/plxSerif-Text-sup-t1.tfm -2023/09/07 | 1692 | fonts/plex/tfm/plxSansCond-Thin-tlf-ly1--base.tfm -2023/09/07 | 1692 | fonts/plex/tfm/plxSansCond-SmBld-sup-t1.tfm -2023/09/07 | 1692 | fonts/plex/tfm/plxSansCond-Medm-tlf-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-ThinItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-TextItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-SemiBold-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-Regular-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-ExtraLight-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSerif-BoldItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-ThinItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-TextItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-SmBldItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-MedmItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-LightItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-ExtLtItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSansCond-ThinItalic-tlf-ly1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSansCond-TextItalic-tlf-ly1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSansCond-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSansCond-MedmItalic-tlf-ly1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSansCond-BoldItalic-tlf-ly1.vf -2023/09/07 | 1688 | fonts/plex/vf/plxSans-BoldItalic-sup-t1.vf -2023/09/07 | 1688 | fonts/plex/tfm/plxSerif-Text-sup-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSerif-Italic-sup-lgr.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSerif-ExtraLight-sup-t1.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSans-Medm-tosf-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSans-Medm-tlf-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSans-MedmItalic-sup-lgr.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSansCond-tlf-ly1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSansCond-Thin-sup-ly1.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSansCond-Medm-sup-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-ly1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSans-Bold-tosf-t1--base.tfm -2023/09/07 | 1688 | fonts/plex/tfm/plxSans-Bold-tlf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Thin-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Text-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Medium-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Light-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Italic-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSerif-Bold-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Thin-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Text-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-SmBld-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Medm-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Light-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Italic-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-ExtLt-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Thin-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Text-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-SmBld-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Medm-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Light-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Italic-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-ExtLt-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSansCond-Bold-tlf-ly1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxSans-Bold-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxMono-tlf-t1.vf -2023/09/07 | 1684 | fonts/plex/vf/plxMono-sup-t1.vf -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-SemiBold-tosf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-SemiBold-tlf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-Medium-tosf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-Medium-tlf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-ExtraLight-sup-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-Bold-tosf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSerif-Bold-tlf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-Thin-sup-ly1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-sup-ly1.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-SmBld-tlf-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-SmBld-sup-t1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-Light-tlf-ly1--base.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-Light-sup-ly1.tfm -2023/09/07 | 1684 | fonts/plex/tfm/plxSansCond-ExtLt-sup-ly1.tfm -2023/09/07 | 1680 | fonts/plex/vf/plxSansCond-tlf-ly1.vf -2023/09/07 | 1680 | fonts/plex/vf/plxSansCond-SmBldItalic-sup-ly1.vf -2023/09/07 | 1680 | fonts/plex/vf/plxSansCond-LightItalic-sup-ly1.vf -2023/09/07 | 1680 | fonts/plex/vf/plxSansCond-ExtLtItalic-sup-ly1.vf -2023/09/07 | 1680 | fonts/plex/tfm/plxSans-sup-t1.tfm -2023/09/07 | 1680 | fonts/plex/tfm/plxSansCond-sup-ly1--base.tfm -2023/09/07 | 1680 | fonts/plex/tfm/plxSansCond-Light-sup-ly1--base.tfm -2023/09/07 | 1680 | fonts/plex/tfm/plxSansCond-ExtLt-sup-ly1--base.tfm -2023/09/07 | 16772 | fonts/plex/tfm/plxSerif-Text-tosf-lgr.tfm -2023/09/07 | 1676 | fonts/plex/vf/plxSans-sup-t1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxSansCond-ThinItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxSansCond-TextItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxSansCond-MedmItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxSansCond-BoldItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-SmBldItalic-tlf-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-SmBldItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-LightItalic-tlf-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-LightItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-ExtLtItalic-tlf-ly1.vf -2023/09/07 | 1676 | fonts/plex/vf/plxMono-ExtLtItalic-sup-ly1.vf -2023/09/07 | 1676 | fonts/plex/tfm/plxSerif-Regular-tosf-t1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSerif-Regular-tlf-t1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSans-Text-tosf-t1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSans-Text-tlf-t1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSans-sup-t1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSansCond-Bold-tlf-ly1--base.tfm -2023/09/07 | 1676 | fonts/plex/tfm/plxSansCond-Bold-sup-ly1.tfm -2023/09/07 | 16764 | fonts/plex/tfm/plxSerif-Text-tlf-lgr.tfm -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Thin-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Text-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-SmBld-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Medm-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Light-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Italic-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-ExtLt-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxSansCond-Bold-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-ThinItalic-tlf-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-ThinItalic-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-TextItalic-tlf-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-TextItalic-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-MedmItalic-tlf-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-MedmItalic-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-BoldItalic-tlf-ly1.vf -2023/09/07 | 1672 | fonts/plex/vf/plxMono-BoldItalic-sup-ly1.vf -2023/09/07 | 1672 | fonts/plex/tfm/plxSans-LightItalic-sup-lgr.tfm -2023/09/07 | 1672 | fonts/plex/tfm/plxSansCond-Bold-sup-ly1--base.tfm -2023/09/07 | 1670 | macros/latex/contrib/suftesi/README -2023/09/07 | 1668 | fonts/plex/vf/plxSansCond-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Thin-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Thin-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Text-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Text-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-SmBld-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-SmBld-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Medm-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Medm-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Light-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Light-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Italic-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Italic-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-ExtLt-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-ExtLt-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Bold-tlf-ly1.vf -2023/09/07 | 1668 | fonts/plex/vf/plxMono-Bold-sup-ly1.vf -2023/09/07 | 1668 | fonts/plex/tfm/plxSans-SmBld-tosf-t1--base.tfm -2023/09/07 | 1668 | fonts/plex/tfm/plxSans-SmBld-tlf-t1--base.tfm -2023/09/07 | 1668 | fonts/plex/tfm/plxSans-Light-sup-t1.tfm -2023/09/07 | 1668 | fonts/plex/tfm/plxSans-ExtLtItalic-sup-lgr.tfm -2023/09/07 | 1664 | fonts/plex/vf/plxMono-tlf-ly1.vf -2023/09/07 | 1664 | fonts/plex/vf/plxMono-sup-ly1.vf -2023/09/07 | 1664 | fonts/plex/tfm/plxSerif-Text-tosf-t1--base.tfm -2023/09/07 | 1664 | fonts/plex/tfm/plxSerif-Text-tlf-t1--base.tfm -2023/09/07 | 1664 | fonts/plex/tfm/plxSans-tosf-t1--base.tfm -2023/09/07 | 1664 | fonts/plex/tfm/plxSans-tlf-t1--base.tfm -2023/09/07 | 1664 | fonts/plex/tfm/plxSans-Light-sup-t1--base.tfm -2023/09/07 | 1664 | fonts/plex/tfm/plxSans-Italic-sup-lgr.tfm -2023/09/07 | 16644 | fonts/plex/tfm/plxSans-MedmItalic-tosf-lgr.tfm -2023/09/07 | 16640 | fonts/plex/tfm/plxSans-MedmItalic-tlf-lgr.tfm -2023/09/07 | 1660 | fonts/plex/tfm/plxSans-ThinItalic-sup-lgr.tfm -2023/09/07 | 1660 | fonts/plex/tfm/plxSans-ExtLt-sup-t1.tfm -2023/09/07 | 1660 | fonts/plex/tfm/plxSansCond-Text-sup-t1.tfm -2023/09/07 | 16604 | fonts/plex/tfm/plxSerif-Italic-tosf-lgr.tfm -2023/09/07 | 16596 | fonts/plex/tfm/plxSerif-Italic-tlf-lgr.tfm -2023/09/07 | 1656 | fonts/plex/tfm/plxSerif-Light-sup-t1.tfm -2023/09/07 | 1656 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-t1--base.tfm -2023/09/07 | 1656 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-t1--base.tfm -2023/09/07 | 1656 | fonts/plex/tfm/plxSans-ExtLt-sup-t1--base.tfm -2023/09/07 | 1656 | fonts/plex/tfm/plxSansCond-Text-tlf-t1--base.tfm -2023/09/07 | 1652 | fonts/plex/tfm/plxSerif-Thin-sup-t1.tfm -2023/09/07 | 1652 | fonts/plex/tfm/plxSerif-Light-sup-t1--base.tfm -2023/09/07 | 1652 | fonts/plex/tfm/plxSansCond-Text-sup-t1--base.tfm -2023/09/07 | 16517 | biblio/citation-style-language/citation-style-language-doc.tex -2023/09/07 | 16504 | fonts/plex/tfm/plxSerif-SemiBold-tosf-lgr.tfm -2023/09/07 | 16496 | fonts/plex/tfm/plxSerif-SemiBold-tlf-lgr.tfm -2023/09/07 | 1648 | graphics/metapost/contrib/macros/wordcloud/README.md -2023/09/07 | 1648 | fonts/plex/tfm/plxSerif-Thin-sup-t1--base.tfm -2023/09/07 | 1648 | fonts/plex/tfm/plxSans-Thin-sup-t1.tfm -2023/09/07 | 1648 | fonts/plex/tfm/plxSansCond-Bold-sup-t1.tfm -2023/09/07 | 16486 | macros/latex/contrib/profcollege/latex/PfCRondeInfernale.tex -2023/09/07 | 16458 | macros/luatex/latex/odsfile/odsfile.tex -2023/09/07 | 1644 | fonts/plex/tfm/plxSans-Thin-sup-t1--base.tfm -2023/09/07 | 1644 | fonts/plex/tfm/plxSans-Light-tosf-t1--base.tfm -2023/09/07 | 1644 | fonts/plex/tfm/plxSans-Light-tlf-t1--base.tfm -2023/09/07 | 16432 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-lgr.tfm -2023/09/07 | 16428 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-lgr.tfm -2023/09/07 | 1640 | fonts/plex/tfm/plxSansCond-Bold-sup-t1--base.tfm -2023/09/07 | 1636 | fonts/plex/tfm/plxSans-ExtLt-tosf-t1--base.tfm -2023/09/07 | 1636 | fonts/plex/tfm/plxSans-ExtLt-tlf-t1--base.tfm -2023/09/07 | 1636 | fonts/plex/tfm/plxSansCond-sup-t1.tfm -2023/09/07 | 1636 | fonts/plex/tfm/plxSansCond-Bold-tlf-t1--base.tfm -2023/09/07 | 1632 | fonts/plex/tfm/plxSansCond-tlf-t1--base.tfm -2023/09/07 | 1632 | fonts/plex/tfm/plxSansCond-ExtLt-sup-t1.tfm -2023/09/07 | 16304 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-lgr.tfm -2023/09/07 | 1628 | fonts/plex/tfm/plxSerif-Light-tosf-t1--base.tfm -2023/09/07 | 1628 | fonts/plex/tfm/plxSerif-Light-tlf-t1--base.tfm -2023/09/07 | 1628 | fonts/plex/tfm/plxSansCond-Thin-sup-t1.tfm -2023/09/07 | 1628 | fonts/plex/tfm/plxSansCond-sup-t1--base.tfm -2023/09/07 | 1628 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-t1--base.tfm -2023/09/07 | 16288 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-lgr.tfm -2023/09/07 | 1624 | fonts/plex/tfm/plxSans-Thin-tosf-t1--base.tfm -2023/09/07 | 1624 | fonts/plex/tfm/plxSans-Thin-tlf-t1--base.tfm -2023/09/07 | 1624 | fonts/plex/tfm/plxSansCond-Thin-tlf-t1--base.tfm -2023/09/07 | 1624 | fonts/plex/tfm/plxSansCond-ExtLt-sup-t1--base.tfm -2023/09/07 | 1620 | fonts/plex/tfm/plxSansCond-Thin-sup-t1--base.tfm -2023/09/07 | 1620 | fonts/plex/tfm/plxSansCond-Light-sup-t1.tfm -2023/09/07 | 16190 | macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex -2023/09/07 | 1616 | fonts/plex/tfm/plxSerif-Thin-tosf-t1--base.tfm -2023/09/07 | 1616 | fonts/plex/tfm/plxSerif-Thin-tlf-t1--base.tfm -2023/09/07 | 16160 | fonts/plex/tfm/plxSerif-Thin-tosf-lgr.tfm -2023/09/07 | 16148 | fonts/plex/tfm/plxSerif-Thin-tlf-lgr.tfm -2023/09/07 | 1612 | fonts/plex/tfm/plxSansCond-Light-tlf-t1--base.tfm -2023/09/07 | 1612 | fonts/plex/tfm/plxSansCond-Light-sup-t1--base.tfm -2023/09/07 | 16063 | biblio/citation-style-language/modern-humanities-research-association.csl -2023/09/07 | 16038 | macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex -2023/09/07 | 16032 | fonts/plex/tfm/plxSans-TextItalic-tosf-lgr.tfm -2023/09/07 | 16028 | fonts/plex/tfm/plxSans-TextItalic-tlf-lgr.tfm -2023/09/07 | 1598 | macros/latex/contrib/profcollege/latex/PfCGeometrie.tex -2023/09/07 | 1594 | fonts/plex/doc/plex-samples.tex -2023/09/07 | 15928 | fonts/plex/tfm/plxSans-ThinItalic-tosf-lgr.tfm -2023/09/07 | 15921 | macros/latex/contrib/profcollege/latex/PfCPropor.tex -2023/09/07 | 15920 | fonts/plex/tfm/plxSans-ThinItalic-tlf-lgr.tfm -2023/09/07 | 1589 | macros/luatex/latex/odsfile/README -2023/09/07 | 1588 | fonts/plex/tfm/plxSerif-SemiBold-sup-lgr.tfm -2023/09/07 | 15861 | macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex -2023/09/07 | 1584 | fonts/plex/tfm/plxSerif-Text-sup-lgr.tfm -2023/09/07 | 1581629 | install/macros/latex/contrib/suftesi.tds.zip -2023/09/07 | 1580 | fonts/plex/tfm/plxSerif-ExtraLight-sup-lgr.tfm -2023/09/07 | 1580 | fonts/plex/tfm/plxSerif-Bold-sup-lgr.tfm -2023/09/07 | 15775 | biblio/citation-style-language/ieee.csl -2023/09/07 | 1576 | fonts/plex/tfm/plxSerif-Medium-sup-lgr.tfm -2023/09/07 | 15723800 | install/fonts/plex.tds.zip -2023/09/07 | 156956 | fonts/plex/opentype/IBMPlexSerif-SemiBoldItalic.otf -2023/09/07 | 1568 | fonts/plex/tfm/plxSans-Text-sup-lgr.tfm -2023/09/07 | 1568 | fonts/plex/tfm/plxSans-Bold-sup-lgr.tfm -2023/09/07 | 156576 | fonts/plex/opentype/IBMPlexSerif-MediumItalic.otf -2023/09/07 | 1564682 | macros/latex/contrib/suftesi.zip -2023/09/07 | 1560 | fonts/plex/tfm/plxSerif-Light-sup-lgr.tfm -2023/09/07 | 1560 | fonts/plex/tfm/plxSans-Medm-sup-lgr.tfm -2023/09/07 | 15605494 | fonts/plex.zip -2023/09/07 | 1556 | fonts/plex/tfm/plxSerif-Thin-sup-lgr.tfm -2023/09/07 | 1556 | fonts/plex/tfm/plxSerif-Regular-sup-lgr.tfm -2023/09/07 | 1556 | fonts/plex/tfm/plxSans-SmBld-sup-lgr.tfm -2023/09/07 | 155300 | fonts/plex/opentype/IBMPlexSerif-TextItalic.otf -2023/09/07 | 1552 | fonts/plex/tfm/plxSans-sup-lgr.tfm -2023/09/07 | 15400 | fonts/plex/tfm/plxSans-Light-tosf-lgr.tfm -2023/09/07 | 15392 | fonts/plex/tfm/plxSans-Light-tlf-lgr.tfm -2023/09/07 | 1536 | fonts/plex/tfm/plxSans-Light-sup-lgr.tfm -2023/09/07 | 1536 | fonts/plex/tfm/plxSans-ExtLt-sup-lgr.tfm -2023/09/07 | 15364 | fonts/plex/tfm/plxSerif-Bold-tosf-lgr.tfm -2023/09/07 | 15355 | macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex -2023/09/07 | 15352 | fonts/plex/tfm/plxSerif-Bold-tlf-lgr.tfm -2023/09/07 | 1528 | macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex -2023/09/07 | 1528 | fonts/plex/tfm/plxSans-Thin-sup-lgr.tfm -2023/09/07 | 152568 | fonts/plex/opentype/IBMPlexSerif-BoldItalic.otf -2023/09/07 | 15148 | fonts/plex/tfm/plxSans-Medm-tosf-lgr.tfm -2023/09/07 | 15144 | fonts/plex/tfm/plxSans-Medm-tlf-lgr.tfm -2023/09/07 | 151308 | fonts/plex/opentype/IBMPlexSerif-LightItalic.otf -2023/09/07 | 15116 | fonts/plex/tfm/plxSerif-Regular-tosf-lgr.tfm -2023/09/07 | 15108 | fonts/plex/tfm/plxSerif-Regular-tlf-lgr.tfm -2023/09/07 | 15073 | macros/latex/contrib/profcollege/latex/PfCFactorisation.tex -2023/09/07 | 1500 | fonts/plex/tfm/plxSerif-MediumItalic-sup-ot1.tfm -2023/09/07 | 15006 | biblio/citation-style-language/citeproc-bibtex-parser.lua -2023/09/07 | 149980 | fonts/plex/type1/plxSerif-SemiBoldItalic.pfb -2023/09/07 | 149868 | fonts/plex/opentype/IBMPlexSerif-ExtraLightItalic.otf -2023/09/07 | 1496 | fonts/plex/tfm/plxSerif-ExtraLightItalic-sup-ot1.tfm -2023/09/07 | 149580 | fonts/plex/type1/plxSerif-BoldItalic.pfb -2023/09/07 | 14951 | macros/latex/contrib/profcollege/latex/PfCMulArt.tex -2023/09/07 | 149479 | fonts/plex/type1/plxSerif-MediumItalic.pfb -2023/09/07 | 149100 | fonts/plex/opentype/IBMPlexSerif-Italic.otf -2023/09/07 | 1488 | macros/latex/contrib/profcollege/latex/PfCScratch.tex -2023/09/07 | 1488 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-ts1.tfm -2023/09/07 | 1488 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-ts1.tfm -2023/09/07 | 1488 | fonts/plex/tfm/plxSans-BoldItalic-tosf-ts1.tfm -2023/09/07 | 1488 | fonts/plex/tfm/plxSans-BoldItalic-tlf-ts1.tfm -2023/09/07 | 14874 | biblio/citation-style-language/citeproc-latex-core.lua -2023/09/07 | 1484 | fonts/plex/tfm/plxSerif-SemiBoldItalic-sup-ot1.tfm -2023/09/07 | 1484 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-ts1.tfm -2023/09/07 | 1484 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-ts1.tfm -2023/09/07 | 1480 | fonts/plex/tfm/plxSerif-TextItalic-tosf-ts1.tfm -2023/09/07 | 1480 | fonts/plex/tfm/plxSerif-TextItalic-tlf-ts1.tfm -2023/09/07 | 1480 | fonts/plex/tfm/plxSans-BoldItalic-tosf-ts1--base.tfm -2023/09/07 | 1480 | fonts/plex/tfm/plxSans-BoldItalic-tlf-ts1--base.tfm -2023/09/07 | 14780 | fonts/plex/tfm/plxSans-SmBld-tosf-lgr.tfm -2023/09/07 | 14776040 | biblio/citation-style-language/citeproc-journal-data.lua -2023/09/07 | 14772 | fonts/plex/tfm/plxSans-SmBld-tlf-lgr.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-ts1--base.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-ts1--base.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-ts1.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-ts1.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSans-MedmItalic-tosf-ts1.tfm -2023/09/07 | 1476 | fonts/plex/tfm/plxSans-MedmItalic-tlf-ts1.tfm -2023/09/07 | 147491 | fonts/plex/type1/plxSerif-TextItalic.pfb -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-ts1--base.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-ts1--base.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-LightItalic-tosf-ts1.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-LightItalic-tlf-ts1.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-Italic-tosf-ts1.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-Italic-tlf-ts1.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-ts1--base.tfm -2023/09/07 | 1472 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-ts1--base.tfm -2023/09/07 | 1468 | fonts/plex/tfm/plxSerif-TextItalic-tosf-ts1--base.tfm -2023/09/07 | 1468 | fonts/plex/tfm/plxSerif-TextItalic-tlf-ts1--base.tfm -2023/09/07 | 1468 | fonts/plex/tfm/plxSerif-Italic-tosf-ts1--base.tfm -2023/09/07 | 1468 | fonts/plex/tfm/plxSerif-Italic-tlf-ts1--base.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSerif-BoldItalic-sup-ot1.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSans-TextItalic-sup-ot1.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-ts1.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-ts1.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSans-MedmItalic-tosf-ts1--base.tfm -2023/09/07 | 1464 | fonts/plex/tfm/plxSans-MedmItalic-tlf-ts1--base.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSerif-LightItalic-tosf-ts1--base.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSerif-LightItalic-tlf-ts1--base.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSerif-LightItalic-sup-ot1.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-ts1.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-ts1.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSans-LightItalic-tosf-ts1.tfm -2023/09/07 | 1460 | fonts/plex/tfm/plxSans-LightItalic-tlf-ts1.tfm -2023/09/07 | 146068 | fonts/plex/opentype/IBMPlexSerif-SemiBold.otf -2023/09/07 | 14600 | fonts/plex/tfm/plxSerif-MediumItalic-tosf-ot1.tfm -2023/09/07 | 14600 | fonts/plex/tfm/plxSerif-MediumItalic-tlf-ot1.tfm -2023/09/07 | 145732 | fonts/plex/opentype/IBMPlexSerif-Medium.otf -2023/09/07 | 1456 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-ts1--base.tfm -2023/09/07 | 1456 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-ts1--base.tfm -2023/09/07 | 1456 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-ts1.tfm -2023/09/07 | 1456 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-ts1.tfm -2023/09/07 | 1456 | fonts/plex/tfm/plxMono-BoldItalic-tlf-t1.tfm -2023/09/07 | 1452 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-ts1.tfm -2023/09/07 | 1452 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-ts1.tfm -2023/09/07 | 1452 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-t1.tfm -2023/09/07 | 14524 | fonts/plex/tfm/plxSans-Text-tosf-lgr.tfm -2023/09/07 | 14516 | fonts/plex/tfm/plxSans-Text-tlf-lgr.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSerif-ThinItalic-sup-ot1.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-ts1--base.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-ts1--base.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSans-Italic-tosf-ts1.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSans-Italic-tlf-ts1.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-ts1.tfm -2023/09/07 | 1448 | fonts/plex/tfm/plxSans-BoldItalic-sup-ot1.tfm -2023/09/07 | 14488 | fonts/plex/tfm/plxSans-ExtLt-tosf-lgr.tfm -2023/09/07 | 14484 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tlf-ot1.tfm -2023/09/07 | 14482 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex -2023/09/07 | 14480 | fonts/plex/tfm/plxSerif-SemiBoldItalic-tosf-ot1.tfm -2023/09/07 | 14480 | fonts/plex/tfm/plxSans-ExtLt-tlf-lgr.tfm -2023/09/07 | 144703 | fonts/plex/type1/plxSerif-LightItalic.pfb -2023/09/07 | 144627 | fonts/plex/type1/plxSerif-Italic.pfb -2023/09/07 | 14456 | fonts/plex/tfm/plxSerif-LightItalic-tlf-ot1.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSans-SmBldItalic-sup-ot1.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSans-LightItalic-tosf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSans-LightItalic-tlf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-ts1.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-ts1.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSansCond-Italic-tlf-ts1.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-ts1--base.tfm -2023/09/07 | 1444 | fonts/plex/tfm/plxMono-BoldItalic-tlf-ly1.tfm -2023/09/07 | 14448 | fonts/plex/tfm/plxSerif-LightItalic-tosf-ot1.tfm -2023/09/07 | 144472 | fonts/plex/opentype/IBMPlexSerif-Text.otf -2023/09/07 | 1440 | fonts/plex/tfm/plxSans-TextItalic-tosf-ts1.tfm -2023/09/07 | 1440 | fonts/plex/tfm/plxSans-TextItalic-tlf-ts1.tfm -2023/09/07 | 1440 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-ts1.tfm -2023/09/07 | 1440 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-ts1--base.tfm -2023/09/07 | 1440 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-ly1.tfm -2023/09/07 | 14400 | fonts/plex/tfm/plxSans-BoldItalic-tosf-lgr.tfm -2023/09/07 | 14392 | fonts/plex/tfm/plxSans-BoldItalic-tlf-lgr.tfm -2023/09/07 | 14388 | fonts/plex/tfm/plxSerif-TextItalic-tosf-ot1.tfm -2023/09/07 | 14388 | fonts/plex/tfm/plxSerif-TextItalic-tlf-ot1.tfm -2023/09/07 | 1436 | fonts/plex/tfm/plxSans-Italic-tosf-ts1--base.tfm -2023/09/07 | 1436 | fonts/plex/tfm/plxSans-Italic-tlf-ts1--base.tfm -2023/09/07 | 1436 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-ts1.tfm -2023/09/07 | 1436 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-ts1.tfm -2023/09/07 | 1436 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-ts1.tfm -2023/09/07 | 143492 | fonts/plex/opentype/IBMPlexSans-MediumItalic.otf -2023/09/07 | 14344 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tlf-ot1.tfm -2023/09/07 | 143440 | fonts/plex/opentype/IBMPlexSans-TextItalic.otf -2023/09/07 | 14340 | fonts/plex/tfm/plxSerif-ExtraLightItalic-tosf-ot1.tfm -2023/09/07 | 1432 | fonts/plex/tfm/plxSerif-TextItalic-sup-ot1.tfm -2023/09/07 | 1432 | fonts/plex/tfm/plxSerif-Italic-sup-ot1.tfm -2023/09/07 | 1432 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-ts1--base.tfm -2023/09/07 | 1432 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-ts1--base.tfm -2023/09/07 | 1432 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-ts1--base.tfm -2023/09/07 | 14320 | fonts/plex/tfm/plxSans-Italic-tosf-lgr.tfm -2023/09/07 | 14320 | biblio/citation-style-language/citeproc-node-date.lua -2023/09/07 | 14312 | fonts/plex/tfm/plxSans-Italic-tlf-lgr.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSans-ThinItalic-tosf-ts1.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSans-ThinItalic-tlf-ts1.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSans-TextItalic-tosf-ts1--base.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSans-TextItalic-tlf-ts1--base.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSans-MedmItalic-sup-ot1.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-ts1--base.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-ts1--base.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxSansCond-Italic-tlf-ts1--base.tfm -2023/09/07 | 1428 | fonts/plex/tfm/plxMono-MedmItalic-tlf-ly1.tfm -2023/09/07 | 142661 | fonts/plex/type1/plxSerif-ExtraLightItalic.pfb -2023/09/07 | 14262 | macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex -2023/09/07 | 14262 | macros/latex/contrib/profcollege/latex/PfCCAN.tex -2023/09/07 | 142388 | fonts/plex/opentype/IBMPlexSans-SemiBoldItalic.otf -2023/09/07 | 142344 | fonts/plex/opentype/IBMPlexSerif-Bold.otf -2023/09/07 | 1420 | fonts/plex/tfm/plxSans-ExtLtItalic-sup-ot1.tfm -2023/09/07 | 1420 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-ts1--base.tfm -2023/09/07 | 1420 | fonts/plex/tfm/plxMono-MedmItalic-tlf-t1.tfm -2023/09/07 | 1416 | fonts/plex/tfm/plxSans-LightItalic-sup-ot1.tfm -2023/09/07 | 1416 | fonts/plex/tfm/plxMono-Italic-tlf-t1.tfm -2023/09/07 | 1416 | fonts/plex/tfm/plxMono-Italic-tlf-ly1.tfm -2023/09/07 | 141636 | fonts/plex/opentype/IBMPlexSans-ExtraLightItalic.otf -2023/09/07 | 141532 | fonts/plex/opentype/IBMPlexSerif-ThinItalic.otf -2023/09/07 | 141424 | fonts/plex/opentype/IBMPlexSerif-Light.otf -2023/09/07 | 14131 | macros/latex/contrib/profcollege/latex/PfCDessinerRatio.tex -2023/09/07 | 1412 | fonts/plex/tfm/plxSans-ThinItalic-tosf-ts1--base.tfm -2023/09/07 | 1412 | fonts/plex/tfm/plxSans-ThinItalic-tlf-ts1--base.tfm -2023/09/07 | 1412 | fonts/plex/tfm/plxMono-BoldItalic-sup-t1.tfm -2023/09/07 | 14120 | macros/latex/contrib/profcollege/latex/PfCNonogramme.tex -2023/09/07 | 141088 | fonts/plex/opentype/IBMPlexSans-LightItalic.otf -2023/09/07 | 1408 | fonts/plex/tfm/plxMono-TextItalic-tlf-t1.tfm -2023/09/07 | 1408 | fonts/plex/tfm/plxMono-TextItalic-tlf-ly1.tfm -2023/09/07 | 1408 | fonts/plex/tfm/plxMono-SmBldItalic-sup-t1.tfm -2023/09/07 | 140584 | fonts/plex/opentype/IBMPlexSerif-ExtraLight.otf -2023/09/07 | 1404 | fonts/plex/tfm/plxMono-LightItalic-tlf-t1.tfm -2023/09/07 | 1404 | fonts/plex/tfm/plxMono-BoldItalic-tlf-t1--base.tfm -2023/09/07 | 1404 | fonts/plex/tfm/plxMono-BoldItalic-sup-t1--base.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxSans-Italic-sup-ot1.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxSans-Bold-tosf-ts1.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxSans-Bold-tlf-ts1.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-t1--base.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxMono-SmBldItalic-sup-t1--base.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-t1.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-ly1.tfm -2023/09/07 | 1400 | fonts/plex/tfm/plxMono-BoldItalic-sup-ly1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSans-tosf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSans-tlf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSansCond-SmBld-tlf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxSansCond-Bold-tlf-ts1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxMono-SmBldItalic-sup-ly1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxMono-LightItalic-tlf-ly1.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxMono-BoldItalic-tlf-ly1--base.tfm -2023/09/07 | 1396 | fonts/plex/tfm/plxMono-BoldItalic-sup-ly1--base.tfm -2023/09/07 | 139648 | fonts/plex/opentype/IBMPlexSans-BoldItalic.otf -2023/09/07 | 1392 | fonts/plex/tfm/plxSerif-Thin-tosf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSerif-Thin-tlf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSans-Text-tosf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSans-Text-tlf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSans-SmBld-tosf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSans-SmBld-tlf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSansCond-SmBldItalic-sup-ot1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxSansCond-Medm-tlf-ts1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxMono-ThinItalic-tlf-t1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxMono-ThinItalic-tlf-ly1.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-ly1--base.tfm -2023/09/07 | 1392 | fonts/plex/tfm/plxMono-SmBldItalic-sup-ly1--base.tfm -2023/09/07 | 13929 | graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp -2023/09/07 | 138932 | fonts/plex/opentype/IBMPlexSerif-Regular.otf -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Medium-tosf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Medium-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Light-tosf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Light-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-ts1--base.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-ts1--base.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Bold-tosf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSerif-Bold-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSans-ExtLt-tosf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSans-ExtLt-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSansCond-Text-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSansCond-Light-tlf-ts1.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSans-Bold-tosf-ts1--base.tfm -2023/09/07 | 1388 | fonts/plex/tfm/plxSans-Bold-tlf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSerif-SemiBold-tosf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSerif-SemiBold-tlf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSerif-Regular-tosf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSerif-Regular-tlf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-tosf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-tlf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-ThinItalic-sup-ot1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-SmBld-tosf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-SmBld-tlf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-Medm-tosf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-Medm-tlf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-Light-tosf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSans-Light-tlf-ts1.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSansCond-SmBld-tlf-ts1--base.tfm -2023/09/07 | 1384 | fonts/plex/tfm/plxSansCond-Bold-tlf-ts1--base.tfm -2023/09/07 | 1381 | macros/latex/contrib/curriculum-vitae/curriculum-vitae.cls -2023/09/07 | 138192 | fonts/plex/opentype/IBMPlexSans-Italic.otf -2023/09/07 | 1380 | fonts/plex/tfm/plxSerif-Text-tosf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSerif-Text-tlf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSans-Thin-tosf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSans-Thin-tlf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSans-Text-tosf-ts1--base.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSans-Text-tlf-ts1--base.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSansCond-tlf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-ts1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxSansCond-BoldItalic-sup-ot1.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxMono-MedmItalic-tlf-ly1--base.tfm -2023/09/07 | 1380 | fonts/plex/tfm/plxMono-MedmItalic-sup-ly1.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Thin-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Thin-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Medium-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Medium-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Light-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Light-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Bold-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSerif-Bold-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSans-Medm-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSans-Medm-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSans-Light-tosf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSans-Light-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSansCond-TextItalic-sup-ot1.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSansCond-Medm-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxSansCond-Light-tlf-ts1--base.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxMono-MedmItalic-sup-t1.tfm -2023/09/07 | 1376 | fonts/plex/tfm/plxMono-MedmItalic-sup-ly1--base.tfm -2023/09/07 | 137613 | fonts/plex/type1/plxSerif-ThinItalic.pfb -2023/09/07 | 1372 | fonts/plex/tfm/plxSerif-Text-tosf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSerif-Text-tlf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSerif-SemiBold-tosf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSerif-SemiBold-tlf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSans-ExtLt-tosf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSans-ExtLt-tlf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSansCond-Thin-tlf-ts1.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxSansCond-Text-tlf-ts1--base.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxMono-Italic-sup-t1.tfm -2023/09/07 | 1372 | fonts/plex/tfm/plxMono-Italic-sup-ly1.tfm -2023/09/07 | 13692 | fonts/plex/tfm/plxSans-LightItalic-tosf-ot1.tfm -2023/09/07 | 13692 | fonts/plex/tfm/plxSans-LightItalic-tlf-ot1.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSerif-Regular-tosf-ts1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSerif-Regular-tlf-ts1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSansCond-tlf-ts1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSansCond-MedmItalic-sup-ot1.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSansCond-Italic-sup-ot1.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-ts1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxMono-MedmItalic-tlf-t1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxMono-MedmItalic-sup-t1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxMono-Italic-tlf-ly1--base.tfm -2023/09/07 | 1368 | fonts/plex/tfm/plxMono-Italic-sup-ly1--base.tfm -2023/09/07 | 136745 | fonts/plex/type1/plxSerif-Bold.pfb -2023/09/07 | 1364 | fonts/plex/tfm/plxSans-Thin-tosf-ts1--base.tfm -2023/09/07 | 1364 | fonts/plex/tfm/plxSans-Thin-tlf-ts1--base.tfm -2023/09/07 | 1364 | fonts/plex/tfm/plxMono-TextItalic-sup-t1.tfm -2023/09/07 | 1364 | fonts/plex/tfm/plxMono-TextItalic-sup-ly1.tfm -2023/09/07 | 1364 | fonts/plex/tfm/plxMono-Italic-tlf-t1--base.tfm -2023/09/07 | 1364 | fonts/plex/tfm/plxMono-Italic-sup-t1--base.tfm -2023/09/07 | 13648 | fonts/plex/tfm/plxSerif-Light-tosf-ot1.tfm -2023/09/07 | 13648 | fonts/plex/tfm/plxSerif-Light-tlf-ot1.tfm -2023/09/07 | 13620 | fonts/plex/tfm/plxSans-ExtLtItalic-tlf-ot1.tfm -2023/09/07 | 13616 | fonts/plex/tfm/plxSans-ExtLtItalic-tosf-ot1.tfm -2023/09/07 | 1360 | fonts/plex/tfm/plxSansCond-Thin-tlf-ts1--base.tfm -2023/09/07 | 1360 | fonts/plex/tfm/plxMono-TextItalic-tlf-ly1--base.tfm -2023/09/07 | 1360 | fonts/plex/tfm/plxMono-TextItalic-sup-ly1--base.tfm -2023/09/07 | 1360 | fonts/plex/tfm/plxMono-LightItalic-sup-t1.tfm -2023/09/07 | 13603 | macros/latex/contrib/profcollege/metapost/PfCCalculatrice.mp -2023/09/07 | 13588 | fonts/plex/tfm/plxSerif-ExtraLight-tosf-ot1.tfm -2023/09/07 | 13588 | fonts/plex/tfm/plxSerif-ExtraLight-tlf-ot1.tfm -2023/09/07 | 135795 | fonts/plex/type1/plxSerif-SemiBold.pfb -2023/09/07 | 1356 | fonts/plex/tfm/plxSansCond-ExtLtItalic-sup-ot1.tfm -2023/09/07 | 1356 | fonts/plex/tfm/plxMono-TextItalic-tlf-t1--base.tfm -2023/09/07 | 1356 | fonts/plex/tfm/plxMono-TextItalic-sup-t1--base.tfm -2023/09/07 | 1356 | fonts/plex/tfm/plxMono-ExtLtItalic-sup-t1.tfm -2023/09/07 | 1356 | fonts/plex/tfm/plxMono-ExtLtItalic-sup-ly1.tfm -2023/09/07 | 135408 | fonts/plex/opentype/IBMPlexSans-SemiBold.otf -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-SmBld-tlf-t1.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-Medm-tlf-t1.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-LightItalic-tlf-t1--base.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-LightItalic-sup-t1--base.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-LightItalic-sup-ly1.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-ly1--base.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-ExtLtItalic-sup-ly1--base.tfm -2023/09/07 | 1352 | fonts/plex/tfm/plxMono-Bold-tlf-t1.tfm -2023/09/07 | 135160 | fonts/plex/opentype/IBMPlexSerif-Thin.otf -2023/09/07 | 135008 | fonts/plex/opentype/IBMPlexSans-Medium.otf -2023/09/07 | 1348 | fonts/plex/tfm/plxSansCond-LightItalic-sup-ot1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-tlf-t1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-ThinItalic-sup-t1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-ThinItalic-sup-ly1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-Text-tlf-t1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-Light-tlf-t1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-LightItalic-tlf-ly1--base.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-LightItalic-sup-ly1--base.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-ExtLt-tlf-t1.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-t1--base.tfm -2023/09/07 | 1348 | fonts/plex/tfm/plxMono-ExtLtItalic-sup-t1--base.tfm -2023/09/07 | 13468 | fonts/plex/tfm/plxSerif-BoldItalic-tosf-ot1.tfm -2023/09/07 | 13468 | fonts/plex/tfm/plxSerif-BoldItalic-tlf-ot1.tfm -2023/09/07 | 134614 | fonts/plex/type1/plxSerif-Medium.pfb -2023/09/07 | 13452 | fonts/plex/tfm/plxSerif-Medium-tosf-ot1.tfm -2023/09/07 | 13452 | fonts/plex/tfm/plxSerif-Medium-tlf-ot1.tfm -2023/09/07 | 1344 | fonts/plex/tfm/plxMono-Thin-tlf-t1.tfm -2023/09/07 | 1344 | fonts/plex/tfm/plxMono-ThinItalic-tlf-ly1--base.tfm -2023/09/07 | 1344 | fonts/plex/tfm/plxMono-ThinItalic-sup-ly1--base.tfm -2023/09/07 | 1344 | fonts/plex/tfm/plxMono-Light-tlf-ly1.tfm -2023/09/07 | 1344 | fonts/plex/tfm/plxMono-Bold-tlf-ly1.tfm -2023/09/07 | 13428 | fonts/plex/tfm/plxSerif-SemiBold-tosf-ot1.tfm -2023/09/07 | 13428 | fonts/plex/tfm/plxSerif-SemiBold-tlf-ot1.tfm -2023/09/07 | 134184 | fonts/plex/opentype/IBMPlexSans-ThinItalic.otf -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-tlf-ly1.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-Thin-tlf-ly1.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-ThinItalic-tlf-t1--base.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-ThinItalic-sup-t1--base.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-Text-tlf-ly1.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-SmBld-tlf-ly1.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-Medm-tlf-ly1.tfm -2023/09/07 | 1340 | fonts/plex/tfm/plxMono-ExtLt-tlf-ly1.tfm -2023/09/07 | 13408 | systems/texlive/tlnet/archive/robust-externalize.r68194.tar.xz -2023/09/07 | 1336 | fonts/plex/tfm/plxSansCond-ThinItalic-sup-ot1.tfm -2023/09/07 | 133680 | fonts/plex/opentype/IBMPlexSans-Text.otf -2023/09/07 | 13340 | fonts/plex/tfm/plxSans-ThinItalic-tosf-ot1.tfm -2023/09/07 | 13340 | fonts/plex/tfm/plxSans-ThinItalic-tlf-ot1.tfm -2023/09/07 | 1332 | fonts/plex/tfm/plxSerif-SemiBold-sup-ot1.tfm -2023/09/07 | 13328 | fonts/plex/tfm/plxSerif-Italic-tosf-ot1.tfm -2023/09/07 | 13324 | fonts/plex/tfm/plxSerif-Italic-tlf-ot1.tfm -2023/09/07 | 13320 | fonts/plex/tfm/plxSans-tosf-lgr.tfm -2023/09/07 | 13312 | fonts/plex/tfm/plxSans-tlf-lgr.tfm -2023/09/07 | 133096 | fonts/plex/opentype/IBMPlexSans-Bold.otf -2023/09/07 | 1328 | fonts/plex/tfm/plxSerif-Bold-sup-ot1.tfm -2023/09/07 | 132687 | fonts/plex/type1/plxSerif-Text.pfb -2023/09/07 | 132672 | fonts/plex/opentype/IBMPlexSans-Light.otf -2023/09/07 | 132568 | fonts/plex/opentype/IBMPlexSans-ExtraLight.otf -2023/09/07 | 13252 | fonts/plex/tfm/plxSans-Bold-tosf-lgr.tfm -2023/09/07 | 13244 | fonts/plex/tfm/plxSans-Bold-tlf-lgr.tfm -2023/09/07 | 13212 | fonts/plex/tfm/plxSerif-Text-tosf-ot1.tfm -2023/09/07 | 13212 | fonts/plex/tfm/plxSerif-Text-tlf-ot1.tfm -2023/09/07 | 13184 | fonts/plex/tfm/plxSans-MedmItalic-tosf-ot1.tfm -2023/09/07 | 13184 | fonts/plex/tfm/plxSans-MedmItalic-tlf-ot1.tfm -2023/09/07 | 1316 | fonts/plex/tfm/plxSerif-Text-sup-ot1.tfm -2023/09/07 | 1316 | fonts/plex/tfm/plxSerif-Regular-sup-ot1.tfm -2023/09/07 | 1316 | fonts/plex/tfm/plxSerif-Medium-sup-ot1.tfm -2023/09/07 | 1316 | fonts/plex/tfm/plxSerif-ExtraLight-sup-ot1.tfm -2023/09/07 | 131241 | fonts/plex/type1/plxSerif-Light.pfb -2023/09/07 | 131041 | fonts/plex/type1/plxSerif-Regular.pfb -2023/09/07 | 1309 | graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf -2023/09/07 | 1308 | fonts/plex/tfm/plxSans-Bold-sup-ot1.tfm -2023/09/07 | 1308 | fonts/plex/tfm/plxMono-SmBld-sup-t1.tfm -2023/09/07 | 1308 | fonts/plex/tfm/plxMono-Medm-sup-t1.tfm -2023/09/07 | 1308 | fonts/plex/tfm/plxMono-Bold-sup-t1.tfm -2023/09/07 | 1304 | fonts/plex/tfm/plxMono-Text-sup-t1.tfm -2023/09/07 | 1304 | fonts/plex/tfm/plxMono-sup-t1.tfm -2023/09/07 | 1304 | fonts/plex/tfm/plxMono-Light-sup-t1.tfm -2023/09/07 | 1304 | fonts/plex/tfm/plxMono-ExtLt-sup-t1.tfm -2023/09/07 | 13044 | fonts/plex/tfm/plxSans-SmBldItalic-tosf-ot1.tfm -2023/09/07 | 13040 | fonts/plex/tfm/plxSans-SmBldItalic-tlf-ot1.tfm -2023/09/07 | 13016 | fonts/plex/tfm/plxSans-Thin-tosf-lgr.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxSans-Text-sup-ot1.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxSans-Medm-sup-ot1.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Thin-sup-t1.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-SmBld-tlf-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-SmBld-sup-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Medm-tlf-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Medm-sup-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Light-sup-ly1.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Bold-tlf-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Bold-sup-t1--base.tfm -2023/09/07 | 1300 | fonts/plex/tfm/plxMono-Bold-sup-ly1.tfm -2023/09/07 | 13008 | fonts/plex/tfm/plxSans-Thin-tlf-lgr.tfm -2023/09/07 | 13004 | fonts/plex/tfm/plxSerif-ThinItalic-tlf-ot1.tfm -2023/09/07 | 13000 | fonts/plex/tfm/plxSerif-ThinItalic-tosf-ot1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-tlf-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Thin-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Text-tlf-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Text-sup-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Text-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-sup-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-SmBld-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Medm-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Light-tlf-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Light-tlf-ly1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Light-sup-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Light-sup-ly1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-ExtLt-tlf-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-ExtLt-sup-t1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-ExtLt-sup-ly1.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Bold-tlf-ly1--base.tfm -2023/09/07 | 1296 | fonts/plex/tfm/plxMono-Bold-sup-ly1--base.tfm -2023/09/07 | 12932 | fonts/plex/tfm/plxSans-TextItalic-tlf-ot1.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Thin-tlf-t1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Thin-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Thin-sup-t1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Thin-sup-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Text-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Text-sup-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-sup-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-SmBld-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-SmBld-sup-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Medm-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-Medm-sup-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-ExtLt-tlf-ly1--base.tfm -2023/09/07 | 1292 | fonts/plex/tfm/plxMono-ExtLt-sup-ly1--base.tfm -2023/09/07 | 12928 | fonts/plex/tfm/plxSans-TextItalic-tosf-ot1.tfm -2023/09/07 | 128989 | fonts/plex/type1/plxMono-BoldItalic.pfb -2023/09/07 | 12896 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-ot1.tfm -2023/09/07 | 1288 | fonts/plex/tfm/plxSerif-Thin-sup-ot1.tfm -2023/09/07 | 128888 | fonts/plex/opentype/IBMPlexSans-Regular.otf -2023/09/07 | 1287 | macros/latex/contrib/profcollege/latex/PfCPyraVoca.tex -2023/09/07 | 12878 | biblio/citation-style-language/vancouver.csl -2023/09/07 | 128763 | fonts/plex/type1/plxMono-SmBldItalic.pfb -2023/09/07 | 128704 | fonts/plex/type1/plxSans-BoldItalic.pfb -2023/09/07 | 12860 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-ot1.tfm -2023/09/07 | 128554 | fonts/plex/type1/plxMono-MedmItalic.pfb -2023/09/07 | 128535 | fonts/plex/type1/plxSerif-ExtraLight.pfb -2023/09/07 | 1284 | fonts/plex/tfm/plxSans-SmBld-sup-ot1.tfm -2023/09/07 | 1280 | fonts/plex/tfm/plxSerif-Light-sup-ot1.tfm -2023/09/07 | 1280 | fonts/plex/tfm/plxSans-sup-ot1.tfm -2023/09/07 | 1280 | fonts/plex/tfm/plxSans-Light-sup-ot1.tfm -2023/09/07 | 12789 | biblio/citation-style-language/citeproc-bibtex2csl.lua -2023/09/07 | 1276 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-ts1.tfm -2023/09/07 | 1276 | fonts/plex/tfm/plxMono-BoldItalic-tlf-ts1.tfm -2023/09/07 | 127559 | fonts/plex/type1/plxMono-TextItalic.pfb -2023/09/07 | 12752 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-ot1.tfm -2023/09/07 | 127303 | fonts/plex/type1/plxSans-SmBldItalic.pfb -2023/09/07 | 1272 | fonts/plex/tfm/plxSans-ExtLt-sup-ot1.tfm -2023/09/07 | 127256 | fonts/plex/opentype/IBMPlexSans-Thin.otf -2023/09/07 | 12720 | fonts/plex/tfm/plxSerif-Thin-tosf-ot1.tfm -2023/09/07 | 12720 | fonts/plex/tfm/plxSerif-Thin-tlf-ot1.tfm -2023/09/07 | 127030 | fonts/plex/type1/plxSerif-Thin.pfb -2023/09/07 | 1268 | fonts/plex/tfm/plxSans-Thin-sup-ot1.tfm -2023/09/07 | 12676 | fonts/plex/tfm/plxSerif-Bold-tosf-ot1.tfm -2023/09/07 | 12676 | fonts/plex/tfm/plxSerif-Bold-tlf-ot1.tfm -2023/09/07 | 1260 | fonts/plex/tfm/plxMono-MedmItalic-tlf-ts1.tfm -2023/09/07 | 1260 | fonts/plex/tfm/plxMono-Italic-tlf-ts1.tfm -2023/09/07 | 125894 | fonts/plex/type1/plxSans-MedmItalic.pfb -2023/09/07 | 125709 | fonts/plex/type1/plxMono-Italic.pfb -2023/09/07 | 1256 | fonts/plex/tfm/plxMono-TextItalic-tlf-ts1.tfm -2023/09/07 | 1256 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-ts1.tfm -2023/09/07 | 1252 | fonts/plex/tfm/plxMono-ThinItalic-tlf-ts1.tfm -2023/09/07 | 1252 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-ts1--base.tfm -2023/09/07 | 1252 | fonts/plex/tfm/plxMono-BoldItalic-tlf-ts1--base.tfm -2023/09/07 | 125239 | fonts/plex/type1/plxSans-TextItalic.pfb -2023/09/07 | 12504 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-ot1.tfm -2023/09/07 | 1248 | fonts/plex/tfm/plxSansCond-SmBld-sup-ot1.tfm -2023/09/07 | 1248 | fonts/plex/tfm/plxSansCond-Medm-sup-ot1.tfm -2023/09/07 | 1248 | fonts/plex/tfm/plxMono-LightItalic-tlf-ts1.tfm -2023/09/07 | 1246 | biblio/citation-style-language/citeproc-node-group.lua -2023/09/07 | 124643 | fonts/plex/type1/plxSans-Italic.pfb -2023/09/07 | 12456 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-ot1.tfm -2023/09/07 | 12444 | fonts/plex/tfm/plxSansCond-Italic-tlf-ot1.tfm -2023/09/07 | 123709 | fonts/plex/type1/plxMono-LightItalic.pfb -2023/09/07 | 1236 | fonts/plex/tfm/plxSansCond-Text-sup-ot1.tfm -2023/09/07 | 1236 | fonts/plex/tfm/plxSansCond-ExtLt-sup-ot1.tfm -2023/09/07 | 1236 | fonts/plex/tfm/plxMono-MedmItalic-tlf-ts1--base.tfm -2023/09/07 | 1236 | fonts/plex/tfm/plxMono-Italic-tlf-ts1--base.tfm -2023/09/07 | 12356 | fonts/plex/tfm/plxSerif-Regular-tosf-ot1.tfm -2023/09/07 | 12356 | fonts/plex/tfm/plxSerif-Regular-tlf-ot1.tfm -2023/09/07 | 123554 | fonts/plex/type1/plxSans-LightItalic.pfb -2023/09/07 | 123439 | fonts/plex/type1/plxMono-ExtLtItalic.pfb -2023/09/07 | 1232 | fonts/plex/tfm/plxMono-TextItalic-tlf-ts1--base.tfm -2023/09/07 | 1232 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-ts1--base.tfm -2023/09/07 | 1228 | fonts/plex/tfm/plxMono-ThinItalic-tlf-ts1--base.tfm -2023/09/07 | 1228 | fonts/plex/tfm/plxMono-Light-tlf-ts1.tfm -2023/09/07 | 122552 | fonts/plex/type1/plxMono-ThinItalic.pfb -2023/09/07 | 1224 | fonts/plex/tfm/plxSansCond-Thin-sup-ot1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-tlf-ts1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-Thin-tlf-ts1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-Text-tlf-ts1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-SmBld-tlf-ts1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-Medm-tlf-ts1.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-LightItalic-tlf-ts1--base.tfm -2023/09/07 | 1224 | fonts/plex/tfm/plxMono-ExtLt-tlf-ts1.tfm -2023/09/07 | 122461 | fonts/plex/type1/plxSans-ExtLtItalic.pfb -2023/09/07 | 12216 | fonts/plex/tfm/plxSans-BoldItalic-tosf-ot1.tfm -2023/09/07 | 12216 | fonts/plex/tfm/plxSans-BoldItalic-tlf-ot1.tfm -2023/09/07 | 12212 | fonts/plex/tfm/plxSans-Light-tosf-ot1.tfm -2023/09/07 | 12212 | fonts/plex/tfm/plxSans-Light-tlf-ot1.tfm -2023/09/07 | 1220 | fonts/plex/tfm/plxMono-Bold-tlf-ts1.tfm -2023/09/07 | 1216 | fonts/plex/tfm/plxSansCond-sup-ot1.tfm -2023/09/07 | 12156 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-ot1.tfm -2023/09/07 | 121493 | fonts/plex/type1/plxSans-Bold.pfb -2023/09/07 | 1208 | fonts/plex/tfm/plxSansCond-Bold-sup-ot1.tfm -2023/09/07 | 120809 | fonts/plex/type1/plxSans-SmBld.pfb -2023/09/07 | 12069 | macros/latex/contrib/profcollege/latex/PfCCalculsCroises.tex -2023/09/07 | 12065 | macros/latex/contrib/profcollege/latex/PfCNumberHive.tex -2023/09/07 | 1204 | fonts/plex/tfm/plxSansCond-Light-sup-ot1.tfm -2023/09/07 | 1204 | fonts/plex/tfm/plxMono-Light-tlf-ts1--base.tfm -2023/09/07 | 120487 | fonts/plex/type1/plxMono-Bold.pfb -2023/09/07 | 12024 | macros/luatex/latex/odsfile/pokus.ods -2023/09/07 | 120116 | fonts/plex/type1/plxSans-ThinItalic.pfb -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-tlf-ts1--base.tfm -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-Thin-tlf-ts1--base.tfm -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-Text-tlf-ts1--base.tfm -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-SmBld-tlf-ts1--base.tfm -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-Medm-tlf-ts1--base.tfm -2023/09/07 | 1200 | fonts/plex/tfm/plxMono-ExtLt-tlf-ts1--base.tfm -2023/09/07 | 1196 | fonts/plex/tfm/plxMono-Bold-tlf-ts1--base.tfm -2023/09/07 | 119440 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf -2023/09/07 | 119093 | fonts/plex/type1/plxMono-SmBld.pfb -2023/09/07 | 119049 | fonts/plex/type1/plxSans-Medm.pfb -2023/09/07 | 118870 | fonts/plex/type1/plxMono-Medm.pfb -2023/09/07 | 11864 | fonts/plex/tfm/plxSans-ExtLt-tosf-ot1.tfm -2023/09/07 | 11864 | fonts/plex/tfm/plxSans-ExtLt-tlf-ot1.tfm -2023/09/07 | 11780 | fonts/plex/tfm/plxSans-Italic-tlf-ot1.tfm -2023/09/07 | 11776 | fonts/plex/tfm/plxSans-Italic-tosf-ot1.tfm -2023/09/07 | 11740 | macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex -2023/09/07 | 1168 | fonts/plex/tfm/plxSansCond-MedmItalic-tlf-lgr.tfm -2023/09/07 | 1168 | fonts/plex/tfm/plxSansCond-ExtLtItalic-tlf-lgr.tfm -2023/09/07 | 116756 | macros/luatex/latex/odsfile.zip -2023/09/07 | 1164 | fonts/plex/tfm/plxSansCond-TextItalic-tlf-lgr.tfm -2023/09/07 | 1164 | fonts/plex/tfm/plxSansCond-SmBldItalic-tlf-lgr.tfm -2023/09/07 | 1164 | fonts/plex/tfm/plxSansCond-LightItalic-tlf-lgr.tfm -2023/09/07 | 11636 | macros/latex/contrib/profcollege/latex/PfCDefiTables.tex -2023/09/07 | 11594 | biblio/citation-style-language/modern-language-association.csl -2023/09/07 | 11588 | fonts/plex/tfm/plxSans-Medm-tosf-ot1.tfm -2023/09/07 | 11584 | fonts/plex/tfm/plxSans-Medm-tlf-ot1.tfm -2023/09/07 | 1156 | fonts/plex/tfm/plxSansCond-Italic-tlf-lgr.tfm -2023/09/07 | 115632 | fonts/plex/type1/plxMono-Text.pfb -2023/09/07 | 115529 | fonts/plex/type1/plxSans-Text.pfb -2023/09/07 | 1152 | fonts/plex/tfm/plxSansCond-ThinItalic-tlf-lgr.tfm -2023/09/07 | 11519 | biblio/citation-style-language/citeproc-node-bibliography.lua -2023/09/07 | 114872 | fonts/plex/type1/plxMono.pfb -2023/09/07 | 11420 | fonts/plex/tfm/plxSans-SmBld-tosf-ot1.tfm -2023/09/07 | 11420 | fonts/plex/tfm/plxSans-SmBld-tlf-ot1.tfm -2023/09/07 | 11418 | biblio/citation-style-language/american-sociological-association.csl -2023/09/07 | 113796 | fonts/plex/type1/plxSans.pfb -2023/09/07 | 11332 | fonts/plex/tfm/plxSans-Text-tosf-ot1.tfm -2023/09/07 | 11332 | fonts/plex/tfm/plxSans-Text-tlf-ot1.tfm -2023/09/07 | 11255 | macros/latex/contrib/profcollege/latex/PfCCompteBon.tex -2023/09/07 | 11248 | fonts/plex/tfm/plxSansCond-Medm-tlf-ot1.tfm -2023/09/07 | 112038 | fonts/plex/type1/plxMono-Light.pfb -2023/09/07 | 111989 | fonts/plex/type1/plxMono-Thin.pfb -2023/09/07 | 111946 | fonts/plex/type1/plxSans-Light.pfb -2023/09/07 | 11168 | fonts/plex/tfm/plxSansCond-Text-tlf-ot1.tfm -2023/09/07 | 11156 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-ot1.tfm -2023/09/07 | 111472 | fonts/plex/type1/plxSans-ExtLt.pfb -2023/09/07 | 1112 | fonts/plex/tfm/plxSansCond-BoldItalic-tlf-lgr.tfm -2023/09/07 | 110932 | fonts/plex/type1/plxMono-ExtLt.pfb -2023/09/07 | 11060 | fonts/plex/tfm/plxSans-Thin-tosf-ot1.tfm -2023/09/07 | 11060 | fonts/plex/tfm/plxSans-Thin-tlf-ot1.tfm -2023/09/07 | 11052 | fonts/plex/tfm/plxSansCond-tlf-ot1.tfm -2023/09/07 | 11046 | macros/latex/contrib/profcollege/latex/PfCAutomatismes.tex -2023/09/07 | 110346 | fonts/plex/type1/plxSans-Thin.pfb -2023/09/07 | 11033 | biblio/citation-style-language/american-medical-association.csl -2023/09/07 | 11026 | macros/latex/contrib/profcollege/latex/PfCProprietesDroites.tex -2023/09/07 | 10988 | fonts/plex/tfm/plxSans-Bold-tosf-ot1.tfm -2023/09/07 | 10988 | fonts/plex/tfm/plxSans-Bold-tlf-ot1.tfm -2023/09/07 | 10951 | macros/latex/contrib/profcollege/latex/PfCAutonomie.tex -2023/09/07 | 109388 | macros/latex/contrib/profcollege/metapost/PfCScratchpdf.mp -2023/09/07 | 1092 | fonts/plex/tfm/plxSansCond-Text-tlf-lgr.tfm -2023/09/07 | 1092 | fonts/plex/tfm/plxSansCond-SmBld-tlf-lgr.tfm -2023/09/07 | 1092 | fonts/plex/tfm/plxSansCond-Medm-tlf-lgr.tfm -2023/09/07 | 10924 | fonts/plex/tfm/plxSans-tosf-ot1.tfm -2023/09/07 | 10924 | fonts/plex/tfm/plxSans-tlf-ot1.tfm -2023/09/07 | 10832 | fonts/plex/tfm/plxSansCond-Light-tlf-ot1.tfm -2023/09/07 | 1080 | fonts/plex/tfm/plxSansCond-Light-tlf-lgr.tfm -2023/09/07 | 1080 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-lgr.tfm -2023/09/07 | 107783 | macros/latex/contrib/profcollege/metapost/PfCScratch.mp -2023/09/07 | 10723 | biblio/citation-style-language/harvard-cite-them-right.csl -2023/09/07 | 1068 | fonts/plex/tfm/plxSansCond-Thin-tlf-lgr.tfm -2023/09/07 | 10633 | macros/latex/contrib/profcollege/latex/PfCEnigmeAire.tex -2023/09/07 | 10624 | fonts/plex/tfm/plxSansCond-SmBld-tlf-ot1.tfm -2023/09/07 | 1060 | fonts/plex/tfm/plxMono-SmBldItalic-tlf-ot1.tfm -2023/09/07 | 10588 | biblio/citation-style-language/american-chemical-society.csl -2023/09/07 | 1056 | fonts/plex/tfm/plxSansCond-tlf-lgr.tfm -2023/09/07 | 1056 | fonts/plex/tfm/plxSansCond-Bold-tlf-lgr.tfm -2023/09/07 | 10548 | macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex -2023/09/07 | 1052 | fonts/plex/tfm/plxMono-BoldItalic-tlf-ot1.tfm -2023/09/07 | 10528 | fonts/plex/tfm/plxSansCond-ExtLt-tlf-ot1.tfm -2023/09/07 | 1048 | fonts/plex/tfm/plxMono-MedmItalic-tlf-ot1.tfm -2023/09/07 | 1048 | fonts/plex/tfm/plxMono-Italic-tlf-ot1.tfm -2023/09/07 | 1039 | macros/latex/contrib/marginnote/LICENSE.md -2023/09/07 | 1036 | fonts/plex/tfm/plxMono-TextItalic-tlf-ot1.tfm -2023/09/07 | 1032 | fonts/plex/tfm/plxMono-LightItalic-tlf-ot1.tfm -2023/09/07 | 103100 | macros/latex/contrib/curriculum-vitae/curriculum-vitae-example.pdf -2023/09/07 | 1028 | fonts/plex/tfm/plxMono-SmBldItalic-sup-ot1.tfm -2023/09/07 | 1024 | fonts/plex/tfm/plxMono-ExtLtItalic-tlf-ot1.tfm -2023/09/07 | 1020 | fonts/plex/tfm/plxMono-ThinItalic-tlf-ot1.tfm -2023/09/07 | 1020 | fonts/plex/tfm/plxMono-BoldItalic-sup-ot1.tfm -2023/09/07 | 10200 | macros/latex/contrib/profcollege/latex/PfCCibleQOp.tex -2023/09/07 | 1016 | fonts/plex/tfm/plxMono-Italic-sup-ot1.tfm -2023/09/07 | 10168 | macros/latex/contrib/profcollege/latex/PfCPapiers.tex -2023/09/07 | 1012 | fonts/plex/tfm/plxMono-MedmItalic-sup-ot1.tfm -2023/09/07 | 10129 | macros/latex/contrib/profcollege/latex/PfCCartographie.tex -2023/09/07 | 1004 | fonts/plex/tfm/plxMono-TextItalic-sup-ot1.tfm -2023/09/07 | 10044 | fonts/plex/tfm/plxSansCond-Thin-tlf-ot1.tfm -2023/09/07 | 1000 | fonts/plex/tfm/plxMono-LightItalic-sup-ot1.tfm diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib index f0d979e3bd..6f3bed7ca2 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 14-09-2023, 02:05:48 +%% created at 15-09-2023, 02:00:13 %% %% This file is provided under the terms of the LPPL v1.3 or @@ -26724,7 +26724,7 @@ title = {The \texttt{fontools} package}, subtitle = {Tools to simplify using fonts (especially TT/OTF ones)}, author = {Marc Penninga}, - date = {2023-02-01}, + date = {2023-09-14}, version = {}, license = {gpl2}, mirror = {https://mirror.ctan.org/fonts/utilities/fontools}, @@ -37650,8 +37650,8 @@ title = {The \texttt{latex-lab-dev} package}, subtitle = {\LaTeX{} laboratory: Development pre-release}, author = {{The \LaTeX{} Project Team}}, - date = {2023-06-11}, - version = {2023-11-01 pre-release 0}, + date = {2023-09-14}, + version = {2023-11-01 pre-release 1}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex-dev/required/latex-lab}, url = {https://ctan.org/pkg/latex-lab-dev}, @@ -51288,8 +51288,8 @@ title = {The \texttt{parsimatn} package}, subtitle = {Contemporary Persian font for scientific and formal writings}, author = {Sajad Kazemi}, - date = {2023-09-13}, - version = {1.0}, + date = {2023-09-14}, + version = {1.1}, license = {ofl}, mirror = {https://mirror.ctan.org/fonts/parsimatn}, url = {https://ctan.org/pkg/parsimatn}, @@ -78816,8 +78816,8 @@ title = {The \texttt{zref} package}, subtitle = {A new reference scheme for \LaTeX{}}, author = {Heiko Oberdiek}, - date = {2022-04-07}, - version = {2.34}, + date = {2023-09-14}, + version = {2.35}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/zref}, url = {https://ctan.org/pkg/zref}, diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf index 8377584364..ef3ea05e26 100644 Binary files a/biblio/ctan-bibdata/ctan.pdf and b/biblio/ctan-bibdata/ctan.pdf differ diff --git a/fonts/parsimatn/ParsiMatn-Bold.ttf b/fonts/parsimatn/ParsiMatn-Bold.ttf index 1777321fc0..55fb1f25fe 100644 Binary files a/fonts/parsimatn/ParsiMatn-Bold.ttf and b/fonts/parsimatn/ParsiMatn-Bold.ttf differ diff --git a/fonts/parsimatn/ParsiMatn-BoldItalic.ttf b/fonts/parsimatn/ParsiMatn-BoldItalic.ttf index 59ad1e020b..9ed5942f1d 100644 Binary files a/fonts/parsimatn/ParsiMatn-BoldItalic.ttf and b/fonts/parsimatn/ParsiMatn-BoldItalic.ttf differ diff --git a/fonts/parsimatn/ParsiMatn-Italic.ttf b/fonts/parsimatn/ParsiMatn-Italic.ttf index 5411308567..ace384f02f 100644 Binary files a/fonts/parsimatn/ParsiMatn-Italic.ttf and b/fonts/parsimatn/ParsiMatn-Italic.ttf differ diff --git a/fonts/parsimatn/ParsiMatn-Regular.ttf b/fonts/parsimatn/ParsiMatn-Regular.ttf index e1246b4528..9e63bd6e21 100644 Binary files a/fonts/parsimatn/ParsiMatn-Regular.ttf and b/fonts/parsimatn/ParsiMatn-Regular.ttf differ diff --git a/fonts/parsimatn/README.md b/fonts/parsimatn/README.md index b87789f6a7..6f70ae8ba7 100644 --- a/fonts/parsimatn/README.md +++ b/fonts/parsimatn/README.md @@ -1,5 +1,5 @@ # parsimatn -v 1.0 -- September 13, 2023 +v 1.1 -- September 14, 2023 ======================= diff --git a/fonts/parsimatn/parsimatn-example-of-use.pdf b/fonts/parsimatn/parsimatn-example-of-use.pdf index b9e1913a85..a6d2fbebe6 100644 Binary files a/fonts/parsimatn/parsimatn-example-of-use.pdf and b/fonts/parsimatn/parsimatn-example-of-use.pdf differ diff --git a/fonts/parsimatn/parsimatn-example-of-use.tex b/fonts/parsimatn/parsimatn-example-of-use.tex index 3a9b6bcc3b..8649ee0e8e 100644 --- a/fonts/parsimatn/parsimatn-example-of-use.tex +++ b/fonts/parsimatn/parsimatn-example-of-use.tex @@ -24,9 +24,9 @@ \author{ساده، کارا، آشنا، زیبا} \date{% -گونۀ 0.1 +گونۀ 1.1 \quad - \quad \today \\ -\lr{Version 1.0 \quad - \quad \latintoday} +\lr{Version 1.1 \quad - \quad \latintoday} } \usepackage{ptext} diff --git a/fonts/utilities/fontools/bin/afm2afm b/fonts/utilities/fontools/bin/afm2afm index 37ddbb679a..164ac90cc3 100755 --- a/fonts/utilities/fontools/bin/afm2afm +++ b/fonts/utilities/fontools/bin/afm2afm @@ -37,7 +37,7 @@ use File::Basename; use Getopt::Long; use Pod::Usage; -my $VERSION = "20230201"; +my $VERSION = "20230914"; parse_commandline(); @@ -421,7 +421,7 @@ See the GNU General Public License for more details. =head1 VERSION -This document describes B version 20230201. +This document describes B version 20230914. =head1 RECENT CHANGES diff --git a/fonts/utilities/fontools/bin/autoinst b/fonts/utilities/fontools/bin/autoinst index 5f3a71c1df..6c6f01169f 100755 --- a/fonts/utilities/fontools/bin/autoinst +++ b/fonts/utilities/fontools/bin/autoinst @@ -41,7 +41,7 @@ use Getopt::Long (); use Pod::Usage (); use POSIX (); -my $VERSION = '20230201'; +my $VERSION = '20230914'; my ($d, $m, $y) = (localtime time)[3 .. 5]; my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d; @@ -658,12 +658,20 @@ END_ERR_METADATA_MISSING $data->{subfamily} =~ s/\A (?: ST | T | SD | D)//xms; } + # move Adobe's optical size from family to subfamily + for my $optical (qw(Caption SmText SmallText Subhead Display)) { + if ($data->{family} =~ s/$optical\z//xms) { + $data->{subfamily} .= $optical; + last; + } + } + # Sometimes the relevant info is in Fullname, sometimes in Subfamily; # so we need to test against both my $fullinfo = lc "$data->{subfamily} | $data->{fullname}"; # remove Adobe's SmallText size, to avoid mistaking it for Text weight - $fullinfo =~ s/(?: SmallText | SmText )\z//xmsi; + $fullinfo =~ s/(?: SmallText | SmText )//gxmsi; # We need to be careful when parsing the font info; in particular # we must parse strings like 'UltraCondensed' as 'Regular' weight @@ -940,6 +948,27 @@ sub _parse_sizedata { && $minsize == 8.9 && $maxsize == 13.9) { ($minsize, $maxsize) = (23, 72); } + elsif ($self->{family} eq 'SourceSerifFour' + && $minsize == 0 && $maxsize == 0) { + if ($self->{subfamily} eq 'Caption') { + ($minsize, $maxsize) = (0, 6); + } + elsif ($self->{subfamily} eq 'SmText') { + ($minsize, $maxsize) = (6, 9); + } + elsif ($self->{subfamily} eq '') { + ($minsize, $maxsize) = (9, 13); + } + elsif ($self->{subfamily} eq 'Subhead') { + ($minsize, $maxsize) = (13, 24); + } + elsif ($self->{subfamily} eq 'Display') { + ($minsize, $maxsize) = (24, 72); + } + else { + die "[ERROR] Unknown subfamily '$self->{subfamily}' in $self->{filename}"; + } + } @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize); @@ -1573,47 +1602,89 @@ END_STYLE_REST \\re\@DeclareMathAccent{\\ddot} {\\mathalpha}{newoperators}{"7F} \\if$fam\@mathgreek - \\re\@DeclareMathSymbol{\\Gamma} {\\mathalpha}{newoperators}{"00} - \\re\@DeclareMathSymbol{\\Delta} {\\mathalpha}{newoperators}{"01} - \\re\@DeclareMathSymbol{\\Theta} {\\mathalpha}{newoperators}{"02} - \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newoperators}{"03} - \\re\@DeclareMathSymbol{\\Xi} {\\mathalpha}{newoperators}{"04} - \\re\@DeclareMathSymbol{\\Pi} {\\mathalpha}{newoperators}{"05} - \\re\@DeclareMathSymbol{\\Sigma} {\\mathalpha}{newoperators}{"06} - \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newoperators}{"07} - \\re\@DeclareMathSymbol{\\Phi} {\\mathalpha}{newoperators}{"08} - \\re\@DeclareMathSymbol{\\Psi} {\\mathalpha}{newoperators}{"09} - \\re\@DeclareMathSymbol{\\Omega} {\\mathalpha}{newoperators}{"0A} - - \\re\@DeclareMathSymbol{\\alpha} {\\mathord}{newletters}{"0B} - \\re\@DeclareMathSymbol{\\beta} {\\mathord}{newletters}{"0C} - \\re\@DeclareMathSymbol{\\gamma} {\\mathord}{newletters}{"0D} - \\re\@DeclareMathSymbol{\\delta} {\\mathord}{newletters}{"0E} - \\re\@DeclareMathSymbol{\\epsilon} {\\mathord}{newletters}{"0F} - \\re\@DeclareMathSymbol{\\zeta} {\\mathord}{newletters}{"10} - \\re\@DeclareMathSymbol{\\eta} {\\mathord}{newletters}{"11} - \\re\@DeclareMathSymbol{\\theta} {\\mathord}{newletters}{"12} - \\re\@DeclareMathSymbol{\\iota} {\\mathord}{newletters}{"13} - \\re\@DeclareMathSymbol{\\kappa} {\\mathord}{newletters}{"14} - \\re\@DeclareMathSymbol{\\lambda} {\\mathord}{newletters}{"15} - \\re\@DeclareMathSymbol{\\mu} {\\mathord}{newletters}{"16} - \\re\@DeclareMathSymbol{\\nu} {\\mathord}{newletters}{"17} - \\re\@DeclareMathSymbol{\\xi} {\\mathord}{newletters}{"18} - \\re\@DeclareMathSymbol{\\pi} {\\mathord}{newletters}{"19} - \\re\@DeclareMathSymbol{\\rho} {\\mathord}{newletters}{"1A} - \\re\@DeclareMathSymbol{\\sigma} {\\mathord}{newletters}{"1B} - \\re\@DeclareMathSymbol{\\tau} {\\mathord}{newletters}{"1C} - \\re\@DeclareMathSymbol{\\upsilon} {\\mathord}{newletters}{"1D} - \\re\@DeclareMathSymbol{\\phi} {\\mathord}{newletters}{"1E} - \\re\@DeclareMathSymbol{\\chi} {\\mathord}{newletters}{"1F} - \\re\@DeclareMathSymbol{\\psi} {\\mathord}{newletters}{"20} - \\re\@DeclareMathSymbol{\\omega} {\\mathord}{newletters}{"21} - \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{newletters}{"22} - \\re\@DeclareMathSymbol{\\vartheta} {\\mathord}{newletters}{"23} - \\re\@DeclareMathSymbol{\\varpi} {\\mathord}{newletters}{"24} - \\re\@DeclareMathSymbol{\\varrho} {\\mathord}{newletters}{"25} - \\re\@DeclareMathSymbol{\\varsigma} {\\mathord}{newletters}{"26} - \\re\@DeclareMathSymbol{\\varphi} {\\mathord}{newletters}{"27} + \\re\@DeclareMathSymbol{\\Gamma} {\\mathalpha}{newoperators}{"00} + \\re\@DeclareMathSymbol{\\Delta} {\\mathalpha}{newoperators}{"01} + \\re\@DeclareMathSymbol{\\Theta} {\\mathalpha}{newoperators}{"02} + \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newoperators}{"03} + \\re\@DeclareMathSymbol{\\Xi} {\\mathalpha}{newoperators}{"04} + \\re\@DeclareMathSymbol{\\Pi} {\\mathalpha}{newoperators}{"05} + \\re\@DeclareMathSymbol{\\Sigma} {\\mathalpha}{newoperators}{"06} + \\re\@DeclareMathSymbol{\\Upsilon} {\\mathalpha}{newoperators}{"07} + \\re\@DeclareMathSymbol{\\Phi} {\\mathalpha}{newoperators}{"08} + \\re\@DeclareMathSymbol{\\Psi} {\\mathalpha}{newoperators}{"09} + \\re\@DeclareMathSymbol{\\Omega} {\\mathalpha}{newoperators}{"0A} + + \\re\@DeclareMathSymbol{\\upGamma} {\\mathalpha}{newoperators}{"00} + \\re\@DeclareMathSymbol{\\upDelta} {\\mathalpha}{newoperators}{"01} + \\re\@DeclareMathSymbol{\\upTheta} {\\mathalpha}{newoperators}{"02} + \\re\@DeclareMathSymbol{\\upLambda} {\\mathalpha}{newoperators}{"03} + \\re\@DeclareMathSymbol{\\upXi} {\\mathalpha}{newoperators}{"04} + \\re\@DeclareMathSymbol{\\upPi} {\\mathalpha}{newoperators}{"05} + \\re\@DeclareMathSymbol{\\upSigma} {\\mathalpha}{newoperators}{"06} + \\re\@DeclareMathSymbol{\\upUpsilon}{\\mathalpha}{newoperators}{"07} + \\re\@DeclareMathSymbol{\\upPhi} {\\mathalpha}{newoperators}{"08} + \\re\@DeclareMathSymbol{\\upPsi} {\\mathalpha}{newoperators}{"09} + \\re\@DeclareMathSymbol{\\upOmega} {\\mathalpha}{newoperators}{"0A} + + \\re\@DeclareMathSymbol{\\alpha} {\\mathord}{newletters}{"0B} + \\re\@DeclareMathSymbol{\\beta} {\\mathord}{newletters}{"0C} + \\re\@DeclareMathSymbol{\\gamma} {\\mathord}{newletters}{"0D} + \\re\@DeclareMathSymbol{\\delta} {\\mathord}{newletters}{"0E} + \\re\@DeclareMathSymbol{\\epsilon} {\\mathord}{newletters}{"0F} + \\re\@DeclareMathSymbol{\\zeta} {\\mathord}{newletters}{"10} + \\re\@DeclareMathSymbol{\\eta} {\\mathord}{newletters}{"11} + \\re\@DeclareMathSymbol{\\theta} {\\mathord}{newletters}{"12} + \\re\@DeclareMathSymbol{\\iota} {\\mathord}{newletters}{"13} + \\re\@DeclareMathSymbol{\\kappa} {\\mathord}{newletters}{"14} + \\re\@DeclareMathSymbol{\\lambda} {\\mathord}{newletters}{"15} + \\re\@DeclareMathSymbol{\\mu} {\\mathord}{newletters}{"16} + \\re\@DeclareMathSymbol{\\nu} {\\mathord}{newletters}{"17} + \\re\@DeclareMathSymbol{\\xi} {\\mathord}{newletters}{"18} + \\re\@DeclareMathSymbol{\\pi} {\\mathord}{newletters}{"19} + \\re\@DeclareMathSymbol{\\rho} {\\mathord}{newletters}{"1A} + \\re\@DeclareMathSymbol{\\sigma} {\\mathord}{newletters}{"1B} + \\re\@DeclareMathSymbol{\\tau} {\\mathord}{newletters}{"1C} + \\re\@DeclareMathSymbol{\\upsilon} {\\mathord}{newletters}{"1D} + \\re\@DeclareMathSymbol{\\phi} {\\mathord}{newletters}{"1E} + \\re\@DeclareMathSymbol{\\chi} {\\mathord}{newletters}{"1F} + \\re\@DeclareMathSymbol{\\psi} {\\mathord}{newletters}{"20} + \\re\@DeclareMathSymbol{\\omega} {\\mathord}{newletters}{"21} + \\re\@DeclareMathSymbol{\\varepsilon} {\\mathord}{newletters}{"22} + \\re\@DeclareMathSymbol{\\vartheta} {\\mathord}{newletters}{"23} + \\re\@DeclareMathSymbol{\\varpi} {\\mathord}{newletters}{"24} + \\re\@DeclareMathSymbol{\\varrho} {\\mathord}{newletters}{"25} + \\re\@DeclareMathSymbol{\\varsigma} {\\mathord}{newletters}{"26} + \\re\@DeclareMathSymbol{\\varphi} {\\mathord}{newletters}{"27} + + \\re\@DeclareMathSymbol{\\italpha} {\\mathord}{newletters}{"0B} + \\re\@DeclareMathSymbol{\\itbeta} {\\mathord}{newletters}{"0C} + \\re\@DeclareMathSymbol{\\itgamma} {\\mathord}{newletters}{"0D} + \\re\@DeclareMathSymbol{\\itdelta} {\\mathord}{newletters}{"0E} + \\re\@DeclareMathSymbol{\\itepsilon} {\\mathord}{newletters}{"0F} + \\re\@DeclareMathSymbol{\\itzeta} {\\mathord}{newletters}{"10} + \\re\@DeclareMathSymbol{\\iteta} {\\mathord}{newletters}{"11} + \\re\@DeclareMathSymbol{\\ittheta} {\\mathord}{newletters}{"12} + \\re\@DeclareMathSymbol{\\itiota} {\\mathord}{newletters}{"13} + \\re\@DeclareMathSymbol{\\itkappa} {\\mathord}{newletters}{"14} + \\re\@DeclareMathSymbol{\\itlambda} {\\mathord}{newletters}{"15} + \\re\@DeclareMathSymbol{\\itmu} {\\mathord}{newletters}{"16} + \\re\@DeclareMathSymbol{\\itnu} {\\mathord}{newletters}{"17} + \\re\@DeclareMathSymbol{\\itxi} {\\mathord}{newletters}{"18} + \\re\@DeclareMathSymbol{\\itpi} {\\mathord}{newletters}{"19} + \\re\@DeclareMathSymbol{\\itrho} {\\mathord}{newletters}{"1A} + \\re\@DeclareMathSymbol{\\itsigma} {\\mathord}{newletters}{"1B} + \\re\@DeclareMathSymbol{\\ittau} {\\mathord}{newletters}{"1C} + \\re\@DeclareMathSymbol{\\itupsilon} {\\mathord}{newletters}{"1D} + \\re\@DeclareMathSymbol{\\itphi} {\\mathord}{newletters}{"1E} + \\re\@DeclareMathSymbol{\\itchi} {\\mathord}{newletters}{"1F} + \\re\@DeclareMathSymbol{\\itpsi} {\\mathord}{newletters}{"20} + \\re\@DeclareMathSymbol{\\itomega} {\\mathord}{newletters}{"21} + \\re\@DeclareMathSymbol{\\itvarepsilon}{\\mathord}{newletters}{"22} + \\re\@DeclareMathSymbol{\\itvartheta} {\\mathord}{newletters}{"23} + \\re\@DeclareMathSymbol{\\itvarpi} {\\mathord}{newletters}{"24} + \\re\@DeclareMathSymbol{\\itvarrho} {\\mathord}{newletters}{"25} + \\re\@DeclareMathSymbol{\\itvarsigma} {\\mathord}{newletters}{"26} + \\re\@DeclareMathSymbol{\\itvarphi} {\\mathord}{newletters}{"27} \\fi \\if$fam\@mathLATINup @@ -1695,11 +1766,21 @@ END_STYLE_REST \\re\@DeclareMathSymbol{\\Psi} {\\mathalpha}{newletters}{"09} \\re\@DeclareMathSymbol{\\Omega} {\\mathalpha}{newletters}{"0A} \\fi + \\re\@DeclareMathSymbol{\\itGamma} {\\mathalpha}{newletters}{"00} + \\re\@DeclareMathSymbol{\\itDelta} {\\mathalpha}{newletters}{"01} + \\re\@DeclareMathSymbol{\\itTheta} {\\mathalpha}{newletters}{"02} + \\re\@DeclareMathSymbol{\\itLambda} {\\mathalpha}{newletters}{"03} + \\re\@DeclareMathSymbol{\\itXi} {\\mathalpha}{newletters}{"04} + \\re\@DeclareMathSymbol{\\itPi} {\\mathalpha}{newletters}{"05} + \\re\@DeclareMathSymbol{\\itSigma} {\\mathalpha}{newletters}{"06} + \\re\@DeclareMathSymbol{\\itUpsilon}{\\mathalpha}{newletters}{"07} + \\re\@DeclareMathSymbol{\\itPhi} {\\mathalpha}{newletters}{"08} + \\re\@DeclareMathSymbol{\\itPsi} {\\mathalpha}{newletters}{"09} + \\re\@DeclareMathSymbol{\\itOmega} {\\mathalpha}{newletters}{"0A} + \\DeclareSymbolFont{upletters} {OML}{$fam-\\$fam\@mathfigurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n} + \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@mathfigurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n} \\if$fam\@mathgreekup - \\DeclareSymbolFont{upletters} {OML}{$fam-\\$fam\@mathfigurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n} - \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@mathfigurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n} - \\re\@DeclareMathSymbol{\\alpha} {\\mathord}{upletters}{"0B} \\re\@DeclareMathSymbol{\\beta} {\\mathord}{upletters}{"0C} \\re\@DeclareMathSymbol{\\gamma} {\\mathord}{upletters}{"0D} @@ -1730,6 +1811,35 @@ END_STYLE_REST \\re\@DeclareMathSymbol{\\varsigma} {\\mathord}{upletters}{"26} \\re\@DeclareMathSymbol{\\varphi} {\\mathord}{upletters}{"27} \\fi + \\re\@DeclareMathSymbol{\\upalpha} {\\mathord}{upletters}{"0B} + \\re\@DeclareMathSymbol{\\upbeta} {\\mathord}{upletters}{"0C} + \\re\@DeclareMathSymbol{\\upgamma} {\\mathord}{upletters}{"0D} + \\re\@DeclareMathSymbol{\\updelta} {\\mathord}{upletters}{"0E} + \\re\@DeclareMathSymbol{\\upepsilon} {\\mathord}{upletters}{"0F} + \\re\@DeclareMathSymbol{\\upzeta} {\\mathord}{upletters}{"10} + \\re\@DeclareMathSymbol{\\upeta} {\\mathord}{upletters}{"11} + \\re\@DeclareMathSymbol{\\uptheta} {\\mathord}{upletters}{"12} + \\re\@DeclareMathSymbol{\\upiota} {\\mathord}{upletters}{"13} + \\re\@DeclareMathSymbol{\\upkappa} {\\mathord}{upletters}{"14} + \\re\@DeclareMathSymbol{\\uplambda} {\\mathord}{upletters}{"15} + \\re\@DeclareMathSymbol{\\upmu} {\\mathord}{upletters}{"16} + \\re\@DeclareMathSymbol{\\upnu} {\\mathord}{upletters}{"17} + \\re\@DeclareMathSymbol{\\upxi} {\\mathord}{upletters}{"18} + \\re\@DeclareMathSymbol{\\uppi} {\\mathord}{upletters}{"19} + \\re\@DeclareMathSymbol{\\uprho} {\\mathord}{upletters}{"1A} + \\re\@DeclareMathSymbol{\\upsigma} {\\mathord}{upletters}{"1B} + \\re\@DeclareMathSymbol{\\uptau} {\\mathord}{upletters}{"1C} + \\re\@DeclareMathSymbol{\\upupsilon} {\\mathord}{upletters}{"1D} + \\re\@DeclareMathSymbol{\\upphi} {\\mathord}{upletters}{"1E} + \\re\@DeclareMathSymbol{\\upchi} {\\mathord}{upletters}{"1F} + \\re\@DeclareMathSymbol{\\uppsi} {\\mathord}{upletters}{"20} + \\re\@DeclareMathSymbol{\\upomega} {\\mathord}{upletters}{"21} + \\re\@DeclareMathSymbol{\\upvarepsilon}{\\mathord}{upletters}{"22} + \\re\@DeclareMathSymbol{\\upvartheta} {\\mathord}{upletters}{"23} + \\re\@DeclareMathSymbol{\\upvarpi} {\\mathord}{upletters}{"24} + \\re\@DeclareMathSymbol{\\upvarrho} {\\mathord}{upletters}{"25} + \\re\@DeclareMathSymbol{\\upvarsigma} {\\mathord}{upletters}{"26} + \\re\@DeclareMathSymbol{\\upvarphi} {\\mathord}{upletters}{"27} \\fi \\fi @@ -3637,8 +3747,8 @@ The defaults are "mathlining" and "mathtabular". =item C Use the swash characters from these fonts as the C<\mathcal> alphabet. -(This option will only exist if your fonts actually contain swash characters, -plus a C feature to access them). +(This option will only exist if your fonts actually contain +both swash characters and a C feature to access them). =item C @@ -3654,6 +3764,10 @@ and with C all letters are upright. =back +The style file also defines commands C<\up...> and C<\it...> to access upright +and italic greek characters regardless of the chosen math style: +C<\upGamma>, C<\upalpha>, C<\itDelta>, C<\itbeta> etc. + Note that this C option only affects digits, latin and greek letters, plus a few basic punctuation characters; all other mathematical symbols, operators, delimiters etc. are left as they were before. @@ -3667,7 +3781,7 @@ it just assumes that they do and sets up the style file accordingly. Even if your fonts do contain greek, characters such as C<\varepsilon> may be missing. You may also find that some glyphs I present in your fonts, -but don't work well in equations or don't match with other symbols; +but don't work well in equations or don't match other symbols; edit the generated style file to remove the declarations of these offending characters. Once again: test the results before using them! @@ -4184,7 +4298,7 @@ GNU General Public License for more details. =head1 VERSION -This document describes B version 20230201. +This document describes B version 20230914. =head1 RECENT CHANGES @@ -4193,6 +4307,14 @@ This document describes B version 20230201. =over 12 +=item I<2023-09-14> + +Added the C<\up...> and C<\it...> commands to the style file. + +=item I<2023-06-28> + +Adapted font metadata parsing for Adobe Source Serif 4. + =item I<2023-02-01> Added support for the T4, T5, CS, L7X and QX encodings. diff --git a/fonts/utilities/fontools/bin/ot2kpx b/fonts/utilities/fontools/bin/ot2kpx index 04c9f8d47e..9e6dd5c2e3 100755 --- a/fonts/utilities/fontools/bin/ot2kpx +++ b/fonts/utilities/fontools/bin/ot2kpx @@ -38,7 +38,7 @@ use Getopt::Long (); use List::Util @List::Util::EXPORT_OK; use Pod::Usage; -my $VERSION = "20230201"; +my $VERSION = "20230914"; our ($NUM_GLYPHS, $UNITS_PER_EM, %kern); @@ -858,7 +858,7 @@ See the GNU General Public License for more details. =head1 VERSION -This document describes B version 20230201. +This document describes B version 20230914. =head1 RECENT CHANGES diff --git a/fonts/utilities/fontools/bin/splitttc b/fonts/utilities/fontools/bin/splitttc index fdf359a1e5..cda3c652e7 100755 --- a/fonts/utilities/fontools/bin/splitttc +++ b/fonts/utilities/fontools/bin/splitttc @@ -38,7 +38,7 @@ use File::Basename; use Getopt::Long; use Pod::Usage; -my $VERSION = "20230201"; +my $VERSION = "20230914"; parse_commandline(); @@ -303,7 +303,7 @@ See the GNU General Public License for more details. =head1 VERSION -This document describes B version 20230201. +This document describes B version 20230914. =head1 RECENT CHANGES diff --git a/fonts/utilities/fontools/doc/afm2afm.pdf b/fonts/utilities/fontools/doc/afm2afm.pdf index 2bd3fca2f8..c36e715ddd 100644 Binary files a/fonts/utilities/fontools/doc/afm2afm.pdf and b/fonts/utilities/fontools/doc/afm2afm.pdf differ diff --git a/fonts/utilities/fontools/doc/autoinst.pdf b/fonts/utilities/fontools/doc/autoinst.pdf index 949f4eac26..40aa389b37 100644 Binary files a/fonts/utilities/fontools/doc/autoinst.pdf and b/fonts/utilities/fontools/doc/autoinst.pdf differ diff --git a/fonts/utilities/fontools/doc/ot2kpx.pdf b/fonts/utilities/fontools/doc/ot2kpx.pdf index 7d2f0a7020..73376de546 100644 Binary files a/fonts/utilities/fontools/doc/ot2kpx.pdf and b/fonts/utilities/fontools/doc/ot2kpx.pdf differ diff --git a/fonts/utilities/fontools/doc/splitttc.pdf b/fonts/utilities/fontools/doc/splitttc.pdf index f46df562e3..858891d99e 100644 Binary files a/fonts/utilities/fontools/doc/splitttc.pdf and b/fonts/utilities/fontools/doc/splitttc.pdf differ diff --git a/macros/latex-dev/required/latex-lab/README.md b/macros/latex-dev/required/latex-lab/README.md index 3f9efe728c..2b86c4d5ee 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-11-01 pre-release 0 +Release 2023-11-01 pre-release 1 ## Overview diff --git a/macros/latex-dev/required/latex-lab/blocks-code.pdf b/macros/latex-dev/required/latex-lab/blocks-code.pdf index f01d17db22..7b3c18298f 100644 Binary files a/macros/latex-dev/required/latex-lab/blocks-code.pdf and b/macros/latex-dev/required/latex-lab/blocks-code.pdf differ diff --git a/macros/latex-dev/required/latex-lab/blocks-code.tex b/macros/latex-dev/required/latex-lab/blocks-code.tex index f71342d6f5..00bc2fa328 100644 --- a/macros/latex-dev/required/latex-lab/blocks-code.tex +++ b/macros/latex-dev/required/latex-lab/blocks-code.tex @@ -1,4 +1,4 @@ % this will typeset documentation + code \AtBeginDocument{\AlsoImplementation} -\input{latex-lab-block-tagging.dtx} +\input{latex-lab-block.dtx} diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.pdf b/macros/latex-dev/required/latex-lab/blocks-doc.pdf index 416406acde..4e0408b361 100644 Binary files a/macros/latex-dev/required/latex-lab/blocks-doc.pdf and b/macros/latex-dev/required/latex-lab/blocks-doc.pdf differ diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.tex b/macros/latex-dev/required/latex-lab/blocks-doc.tex index 39a93479a1..28008be6c0 100644 --- a/macros/latex-dev/required/latex-lab/blocks-doc.tex +++ b/macros/latex-dev/required/latex-lab/blocks-doc.tex @@ -1,4 +1,4 @@ % this will typeset documentation + code \AtBeginDocument{\OnlyDescription} -\input{latex-lab-block-tagging.dtx} +\input{latex-lab-block.dtx} diff --git a/macros/latex-dev/required/latex-lab/changes.txt b/macros/latex-dev/required/latex-lab/changes.txt index 7e76d74996..e447d8130a 100644 --- a/macros/latex-dev/required/latex-lab/changes.txt +++ b/macros/latex-dev/required/latex-lab/changes.txt @@ -1,14 +1,50 @@ +2023-09-04 Ulrike Fischer + * latex-lab-math.dtx: fix below display skip, tagging issue #11 + * latex-lab-math.dtx: allow to use it without tagging. + * latex-lab-math.dtx: avoid tagging as math if fakemath is detected, tagging issue #5. + +2023-09-04 Ulrike Fischer + * label-lab-new-or-1.dtx latex-lab-new-or-2.dtx + fix position of kernel hook in \@makecol (tagpdf issue #58) + +2023-09-04 Ulrike Fischer + * documentmetadata-support.dtx: add debug key to load tagpdf-debug. + * new latex-lab-namespace.dtx with role mappings + +2023-09-01 Frank Mittelbach + + * latex-lab-block.dtx: + end environment \par handling needs to be specified for all display blocks + because the standalone receipt should not influence inner environments + and vice versa (bug reported in tagging-project/9) + +2023-07-21 Ulrike Fischer + * rename latex-lab-toc-tagging.dtx to latex-lab-toc.dtx + * clean up versions and package declarations + * remove firstaid for ltugboat, this is now handled by the class + * do not load glyphtounicode with dvilualatex + +2023-07-19 Ulrike Fischer + * really rename sec-tagging to sec + * really rename toc-tagging to toc + * rename block-tagging to block + * rename mathtagging to math + * document testphase key sec, toc, math, graphic, block + +2023-06-21 Ulrike Fischer + * latex-lab-sec.dtx: redefine \part only if it defined (letter.cls ...) + * latex-lab-block-tagging: add definition for verse + 2023-06-07 Ulrike Fischer - * latex-lab-block-tagging.dtx corrected tagging of caption - * new latex-lab-firstaid.dtx with adaptions to external packages - * latex-lab-float.dtx: declare variable - * latex-lab-toc-hyperref-changes: use hooks with arguments - * latex-lab-toc-kernel-changes: use hooks with arguments - * latex-lab-sec.dtx: provide \pdfgentounicode with lualatex - + * latex-lab-block-tagging.dtx corrected tagging of caption + * new latex-lab-firstaid.dtx with adaptions to external packages + * latex-lab-float.dtx: declare variable + * latex-lab-toc-hyperref-changes: use hooks with arguments + * latex-lab-toc-kernel-changes: use hooks with arguments + * latex-lab-sec.dtx: provide \pdfgentounicode with lualatex + 2023-05-20 Ulrike Fischer - * renamed latex-lab-sec-tagging -> latex-lab-sec for consistency - + * renamed latex-lab-sec-tagging -> latex-lab-sec for consistency 2023-05-19 Ulrike Fischer * new latex-lab-bib.dtx: @@ -18,10 +54,10 @@ 2023-05-18 Ulrike Fischer * new latex-lab-floats.dtx: tagging support for float environments - * new latex-lab-graphic.dtx - tagging support for includegraphics and picture environment - * new latex-lab-minipage.dtx - tagging support for minipage and parbox + * new latex-lab-graphic.dtx + tagging support for includegraphics and picture environment + * new latex-lab-minipage.dtx + tagging support for minipage and parbox 2023-05-16 Frank Mittelbach 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 863d390fc4..ed38483aec 100644 Binary files a/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf and b/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf 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 b6ebb2888a..d05aca93d9 100644 Binary files a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf and b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf differ diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx index 0dccdd87cb..b37ae6c9d7 100644 --- a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx +++ b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx @@ -18,8 +18,8 @@ % for those people who are interested or want to report an issue. % % \begin{macrocode} -\def\documentmetadatasupportversion{1.0d} -\def\documentmetadatasupportdate{2023-06-07} +\def\documentmetadatasupportversion{1.0f} +\def\documentmetadatasupportdate{2023-09-01} % \end{macrocode} % % @@ -139,7 +139,7 @@ % |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} +% 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 @@ -151,9 +151,13 @@ % \item[\texttt{colorprofiles}] This allows to load icc-colorprofiles. Details % are described in the documentation of \pkg{l3pdfmeta}. % -% \item[\texttt{testphase}] This key is used to load testphase code. The values it accepts -% and their effect will change over time, when testphase packages are added or -% removed or when the code is moved into the kernel. +% \item[\texttt{testphase}] This key is used to load testphase code. +% The |testphase| key can only be used in the first \cs{DocumentMetadata}. +% The values it accepts and their effect will change over time, when testphase packages are added or +% removed or when the code is moved into the kernel. The key accepts a list of values +% and it can be used more than once. +% +% The \texttt{phase} key bundle testphase modules. They also all activate tagging. % \begin{description} % \item[\texttt{phase-I}] % This value loads code implementing the first phase of the project~\cite{blueprint}, i.e., it @@ -172,7 +176,13 @@ % table of contents and similar lists, graphics, minipages and floats. % As it redefines many internals it is currently restricted to the use of % standard classes (article, report, and book) -% and it supports only a limited number of add-on packages. +% and it supports only a limited number of add-on packages. +% \end{description} +% +% The various testphase modules can also be loaded individually (and least in theory, +% there can be hidden dependencies). If loaded like this, the tagpdf package is not +% loaded and tagging is not activated! The list of modules will change over time. +% \begin{description} % \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 @@ -183,8 +193,32 @@ % \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. +% \item[\texttt{sec}] This adapts commands related to sectioning to make them tagging aware. +% The \texttt{sec} module is loaded by \texttt{phase-III}. +% \item[\texttt{toc}] This adapts commands related to the table of contents and +% similar list to make them tagging aware. The \texttt{toc} module is loaded by \texttt{phase-III}. +% \item[\texttt{graphic}] This enables tagging support for +% the \cs{includegraphics} command and the \texttt{picture} environment. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{block}] This reimplements lists and blocks environments and +% add tagging support. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{minipage}] This adds tagging support to \texttt{minipage} +% and \cs{parbox}. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{float}] This adds tagging support to floats. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{bib}] This adds tagging support to citations and bibliographies. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{text}] This module adds tagging support to the \LaTeX{} logo and +% to the \cs{emph} command. +% This code is also loaded by the \texttt{phase-III} key. +% \item[\texttt{math}] This adapts math for tagging. This is only a prototype. +% The module is currently not loaded by any \texttt{phase} key. +% \item[\texttt{firstaid}] This contains small adjustments to external packages. +% The module is currently not loaded by any \texttt{phase} key. % \end{description} -% The |testphase| key can only be used in the first \cs{DocumentMetadata}. +% % % \item[\texttt{debug}] This key activates some debug options. It takes a list of key-values % as value. Currently the following keys are known: @@ -200,7 +234,10 @@ % \item[\texttt{xmp-export}] This will export the XMP-metadata to a file \verb+\jobname.xmpi+. % with \texttt{debug=\{xmp-export=filename\}} the file name can be changed. % More information can be found in the documentation of \pkg{l3pdfmeta} of the \pkg{pdfmanagement-testphase} -% bundle. +% bundle. +% \item[\texttt{tagpdf}] This loads the package tagpdf-debug which enhances +% various commands from tagpdf with additional debugging options. This can slow down +% the compilation! % \end{description} % \end{description} % @@ -426,6 +463,16 @@ \tagpdfsetup{log=#1} } } + ,debug / tagpdf .code:n = + { + \AddToHook + { + package/tagpdf/after + } + { + \RequirePackage{tagpdf-debug} + } + } ,debug / uncompress .code:n = { \pdf_uncompress: diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf index ee73972e15..d47e09867f 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx index 9a5ee81720..a467bf3158 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabbibdate{2023-07-20} +\def\ltlabbibversion{0.81a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -31,7 +33,7 @@ % Changes and additions to the kernel related to tagging and links in citations and % bibliography entries} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{Version 0.81 2023-06-07} +% \date{v\ltlabbibversion\ \ltlabbibdate} % % \maketitle % @@ -129,12 +131,12 @@ %<@@=tag> % \end{macrocode} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-bib} {2023-05-18} {0.8} +\ProvidesExplPackage {latex-lab-testphase-bib} {\ltlabbibdate} {\ltlabbibversion} {Code related to the tagging of bibliography and cite command} % \end{macrocode} % We need at least the block tagging code. % \begin{macrocode} -\RequirePackage{latex-lab-testphase-block-tagging} +\RequirePackage{latex-lab-testphase-block} % \end{macrocode} % % At first we suppress the patches from hyperref. This will only work with the next @@ -398,7 +400,8 @@ % \begin{macrocode} %<*latex-lab> \ProvidesFile{bib-latex-lab-testphase.ltx} - [2023-05-18 v0.8 code related to the tagging of bib and citations] + [\ltlabbibdate\space v\ltlabbibversion\space + latex-lab wrapper bib] \RequirePackage{latex-lab-testphase-bib} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf index 0de6ad02a6..153923a871 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf 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 deleted file mode 100644 index 63145d929e..0000000000 --- a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.dtx +++ /dev/null @@ -1,4055 +0,0 @@ -% \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} -% -% -% \fi -% - -\def\ltblocksversion{v0.8d} -\def\ltblocksdate{2023/06/07} - -% -% \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} -% \end{macrocode} -% This is the part of the code where \env{verbatim} -% and\env{verbatim*} differ. -% \begin{macrocode} - \@setupverbinvisiblespace\frenchspacing\@vobeyspaces - \@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} -% -% This code resembles the \LaTeXe{} verbatim implementation with a -% slight twist: in \LaTeXe{} each code line was a paragraph using -% \cs{leftskip}=\cs{@totalleftmargin}. This was possible because -% the whole environment was implemented as a trivlist. As this is -% no longer the case setting \cs{leftskip} would alter the layout -% of a surrounding list. So instead we need to make sure that the -% paragraph end is executed in a group so that any parshape setup -% is preserved. -% \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} -} -%<@@=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 used a list with a -% single item. Using lists was convenient back then, but in a tagged -% document you end up with a strange structure. We therefore alter the -% mechanism. -% -% -% \begin{macro}{\newtheorem} -% This is a slightly streamlined version of \cs{newtheorem}, but it -% still uses a lot of the 2e code for now. Eventually this will change. -% \begin{macrocode} -\RenewDocumentCommand \newtheorem { m O{#1} m o } -{ - \expandafter\@ifdefinable\csname #1\endcsname - { - \str_if_eq:nnTF{#1}{#2} - { - \@definecounter {#2} - \IfNoValueTF {#4} - { % @ynthm - \tl_gset:cx { the #2 } - { - \@thmcounter{#2} - } - } - { % @xnthm - \@newctr{#1}[#4] - \tl_gset:cx { the #2 } - { - \expandafter\noexpand\csname the#4\endcsname - \@thmcountersep - \@thmcounter{#2} - } - } - } - { % @othm - \@ifundefined{c@#2} - { \@nocounterr{#2} } - { - \tl_gset:cn { the #1 } - { \UseName { the #2 } } - } - } - \global\@namedef{#1} { \@thm{#2}{#3} } - \global\@namedef{end#1}{ \@endtheorem } - } -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@begintheorem,\@opargbegintheorem} -% -% The \cs{@thm} command expands to either \cs{@beginthorem} or -% \cs{@opargbegintheorem}. For the moment we stick with this as it -% will help with the transion. But instead of using a -% \env{trivlist} we use a blockenv and some tagging for the title -% (as a Caption). -% We do not want potential tagging from \cs{textbf} here, -% so we use \cs{bfseries} to set the font. -% \begin{macrocode} -\def\@begintheorem#1#2{ - \UseInstance{blockenv}{theorem}{} - \tagpdfparaOff - \mode_leave_vertical: - \tag_struct_begin:n{tag=Caption} - \group_begin: - \bfseries - \tag_mc_begin:n {} - #1\ - \tag_mc_end: - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n {} - #2 - \tag_mc_end: - \tag_struct_end: - \group_end: - \tag_struct_end: - \tagpdfparaOn -% \end{macrocode} -% -% \begin{macrocode} - \@@_start_para_structure_unconditionally:n { \PARALABEL } -% \end{macrocode} -% -% \begin{macrocode} - \itshape - \hskip\labelsep - \ignorespaces -} -\def\@opargbegintheorem#1#2#3{ - \UseInstance{blockenv}{theorem}{} - \tagpdfparaOff - \mode_leave_vertical: - \tag_struct_begin:n{tag=Caption} - \group_begin: - \bfseries - \tag_mc_begin:n {} - #1\ - \tag_mc_end: - \tag_struct_begin:n{tag=Lbl} - \tag_mc_begin:n {} - #2 - \tag_mc_end: - \tag_struct_end: - \tag_mc_begin:n {} - \ (#3) - \tag_mc_end: - \group_end: - \tag_struct_end: - \tagpdfparaOn -% \end{macrocode} -% -% \begin{macrocode} - \@@_start_para_structure_unconditionally:n { \PARALABEL } -% \end{macrocode} -% -% \begin{macrocode} - \itshape - \hskip\labelsep - \ignorespaces -} -% \end{macrocode} -% -% \begin{macrocode} -\def\@endtheorem{\endblockenv} -% \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} - \bool_if:NTF \l_@@_standalone_bool -% \end{macrocode} -% It is possible that \texttt{@endpe} is true because a -% displayblock has just ended before we end the standalone -% displayblock and in that casevthere is no outer -% \struct{text-unit} so we have to explicitly set \texttt{@endpe} -% back to false to prevent it from closing a structure later that -% isn't there. -% \begin{macrocode} - { \legacy_if_gset_false:n { @endpe } } - { \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} -% -% -% -% \begin{macro}{\l_@@_standalone_bool} -% -% \begin{macrocode} -\bool_new:N \l_@@_standalone_bool -\bool_set_false:N \l_@@_standalone_bool -% \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==, a \verb=
= 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==. -% \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_standalone:} -% -% The \texttt{standalone} recipe produces a block that ensures that -% a previous \texttt{text-unit} ends and that after the block a new -% \texttt{text-unit} starts. -% \begin{macrocode} -\cs_new:Npn \@@_recipe_standalone: { - \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w - \prg_do_nothing: - \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode: - \prg_do_nothing: - \cs_set_eq:NN \__kernel_displayblock_begin: \@@_inner_begin: - \cs_set_eq:NN \__kernel_displayblock_end: \@@_inner_end: -% \end{macrocode} -% -% \begin{macrocode} - \bool_set_true:N \l_@@_standalone_bool -% \end{macrocode} -% -% \begin{macrocode} - \tl_if_empty:NTF \l_@@_tag_name_tl - { \tl_set:Nn \l_@@_tag_inner_tag_tl {Sect} } - { \tl_set_eq:NN \l_@@_tag_inner_tag_tl \l_@@_tag_name_tl } -} -% \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} -% - -% -% \begin{macrocode} -\DeclareInstance{blockenv}{theorem}{display} -{ - env-name = theorem-like, - tag-name = theorem-like, - tag-class = , - tagging-recipe = standalone, - inner-level-counter = , - level-increase = false, - setup-code = , - block-instance = displayblock , -% inner-instance-type = innerblock , -% inner-instance = theorem, -} -% \end{macrocode} -% -% We use \struct{theorem-like} as the structure name and rollmap it -% to a \struct{Sect} because that can hold a \struct{Caption}. -% \begin{macrocode} -\tag_if_active:T { - \tagpdfsetup{add-new-tag={tag=theorem-like,role=Sect}} -} -% \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 = verbatimblock , - 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{Verbatim instances} -% -% Verbatim instances have there own levels so that one can specify -% specific indentations or vertical separations between line. -% -% \begin{instance}{block verbatimblock-0, -% block verbatimblock-1, -% block verbatimblock-2, -% block verbatimblock-3, -% block verbatimblock-4, -% block verbatimblock-5, -% block verbatimblock-6 } -% -% \begin{macrocode} -\DeclareInstance{block}{verbatimblock-0}{display} - { - leftmargin = 0pt , - parindent = 0pt , - par-skip = 0pt , - } -% \end{macrocode} -% -% \begin{macrocode} -\DeclareInstanceCopy{block}{verbatimblock-1}{verbatimblock-0} -\DeclareInstanceCopy{block}{verbatimblock-2}{verbatimblock-0} -\DeclareInstanceCopy{block}{verbatimblock-3}{verbatimblock-0} -\DeclareInstanceCopy{block}{verbatimblock-4}{verbatimblock-0} -\DeclareInstanceCopy{block}{verbatimblock-5}{verbatimblock-0} -\DeclareInstanceCopy{block}{verbatimblock-6}{verbatimblock-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} - { - \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~ displayblock \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. -% -% We do this in a separate command, because it is needed elsewhere too. -% \begin{macrocode} - \@@_start_para_structure:n { \PARALABEL } - } - } -} -% \end{macrocode} -% -% -% \begin{macro}{\@@_start_para_structure:n} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_start_para_structure:n #1 { - \@@_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}{#1} - \tag_mc_begin:n {} -} -% \end{macrocode} -% The same code, but without testing \texttt{@endpe}. This is not -% needed in the standalong e case and wrong inside lists. -% \begin{macrocode} -\cs_new_protected:Npn \@@_start_para_structure_unconditionally:n #1 { - \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}{#1} - \tag_mc_begin:n {} -} -% \end{macrocode} -% \end{macro} -% -% -% -% \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 - { - \@@_start_para_structure_unconditionally:n { LI- } - } -} -% \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} -% -% \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} -% -% \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 deleted file mode 100644 index 8c88ff980a..0000000000 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-block-tagging.pdf and /dev/null differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block.dtx b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx new file mode 100644 index 0000000000..3bd06b72c8 --- /dev/null +++ b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx @@ -0,0 +1,4101 @@ +% \iffalse meta-comment +% +%% File: latex-lab-block.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 +% +\def\ltlabblockdate{2023-09-01} +\def\ltlabblockversion{0.8h} +%<*driver> +\documentclass{l3doc} +\usepackage{amstext} +\EnableCrossrefs +\CodelineIndex + +\usepackage{todonotes} + +\begin{document} + \DocInput{latex-lab-block.dtx} +\end{document} +% +% +% \fi +% +% \providecommand\hook[1]{\texttt{#1\DescribeHook[noprint]{#1}}} +% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}} +% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}} +% +% \NewDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl} +% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl} +% \NewDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl} +% +% +% \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{v\ltlabblockversion\ \ltlabblockdate} +% +% \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}{Object 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{standalone}] +% This recipe does the following: +% \begin{itemize} +% \item +% Ensure that the \xt{blockenv} is not inside a \struct{text-unit} +% structure. If necessary, close the open one (and any open +% \struct{text} structure). +% +% \item +% Text inside the body of the environment start with +% \struct{text-unit}\struct{text} unless the key +% \key{para-flattened} is set to \texttt{true} +% (which is most likely the wrong thing to do because we then get just +% \struct{text} as the structure). +% +% \item +% At the end of the environment close \struct{/text} and possibly an +% inner \struct{/text-unit} if open. +% +% \item +% Finally, ensure that after the environment a new +% \struct{text-unit} is started, if appropriate, e.g., if text is following. +% \end{itemize} +% +% \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 start 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} + [\ltlabblockdate\space v\ltlabblockversion\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} +% +% +% \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} +% \end{macrocode} +% This is the part of the code where \env{verbatim} +% and\env{verbatim*} differ. +% \begin{macrocode} + \@setupverbinvisiblespace\frenchspacing\@vobeyspaces + \@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} +% +% This code resembles the \LaTeXe{} verbatim implementation with a +% slight twist: in \LaTeXe{} each code line was a paragraph using +% \cs{leftskip}=\cs{@totalleftmargin}. This was possible because +% the whole environment was implemented as a trivlist. As this is +% no longer the case setting \cs{leftskip} would alter the layout +% of a surrounding list. So instead we need to make sure that the +% paragraph end is executed in a group so that any parshape setup +% is preserved. +% \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} +} +%<@@=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} +% +% +% \subsubsection{verse environment} +% +% \begin{environment}{verse} +% The verse environment has not special tagging currently. It is +% defined as a simple standard list and takes the tagging from there. +% But it must be redefined so that \cs{itemindent} is correctly set. +% \begin{macrocode} +\AddToHook{begindocument/before}{ + \RenewDocumentEnvironment{verse}{ !O{} } + { + \let\\\@centercr + \UseInstance{blockenv}{list} + { + item-indent=-1.5em, + parindent=-1.5em, + item-skip=0pt, + rightmargin=\leftmargin, + leftmargin=\leftmargin+1.5em, + #1 + } + \item\relax + } + { \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} +% +% \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 used a list with a +% single item. Using lists was convenient back then, but in a tagged +% document you end up with a strange structure. We therefore alter the +% mechanism. +% +% +% \begin{macro}{\newtheorem} +% This is a slightly streamlined version of \cs{newtheorem}, but it +% still uses a lot of the 2e code for now. Eventually this will change. +% \begin{macrocode} +\RenewDocumentCommand \newtheorem { m O{#1} m o } +{ + \expandafter\@ifdefinable\csname #1\endcsname + { + \str_if_eq:nnTF{#1}{#2} + { + \@definecounter {#2} + \IfNoValueTF {#4} + { % @ynthm + \tl_gset:cx { the #2 } + { + \@thmcounter{#2} + } + } + { % @xnthm + \@newctr{#1}[#4] + \tl_gset:cx { the #2 } + { + \expandafter\noexpand\csname the#4\endcsname + \@thmcountersep + \@thmcounter{#2} + } + } + } + { % @othm + \@ifundefined{c@#2} + { \@nocounterr{#2} } + { + \tl_gset:cn { the #1 } + { \UseName { the #2 } } + } + } + \global\@namedef{#1} { \@thm{#2}{#3} } + \global\@namedef{end#1}{ \@endtheorem } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@thm} +% \cs{@thm} executes \cs{refstepcounter} too early for hyperref +% and structure destinations: the generated target is outside the structure +% and can be separated from the theorem by a page break. We therefore move +% the anchor setting into \cs{@begintheorem}. \cs{@begintheorem} doesn't +% currently get the name of the counter as argument, so we store it in variable +% for now, to be able to pass it along. +% \begin{macrocode} +\tl_new:N \l_@@_thm_current_counter_tl +\def\@thm#1#2{% + \@kernel@refstepcounter{#1} + \tl_set:Nn \l_@@_thm_current_counter_tl{#1} + \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}} +% \end{macrocode} +% To avoid that hyperref overwrites the definition again we must its patch: +% \begin{macrocode} +\def\hyper@nopatch@thm{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@begintheorem,\@opargbegintheorem} +% +% The \cs{@thm} command expands to either \cs{@beginthorem} or +% \cs{@opargbegintheorem}. For the moment we stick with this as it +% will help with the transition. But instead of using a +% \env{trivlist} we use a blockenv and some tagging for the title +% (as a Caption). +% We do not want potential tagging from \cs{textbf} here, +% so we use \cs{bfseries} to set the font. The commands set also the link targets +% which should be inside the main structure. +% \begin{macrocode} +\def\@begintheorem#1#2{ + \UseInstance{blockenv}{theorem}{} + \tagpdfparaOff + \mode_leave_vertical: + \MakeLinkTarget{\l_@@_thm_current_counter_tl} + \tag_struct_begin:n{tag=Caption} + \group_begin: + \bfseries + \tag_mc_begin:n {} + #1\ + \tag_mc_end: + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n {} + #2 + \tag_mc_end: + \tag_struct_end: + \group_end: + \tag_struct_end: + \tagpdfparaOn +% \end{macrocode} +% +% \begin{macrocode} + \@@_start_para_structure_unconditionally:n { \PARALABEL } +% \end{macrocode} +% +% \begin{macrocode} + \itshape + \hskip\labelsep + \ignorespaces +} +\def\@opargbegintheorem#1#2#3{ + \UseInstance{blockenv}{theorem}{} + \tagpdfparaOff + \mode_leave_vertical: + \MakeLinkTarget{\l_@@_thm_current_counter_tl} + \tag_struct_begin:n{tag=Caption} + \group_begin: + \bfseries + \tag_mc_begin:n {} + #1\ + \tag_mc_end: + \tag_struct_begin:n{tag=Lbl} + \tag_mc_begin:n {} + #2 + \tag_mc_end: + \tag_struct_end: + \tag_mc_begin:n {} + \ (#3) + \tag_mc_end: + \group_end: + \tag_struct_end: + \tagpdfparaOn +% \end{macrocode} +% +% \begin{macrocode} + \@@_start_para_structure_unconditionally:n { \PARALABEL } +% \end{macrocode} +% +% \begin{macrocode} + \itshape + \hskip\labelsep + \ignorespaces +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@endtheorem{\endblockenv} +% \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 have 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} +% 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 supply 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 explanatory 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} +% +% Finally, we have a socket that handles the \cs{par} handling +% after the block. Normally, we use it with the \plug{on} plug (check for a +% following \cs{par}) but in the case of standalone environments we +% assign it the \plug{off} plug. +% \begin{macrocode} + \socket_use:n {tagsupport/block-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} +% +% +% +% \begin{socketdecl}{tagsupport/block-endpe} +% This socket is responsible for the end environment \cs{par} +% handling. We define two plugs for it (\plug{on} and \plug{off}). +% \begin{macrocode} +\socket_new:nn {tagsupport/block-endpe}{0} +% \end{macrocode} +% \end{socketdecl} +% +% \begin{plugdecl}{on,off} +% The plugs set the legacy \texttt{@endpe} switch. This must always +% happen because block environments with different settings can be nested +% and should not inherit the setting from the outer environment. +% \begin{macrocode} +\socket_new_plug:nnn{tagsupport/block-endpe}{on} + { \legacy_if_gset_true:n { @endpe } } +\socket_new_plug:nnn{tagsupport/block-endpe}{off} + { \legacy_if_gset_false:n { @endpe } } +% \end{macrocode} +% +% \begin{macrocode} +\socket_assign_plug:nn{tagsupport/block-endpe}{on} +% \end{macrocode} +% \end{plugdecl} +% +% +% +% +% +% \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==, a \verb=
= 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==. +% \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 environment \cs{par} handling: +% \begin{macrocode} + \socket_assign_plug:nn{tagsupport/block-endpe}{on} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_recipe_standalone:} +% +% The \texttt{standalone} recipe produces a block that ensures that +% a previous \texttt{text-unit} ends and that after the block a new +% \texttt{text-unit} starts. +% \begin{macrocode} +\cs_new:Npn \@@_recipe_standalone: { + \cs_set_eq:NN \__kernel_displayblock_beginpar_hmode:w + \prg_do_nothing: + \cs_set_eq:NN \__kernel_displayblock_beginpar_vmode: + \prg_do_nothing: + \cs_set_eq:NN \__kernel_displayblock_begin: \@@_inner_begin: + \cs_set_eq:NN \__kernel_displayblock_end: \@@_inner_end: +% \end{macrocode} +% End environment \cs{par} handling: +% \begin{macrocode} + \socket_assign_plug:nn{tagsupport/block-endpe}{off} +% \end{macrocode} +% +% \begin{macrocode} + \tl_if_empty:NTF \l_@@_tag_name_tl + { \tl_set:Nn \l_@@_tag_inner_tag_tl {Sect} } + { \tl_set_eq:NN \l_@@_tag_inner_tag_tl \l_@@_tag_name_tl } +} +% \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} +% End environment \cs{par} handling: +% \begin{macrocode} + \socket_assign_plug:nn{tagsupport/block-endpe}{on} +% \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 rolemapped 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} +% End environment \cs{par} handling: +% \begin{macrocode} + \socket_assign_plug:nn{tagsupport/block-endpe}{on} +% \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} +\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} +% + +% +% \begin{macrocode} +\DeclareInstance{blockenv}{theorem}{display} +{ + env-name = theorem-like, + tag-name = theorem-like, + tag-class = , + tagging-recipe = standalone, + inner-level-counter = , + level-increase = false, + setup-code = , + block-instance = displayblock , +% inner-instance-type = innerblock , +% inner-instance = theorem, +} +% \end{macrocode} +% +% We use \struct{theorem-like} as the structure name and rolemap it +% to a \struct{Sect} because that can hold a \struct{Caption}. +% +% \subsubsection{Verbatim instances} +% +% \begin{instance}{blockenv verbatim} +% +% The rolemapping is current verbatim to P and codeline to Sub (which is role mapped +% to Span in pdf 1.7. Alternatives for PDF 1.7: Div and P. +% +% \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 = verbatimblock , + 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{Verbatim instances} +% +% Verbatim instances have there own levels so that one can specify +% specific indentations or vertical separations between line. +% +% \begin{instance}{block verbatimblock-0, +% block verbatimblock-1, +% block verbatimblock-2, +% block verbatimblock-3, +% block verbatimblock-4, +% block verbatimblock-5, +% block verbatimblock-6 } +% +% \begin{macrocode} +\DeclareInstance{block}{verbatimblock-0}{display} + { + leftmargin = 0pt , + parindent = 0pt , + par-skip = 0pt , + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInstanceCopy{block}{verbatimblock-1}{verbatimblock-0} +\DeclareInstanceCopy{block}{verbatimblock-2}{verbatimblock-0} +\DeclareInstanceCopy{block}{verbatimblock-3}{verbatimblock-0} +\DeclareInstanceCopy{block}{verbatimblock-4}{verbatimblock-0} +\DeclareInstanceCopy{block}{verbatimblock-5}{verbatimblock-0} +\DeclareInstanceCopy{block}{verbatimblock-6}{verbatimblock-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 +% 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 be formatted. +% +% \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:TF { +% \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} + { + \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~ displayblock \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 supported: 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. +% +% We do this in a separate command, because it is needed elsewhere too. +% \begin{macrocode} + \@@_start_para_structure:n { \PARALABEL } + } + } +} +% \end{macrocode} +% +% +% \begin{macro}{\@@_start_para_structure:n} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_start_para_structure:n #1 { + \@@_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}{#1} + \tag_mc_begin:n {} +} +% \end{macrocode} +% The same code, but without testing \texttt{@endpe}. This is not +% needed in the standalone case and wrong inside lists. +% \begin{macrocode} +\cs_new_protected:Npn \@@_start_para_structure_unconditionally:n #1 { + \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}{#1} + \tag_mc_begin:n {} +} +% \end{macrocode} +% \end{macro} +% +% \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} +% +% \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 + { + \@@_start_para_structure_unconditionally:n { LI- } + } +} +% \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} +% These command should have a dummy declaration if tagging is not active +% \begin{macrocode} +{ + \cs_new:Npn \@@_start_para_structure_unconditionally:n #1 {} +} +% \end{macrocode} +% +% +% +% +% +% +% +% +% +% \begin{macrocode} +% +% \end{macrocode} +% +% +% +% \begin{macrocode} +%<*latex-lab> +\ProvidesFile{block-latex-lab-testphase.ltx} + [\ltlabblockdate\space v\ltlabblockversion\space + blockenv implementation] +\RequirePackage{latex-lab-testphase-block} +% +% \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.pdf b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf new file mode 100644 index 0000000000..b82beb2684 Binary files /dev/null and b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx index 8f474e6b12..e2ee78b2ff 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabfirstaiddate{2023-07-20} +\def\ltlabfirstaidversion{0.85a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -28,9 +30,9 @@ % \fi % % \title{The \textsf{latex-lab-firstaid} package\\ -% Temporary patches to external packages} +% Temporary patches to external packages needed for the tagging project} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{Version 0.80 2023-06-04} +% \date{v\ltlabfirstaidversion\ \ltlabfirstaiddate} % % \maketitle % @@ -58,8 +60,9 @@ %<@@=tag> % \end{macrocode} % \begin{macrocode} -\ProvidesPackage {latex-lab-testphase-firstaid} [2023-06-04 v0.8 - Temporary patches to external packages need for the tagging project] +\ProvidesPackage {latex-lab-testphase-firstaid} [% + \ltlabfirstaiddate\space v\ltlabfirstaiddate\space + Temporary patches to external packages needed for the tagging project] % \end{macrocode} % \subsection{blindtext} @@ -103,43 +106,38 @@ }% } % \end{macrocode} -% \subsection{ltugboat} -% ltugboat need only a redefinition of \cs{l@section} to add the hooks +% \subsection{cleveref} +% The cleveref package redefines \cs{@makefntext} and this means that the patches in +% the new footnote code fails. We use a hook instead % \begin{macrocode} -\AddToHook{file/ltugboat.cls/after} +\AddToHook{package/cleveref/after} { - \def\l@section#1#2{\addpenalty{\@secpenalty}% - \addvspace{\TBtocsectionspace}% - \@tempdima 1.5em - \begingroup - \parindent\z@ \rightskip\z@ % article style makes \rightskip > 0 - \parfillskip\z@ - \TBtocsectionfont - \leavevmode\advance\leftskip\@tempdima\hskip-\leftskip - \UseHookWithArguments{contentsline/text/before}{4} - {\toclevel@part}{#1}{#2}{\@contentsline@destination}% - \csname contentsline@text@1@format\endcsname{#1}% - \UseHookWithArguments{contentsline/text/after}{4} - {\toclevel@part}{#1}{#2}{\@contentsline@destination}% - \nobreak\hfil - \nobreak\hb@xt@\@pnumwidth{\hss - \UseHookWithArguments{contentsline/page/before}{4} - {\toclevel@part}{#1}{#2}{\@contentsline@destination}% - #2% - \UseHookWithArguments{contentsline/page/after}{4} - {\toclevel@part}{#1}{#2}{\@contentsline@destination}% - }\par - \endgroup} - } + \let\@makefntext\cref@old@makefntext + \AddToHook{cmd/@makefntext/before}{% + \cref@constructprefix{footnote}{\cref@result}% + \protected@edef\cref@currentlabel{% + [footnote][\arabic{footnote}][\cref@result]% + \p@footnote\@thefnmark}} +% \end{macrocode} +% The second problem is that it redefines \cs{refstepcounter} to use an argument. +% In itself this isn't a problem but as the new definition doesn't grab the arguments +% directly it fails over the generic hook inserted at the end of the definition +% \begin{macrocode} + \RenewDocumentCommand\refstepcounter{om}{% + \IfNoValueTF{#1}% + {\refstepcounter@noarg{#2}}% + {\refstepcounter@optarg[#1]{#2}}% + }% + } % \end{macrocode} - % \begin{macrocode} % % \end{macrocode} % \begin{macrocode} %<*latex-lab> \ProvidesFile{firstaid-latex-lab-testphase.ltx} - [2023-06-04 v0.8 Temporary patches to external packages need for the tagging project] + [\ltlabfirstaiddate\space v\ltlabfirstaidversion\space + latex-lab wrapper firstaid] \RequirePackage{latex-lab-testphase-firstaid} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf index bd656c629a..23b2d0d97d 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx index 430b2aec96..3bd3483600 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabfloatdate{2023-07-20} +\def\ltlabfloatversion{0.81a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -31,7 +33,7 @@ % \title{The \textsf{latex-lab-floats} package\\ % Tagging of floats } % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{v0.81 2023-06-07} +% \date{v\ltlabfloatversion\ \ltlabfloatdate} % % \maketitle % @@ -128,17 +130,11 @@ % \begin{implementation} % \section{Implementation} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-float} {2023-04-28} {0.8} +\ProvidesExplPackage {latex-lab-testphase-float} {\ltlabfloatdate} {\ltlabfloatversion} {Code related to the tagging of floats} % \end{macrocode} % \subsection{Variables} -% We rolemap to Aside, and float sections to Sect -% -% \begin{macrocode} -\tagpdfsetup{add-new-tag=float/Aside} -\tagpdfsetup{add-new-tag=figures/Sect} -\tagpdfsetup{add-new-tag=tables/Sect} -% \end{macrocode} +% We rolemap to float to Aside, and float sections to Sect. % % \begin{variable}{ % \g_@@_float_sect_prop, @@ -408,6 +404,32 @@ \fi \fi } +% \end{macrocode} +% and similar for double floats: +% \begin{macrocode} +\def\end@dblfloat{% + \if@twocolumn + \@endfloatbox + \@nameuse{@@_float_end:}% + \ifnum\@floatpenalty <\z@ + \@largefloatcheck + \global\dp\@currbox1sp % + \@cons\@currlist\@currbox + \ifnum\@floatpenalty <-\@Mii + \penalty -\@Miv + \@tempdima\prevdepth + \vbox{}% + \prevdepth\@tempdima + \penalty\@floatpenalty + \else + \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack + \@nameuse{@@_float_start_par:} %restart P safe here?? + \fi + \fi + \else + \end@float + \fi +}% \ExplSyntaxOn % \end{macrocode} % @@ -417,6 +439,22 @@ % \begin{macrocode} \def\hyper@nopatch@caption{} % \end{macrocode} +% +% With hyperref that means that the \cs{refstepcounter} now can affect spacing so we +% change that to the kernel refstepcounter: +% \begin{macrocode} +\let\@kernel@refstepcounter\refstepcounter %as long it is not in the kernel +\def\caption{% + \ifx\@captype\@undefined + \@latex@error{\noexpand\caption outside float}\@ehd + \expandafter\@gobble + \else + \@kernel@refstepcounter\@captype + \expandafter\@firstofone + \fi + {\@dblarg{\@caption\@captype}}% +} +% \end{macrocode} % As we will use the structure number in the target, we need to provide a % theH-representation. (Once the kernel will create % theH-representation generally this will be provided automatically, as tagpdf uses @@ -471,7 +509,7 @@ \tag_mc_end: \tag_struct_end: \tag_mc_begin:n{} - #2\par + #2 \tag_mc_end:\hfil}% \fi \tag_struct_end: %caption @@ -487,7 +525,7 @@ % \begin{macrocode} %<*latex-lab> \ProvidesFile{float-latex-lab-testphase.ltx} - [2023-04-30 v0.8 code related to the tagging of floats] + [\ltlabfloatdate\space v\ltlabfloatversion\space latex-lab wrapper float] \RequirePackage{latex-lab-testphase-float} % % \end{macrocode} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf index e1a3ba4039..6cf52778ba 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf 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 4c8c9b73a6..f62d12bfd9 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx @@ -17,6 +17,9 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabfootnotedate{2023-09-04} +\def\ltlabfootnoteversion{0.8c} + %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -38,7 +41,14 @@ % \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}} +% +% \providecommand\hook[1]{\texttt{#1\DescribeHook[noprint]{#1}}} +% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}} +% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}} +% +% \NewDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl} +% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl} +% \NewDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl} % % \begin{abstract} % \emph{to be written} @@ -56,7 +66,7 @@ % 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 +% number of sockets to which only one class or package % 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 @@ -67,7 +77,7 @@ % 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). +% well, but it will not work in all cases). % % \subsection{Configuration methods} % @@ -103,11 +113,14 @@ % % % -% \section{Hooks and configuration points} +% \section{Sockets and hooks} +% +% We use sockets for those parts that can be controlled only by one +% package or by the kernel and hooks for places where it may be +% possible that several packages or the document class adds code +% (typically declarations such as font changes, etc.). % -% Note: the configuration points do not have an interface mechanism -% yet and all their names are temporary right now. -% Also note that configuration points are of interest only to very +% Note that sockets are of interest only to very % few specialized packages, mainly \pkg{footmisc}, and packages % providing similar functionality---the current documentation is % therefore fairly sketchy. @@ -124,7 +137,7 @@ % in the same place, etc. % % -% \subsubsection{Configuration points} +% \subsubsection{Sockets} % % None: everything is implemented through a single definition for % \cs{@footnotemark} that offers a number of hooks that can be used @@ -132,12 +145,14 @@ % formatting of marks. % % -% \subsubsection{Hooks} +% \subsubsection{Hooks for formatting the footnote mark in text} % % The hooks to customize the marks in the text are the following: % \begin{description} % \item[\hook{fnmark/before}] % +% \DescribeHook[noprint]{fnmark/before} +% % 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 necessarily correctly, e.g., @@ -147,6 +162,8 @@ % % \item[\hook{fnmark}] % +% \DescribeHook[noprint]{fnmark} +% % Executed in horizontal mode and after the current space factor % has been saved away for reuse. This is where currently code for multiple % marks does its preparation (as done by \pkg{footmisc} and @@ -156,12 +173,14 @@ % generated in math --- maybe that means the multiple handling % should happen later? % -% After the hook \cs{nobreak} is executed, so any +% After the hook a \cs{nobreak} is executed, so any % ``material'' added in the hook is tied to the following mark % unless it contains its own permissible penalty. % % \item[\hook{fnmark/begin}] % +% \DescribeHook[noprint]{fnmark/begin} +% % This hook is executed directly in front of the typeset mark. % This is the place where \pkg{hyperref} would have added % part of its code, i.e., after the \cs{nobreak} mentioned above. @@ -170,6 +189,8 @@ % % \item[\hook{fnmark/end}] % +% \DescribeHook[noprint]{fnmark/end} +% % This hook is executed directly after the typeset mark. It is % used by \pkg{memhfixc}, \pkg{scrlttr2}, and % \pkg{footmisc}. Used, for example, to implement support for @@ -180,6 +201,8 @@ % % \item[\hook{fnmark/after}] % +% \DescribeHook[noprint]{fnmark/after} +% % This hook is executed at the very end of the \cs{footnotemark} command. % % It is a reversed hook to pair with \hook{fnmark/before} @@ -201,78 +224,114 @@ % appears at the bottom of the page (default case), or possibly % elsewhere, e.g. in the margin. % -% \subsubsection{Configuration points} +% \subsubsection{Sockets} % % To cater for different layout configurations there are four -% configuration points which can be set only by one package or -% class, if two packages/classes set them they are mutually -% incompatible. +% sockets that can be set by a package or +% class but there should be only one per document setting them, i.e., if two packages/classes set them they are mutually +% incompatible (or rather the last one wins most likely). % These are: % \begin{description} -% \item[\cs{@footnotetext@cfgpoint} (1 argument)] +% \item[\socket{fntext/process} (1 argument)] +% +% \DescribeSocket[noprint]{fntext/process} +% +% This socket receives all material that is to be processed (or +% stored) including color protection code and what have you. +% The \plug{default} executes \cs{insert}\cs{footins}. +% +% Available plugs are \plug{default}, \plug{side} (side notes), and \plug{mp} (minipage). +% +% +% \item[\socket{fntext/make} (1 argument)] % -% This receives all material that is to be processed (or stored) -% including color protection code and what have you. The default -% definition is to run \cs{insert}\cs{footins}. +% \DescribeSocket[noprint]{fntext/make} % -% \item[\cs{@footnotetext@cfgpointii} (1 argument)] +% This socket receives the \meta{text} as given in \cs{footnote} +% or \cs{footnotetext} in the document and adds formatting +% instructions to it. % -% The default definition runs \cs{@makefntext} which contains +% The \plug{default} plug runs \cs{@makefntext} which contains % various hooks for customization. For most scenarios this is % sufficient. However, when running all footnotes as a single % paragraph at the bottom, then each footnote needs to be -% prepared prior to storing in the insert and this configuration -% point allows running extra code to do that. +% prepared prior to storing it with \cs{insert} and this socket +% allows running extra code to do that. % -% \item[\cs{@footnotetext@cfgpointiii} (no argument)] +% Available plugs are \plug{default} and \plug{para}. % -% By default this configuration point adds a strut to the -% footnote material so that consecutive footnotes are properly -% spaced vertically. In some use cases this is not appropriate -% (e.g., when running all footnotes as a single paragraph) and so -% this configuration point can cancel the action or do something -% else instead. +% \item[\socket{fntext/begin} (no argument)] % -% The configuration point is executed near the start of the -% argument for the configuration point -% \cs{@footnotetext@cfgpointii}. +% \DescribeSocket[noprint]{fntext/begin} % -% \item[\cs{@footnotetext@cfgpointiv} (no argument)] +% The socket is executed near the start of the +% argument for the \socket{fntext/make} socket. +% By \plug{default} it adds a strut to the footnote +% material so that consecutive footnotes are properly spaced +% vertically. In some use cases this is not appropriate (e.g., +% when running all footnotes as a single paragraph) and so with +% this socket one can cancel the action or do something else +% instead. % -% This configuration point is executed at the very end of the -% argument passed to \cs{@footnotetext@cfgpointii}. -% By default it adds a final strut as long as we are still in -% horizontal mode (i.e., processing the footnote text paragraph. -% When running several footnotes in one paragraph some additional -% material (some horizontal glue) needs adding at this point. +% Available plugs are \plug{default} and \plug{noop}. % +% +% \item[\socket{fntext/end} (no argument)] +% +% \DescribeSocket[noprint]{fntext/end} +% +% This socket is executed at the very end of the argument passed +% to socket \socket{fntext/make}. By \plug{default} it +% adds a final strut as long as we are still in horizontal mode +% (i.e., processing the footnote text paragraph). When running +% several footnotes in one paragraph some additional material +% (some horizontal glue) needs adding at this point which is done +% with the plug \plug{para}. +% +% Available plugs are \plug{default}, \plug{para}, and +% \plug{noop}. % \end{description} -% The configuration point \cs{@footnotetext@cfgpointii} runs +% +% +% All standard plugs for the socket \socket{fntext/make} run % \cs{@makefntext} and this command contains two further -% configuration points (and a few hooks): +% sockets (unless it is overwritten by a legacy class): % \begin{description} -% \item[\cs{@makefntext@cfgpoint} (1 argument)] +% \item[\socket{fntext/mark} (0 arguments)] +% +% \DescribeSocket[noprint]{fntext/mark} % -% This configuration point receives the material to typeset the -% footnote mark. By default, all it does is running \cs{indent} -% to get a paragraph indentation (if one is set up---in most -% layouts it is 0~points) and then typesets the mark, but in -% some designs it executes more elaborate code. +% This socket has no input arguments but uses \cs{@makefnmark} to +% typeset the mark in front of the footnote text. Its +% \plug{default} uses code that examines the value of +% \cs{footnotemargin} and based on its setting typeset the mark +% in different ways: +% \begin{itemize} +% \item positive: typeset the mark in a box of that size +% \item zero: use \cs{llap} around the mark +% \item negative: use \cs{llap} but with a box of the given size +% negated inside +% \item \texttt{-}\cs{maxdimen}: just use \cs{@makefnmark} +% \end{itemize} +% For most cases this would be flexible enough, but if not then a +% class can define its own plug to specify the placement of the mark. % -% 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@FENoteLbl}. +% Available plugs are \plug{default} and \plug{noop} (no mark is produced). % -% \item[\cs{@makefntext@cfgpointii} (1 argument)] % -% This configuration point manages the formatting of the footnote -% text once the mark has been typeset. +% \item[\socket{fntext/text} (1 argument)] % -% 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@FENotetext}. +% \DescribeSocket[noprint]{fntext/text} +% +% This socket manages the formatting of the footnote text +% (presented as an argument) once the mark has been typeset. In +% all cases we can think of this formatting is better configured +% via the available hooks described below, so the \plug{default} +% just grabs the argument and processes it without any other +% action. It is really only there to allow for some fancy stuff +% that some design comes up with. +% +% Available plugs are \plug{identity} (default) and \plug{noop}. % % \end{description} % @@ -284,19 +343,23 @@ % % % -% \subsubsection{Hooks} +% \subsubsection{Hooks for formatting the footnote text} % % \begin{description} % \item[\hook{fntext/before}] % +% \DescribeHook[noprint]{fntext/before} +% % Executed at the very beginning of \cs{footnotetext}. Currently -% there is on package (\pkg{linguex}) that +% there is one package (\pkg{linguex}) that % prepends material at this point. % % This hook is paired with hook \hook{fnmark/after}. % % \item[\hook{fntext}] % +% \DescribeHook[noprint]{fntext} +% % Executed at the beginning of the material passed to the first % configuration point. Typically used to set any baseline % stretch for the footnote text, e.g., by \pkg{setspace}, @@ -308,32 +371,42 @@ % % \item[\hook{fntext/para}] % -% After the font is set default paragraph parameters are set up +% \DescribeHook[noprint]{fntext/para} +% +% After the font is set (after the previous hook), some default +% paragraph parameters +% are set up % including \cs{interlinepenalty}, \cs{hsize}, \cs{parindent} and % a number of others, as some of them depend on the font -% size. Then the \hook{fntext/para} is run. If one wants to +% size. Then the \hook{fntext/para} is run which can overwrite +% the default. If one wants to % change the font size, it is probably necessary to reset these % other parameters too, e.g., \cs{parindent}, which can be done % here. % -% The configuration point \cs{@footnotetext@cfgpointii} normally +% Note: the socket \socket{fntext/make} normally % runs the command \cs{@makefntext} or some code that eventually -% runs this command, and this then produces the footnote mark (in -% front of the footnote text) and the formatted footnote text. In +% runs this command, and this then produces the footnote mark in +% front of the formatted footnote text. In % front of both the mark and the footnote text some classes have % placed paragraph parameter adjustments in their redefinition of % \cs{@makefntext}. However, there is no need to place it there % it could equally well go into the \hook{fntext/para} hook. We -% therefore do not provide another hook at this point. +% therefore do not provide another hook at this other point. % % \item[\hook{fntext/begin} \& \hook{fntext/end}] % +% \DescribeHook[noprint]{fntext/begin} +% \DescribeHook[noprint]{fntext/end} +% % The footnote text itself is surrounded by the hooks % \hook{fntext/begin} and \hook{fntext/end}. The two hooks are % not paired as they are typically used independently. % % \item[\hook{fntext/after}] % +% \DescribeHook[noprint]{fntext/after} +% % 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{linguex}, have @@ -384,6 +457,8 @@ % % \section{Tagging and hyperlinking support} % +% \fmi{this section needs work (and probably csname changes)} +% % 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. @@ -407,6 +482,38 @@ % % \subsection{Technical details for the tagging} % +% The following sockets are set up for kernel use, when doing tagging: +% \begin{description} +% \item[\socket{tagsupport/fnmark} (1 argument)] +% +% \DescribeSocket[noprint]{tagsupport/fnmark} +% +% \fmi{describe and decide on names} +% +% +% \item[\socket{tagsupport/fntext/begin} (no argument)] +% +% \DescribeSocket[noprint]{tagsupport/fntext/begin} +% +% +% \item[\socket{tagsupport/fntext/end} (no argument)] +% +% \DescribeSocket[noprint]{tagsupport/fntext/end} +% +% +% \item[\socket{tagsupport/fntext/mark} (1 argument)] +% +% \DescribeSocket[noprint]{tagsupport/fntext/mark} +% +% +% \item[\socket{tagsupport/fntext/text} (1 argument)] +% +% \DescribeSocket[noprint]{tagsupport/fntext/text} +% +% +% \end{description} +% +% % 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}. @@ -475,36 +582,36 @@ % 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. +% a new class with its own data structure and to switch locally to use this +% class. The following three commands are used for this. % -% The default property uses the name \texttt{default} +% The default class uses the name \texttt{default} % -% \begin{function}{\fnote_new:nn} +% \begin{function}{\fnote_class_new:nn} % \begin{syntax} -% \cs{fnote_new:nn}\Arg{name}\Arg{key/value option} +% \cs{fnote_class_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. +% This declaration sets up the needed data structure. Currently this only +% consists of a property list 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} +% \cs{fnote_mark_gput:nn}\Arg{mark}\Arg{class 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} +% This command stores the current structure number as key and the \meta{mark} as +% value in the property list associated with the \meta{class name}. % \end{function} % -% \begin{function}{\fnote_mark_gpop:nnN} +% \begin{function}{\fnote_mark_gpop_all:nnN} % \begin{syntax} -% \cs{fnote_mark_gpop:nnN}\Arg{mark}\Arg{footnote type name}\meta{sequence} +% \cs{fnote_mark_gpop_all:nnN}\Arg{mark}\Arg{class 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 +% This command stores all the keys/structure numbers whose value in the +% property list for \meta{class name} are equal to \meta{mark} +% into the sequence \meta{sequence} and then removes them from the property list. +% The content of the sequence can then be % used to create link targets and references. % \end{function} % @@ -516,7 +623,7 @@ % 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) +% Instead the \cs{label} command is % 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. % @@ -560,28 +667,33 @@ % 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{Implementation details regarding tagging} % % \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. +% The mark in the text is handled by assigning an appropriate +% plug to the socket \socket{tagsupport/fnmark}. +% It takes one argument, \cs{@makefnmark}, the +% command which formats the mark, and surrounds it by link and tagging +% commands. At the point where the socket is +% executed, \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 main part is done by assigning a different plug to socket \socket{tagsupport/fntext/begin} +% and \socket{tagsupport/fntext/end} +% surrounding the footnote text. +% These sockets are used to start and end the structure and +% attempt to detect to which mark the note is related. % -% 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. +% The actual typesetting of the note text is done by +% \cs{fnote_makefntext:n} (or its \LaTeXe{} name \cs{@makefntext}). In +% the new implementation this contains two further kernel sockets for tagging: +% \socket{tagsupport/fntext/mark} and +% \socket{tagsupport/fntext/text}. They get plugs assigned that add the +% tagging commands around note mark and note text. % % \subsection{Footnotes in minipages} % @@ -603,13 +715,6 @@ % % \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 @@ -617,9 +722,6 @@ % % \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} @@ -644,7 +746,8 @@ % \subsection{File declaration} % \begin{macrocode} \ProvidesFile{latex-lab-footnotes.ltx} - [2023-02-04 v0.7 changes to the footnote interfaces] + [\ltlabfootnotedate\space v\ltlabfootnoteversion\space + changes to the footnote interfaces] % \end{macrocode} % % \subsection{code not fully handled yet} @@ -796,7 +899,6 @@ % \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} @@ -852,14 +954,22 @@ % % \subsection{Hooks} % -% Hooks in the footnotemark command. +% \begin{hookdecl}{fnmark/before,fnmark/after, +% fnmark, +% fnmark/begin,fnmark/end} +% Hooks in the footnotemark command. % \begin{macrocode} \NewMirroredHookPair{fnmark/before}{fnmark/after} \NewHook{fnmark} \NewHook{fnmark/begin} \NewHook{fnmark/end} % \end{macrocode} -% Hooks in the footnotetext command +% \end{hookdecl} +% +% \begin{hookdecl}{fntext/before,fntext/after, +% fntext, +% fntext/begin,fntext/end,fntext/para} +% Hooks in the footnotetext command: % \begin{macrocode} \NewMirroredHookPair{fntext/before}{fntext/after} \NewHook{fntext} @@ -867,6 +977,7 @@ \NewHook{fntext/begin} \NewHook{fntext/end} % \end{macrocode} +% \end{hookdecl} % % \subsection{Debugging code} % the debugging code is just temporary @@ -882,11 +993,11 @@ { \bool_if:NT \g_fnote_debug_bool { - \LogHook{fnmark/before} - \LogHook{fnmark} - \LogHook{fnmark/begin} - \LogHook{fnmark/end} - \LogHook{fnmark/after} + \hook_log:n {fnmark/before} + \hook_log:n {fnmark} + \hook_log:n {fnmark/begin} + \hook_log:n {fnmark/end} + \hook_log:n {fnmark/after} \cs_gset_eq:NN \@@_debug_footnotemark: \prg_do_nothing: } } @@ -897,18 +1008,32 @@ { \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} + \socket_log:n {fntext/process} + \socket_log:n {fntext/make} + \socket_log:n {fntext/begin} + \socket_log:n {fntext/end} +% \end{macrocode} +% +% \begin{macrocode} + \socket_log:n {fntext/mark} + \socket_log:n {fntext/text} +% \end{macrocode} +% +% \begin{macrocode} + \socket_log:n {tagsupport/fnmark} + \socket_log:n {tagsupport/fntext/begin} + \socket_log:n {tagsupport/fntext/end} + \socket_log:n {tagsupport/fntext/mark} + \socket_log:n {tagsupport/fntext/text} +% \end{macrocode} +% +% \begin{macrocode} + \hook_log:n {fntext/before} + \hook_log:n {fntext} + \hook_log:n {fntext/para} + \hook_log:n {fntext/begin} + \hook_log:n {fntext/end} + \hook_log:n {fntext/after} % \end{macrocode} % Show the info only once (if at all). % \begin{macrocode} @@ -926,7 +1051,7 @@ %------- % bibarts % chextras --- actually in the wrong place does an \unskip - \UseHook{fnmark/before} + \hook_use:n {fnmark/before} %------- \leavevmode \ifhmode @@ -936,21 +1061,24 @@ % (a bit less efficient) % memhfixc.sty % footmisc.sty - \UseHook{fnmark} + \hook_use:n {fnmark} %------- \nobreak \fi %------- % hyperref.sty - \UseHook{fnmark/begin} + \hook_use:n {fnmark/begin} %------- - \@kernel@process@makefnmark - \@makefnmark +% \end{macrocode} +% The kernel socket for tagging. It picks up \cs{@makefnmark} as its +% argument and if tagging is not active it contains the \plug{identity} plug. +% \begin{macrocode} + \socket_use:nn {tagsupport/fnmark} \@makefnmark %------- % \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, in a complete +% executing the hook \hook{fnmark/end}, resetting the space factor, and +% finishing with the hook \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 % such a situation \cs{_@@_footmark_finish:} below does nothing @@ -961,9 +1089,10 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_finish:,\@@_footnotemark_finish:} +% \begin{macro}{\@@_footnotemark_default_finish:,\@@_footnotemark_finish:} +% The default definition for \cs{@@_footnotemark_finish:} is called \cs{@@_footnotemark_default_finish:} % \begin{macrocode} -\cs_new_protected:Npn \@@_finish: { +\cs_new_protected:Npn \@@_footnotemark_default_finish: { % hyperref.sty % memhfixc.sty --- could move fnmark/after % scrlttr2.cls --- could vanish if footmisc uses a hook @@ -978,20 +1107,24 @@ \UseHook{fnmark/after} %------- } - -\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 { } +\cs_new_eq:NN \@@_footnotemark_finish: \@@_footnotemark_default_finish: % \end{macrocode} % \end{macro} % +% \begin{socketdecl}{tagsupport/fnmark} +% Not a public socket but reserved for tagging. By +% default it contains \plug{identity} and is reassigned if tagging is active. +% \begin{macrocode} +\NewSocket{tagsupport/fnmark}{1} +% \end{macrocode} +% \end{socketdecl} +% % \begin{macro}{\@footnotemark} -% At last provide the name \LaTeXe{} is used to. +% Here we provide the traditional \LaTeXe{} name in case it is directly used +% in some legacy class. % \begin{macrocode} \cs_set_eq:NN \@footnotemark \fnote_footnotemark: % \end{macrocode} @@ -1007,16 +1140,23 @@ \@@_debug_footnotetext: %------- % ./linguex/linguex.sty - \UseHook{fntext/before} + \hook_use:n {fntext/before} %------- - \@kernel@process@footnotetext - \@footnotetext@cfgpoint { % config point +% \end{macrocode} +% Execute a kernel socket for tagging. +% \begin{macrocode} + \socket_use:n {tagsupport/fntext/begin} +% \end{macrocode} +% +% \begin{macrocode} + \socket_use:nn {fntext/process} + { %------- % resetting baselinestretch ... (could be done further down) % ./uafthesis/uafthesis.cls % ./setspace/setspace.sty % ./footmisc/footmisc.sty (normal) - \UseHook{fntext} + \hook_use:n {fntext} %------- \reset@font \footnotesize @@ -1046,84 +1186,144 @@ % and \cs{@currentlabel} is that is necessary. % % ./resphilosophica/resphilosophica.cls - \UseHook{fntext/para} + \hook_use:n {fntext/para} %------- \color@begingroup %------- -% fnpara wants to replace \@makefntext{...} and para and side option of footmisc etc too ... -% so we make this a config point +% fnpara wants to replace \@makefntext{...} and para and side +% option of footmisc etc too ... +% so we make this a socket, because only one action can be active: %------- - \@footnotetext@cfgpointii % config point + \socket_use:nn {fntext/make} { %------- % ./resphilosophica/resphilosophica.cls %------- - \@footnotetext@cfgpointiii % config point + \socket_use:n {fntext/begin}% %------- % bibarts % fnbreak.sty - \UseHook{fntext/begin} + \hook_use:n {fntext/begin} %------- \ignorespaces #1 %------- % bibarts % fnbreak.sty - \UseHook{fntext/end} + \hook_use:n {fntext/end} %------- - \@footnotetext@cfgpointiv % config point +% \end{macrocode} +% The socket code (by default adding a strut) has to come +% \emph{after} everything added into the hook above. +% \begin{macrocode} + \socket_use:n {fntext/end} } \par \color@endgroup } %------- +% \end{macrocode} +% The corresponding kernel hook that ends the tagging structure if +% tagging is active. +% \begin{macrocode} + \socket_use:n{tagsupport/fntext/end} +%------- % ./linguex/linguex.sty - \UseHook{fntext/after} + \hook_use:n {fntext/after} %------- } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@footnotetext@cfgpoint} -% default for config point (1 arg) +% \begin{socketdecl}{fntext/process} +% % \begin{macrocode} -\cs_new_protected:Npn \@footnotetext@cfgpoint { \insert\footins } +\NewSocket {fntext/process}{1} +\NewSocketPlug{fntext/process}{default}{ \insert\footins {#1} } +\NewSocketPlug{fntext/process}{side} { \marginpar {#1} } % \end{macrocode} -% \end{macro} +% +% \begin{macrocode} +\AssignSocketPlug{fntext/process}{default} +% \end{macrocode} +% \end{socketdecl} % % -% \begin{macro}{\@footnotetext@cfgpointii} -% default for config point (1 arg) +% +% \begin{socketdecl}{fntext/make} +% This socket receives the \meta{text} from the \cs{footnote} or +% \cs{footnotetext} and formats it. % \begin{macrocode} -\cs_new_protected:Npn \@footnotetext@cfgpointii { \@makefntext } +\NewSocket {fntext/make}{1} +\NewSocketPlug{fntext/make}{default}{ \@makefntext {#1} } +% \end{macrocode} +% When running several footnotes together as a paragraph some +% additional work is necessary to unbox the individual footnotes +% recursively (see \TeX{}book algorithm in appendix~D). +% \begin{macrocode} +\NewSocketPlug{fntext/make}{para} +{ + \setbox\FN@tempboxa\hbox{\@makefntext{#1}}% + \dp\FN@tempboxa\z@ + \ht\FN@tempboxa + \dimexpr\wd\FN@tempboxa *% + \footnotebaselineskip /\columnwidth\relax + \box\FN@tempboxa +} % \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 } +\AssignSocketPlug{fntext/make}{default} % \end{macrocode} -% \end{macro} +% \end{socketdecl} % -% \begin{macro}{\@footnotetext@cfgpointiv} -% default for config point (0 args) +% \begin{socketdecl}{fntext/begin} +% By default adds a strut at the start of the footnote text. % \begin{macrocode} -\cs_new_protected:Npn \@footnotetext@cfgpointiv { \@finalstrut\strutbox } +\NewSocket {fntext/begin}{0} +\NewSocketPlug{fntext/begin}{default}{ \rule\z@\footnotesep } % \end{macrocode} -% \end{macro} % -% \begin{macro}{\@kernel@process@footnotetext} -% kernel hook for tagging (2 args) % \begin{macrocode} -\cs_new_protected:Npn \@kernel@process@footnotetext {} +\AssignSocketPlug{fntext/begin}{default} % \end{macrocode} -% \end{macro} +% \end{socketdecl} +% +% \begin{socketdecl}{fntext/end} +% By default adds a strut at the end of the footnote text unless we +% are no longer in hmode. +% \begin{macrocode} +\NewSocket {fntext/end}{0} +\NewSocketPlug{fntext/end}{default}{ \@finalstrut\strutbox } +% \end{macrocode} +% When running several footnotes together as a paragraph some +% additional glue has to be added between them. +% \begin{macrocode} +\NewSocketPlug{fntext/end}{para} + {% + \strut + \penalty-10\relax + \hskip\footglue + } +% \end{macrocode} +% +% \begin{macrocode} +\AssignSocketPlug{fntext/end}{default} +% \end{macrocode} +% \end{socketdecl} +% +% \begin{socketdecl}{tagsupport/fntext/begin,tagsupport/fntext/end} +% Kernel sockets for tagging. +% \begin{macrocode} +\NewSocket{tagsupport/fntext/begin}{0} +\NewSocket{tagsupport/fntext/end}{0} +% \end{macrocode} +% \end{socketdecl} % % 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). +% (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). % \begin{macrocode} \AddToHook{begindocument} { @@ -1131,6 +1331,9 @@ } % \end{macrocode} % +% +% +% % \subsection{The new \cs{@makefntext} command} % % \cs{footnotemargin} is the logic implemented by footmisc. Perhaps we @@ -1147,57 +1350,85 @@ \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 -% places some paragraph parameters at this point, but those can +% placed some paragraph parameters at this point, but those can % equally well go into the hook \hook{fntext/para}. We therefore do % not provide a further hook at this point. % \begin{macrocode} - \@makefntext@cfgpoint - { - \ifdim\footnotemargin>\z@ - \hb@xt@ \footnotemargin{\hss\@makefnmark} - \else - \ifdim\footnotemargin=\z@ - \llap{\@makefnmark} - \else - \ifdim\footnotemargin=-\maxdimen - \@makefnmark - \else - \llap{\hb@xt@ -\footnotemargin{\@makefnmark\hss}} - \fi - \fi - \fi - } - \@makefntext@cfgpointii - { #1 } + \noindent +% \end{macrocode} +% +% \begin{macrocode} + \socket_use:nn {tagsupport/fntext/mark} { \socket_use:n {fntext/mark} } + \socket_use:nn {tagsupport/fntext/text} { \socket_use:nn {fntext/text}{#1} } } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@makefntext@cfgpoint} -% default for config point (1 arg) +% \begin{socketdecl}{fntext/mark} +% A socket to typeset the mark at the start of a footnote. +% \begin{macrocode} +\NewSocket {fntext/mark}{0} +% \end{macrocode} +% The \plug{default} plug implements the logic introduced with the +% \pkg{footmisc} package. +% \begin{macrocode} +\NewSocketPlug{fntext/mark}{default}{ + \ifdim\footnotemargin>\z@ + \hb@xt@ \footnotemargin{\hss\@makefnmark} + \else + \ifdim\footnotemargin=\z@ + \llap{\@makefnmark} + \else + \ifdim\footnotemargin=-\maxdimen + \@makefnmark + \else + \llap{\hb@xt@ -\footnotemargin{\@makefnmark\hss}} + \fi + \fi + \fi +} +% \end{macrocode} +% % \begin{macrocode} -\cs_new_protected:Npn \@makefntext@cfgpoint { \noindent } +\AssignSocketPlug{fntext/mark}{default} % \end{macrocode} -% \end{macro} +% \end{socketdecl} % -% \begin{macro}{\@makefntext@cfgpointii} -% default for config point (1 arg) +% \begin{socketdecl}{fntext/text} +% By default this socket does nothing special and simply processes +% its argument as provided. % \begin{macrocode} -\cs_new_protected:Npn \@makefntext@cfgpointii #1 { #1 } +\NewSocket {fntext/text}{1} % \end{macrocode} -% \end{macro} +% \end{socketdecl} +% +% +% +% \begin{socketdecl}{tagsupport/fntext/mark,tagsupport/fntext/text} +% Not a public socket but reserved for tagging. By +% default it contains \plug{identity} and is reassigned if tagging is active. +% \begin{macrocode} +\NewSocket{tagsupport/fntext/mark}{1} +\NewSocket{tagsupport/fntext/text}{1} +% \end{macrocode} +% \end{socketdecl} +% +% % % \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. +% try to patch the definition used in the class. % % Here is the definition the way it is in % \texttt{classes.dtx}. Notice that (for saving space) there is no @@ -1217,22 +1448,24 @@ % % 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 -% right place. +% minimal patching to hopefully add kernel configuration hooks in the +% right place while otherwise leaving the legacy code alone. An +% updated class would not redefine \cs{@makefntext} but simply add +% appropriate code to the provided hooks. % % What it does is roughly the -% following: It look for a definition of \cs{@makefntext} of the form +% following: It looks for a definition of \cs{@makefntext} of the form %\begin{verbatim} % {AAA \hbox BBB { CCC } DDD #1 EEE } %\end{verbatim} % where ``BBB'' is something like \texttt{to 1em} or similar. It then % replaces that with %\begin{verbatim} -% {AAA \@makefntext@cfgpoint{\hbox BBB { CCC }} DDD -% \@makefntext@cfgpointii{#1} EEE } +% {AAA \UseSocket{tagsupport/fntext/mark}{\hbox BBB { CCC }} DDD +% \UseSocket{tagsupport/fntext/text}{#1} EEE } %\end{verbatim} % The patching is not very careful, i.e., it assumes there is only -% one \verb=#1= in the replacement text and that a \cs{hbox} found +% one \verb=#1= in the replacement text and that the first \cs{hbox} found % is the right one to patch. But that is enough to cater for all % definitions of \cs{@makefntext} out there in the TL distribution. % @@ -1247,7 +1480,7 @@ \cs_new_protected:Npn \@@_patch: { - \tl_set:No \l_@@_patch_tl { \@makefntext { \@makefntext@cfgpointii{##1} } } + \tl_set:No \l_@@_patch_tl { \@makefntext { \UseSocket{tagsupport/fntext/text}{##1} } } \tl_if_in:NnTF \l_@@_patch_tl { \hbox } { \cs_set_eq:NN \@@_tmp:w \@@_patch_hbox:w } { @@ -1268,7 +1501,7 @@ % \end{macrocode} % % If \cs{@makefntext} contains \cs{hbox} then grab ``AAA'' as -% \verb=#1= and ``BBB'' (up to the open \verb={=) and return it as +% \verb=#1= and ``BBB'' (up to the open \texttt{\{}) and return it as %\begin{verbatim} % AAA \@makefntext@processX { \hbox BBB } %\end{verbatim} @@ -1291,12 +1524,13 @@ % 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}}} +\cs_new:Npn \@makefntext@processX #1#2{\UseSocket{tagsupport/fntext/mark}{#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 +% made by some class or package % using the approach above. % \begin{macrocode} @@ -1340,7 +1574,7 @@ \fnote_step_fnmark:nn {#1} \@mpfn \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing: \@footnotemark - \cs_set_eq:NN \@@_footnotemark_finish: \@@_finish: + \cs_set_eq:NN \@@_footnotemark_finish: \@@_footnotemark_default_finish: \@footnotetext {#2} \@@_footnotemark_finish: } @@ -1362,7 +1596,7 @@ % \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 +% \cs{footref} should not try to link to its related % note automatically but should instead use the label. % This is passed to \cs{@footnotemark} through % \cs{l__fnote_currentlabel_tl}. @@ -1388,9 +1622,8 @@ % 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 +\NewSocketPlug{fntext/process}{mp} { \global\setbox\@mpfootins\vbox{% \unvbox\@mpfootins @@ -1398,16 +1631,6 @@ } } % \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 @@ -1484,35 +1707,28 @@ % 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. +% We use the inbuild label hook % 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} % -% We add a hook to the \pkg{nameref} hook. By default it does nothing -% \begin{macro}{\@@_label_hook:} +% We add a hook to the label hook. By default it does nothing +% \begin{macro}{\@@_label_hook:n} % \begin{macrocode} -\cs_new_protected:Npn \@@_label_hook: {} -\AddToHook{begindocument/before} - { - \RequirePackage{nameref} - \g@addto@macro\label@hook - { - \@@_label_hook: - } - } +\cs_new_protected:Npn \@@_label_hook:n #1 {} +\AddToHookWithArguments{label}{ \@@_label_hook:n{#1}} % \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}. +% The name of label is provided as argument in the label hook. % \begin{macrocode} \AddToHook{fntext/begin} { - \cs_set_protected:Npn \@@_label_hook: + \cs_set_protected:Npn \@@_label_hook:n #1 { - \ref_label:Vn \label@name {fnote/struct} + \ref_label:nn {#1} {fnote/struct} } } % \end{macrocode} @@ -1526,7 +1742,7 @@ % tabular notes, other footnote series) to make use of this. % % -% \begin{macro}{\fnote_new:nn} +% \begin{macro}{\fnote_class_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. @@ -1534,19 +1750,19 @@ % command as its own type! % % \begin{macrocode} -\cs_new_protected:Npn \fnote_new:nn #1 #2 % #1 name, #2 options +\cs_new_protected:Npn \fnote_class_new:nn #1 #2 % #1 name, #2 options { \prop_new:c { g_@@_currentmarks_ #1 _prop } } -\fnote_new:nn {default}{} +\fnote_class_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) +% 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 { @@ -1559,13 +1775,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\fnote_mark_gpop:nnN} +% \begin{macro}{\fnote_mark_gpop_all:nnN} % This commands takes as argument the representation of the mark -% (e.g. the content of\cs{@thefnmark}), the series (typically default should work) +% (e.g. the content of\cs{@thefnmark}), the class (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 +% is stored that has the same value as the mark. The sequence is cleared first. % \begin{macrocode} -\cs_new_protected:Npn \fnote_mark_gpop:nnN #1 #2 #3 +\cs_new_protected:Npn \fnote_mark_gpop_all:nnN #1 #2 #3 { \seq_clear:N #3 \prop_set_eq:Nc \l_@@_tmpa_prop { g_@@_currentmarks_ #2 _prop } @@ -1584,20 +1800,28 @@ } } } -\cs_generate_variant:Nn\fnote_mark_gpop:nnN {ooN} +\cs_generate_variant:Nn\fnote_mark_gpop_all: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{plugdecl}{FEMark} +% +% To handle the mark in the text, we define a special plug for +% the socket \socket{tagsupport/fnmark} that receives +% \cs{@makefntext} as its argument. At this time \cs{@thefnmark} +% is already set. +% % \begin{macrocode} -\cs_new_protected:Npn \tag@FEMark #1 %#1 content +\NewSocketPlug{tagsupport/fnmark}{FEMark} { % \end{macrocode} -% end an open mc and start the structure. +% End an open mc and start the structure. % \begin{macrocode} \tag_mc_end_push: \tag_struct_begin:n { tag=footnotemark } @@ -1658,11 +1882,15 @@ \tag_mc_begin_pop:n{} } % \end{macrocode} -% At last set the kernel command to this one +% At last assign the plug: % \begin{macrocode} -\cs_set_eq:NN \@kernel@process@makefnmark \tag@FEMark +\AssignSocketPlug{tagsupport/fnmark}{FEMark} % \end{macrocode} - +% \end{plugdecl} +% +% +% +% % \subsubsection{The footnote text} % We need a public command to append values to the Ref keys @@ -1688,11 +1916,13 @@ \tl_new:N \l_@@_dflt_struct_tl \tl_set:Nn \l_@@_dflt_struct_tl {1} % \end{macrocode} -% kernel hook for tagging (2 args) +% kernel hooks for taggin % this sets the structure around the whole text % +% +% \begin{plugdecl}{FENote} % \begin{macrocode} -\cs_new_protected:Npn \tag@FENote #1#2 % #1 config point, \insert\footins #2 content +\NewSocketPlug{tagsupport/fntext/begin}{FENote} { \tag_mc_end_push: % \end{macrocode} @@ -1724,7 +1954,7 @@ % \end{macrocode} % find open marks with identical \cs{@thefnmark} % \begin{macrocode} - \fnote_mark_gpop:ooN { \@thefnmark }{ \l_fnote_type_tl } \l_@@_currentrefs_seq + \fnote_mark_gpop_all: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: @@ -1744,57 +1974,62 @@ {%no auto } + } % \end{macrocode} % This finish the setup of the tagging structure. +% \end{plugdecl} + + + % 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} +\NewSocketPlug{tagsupport/fntext/end}{FENote} + { \tag_struct_end: \tag_mc_begin_pop:n{} } % \end{macrocode} -% At last set the kernel command to this one +% At last assign the plugs: % \begin{macrocode} -\cs_set_eq:NN \@kernel@process@footnotetext \tag@FENote +\AssignSocketPlug{tagsupport/fntext/begin}{FENote} +\AssignSocketPlug{tagsupport/fntext/end}{FENote} % \end{macrocode} % -% \cs{@makefntext@cfgpoint} is the configuration point responsible for -% typesetting the mark in the note. We use it to surround +% The kernel socket \socket{tagsupport/fntext/mark} is responsible for +% tagging 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. +% TODO check if 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} +% +%^^A If tagging is produced this configuration point is also +%^^A responsible for surrounding the mark with the appropriate tags +%^^A marking the mark as an Lbl. It does this using the +%^^A \socket{tagsupport/fntext/mark} socket. +% +% \begin{plugdecl}{FENoteLbl} +% This plug creates the label in the note on the bottom. +% It also adds link targets for the hyperlinking. % \begin{macrocode} -\cs_new_protected:Npn \tag@FENoteLbl #1 +\NewSocketPlug{tagsupport/fntext/mark}{FENoteLbl} { + \tag_mc_end_push: % \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) +% We create a link target for every related mark. The name is +% \texttt{footnote*} \meta{structure number of the mark}. We also add a link +% target for the current structure (for \cs{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. +% 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. +% 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 } @@ -1802,37 +2037,43 @@ #1 \tag_mc_end: \tag_struct_end: + \tag_mc_begin_pop:n{} } % \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{} - } +\AssignSocketPlug{tagsupport/fntext/mark}{FENoteLbl} % \end{macrocode} -% \begin{macro}{\tag@FENotetext} +% \end{plugdecl} +% +% +%^^A If tagging is produced this configuration point is also +%^^A responsible for surrounding the mark with the appropriate tags +%^^A marking the mark as an MC of type FENote. It does this using +%^^A the socket \socket{tagsupport/fntext/text}. % -% This command currently only adds an MC chunk, +% \begin{plugdecl}{FENotetext} +% +% This plug is for the kernel socket \socket{tagsupport/fntext/text} +% around the actual note text when doing tagging. +% Currently it 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 +\NewSocketPlug{tagsupport/fntext/text}{FENotetext} { + \tag_mc_end_push: \tag_mc_begin:n{} #1 \tag_mc_end: + \tag_mc_begin_pop:n{} } % \end{macrocode} -% \end{macro} +% +% \begin{macrocode} +\AssignSocketPlug{tagsupport/fntext/text}{FENotetext} +% \end{macrocode} +% \end{plugdecl} %------------------------------------- % \begin{macrocode} @@ -1849,7 +2090,7 @@ %<*footmisc> %% %% Copyright (c) 1995-2011 Robin Fairbairns -%% Copyright (c) 2018-2022 Robin Fairbairns, Frank Mittelbach +%% Copyright (c) 2018-2023 Robin Fairbairns, Frank Mittelbach %% %% This file is part of the `latex-lab Bundle'. %% -------------------------------------------- @@ -1864,9 +2105,6 @@ %% %% This work has the LPPL maintenance status 'maintained'. %% -%% -%% File: footmisc.dtx (C) Copyright 1995-2011 Robin Fairbairns -%% (C) Copyright 2018-2022 Frank Mittelbach \NeedsTeXFormat{LaTeX2e} \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} @@ -1916,14 +2154,14 @@ option "para"}% {I shall ignore "\CurrentOption"}% \else - \def\@footnotetext@cfgpoint {\marginpar} \AddToHook{fntext/para}{% \hsize\marginparwidth % correct the default \hsize \footnotesep\z@ % don't add a default separation } - \def\@footnotetext@cfgpointii {\@makefntext} - \def\@footnotetext@cfgpointiii {} - \def\@footnotetext@cfgpointiv {} + \AssignSocketPlug{fntext/process}{side} +% \AssignSocketPlug{fntext/make}{default} + \AssignSocketPlug{fntext/begin}{noop} + \AssignSocketPlug{fntext/end}{noop} \fi } \let\footnotelayout\@empty @@ -1992,25 +2230,16 @@ \DeclareOption{multiple}{\FN@multiplefootnotetrue} \ProcessOptions % \end{macrocode} -% This version of \pkg{footmisc} can assume that the new OR code is -% already available, thus nothing needs loading at this -% point. However, as long as we use this code also in a package -% version that can be loaded by other package while we are in a -% transition phase it is not clear whether not the kernel code is -% already available for other packages. -% \begin{macrocode} -%\@ifundefined{@kernel@before@cclv} -% {\input{latex-lab-new-or.ltx}}{} -% \end{macrocode} % % Footnote box layout for para footnotes; % this would also be the hook to support dblfootnotes (from the % \texttt{dblfnote} package if we integrate that). % \begin{macrocode} \ifFN@para - \def\@makecol@cfgpointii {% + \NewSocketPlug{@makecol/footnotes}{para}{% \global\setbox\footins\vbox{\FN@makefootnoteparagraph}% } + \AssignSocketPlug{@makecol/footnotes}{para} \fi % \end{macrocode} % @@ -2038,64 +2267,29 @@ % \end{macrocode} % % -% % \begin{macrocode} \ifcase \FN@bottomcases\relax -\ERROR -\or + \ERROR +\or %1 \ifFN@abovefloats - \def\@makecol@cfgpoint {% - \@if@footnotes@TF - {\@outputbox@append{\vfill}}% - {\@if@bfloats@TF{\@outputbox@append{\vfill}}% - {\@outputbox@reinsertbskip}}% - \@outputbox@appendfootnotes - \@outputbox@attachfloats - } + \AssignSocketPlug {@makecol/outputbox}{space-footnotes-floats} \else - \def\@makecol@cfgpoint {% - \@outputbox@attachfloats - \@if@footnotes@TF - {\@outputbox@append{\vfill}}% - {\@outputbox@reinsertbskip}% - \@outputbox@appendfootnotes - } + \AssignSocketPlug {@makecol/outputbox}{floats-footnotes-space} \fi -\or +\or %2 \ifFN@abovefloats - \def\@makecol@cfgpoint {% - \@outputbox@appendfootnotes - \@if@bfloats@TF - {\@outputbox@append{\vfill}}% - {\@outputbox@reinsertbskip}% - \@outputbox@attachfloats - } + \AssignSocketPlug {@makecol/outputbox}{footnotes-space-floats} \else - \def\@makecol@cfgpoint {% - \@if@footnotes@TF - {\@outputbox@append{\vfill}}% - {\@if@bfloats@TF{\@outputbox@append{\vfill}}% - {\@outputbox@reinsertbskip}}% - \@outputbox@attachfloats - \@outputbox@appendfootnotes - } + \AssignSocketPlug {@makecol/outputbox}{space-floats-footnotes} \fi -\or +\or %3 \ifFN@abovefloats - \def\@makecol@cfgpoint {% - \@outputbox@appendfootnotes - \@outputbox@attachfloats - \@outputbox@reinsertbskip - } + \AssignSocketPlug {@makecol/outputbox}{footnotes-floats} \else - \def\@makecol@cfgpoint {% - \@outputbox@attachfloats - \@outputbox@appendfootnotes - \@outputbox@reinsertbskip -} + \AssignSocketPlug {@makecol/outputbox}{floats-footnotes} \fi \else -\ERROR + \ERROR \fi % next can be dropped when cleaned up @@ -2120,24 +2314,12 @@ \ifFN@para - \def\@footnotetext@cfgpoint {\insert\footins} - \long\def\@footnotetext@cfgpointii #1{% - \setbox\FN@tempboxa\hbox{\@makefntext{#1}}% - \dp\FN@tempboxa\z@ - \ht\FN@tempboxa - \dimexpr\wd\FN@tempboxa *% - \footnotebaselineskip /\columnwidth\relax - \box\FN@tempboxa - } - - - \def\@footnotetext@cfgpointiii {} - \def\@footnotetext@cfgpointiv {% config point - \strut - \penalty-10\relax - \hskip\footglue - } +% \AssignSocketPlug{fntext/process}{default} + \AssignSocketPlug{fntext/make}{para} + \AssignSocketPlug{fntext/begin}{noop} + \AssignSocketPlug{fntext/end}{para} + \fi @@ -2211,7 +2393,7 @@ % perpage is loaded this results in updating counters on the reset % list to 1 (or to a higher starting value if \cs{MakePerPage} is % used with an optional argument, which is precisely the problem -% here. By subtracting 1 in that case we set it back to 1 lower +% here). By subtracting 1 in that case we set it back to 1 lower % than the starting value. % % But to make this fully work we also need to update a support @@ -2236,10 +2418,7 @@ %} -\AddToHook{fntext/begin}{\nobreak \hspace{.2em}} - - - + \AddToHook{fntext/begin}{\nobreak \hspace{.2em}} \else @@ -2296,7 +2475,11 @@ \ifFN@multiplefootnote \providecommand*{\multiplefootnotemarker}{3sp} -% we tag the separator as artifact +% \end{macrocode} +% +% We tag the separator as artifact +% \fmi{why is this done with \cs{providecommand}?} +% \begin{macrocode} \ExplSyntaxOn \providecommand*{\multfootsep}{\tag_mc_end_push:\tag_mc_begin:n{artifact},\tag_mc_end:\tag_mc_begin_pop:n{}} \ExplSyntaxOff @@ -2526,7 +2709,7 @@ {\mathparagraph\mathparagraph\mathparagraph}% } \newcommand\mpfootnotemark{% - \@ifnextchar[% + \@ifnextchar[%] \@xmpfootnotemark {% \stepcounter\@mpfn 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 b4f848dcbf..6736fc5132 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx index f9457e0524..1db0277425 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx @@ -15,6 +15,8 @@ % https://github.com/latex3/latex2e/required/latex-lab % % for those people who are interested or want to report an issue. +\def\ltlabgraphicdate{2023-07-20} +\def\ltlabgraphicversion{0.80a} % %<*driver> \documentclass{l3doc} @@ -31,7 +33,7 @@ % \title{The \textsf{latex-lab-graphic} package\\ % Tagging of included graphics } % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{v0.8 2023-04-07} +% \date{v\ltlabgraphicversion\ \ltlabgraphicdate} % % \maketitle % @@ -174,7 +176,7 @@ % \begin{implementation} % \section{Implementation} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-graphic} {2023-04-07} {0.8} +\ProvidesExplPackage {latex-lab-testphase-graphic} {\ltlabgraphicdate} {\ltlabgraphicversion} {Code related to the tagging of graphics} % \end{macrocode} % We load l3opacity for the debug code @@ -1066,7 +1068,7 @@ % \begin{macrocode} %<*latex-lab> \ProvidesFile{graphic-latex-lab-testphase.ltx} - [2023-04-07 v0.8 code related to the tagging included graphics] + [\ltlabgraphicdate\space v\ltlabgraphicversion\space latex-lab wrapper graphic] \RequirePackage{latex-lab-testphase-graphic} % % \end{macrocode} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf index 563b0f1329..03f3d0b3f5 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-math.dtx b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx new file mode 100644 index 0000000000..d593f93320 --- /dev/null +++ b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx @@ -0,0 +1,1314 @@ +% \iffalse meta-comment +% +%% File: latex-lab-math.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\ltlabmathdate{2023-09-11} +\def\ltlabmathversion{0.5c} +% +%<*driver> +\documentclass{l3doc} +\EnableCrossrefs +\CodelineIndex + +\usepackage{todonotes} + +\begin{document} + \DocInput{latex-lab-math.dtx} +\end{document} +% +% +% \fi +% +% +% \title{The \texttt{latex-lab-math} code\thanks{}} +% \author{Frank Mittelbach, Joseph Wright, \LaTeX{} Project} +% \date{v\ltlabmathversion\ \ltlabmathdate} +% +% \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-math.ltx} + [\ltlabmathdate\space + v\ltlabmathversion\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}} +% \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 +% \end{macrocode} +% We do not want math tagging in fakemath or when measuring, +% so we imitate the test inside +% \cs{@@_process:nn} for now, see https://github.com/latex3/tagging-project/issues/5 +% \begin{macrocode} + \legacy_if:nTF { measuring@ } + { #1 $ } + { + \tl_if_in:nnTF {#1} { \m@th } + { #1 $ } + { + \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 + $$ + } + } +% \end{macrocode} +% To allow to use the code without tagging we guard. But probably tagpdf should +% provide some tools for such manual para-ends. +% \begin{macrocode} +\cs_new_protected:Npn \@kernel@close@P { + \tag_if_active:T + { + \tagmcend %end P-chunk, should perhaps be \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 +% \end{macrocode} +% This reinserts the below display skips. It must be doubled to +% get the right amount: +% \begin{macrocode} + \skip_vertical:n { -\l_@@_tmpa_skip * 2 } +% + \@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 + { + LaTeX~ formula~ starts~ + \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} + \space LaTeX~ formula~ ends~ + } + \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} +% \end{macrocode} +% flipping the \cs{belowdisplay} values is done so that we get (assumption) +% a negative skip and not make the page bigger then we take that out, +% then we add the tagging code (in \cs{@@_tag_dollardollar_display_end} ) and +% then we put a real \cs{postdisplaypenalty} in and +% the right skip (of which we don't know if it is short or a +% normal \cs{belowdisplayskip}). This might need some refinement if that skip +% is actually negative from the start +% (not sure it ever is and is worth bothering about) +% \begin{macrocode} + \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} +% +% \end{macrocode} +% +% \Finale +% +% diff --git a/macros/latex-dev/required/latex-lab/latex-lab-math.pdf b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf new file mode 100644 index 0000000000..f68397d94a Binary files /dev/null and b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf index f2362e1f8e..a8c65f5f9c 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf 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 deleted file mode 100644 index 923001f559..0000000000 --- a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.dtx +++ /dev/null @@ -1,1280 +0,0 @@ -% \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} -% -% -% \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 - { - LaTeX~ formula~ starts~ - \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} - \space LaTeX~ formula~ ends~ - } - \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} -% -% \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 deleted file mode 100644 index 4df1f5e141..0000000000 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-mathtagging.pdf and /dev/null differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf index eb53e235bb..8dec843fe9 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx index 00b1d649a1..bbd40a3c52 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabminipagedate{2023-08-20} +\def\ltlabminipageversion{0.81b} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -27,15 +29,11 @@ % % \fi % - -\def\ltlistsversion{v0.81} -\def\ltlistsdate{2023/05/10} - % % \title{The \textsf{latex-lab-minipage} package\\ % Changes related to the tagging of minipage and parbox} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{\ltlistsversion\ \ltlistsdate} +% \date{v\ltlabminipageversion\ \ltlabminipagedate} % % \maketitle % @@ -64,9 +62,15 @@ % % \section{Implementation} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-minipage} {2023-05-10} {0.81} +\ProvidesExplPackage {latex-lab-testphase-minipage} + {\ltlabminipagedate} {\ltlabminipageversion} {Code related to the tagging of minipages and parboxes} % \end{macrocode} +% As minipage uses a socket from the footnote code we must load the OR-code: +% \begin{macrocode} +\RequirePackage{latex-lab-testphase-new-or-1} +\RequirePackage{latex-lab-testphase-new-or-2} +% \end{macrocode} % % \subsection{Provide the kernel hooks} @@ -111,7 +115,7 @@ \textwidth\hsize \columnwidth\hsize \@parboxrestore \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ - \let\@footnotetext\@mpfootnotetext + \AssignSocketPlug{fntext/process}{mp}% \let\@listdepth\@mplistdepth \@mplistdepth\z@ \@minipagerestore \@setminipage} @@ -196,7 +200,8 @@ % \begin{macrocode} %<*latex-lab> \ProvidesFile{minipage-latex-lab-testphase.ltx} - [2022-10-26 v0.8 code related to the tagging of sectioning commands] + [\ltlabminipagedate\space v\ltlabminipageversion + code related to the tagging of minipage and parbox] \RequirePackage{latex-lab-testphase-minipage} % % \end{macrocode} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf index ca89cd0b8f..ac235aef7d 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx new file mode 100644 index 0000000000..2ec9b0584b --- /dev/null +++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx @@ -0,0 +1,100 @@ +% \iffalse meta-comment +% +%% File: latex-lab-namespace.dtx (C) Copyright 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-namespace.dtx} +\end{document} +% +% \fi +% \title{Prototype reimplementation of \LaTeXe{}'s role mapping} +% \author{\LaTeX{} Project, initial implementation Ulrike Fischer} +% \date{v0.8 2023-09-04} +% +% \maketitle +% +% \begin{documentation} +% +% +% +% \section{Introduction} +% +% This short file collects tag names from the \LaTeX{} namespace and their role mapping used +% in the latex-lab files. The names and the roles are not necessarly the final ones! +% +% Later settings of the same tag overwrite previous settings. +% The syntax of a line is a list of three strings ending with commas: +% \begin{verbatim} +% latex-tag, PDF-tag, name space, +% \end{verbatim} +% +% The name space is normally pdf2 with the exception of the following PDF-tags +% which are only in pdf namespace: +% Art, BlockQuote, TOC, TOCI, Index, Private, Quote, Note, +% Reference, BibEntry, Code. +% +% \end{documentation} +% \begin{implementation} +% \begin{macrocode} +%<*ns-latex-lab> +%% \ProvidesExplFile {tagpdf-ns-latex-lab.def} {2023-09-04} {0.8} +%% {latex} {https://www.latex-project.org/ns/lab/2022}{} +% \end{macrocode} +% \subsection{Role from tagpdf} +% The following tags are already set by tagpdf, so deleting here will not remove them. +% \begin{macrocode} +title, Title, pdf2, +part, Title, pdf2, +section, H1, pdf2, +subsection, H2, pdf2, +subsubsection,H3, pdf2, +paragraph, H4, pdf2, +subparagraph, H5, pdf2, +list, L, pdf2, +itemize, L, pdf2, +enumerate, L, pdf2, +description, L, pdf2, +quote, BlockQuote,pdf, +quotation, BlockQuote,pdf, +verbatim, Div, pdf2, +item, LI, pdf2, +itemlabel, Lbl, pdf2, +itembody, LBody, pdf2, +footnote, FENote, pdf2, +footnotemark, Lbl, pdf2, +footnotelabel,Lbl, pdf2, +text-unit, Part, pdf2, +text, P, pdf2, +% \end{macrocode} +% \subsection{From block code} +% \begin{macrocode} +theorem-like, Sect, pdf2, +verbatim, P, pdf2, +codeline, Sub, pdf2, +% \end{macrocode} +% \subsection{From float code} +% \begin{macrocode} +float, Aside, pdf2, +figures, Sect, pdf2, +tables, Sect, pdf2, +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +% \end{implementation} +\endinput diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf new file mode 100644 index 0000000000..e0c02494ca Binary files /dev/null and b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf 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 index ef799e813c..cc60f50de0 100644 --- 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 @@ -9,6 +9,8 @@ % % https://www.latex-project.org/lppl.txt % +\def\ltlabneworIdate{2023-07-20} +\def\ltlabneworIversion{0.85a} %<*driver> \documentclass{l3doc} @@ -27,7 +29,8 @@ % % \title{Temporary output patches for tagging and better link support} % \author{Frank Mittelbach \and Ulrike Fischer} -% +% \date{v\ltlabneworIversion\ \ltlabneworIdate} +% % \maketitle % % \section{Introduction} @@ -47,12 +50,13 @@ % % \section{The Implementation} % \begin{macrocode} -%<*code> +%<*package> % \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] + [\ltlabneworIdate\space v\ltlabneworIversion\space + Temporary output patches for tagging and better link support] \RequirePackage{etoolbox} % \end{macrocode} % @@ -94,18 +98,36 @@ % % 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{} +\providecommand\@kernel@before@footins{} +\providecommand\@kernel@tagsupport@@makecol{} - \patchcmd\@makecol - {\vskip\skip\footins} - {\vskip\skip\footins\@kernel@before@footins} - {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror } +\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 ... +\patchcmd\@makecol + {\let\@elt\relax} + {\@kernel@tagsupport@@makecol\let\@elt\relax} + {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror } - \pretocmd\@makecol{\@kernel@before@cclv} - {\typeout{Patching \string\@makecol\space for tagging}}{\PATCHerror } +\AddToHook{package/footmisc/after} + {% + \def\@makecol{% + \setbox\@outputbox \box\@cclv + \@outputbox@removebskip + \@kernel@tagsupport@@makecol + \let\@elt\relax + \xdef\@freelist{\@freelist\@midlist}% + \global \let \@midlist \@empty + \@makecol@appendblocks + \ifvbox\@kludgeins + \@makespecialcolbox + \else + \@makenormalcolbox + \fi + \global \maxdepth \@maxdepth} +} % \end{macrocode} % \end{macro} % @@ -150,9 +172,16 @@ \def\@kernel@after@foot {\pdfannot_link_on:} \ExplSyntaxOff % \end{macrocode} -% % \begin{macrocode} -% +% +% \end{macrocode} +% \begin{macrocode} +%<*latex-lab> +\ProvidesFile{new-or-1-latex-lab-testphase.ltx} + [\ltlabneworIdate\space v\ltlabneworIversion\space + latex-lab wrapper new-or-1] +\RequirePackage{latex-lab-testphase-new-or-1} +% % \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 index 1e97867f2a..3f68d29e3e 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx index 74d56d687f..d2011256b1 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % %% File: latex-lab-new-or-2.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 @@ -17,6 +17,9 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabneworIIdate{2023-09-04} +\def\ltlabneworIIversion{0.85c} + %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -31,41 +34,58 @@ % % \title{The \texttt{latex-lab-testphase-new-or-2} code\thanks{}} % \author{Frank Mittelbach, \LaTeX{} Project} -% +% % \date{v\ltlabneworIIversion\ \ltlabneworIIdate} % \maketitle % % \newcommand\fmi[1]{\begin{quote} TODO: \itshape #1\end{quote}} % \newcommand\NEW[1]{\marginpar{\mbox{}\hfill\fbox{New: #1}}} % \providecommand\pkg[1]{\texttt{#1}} % +% \providecommand\hook[1]{\texttt{#1\DescribeHook[noprint]{#1}}} +% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}} +% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}} +% +% \NewDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl} +% \NewDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl} +% \NewDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl} +% +% % \begin{abstract} +% This code implements changes to the output routine intended to be +% moved in the \LaTeX{} kernel at some point in the future. % \end{abstract} % -% \section{Introduction} -% -% This code implements changes to the output routine. % % % +% \section{Introduction} % -% \section{Hooks and configuration points} % -% Note: the configuration points do not have an interface mechanism -% yet and all their names are temporary right now. +% \section{Hooks and replaceable code blocks} % % -% \subsubsection{Configuration points} +% \subsubsection{Replaceable code blocks (sockets)} % % To cater for different layouts with respect to text, footnotes, -% and bottom-floats placements there are two configuration points for +% and bottom-floats placements there are two sockets for % now. % \begin{description} -% \item[\cs{@makecol@cfgpoint} (0 arguments)] +% \item[\socket{@makecol/outputbox} (0 arguments)] % -% In this configuration point the \cs{@outputbox} (holding the +% In code for this socket the \cs{@outputbox} (holding the % galley text for the current column or page) is augmented by % attaching floats and footnote areas together with appropriate -% spacing. Before the code is run any existing glue at the bottom +% spacing. +% +% Prior to calling the socket the output routine has already +% decided which floats go into which area and which get deferred. +% Therefore, the assumption is that the code in the socket attaches all +% areas that contain floats. If this is not done, then the order +% of floats is likely to be screwed up unless unused floats +% are moved to the defer list in an appropriate way (for now we +% don't offer any interface for that scenario). +% +% Before the code in the socket is run, any existing glue at the bottom % of the \cs{@outputbox} is removed and stored in a safe % place. If needed, it can be reinserted with one of the helper % commands. @@ -74,17 +94,25 @@ % \begin{description} % \item[\cs{@outputbox@append} (1 argument)] % +% \DescribeMacro[noprint]{@outputbox@append} +% % This general purpose command alters the \cs{@outputbox} box by % appending material to it. % % \item[\cs{@outputbox@appendfootnotes} (0 arguments)] % +% \DescribeMacro[noprint]{@outputbox@appendfootnotes} +% % This command appends the footnotes to the \cs{@outputbox} (if % there are any). If not, then it does nothing. % % \item[\cs{@outputbox@attachfloats} (0 arguments)] % \item[\cs{@outputbox@attachtopfloats} (0 arguments)] % \item[\cs{@outputbox@attachbottomfloats} (0 arguments)] +% +% \DescribeMacro[noprint]{@outputbox@attachfloats} +% \DescribeMacro[noprint]{@outputbox@attachtopfloats} +% \DescribeMacro[noprint]{@outputbox@attachbottomfloats} % % Attaching top and bottom floats can usually be done in one % go, but for special layouts we might want more control so we @@ -92,11 +120,16 @@ % % \item[\cs{@outputbox@reinsertbskip} (0 arguments)] % +% \DescribeMacro[noprint]{@outputbox@reinsertbskip} +% % Reinsert the bottom skip of the \cs{@outputbox} that was % saved before. % % \item[Testing for existence of material] % +% \DescribeMacro[noprint]{@if@footnotes@TF} +% \DescribeMacro[noprint]{@if@bfloats@TF} +% % There are a number of helpers to run conditional code % depending on whether or not there are footnotes or bottom % floats. They are \cs{@if@footnotes@TF} and @@ -104,16 +137,67 @@ % (names are likely to change). % % \end{description} -% This configuration point needs an appropriate definition; a -% default is already given in the kernel. % -% \item[\cs{@makecol@cfgpointii} (0 arguments)] +% \fmi{Decide on names for these helper commands. We could keep +% them similar to the above (because they are only supposed to be +% used by a few packages). However, we could alternatively use +% CamelCase names, under the assumption that classes may also +% directly define a plug for the socket, instead of loading a +% support package such as \pkg{footmisc} (or in addition +% to). --- decide} +% +% This socket cannot be empty but needs appropriate code; a set +% of suitable plugs for it are already given in the kernel. These +% are +% \begin{description} +% \item[\plug{space-footnotes-floats}] +% +% After the galley text there is a vertical \cs{vfill} +% followed by any footnotes followed by the bottom floats, if any. +% +% \item[\plug{floats-footnotes-space}] +% +% As before but the \cs{vfill} is at the bottom (page is +% ragged bottom). +% +% \item[\plug{footnotes-space-floats}] +% +% As before but the \cs{vfill} is between footnotes and floats. % -% This configuration point is used to manipulate the footnote +% \item[\plug{space-floats-footnotes}] +% +% Here the footnotes come last.\footnote{There are two more +% permutations, but neither of them has ever been requested so +% they aren't set up by default --- doing that in a class +% would be trivial though.} +% +% \item[\plug{floats-footnotes}] +% +% All excess space has to be distributed across the existing +% glue on the page, e.g., within the text galley, the +% separation between blocks, etc. +% The order is text, floats, footnotes. +% +% \item[\plug{footnotes-floats}] +% +% As the previous one but floats and footnotes are +% swapped. This is the \LaTeX{} default, i.e., this plug is +% assigned to the socket. +% +% \end{description} +% +%----------------------- +% +% \item[\socket{@makecol/footnotes} (0 arguments)] +% +% This socket is used to manipulate the footnote % material inside \cs{box}\cs{footins}. It if contains code, it % is supposed to do some processing of that box and then write % the result back into it (and nothing else!). By default it -% does nothing. +% does nothing, i.e., has the \plug{noop} assigned. +% +% If (short) footnotes are run as a paragraph this socket gets +% the plug \plug{para} assigned which is defined elsewhere. % % \end{description} % @@ -123,28 +207,32 @@ % \section{The Implementation} % % \begin{macrocode} -%<*code> +%<*package> % \end{macrocode} % % \subsection{File declaration} % \begin{macrocode} \ProvidesPackage{latex-lab-testphase-new-or-2} - [2022-11-04 v0.1c changes to the output routine] + [\ltlabneworIIdate\space v\ltlabneworIIversion\space + Changes to the output routine] % \end{macrocode} +% % \subsection{\cs{@makecol} reimplementation} % % In order for other packages to prepend or append code to -% \cs{@makecol}, they can use the generic command hooks -% \texttt{cmd/@makecol/before} and \texttt{cmd/@makecol/after}, so -% there is nothing we need to do here. +% \cs{@makecol} the generic command hooks +% \texttt{cmd/@makecol/before} and \texttt{cmd/@makecol/after} can +% be used, so for now there is nothing we need to do for this. % % % \begin{macro}{\@makecol} % \cs{@makecol} is shortened a lot, basically all the hardwired -% code in the middle has moved into a configuration point. +% code in the middle has moved into a socket. % \begin{macrocode} \def \@makecol {% - \@kernel@before@cclv +% \end{macrocode} +% Save away box 255 as \cs{@outputbox} to make it available for further adjustments. +% \begin{macrocode} \setbox\@outputbox \box\@cclv % \end{macrocode} % The only real addition is the next command which either does @@ -153,25 +241,31 @@ % \begin{macrocode} \@outputbox@removebskip % \end{macrocode} -% Any ``here'' floats in the \cs{@outputbox} are now handled so we +% Now a kernel hook for tagging. +% \fmi{The name is likely to change and it probably will eventually +% be replaced with a socket.} +% \begin{macrocode} + \@kernel@tagsupport@@makecol +% \end{macrocode} +% When this code is run any ``here'' floats in the \cs{@outputbox} are already handled, so we % recycle their registers and put them back to the \cs{@freelist}. % \begin{macrocode} \let\@elt\relax \xdef\@freelist{\@freelist\@midlist}% \global \let \@midlist \@empty % \end{macrocode} -% Here we have the configurable part. -% \fmi{Interface to configuration points will change in the future} +% Here we have the configurable part. This socket is supposed to add floats, +% footnotes and stretchable vertical space as appropriate to the \cs{@outputbox}. % \begin{macrocode} - \@makecol@cfgpoint + \UseSocket{@makecol/outputbox}% % \end{macrocode} -% The we deal with any \cs{enlargethispage} or run the normal code +% Then we deal with any \cs{enlargethispage} or run the normal code % to build a column. % \begin{macrocode} \ifvbox\@kludgeins - \@makespecialcolbox + \@make@specialcolbox \else - \@makenormalcolbox + \@make@normalcolbox \fi \global \maxdepth \@maxdepth } @@ -188,10 +282,10 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@makenormalcolbox} +% \begin{macro}{\@make@normalcolbox} % Taken out of \cs{@makecol} for readability. % \begin{macrocode} -\def \@makenormalcolbox {% +\def \@make@normalcolbox {% \setbox\@outputbox \vbox to\@colht {% \@texttop \@outputbox@depth \dp\@outputbox @@ -204,10 +298,10 @@ % \end{macro} % % -% \begin{macro}{\@makespecialcolbox} +% \begin{macro}{\@make@specialcolbox} % Make the colbox when \cs{enlargethispage} was used. % \begin{macrocode} -\def \@makespecialcolbox {% +\def \@make@specialcolbox {% \@outputbox@append {\vskip-\@outputbox@depth}% \@tempdima \@colht \ifdim \wd\@kludgeins>\z@ @@ -235,7 +329,7 @@ % \begin{macro}{\@outputbox@removebskip} % % This is really a bug fix for the kernel but one we only -% automatically make in new documents using \cs{DocumentMetadata}. +% automatically make in new documents that are using \cs{DocumentMetadata}. % \fmi{may make optional for legacy docs} % If % \cs{raggedbottom} is in force, footnotes get attached to the main @@ -248,7 +342,7 @@ % short, but the footnotes are not pushed to the bottom. % % In \pkg{footmisc} \cs{@outputbox@removebskip} is only applied when -% \pkg{footmisc} is called with with an option specifying the +% \pkg{footmisc} is called with an option specifying the % footnote placement, i.e., not in the default case. % In new documents we apply it always. % \begin{macrocode} @@ -270,6 +364,7 @@ \ifnum \gluestretchorder\@tempskipa>\z@ \vskip-\@tempskipa % \end{macrocode} +% % \begin{macro}{\@outputbox@reinsertbskip} % We also record the value so that it can be reinserted % elsewhere. As we have to do this globally, we also need to @@ -295,25 +390,28 @@ % % % -% \begin{macro}{\@kernel@before@cclv} -% \begin{macro}{\@kernel@before@footins} +% \begin{macro}{\@kernel@before@cclv, +% \@kernel@before@footins} % These two commands are internal kernel hooks intended for tagging -% support in case that is active. By default they do nothing (and +% support in case that is active. They should not be altered by package code! +% By default they do nothing (and % may have been defined already by \cs{DocumentMetadata}). +% \fmi{The names might change and perhaps each of them is turned +% into a socket named something like \socket{tagsupport/before/cclv} +% or similar.} % \begin{macrocode} \providecommand\@kernel@before@cclv{} \providecommand\@kernel@before@footins{} % \end{macrocode} % \end{macro} -% \end{macro} % % % % % \subsection{The output routine configuration components} % -% Here we provide the components that are used to define -% \cs{@makecol@cfgpoint}. +% Here we provide the components that are used to define code for the +% \socket{@makecol/outputbox} socket. % % % \begin{macro}{\@outputbox@append} @@ -346,7 +444,7 @@ % \begin{macro}{\@outputbox@appendfootnotes} % % This command appends the footnotes to the \cs{@outputbox} (if -% there are any). If not then it does nothing. +% there are any). If not, then it does nothing. % \begin{macrocode} \def\@outputbox@appendfootnotes {% \ifvoid\footins \else @@ -354,22 +452,34 @@ % First come two configuration points: what to do if we are in a split % footnote situation and a second one that does some manipulation % of the \cs{footins} box before it gets appended. -% \fmi{this code will get revised as part of CP handling in the future} +% \fmi{The code for handling split footnotes will get revised as part of socket handling in the future} % \begin{macrocode} \@makecol@handlesplitfootnotes - \@makecol@cfgpointii +% \end{macrocode} +% +% \begin{macrocode} + \UseSocket{@makecol/footnotes}% % \end{macrocode} % Then the footnotes are appended: % \begin{macrocode} \@outputbox@append{% \vskip \skip\footins +% \end{macrocode} +% This is a kernel hook for tagging. +% \fmi{The name is likely to change and it probably will eventually +% be replaced with a socket.} +% \begin{macrocode} \@kernel@before@footins +% \end{macrocode} +% +% \begin{macrocode} \color@begingroup \normalcolor \footnoterule % \end{macrocode} % Support for \pkg{pdfcolfoot}, eventually this can go once color -% is properly supported. +% is properly supported. The csname is constructed in case it +% doesn't exist. % \begin{macrocode} \csname pdfcolfoot@current\endcsname \unvbox \footins @@ -435,17 +545,16 @@ % % % -% \begin{macro}{\@makecol@cfgpointii} +% \begin{socketdecl}{@makecol/footnote} % -% Configuration point to support manipulation of footins box -% (result needs to be moved back in there). Used by the -% \texttt{para} option. -% \fmi{Interface will change in the future} +% The socket allowing the manipulation of \cs{footins} box +% (result needs to be moved back in there). Used when footnotes are +% reformatted into a single paragraph by the +% \texttt{para} option of \pkg{footmisc}. By default it does nothing. % \begin{macrocode} -\let \@makecol@cfgpointii \@empty +\NewSocket{@makecol/footnotes}{0} % \end{macrocode} -% -% \end{macro} +% \end{socketdecl} % % % @@ -497,27 +606,124 @@ % \subsection{The \cs{@makecol} configuration} % % -% \begin{macro}{\@makecol@cfgpoint} +% \begin{socketdecl}{@makecol/outputbox} +% We have one socket that is supposed to augment the \cs{@outputbox} +% by attaching floats and footnotes with appropriate spacing. +% +% \begin{macrocode} +\NewSocket{@makecol/outputbox}{0} +% \end{macrocode} +% \end{socketdecl} +% +% The following plugs are available for +% this socket: +% +% \begin{plugdecl}{space-footnotes-floats} +% After the galley text there is a vertical \cs{vfill} followed by +% any footnotes followed by the bottom floats, if any. +% \begin{macrocode} +\NewSocketPlug {@makecol/outputbox}{space-footnotes-floats} {% + \@if@footnotes@TF + {\@outputbox@append{\vfill}}% + {\@if@bfloats@TF + {\@outputbox@append{\vfill}}% + {\@outputbox@reinsertbskip}% + }% + \@outputbox@appendfootnotes + \@outputbox@attachfloats +} +% \end{macrocode} +% \end{plugdecl} % -% Here is only the configuration for the default case for now, -% others are provided by \pkg{footmisc}. +% \begin{plugdecl}{floats-footnotes-space} +% As before but the \cs{vfill} is at the bottom (page is ragged +% bottom). +% \begin{macrocode} +\NewSocketPlug {@makecol/outputbox}{floats-footnotes-space} {% + \@outputbox@attachfloats + \@if@footnotes@TF + {\@outputbox@append{\vfill}}% + {\@outputbox@reinsertbskip}% + \@outputbox@appendfootnotes +} +% \end{macrocode} +% \end{plugdecl} % +% \begin{plugdecl}{footnotes-space-floats} +% As before but the \cs{vfill} is between footnotes and floats. % \begin{macrocode} - \def\@makecol@cfgpoint {% - \@outputbox@appendfootnotes - \@outputbox@attachfloats +\NewSocketPlug {@makecol/outputbox}{footnotes-space-floats} {% + \@outputbox@appendfootnotes + \@if@bfloats@TF + {\@outputbox@append{\vfill}}% + {\@outputbox@reinsertbskip}% + \@outputbox@attachfloats +} % \end{macrocode} -% We do, however, reinsert the bottom skip from \cs{newpage} if it +% \end{plugdecl} +% +% \begin{plugdecl}{space-floats-footnotes} +% Here the footnotes come last.\footnote{There are two more +% permutations, but neither of them has ever been requested so +% they aren't set up by default --- doing that in a class +% would be trivial though.} +% \begin{macrocode} +\NewSocketPlug {@makecol/outputbox}{space-floats-footnotes} {% + \@if@footnotes@TF + {\@outputbox@append{\vfill}}% + {\@if@bfloats@TF + {\@outputbox@append{\vfill}}% + {\@outputbox@reinsertbskip}}% + \@outputbox@attachfloats + \@outputbox@appendfootnotes +} +% \end{macrocode} +% \end{plugdecl} +% +% +% +% \begin{plugdecl}{floats-footnotes} +% All excess space has to be distributed across the existing +% glue on the page, e.g., within the text galley, the +% separation between blocks, etc. +% The order is text, floats, footnotes. +% \begin{macrocode} +\NewSocketPlug {@makecol/outputbox}{floats-footnotes} {% + \@outputbox@attachfloats + \@outputbox@appendfootnotes +% \end{macrocode} +% We do reinsert the bottom skip from \cs{newpage} if it % was taken out earlier. This is, strictly speaking, not necessary % in most cases, but it is a \cs{vfil} while \cs{raggedbottom} is % only generating \verb=\vspace{0pt plus .0001fil}=, so if you have % several \cs{vfil} on the page before the \cs{newpage} you would % alter the space distribution if one is taken out. % \begin{macrocode} - \@outputbox@reinsertbskip - } + \@outputbox@reinsertbskip +} % \end{macrocode} -% \end{macro} +% +% \end{plugdecl} +% +% \begin{plugdecl}{footnotes-floats} +% \begin{macrocode} +\NewSocketPlug {@makecol/outputbox}{footnotes-floats} {% + \@outputbox@appendfootnotes + \@outputbox@attachfloats + \@outputbox@reinsertbskip +} +% \end{macrocode} +% The \texttt{footnote-floats} plug is the default used by +% \LaTeX{}; it can be overwritten either through \pkg{footmisc} or +% by assigning any of the other plugs (or by coding yet another +% plug for the socket). +% \begin{macrocode} +\AssignSocketPlug {@makecol/outputbox}{footnotes-floats} +% \end{macrocode} +% \end{plugdecl} +% +% +% % % % \section {Replacement for the \pkg{footmisc} package} @@ -532,13 +738,14 @@ % % \section {Temp stuff that is related but should go to the kernel} % +% This is the code from \texttt{latex-lab-footnotes.dtx}. % \begin{macrocode} \input{latex-lab-footnotes.ltx} % \end{macrocode} % % % \begin{macrocode} -% +% % \end{macrocode} % % \Finale diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf index c0ec1ce19e..2846071100 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx index 5df3803b54..d20c55624b 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabsecdate{2023-07-20} +\def\ltlabsecversion{0.84a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -31,7 +33,7 @@ % \title{The \textsf{latex-lab-sec} package\\ % Changes related to the tagging of sectioning commands} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{v0.83 2023-06-07} +% \date{v\ltlabsecversion\ \ltlabsecdate} % % \maketitle % @@ -147,7 +149,7 @@ % % \section{Implementation} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-sec} {2023-05-20} {0.81} +\ProvidesExplPackage {latex-lab-testphase-sec} {\ltlabsecdate} {\ltlabsecversion} {Code related to the tagging of sectioning commands} % \end{macrocode} % @@ -177,10 +179,12 @@ % \begin{macrocode} %<*kernelchange> \ifdefined\directlua - \pdfvariable gentounicode =1 - \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode } - \protected\edef\pdfgentounicode {\pdfvariable gentounicode} - \input{glyphtounicode} + \ifnum\outputmode > 0 + \pdfvariable gentounicode =1 + \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode } + \protected\edef\pdfgentounicode {\pdfvariable gentounicode} + \input{glyphtounicode} + \fi \fi \ifdefined\pdfglyphtounicode \input{glyphtounicode-cmex} @@ -437,45 +441,48 @@ % \end{macrocode} % This redefines \cs{part} in article class. % \begin{macrocode} - \RenewDocumentCommand\part{ s O{#3} m } + \@ifundefined{part}{} { - \if@noskipsec \leavevmode \fi - \par - \addvspace{4ex}% - \@afterindentfalse + \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} + \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]{} - } + \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} } + \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} - } + \tag_tool:n {sec-stop-part} + } + } } % \end{macrocode} % Redefinitions for book and report @@ -812,8 +819,8 @@ % \begin{macrocode} %<*latex-lab> -\ProvidesFile{sec-tagging-latex-lab-testphase.ltx} - [2023-05-20 v0.82 code related to the tagging of sectioning commands] +\ProvidesFile{sec-latex-lab-testphase.ltx} + [\ltlabsecdate\space v\ltlabsecversion\space latex-lab wrapper sec] \RequirePackage{latex-lab-testphase-sec} % % \end{macrocode} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf index 917b5c9bcf..ca042a4314 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf 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 ce882030e8..b2ed5ecf8a 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx @@ -41,11 +41,14 @@ % \section{Introduction} % % This code implements small files which can be loaded with the |testphase| -% key of \cs{DocumentMetadata}. This will be extended to allow user to load +% key of \cs{DocumentMetadata} and which bundle various testphase modules. +% This will be extended to allow user to load % well defined parts of the tagged PDF project. -% Currently the values |phase-I|, |phase-II| and |new-or| are provided. -% |tagpdf| is an undocumented alias for |phase-II| which is kept for compability. % +% Currently the values |phase-I|, |phase-II|, |phase-III| and |new-or| (bundles |new-or-1| +% and |new-or-2|) are provided. +% |tagpdf| is an undocumented alias for |phase-II| which is kept for compability. +% The value |math| combines various math related files. % % \StopEventually{\setlength\IndexMin{200pt} \PrintIndex } % @@ -53,17 +56,12 @@ % \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] -% -% \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] + [2023-06-15 v0.1b latex-lab wrapper new-or] % % \end{macrocode} % \begin{macrocode} @@ -75,17 +73,17 @@ % \begin{macrocode} %<*phase-II> \ProvidesFile{phase-II-latex-lab-testphase.ltx} - [2022-11-04 v0.1a latex-lab wrapper phase-II] + [2023-06-15 v0.1b latex-lab wrapper 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] + [2023-07-20 v0.1b latex-lab wrapper phase-III] \input{phase-II-latex-lab-testphase.ltx} \IfFormatAtLeastTF{2023-06-01} { - \RequirePackage{latex-lab-testphase-block-tagging} + \RequirePackage{latex-lab-testphase-block} \RequirePackage{latex-lab-testphase-sec} \RequirePackage{latex-lab-testphase-toc} \RequirePackage{latex-lab-testphase-minipage} @@ -106,11 +104,11 @@ % % \end{macrocode} % \begin{macrocode} -%<*tagpdf|phase-I|phase-II|new-or|new-or-1> +%<*tagpdf|phase-I|phase-II|new-or> \RequirePackage{latex-lab-testphase-new-or-1} -% +% % \end{macrocode} -% New output routine code is loaded in phase-II and new-or: +% Support for the new output routine code are loaded in phase-II and new-or: % \begin{macrocode} %<*tagpdf|phase-II|new-or> \RequirePackage{latex-lab-testphase-new-or-2} @@ -135,23 +133,23 @@ % \begin{macrocode} % % \end{macrocode} -% Wrapper files for math tagging: +% testphase wrapper files for math: % \begin{macrocode} -%<*math-lab> +%<*math> \ProvidesFile{math-latex-lab-testphase.ltx} - [2023-01-07 v0.8 code related to the math tagging] + [2023-07-20 v0.8a latex-lab wrapper math] \RequirePackage{latex-lab-testphase-math} -% +%
% \end{macrocode} % \begin{macrocode} -%<*math-sty> +%<*math-package> \ProvidesPackage{latex-lab-testphase-math} - [2023-01-07 v0.8 code related to the math tagging] -\input{latex-lab-mathtagging.ltx} + [2023-07-20 v0.8a code related to the math tagging] +\input{latex-lab-math.ltx} \input{latex-lab-amsmath.ltx} \input{latex-lab-mathtools.ltx} \input{latex-lab-mathpkg.ltx} -% +% % \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 4e48fddaa5..0fd13aba89 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-text.dtx b/macros/latex-dev/required/latex-lab/latex-lab-text.dtx index 0f31c45969..4041336ecb 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-text.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-text.dtx @@ -16,6 +16,9 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabtextdate{2023-07-20} +\def\ltlabtextversion{0.85a} + %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -30,7 +33,7 @@ % \title{The \textsf{latex-lab-text} package\\ % Changes and additions to the kernel related to the tagging of various small text commands} % \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} -% \date{Version 0.80 2023-05-28} +% \date{v\ltlabtextversion\ \ltlabtextdate} % % \maketitle % @@ -61,8 +64,8 @@ %<@@=tag> % \end{macrocode} % \begin{macrocode} -\ProvidesExplPackage {latex-lab-testphase-text} {2023-05-28} {0.8} - {Code related to the tagging of inline text commands} +\ProvidesExplPackage {latex-lab-testphase-text} {\ltlabtextdate} {\ltlabtextversion} + {Code related to the tagging of various small text commands} % \end{macrocode} % \subsection{The \LaTeX\ and \TeX\ logo} @@ -124,7 +127,8 @@ % \begin{macrocode} %<*latex-lab> \ProvidesFile{text-latex-lab-testphase.ltx} - [2023-05-28 v0.8 code related to the tagging of bib and citations] + [\ltlabtextdate\space v\ltlabtextversion\space + code related to the tagging of various small text commands] \RequirePackage{latex-lab-testphase-text} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf index 1e38ccd59d..4940583de0 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf 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 index 186f388a19..2f00b83c05 100644 --- 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 @@ -16,6 +16,8 @@ % % for those people who are interested or want to report an issue. % +\def\ltlabtochyperdate{2023-07-20} +\def\ltlabtochyperversion{0.85a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -29,7 +31,7 @@ % \title{The \textsf{latex-lab-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.83 2023-06-07} +% \date{v\ltlabtochyperversion\ \ltlabtochyperdate} % % \maketitle % diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf index 722c82af28..e00a26b141 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx index 1c1ce7f44e..632315a731 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx +++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: latex-lab-toc-kernel-functions.dtx (C) Copyright 2022-2023 LaTeX Project +%% File: latex-lab-toc-kernel-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 @@ -16,6 +16,9 @@ % % for those people who are interested or want to report an issue. % +% dates for latex-lab-kernel-changes.sty (pulled from various sources, see ins) +\def\ltlabkerneldate{2023-07-20} +\def\ltlabkernelversion{0.85a} %<*driver> \documentclass{l3doc} \EnableCrossrefs @@ -56,6 +59,13 @@ % They are marked as [class]. They are inserted with hooks here: this will break % if a non-standard class is used. % +% \subsection{Package declaration} +% \begin{macrocode} +%<*kernelchange> +\ProvidesPackage{latex-lab-kernel-changes} + [\ltlabkerneldate\space v\ltlabkernelversion\space + General kernel and class changes] +% \end{macrocode} % \subsection{Providing the counter representation \cs{theHxx} generally} % [kernel?] % @@ -67,7 +77,6 @@ % % At first we suppress the patches from hyperref: % \begin{macrocode} -%<*kernelchange> \def\hyper@nopatch@counter{} % \end{macrocode} % @@ -461,13 +470,3 @@ % \begin{macrocode} % % \end{macrocode} - -% \begin{macrocode} -%<*latex-lab> -\ProvidesFile{toc-tagging-latex-lab-testphase.ltx} - [2023-05-20 v0.81 code related to the tagging of toc and similar lists] - -\RequirePackage{latex-lab-testphase-toc} - -% -% \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 index 9994eebbf1..22016e835d 100644 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf and b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf 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 deleted file mode 100644 index a39ace44e5..0000000000 --- a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.dtx +++ /dev/null @@ -1,365 +0,0 @@ -% \iffalse meta-comment -% -%% File: latex-lab-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} -% -% -% \fi -% -% -% \title{The \textsf{latex-lab-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.82 2023-05-20} -% -% \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} {2023-05-20} {0.82} - { commands related to the tagging of toc-like lists} -% -% \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}\tag_stop:n{leaders}\nobreak#1\nobreak\tag_start:n{leaders}\tag_mc_end:} -% \end{macrocode} - -% -% \begin{macrocode} -% -% \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 deleted file mode 100644 index 8f52a2cc16..0000000000 Binary files a/macros/latex-dev/required/latex-lab/latex-lab-toc-tagging-functions.pdf and /dev/null differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx new file mode 100644 index 0000000000..81f6676a80 --- /dev/null +++ b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx @@ -0,0 +1,377 @@ +% \iffalse meta-comment +% +%% File: latex-lab-toc.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. +% +\def\ltlabtocdate{2023-07-20} +\def\ltlabtocversion{0.85a} +%<*driver> +\documentclass{l3doc} +\EnableCrossrefs +\CodelineIndex +\begin{document} + \DocInput{latex-lab-toc.dtx} +\end{document} +% +% +% \fi +% +% +% \title{The \textsf{latex-lab-toc} package\\ +% Changes related to the tagging of toc and similar lists} +% \author{\LaTeX{} Project\thanks{Initial implementation done by Ulrike Fischer}} +% \date{v\ltlabtocdate\ \ltlabtocversion} +% +% \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} {\ltlabtocdate} {\ltlabtocversion} + { Code related to the tagging of toc-like lists} +% +% \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}\tag_stop:n{leaders}\nobreak#1\nobreak\tag_start:n{leaders}\tag_mc_end:} +% \end{macrocode} + +% +% \begin{macrocode} +% +% \end{macrocode} +% Wrapper for the testphase key. +% \begin{macrocode} +%<*latex-lab> +\ProvidesFile{toc-latex-lab-testphase.ltx} + [\ltlabtocdate\space v\ltlabtocversion latex-lab wrapper toc] + +\RequirePackage{latex-lab-testphase-toc} + +% +% \end{macrocode} diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf new file mode 100644 index 0000000000..64853b0e8b Binary files /dev/null and b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf differ diff --git a/macros/latex-dev/required/latex-lab/latex-lab.ins b/macros/latex-dev/required/latex-lab/latex-lab.ins index 1989ddcfa3..a4aeb7289d 100644 --- a/macros/latex-dev/required/latex-lab/latex-lab.ins +++ b/macros/latex-dev/required/latex-lab/latex-lab.ins @@ -66,87 +66,99 @@ where one can also log issues in case there are any. % files that should be loadable with the testphase key should use the naming scheme % #1-latex-lab-testphase.ltx + +%%% phases and bundles %%% +% phases \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}}} - +% obsolete \generate{\file{tagpdf-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{tagpdf}}} + +%new-or (no style, only wrapper, private and not documentated) \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}}} +% math +\generate{\file{math-latex-lab-testphase.ltx}{\from{latex-lab-testphase.dtx}{math}}} +\generate{\file{latex-lab-testphase-math.sty}{\from{latex-lab-testphase.dtx}{math-package}}} -% support files (the new-or code is a private package to make life easier) -\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}}} +%%% support files loaded by phases and testphase modules %%% +%footnotes \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}}} +%new-or-2 +\generate{\file{latex-lab-testphase-new-or-2.sty}{\from{latex-lab-new-or-2.dtx}{package}}} + +%math +\generate{\file{latex-lab-math.ltx}{\from{latex-lab-math.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.sty}{\from{latex-lab-sec.dtx}{package}}} -\generate{\file{sec-tagging-latex-lab-testphase.ltx}{\from{latex-lab-sec.dtx}{latex-lab}}} - - -\generate{\file{latex-lab-testphase-toc.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}}} - +% kernel changes need by more than one module \generate{\file{latex-lab-kernel-changes.sty} {\from{latex-lab-toc-kernel-changes.dtx}{kernelchange} \from{latex-lab-sec.dtx}{kernelchange} }} -\generate{\file{latex-lab-testphase-graphic.sty}{% - \from{latex-lab-graphic.dtx}{package}}} +%%% single modules %%% +%new-or-1 +\generate{\file{new-or-1-latex-lab-testphase.ltx}{\from{latex-lab-new-or-1.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-new-or-1.sty}{\from{latex-lab-new-or-1.dtx}{package}}} -\generate{\file{graphic-latex-lab-testphase.ltx}{% - \from{latex-lab-graphic.dtx}{latex-lab}}} +%sec +\generate{\file{sec-latex-lab-testphase.ltx}{\from{latex-lab-sec.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-sec.sty}{\from{latex-lab-sec.dtx}{package}}} -\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}}} -\generate{\file{latex-lab-testphase-minipage.sty}{% - \from{latex-lab-minipage.dtx}{package}}} +%toc +\generate{\file{toc-latex-lab-testphase.ltx}{\from{latex-lab-toc.dtx}{latex-lab}}} -\generate{\file{minipage-latex-lab-testphase.ltx}{% - \from{latex-lab-minipage.dtx}{latex-lab}}} - - \generate{\file{latex-lab-testphase-float.sty}{% - \from{latex-lab-float.dtx}{package}}} +\generate{\file{latex-lab-testphase-toc.sty}{% + \from{latex-lab-toc.dtx}{header} + \from{latex-lab-toc-kernel-changes.dtx}{package} + \from{latex-lab-toc.dtx}{package} + \from{latex-lab-toc-hyperref-changes.dtx}{package}}} -\generate{\file{float-latex-lab-testphase.ltx}{% - \from{latex-lab-float.dtx}{latex-lab}}} - -\generate{\file{latex-lab-testphase-bib.sty}{% - \from{latex-lab-bib.dtx}{package}}} +%graphic +\generate{\file{graphic-latex-lab-testphase.ltx}{\from{latex-lab-graphic.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-graphic.sty}{\from{latex-lab-graphic.dtx}{package}}} + +% block +\generate{\file{latex-lab-testphase-block.sty}{\from{latex-lab-block.dtx}{package}}} +\generate{\file{block-latex-lab-testphase.ltx}{\from{latex-lab-block.dtx}{latex-lab}}} + +% minipage +\generate{\file{minipage-latex-lab-testphase.ltx}{\from{latex-lab-minipage.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-minipage.sty}{\from{latex-lab-minipage.dtx}{package}}} -\generate{\file{bib-latex-lab-testphase.ltx}{% - \from{latex-lab-bib.dtx}{latex-lab}}} +%float +\generate{\file{float-latex-lab-testphase.ltx}{\from{latex-lab-float.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-float.sty}{\from{latex-lab-float.dtx}{package}}} -\generate{\file{latex-lab-testphase-text.sty}{% - \from{latex-lab-text.dtx}{package}}} +%bib +\generate{\file{bib-latex-lab-testphase.ltx}{\from{latex-lab-bib.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-bib.sty}{\from{latex-lab-bib.dtx}{package}}} -\generate{\file{text-latex-lab-testphase.ltx}{% - \from{latex-lab-text.dtx}{latex-lab}}} +%text +\generate{\file{text-latex-lab-testphase.ltx}{\from{latex-lab-text.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-text.sty}{\from{latex-lab-text.dtx}{package}}} -\generate{\file{latex-lab-testphase-firstaid.sty}{% - \from{latex-lab-firstaid.dtx}{package}}} +%firstaid +\generate{\file{firstaid-latex-lab-testphase.ltx}{\from{latex-lab-firstaid.dtx}{latex-lab}}} +\generate{\file{latex-lab-testphase-firstaid.sty}{\from{latex-lab-firstaid.dtx}{package}}} -\generate{\file{firstaid-latex-lab-testphase.ltx}{% - \from{latex-lab-firstaid.dtx}{latex-lab}}} +% stop docstrip adding \endinput +\preamble +\endpreamble +\postamble +\endpostamble +% namespace definitions +\generate{\file{tagpdf-ns-latex-lab.def}{\from{latex-lab-namespace.dtx}{ns-latex-lab}}} \endbatchfile diff --git a/macros/latex/contrib/zref/README.md b/macros/latex/contrib/zref/README.md index 2406610dfd..47531d90fb 100644 --- a/macros/latex/contrib/zref/README.md +++ b/macros/latex/contrib/zref/README.md @@ -1,6 +1,6 @@ # zref packages for LaTeX -Version: 2022-04-07 v2.34 +Version: 2023-09-14 v2.35 Package zref tries to get rid of the restriction @@ -12,8 +12,9 @@ to the system and some applications that uses the new reference scheme. ## Copyright (C) + * 2007, 2009-2011 Heiko Oberdiek -* 2016-2022 Oberdiek Package Support Group +* 2016-2023 Oberdiek Package Support Group ## License LATEX Project Public License, version 1.3c or later. diff --git a/macros/latex/contrib/zref/zref.dtx b/macros/latex/contrib/zref/zref.dtx index af22a5802e..2cee7ca9f8 100644 --- a/macros/latex/contrib/zref/zref.dtx +++ b/macros/latex/contrib/zref/zref.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % % File: zref.dtx -% Version: 2022-04-07 v2.34 +% Version: 2023-09-14 v2.35 % Info: A new reference scheme for LaTeX % % Copyright (C) @@ -112,7 +112,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: zref 2022-04-07 v2.34 A new reference scheme for LaTeX (HO)} +\Msg{* Package: zref 2023-09-14 v2.35 A new reference scheme for LaTeX (HO)} \Msg{************************************************************************} \keepsilent @@ -124,11 +124,11 @@ This is a generated file. Project: zref -Version: 2022-04-07 v2.34 +Version: 2023-09-14 v2.35 Copyright (C) 2006-2012 Heiko Oberdiek - 2016-2022 Oberdiek Package Support Group + 2016-2023 Oberdiek Package Support Group This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -230,7 +230,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{zref.drv}% - [2022-04-07 v2.34 A new reference scheme for LaTeX (HO)]% + [2023-09-14 v2.35 A new reference scheme for LaTeX (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \setlength{\emergencystretch}{1em} @@ -245,7 +245,7 @@ and the derived files % \GetFileInfo{zref.drv} % % \title{The \xpackage{zref} package} -% \date{2022-04-07 v2.34} +% \date{2023-09-14 v2.35} % \author{Heiko Oberdiek\thanks % {Please report any issues at \url{https://github.com/ho-tex/zref/issues}}} % @@ -852,22 +852,28 @@ and the derived files % warnings. % % \subsection{Module \xmodule{abspage}} -% -% With the help of package \xpackage{atbegshi} -% a new counter |abspage| with absolute page numbers is provided. -% For technical and historical reasons the counter itself is zero based: -% if you use it directly on the first page, e.g -% with |\arabic{abspage}| you will get 0 as value. When using |\zref| -% the first page will be page 1 as expected. -% Also a new property |abspage| is defined and added to the -% main property list. Thus you can reference the absolute -% page number: +% A new property |abspage| is defined and added to the +% main property list. It makes use of the LaTeX count |\ReadonlyShipoutCounter| +% to keep track of the page numbers. +% +% Thus you can reference the absolute page number: % \begin{quote} % |Section \zref{foo} is on page \zpageref{foo}.|\\ % |This is page \zref[abspage]{foo}|\\ % |of \zref[abspage]{LastPage}.| % \end{quote} % The example also makes use of module \xmodule{lastpage}. +% +% For compability also a counter |abspage| is provided +% which is increased at shipout too. +% For technical and historical reasons this counter is zero based: +% if you use it directly on the first page, e.g +% with |\arabic{abspage}| you will get 0 as value. (When using |\zref| to retrieve +% the |abspage| property the first page will be page 1 as expected.). +% It must be noted that the \texttt{perpage} package also provides a |abspage| +% counter which is \emph{not} zero based but gives 1 on the first page if \texttt{zref-abspage} is +% not loaded or loaded after \texttt{perpage}. +% % % \subsection{Module \xmodule{lastpage}} % @@ -1663,7 +1669,7 @@ the height difference of the two baselines is %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref} - [2022-04-07 v2.34 A new reference scheme for LaTeX (HO)]% + [2023-09-14 v2.35 A new reference scheme for LaTeX (HO)]% % \end{macrocode} % % \subsubsection{Load basic module} @@ -1750,7 +1756,7 @@ the height difference of the two baselines is %<*base> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-base}% - [2022-04-07 v2.34 Module base for zref (HO)]% + [2023-09-14 v2.35 Module base for zref (HO)]% % \end{macrocode} % % \subsubsection{Utilities} @@ -3070,7 +3076,7 @@ the height difference of the two baselines is %<*user> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-user}% - [2022-04-07 v2.34 Module user for zref (HO)]% + [2023-09-14 v2.35 Module user for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3161,7 +3167,7 @@ the height difference of the two baselines is %<*abspage> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-abspage}% - [2022-04-07 v2.34 Module abspage for zref (HO)]% + [2023-09-14 v2.35 Module abspage for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3171,28 +3177,32 @@ the height difference of the two baselines is % % Module \xmodule{abspage} adds a new property \verb|abspage| % to the \verb|main| property list for absolute page numbers. -% These are recorded by the help of package \xpackage{atbegshi}. -% \begin{macrocode} -\RequirePackage{atbegshi}[2011/10/05]% -% \end{macrocode} +% These are recorded by the help of the standard LaTeX shipout hooks. +% The count used as property is the standard LaTeX counter \verb|\ReadonlyShipoutCounter|, +% but we still provide also the counter \verb|abspage| for compability with older +% code. % The counter \verb|abspage| must not go in the clear list % of \verb|@ckpt| that is used to set counters in % \xfile{.aux} files of included \hologo{TeX} files. % \begin{macrocode} \begingroup - \let\@addtoreset\ltx@gobbletwo - \newcounter{abspage}% + \@ifundefined{c@abspage} + {% + \let\@addtoreset\ltx@gobbletwo + \newcounter{abspage}% + }{} \endgroup \setcounter{abspage}{0}% -\AtBeginShipout{% +\AddToHook{shipout/before}{% \stepcounter{abspage}% }% -\zref@newprop*{abspage}[0]{\the\c@abspage}% +\zref@newprop*{abspage}[0]{\the\ReadonlyShipoutCounter}% \zref@addprop\ZREF@mainlist{abspage}% % \end{macrocode} -% Note that counter \verb|abspage| shows the +% Note that counter \verb|\ReadonlyShipoutCounter| +% and \verb|abspage| show the % previous page during page processing. Before -% shipout the counter is incremented. +% shipout the counters are incremented. % Thus the property is correctly written with % deferred writing. If the counter is written % using \cs{zref@wrapper@immediate}, then the number @@ -3209,7 +3219,7 @@ the height difference of the two baselines is %<*counter> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-counter}% - [2022-04-07 v2.34 Module counter for zref (HO)]% + [2023-09-14 v2.35 Module counter for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3254,10 +3264,9 @@ the height difference of the two baselines is %<*lastpage> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-lastpage}% - [2022-04-07 v2.34 Module lastpage for zref (HO)]% + [2023-09-14 v2.35 Module lastpage for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \RequirePackage{zref-abspage}[2019/11/29] -\RequirePackage{atveryend}[2009/12/07] \ifx\ZREF@base@ok Y% \else \expandafter\endinput @@ -3272,7 +3281,7 @@ the height difference of the two baselines is % the main property list are used. % \begin{macrocode} \zref@newlist{LastPage} -\AfterLastShipout{% +\AddToHook {enddocument/afterlastpage}{% \if@filesw \begingroup \advance\c@page\m@ne @@ -3326,7 +3335,7 @@ the height difference of the two baselines is %<*thepage> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-thepage}% - [2022-04-07 v2.34 Module thepage for zref (HO)]% + [2023-09-14 v2.35 Module thepage for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3350,7 +3359,7 @@ the height difference of the two baselines is % \end{macro} % \begin{macrocode} \zref@addprop{thepage}{pagevalue} -\AtBeginShipout{% +\AddToHook{shipout/before}{% \AtBeginShipoutAddToBox{% \zref@thepage@atbegshi@hook \zref@labelbylist{thepage\the\value{abspage}}{thepage}% @@ -3401,7 +3410,7 @@ the height difference of the two baselines is %<*nextpage> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-nextpage}% - [2022-04-07 v2.34 Module nextpage for zref (HO)]% + [2023-09-14 v2.35 Module nextpage for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3505,7 +3514,7 @@ the height difference of the two baselines is %<*totpages> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-totpages}% - [2022-04-07 v2.34 Module totpages for zref (HO)]% + [2023-09-14 v2.35 Module totpages for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3547,7 +3556,7 @@ the height difference of the two baselines is %<*pagelayout> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-pagelayout}% - [2022-04-07 v2.34 Module pagelayout for zref (HO)]% + [2023-09-14 v2.35 Module pagelayout for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3558,7 +3567,6 @@ the height difference of the two baselines is % \begin{macrocode} \RequirePackage{zref-thepage}[2019/11/29] \RequirePackage{iftex}[2019/11/07]% -\RequirePackage{atveryend}[2010/03/24] % \end{macrocode} % % @@ -3675,7 +3683,7 @@ the height difference of the two baselines is \fi }% }{}% - \AtVeryEndDocument{\ZREF@pl@AtVeryEnd}% + \AddToHook{enddocument/afteraux}{\ZREF@pl@AtVeryEnd}% \fi } % \end{macrocode} @@ -3763,7 +3771,7 @@ the height difference of the two baselines is % \end{macrocode} % \end{macro} % \begin{macrocode} -\AfterLastShipout{% +\AddToHook {enddocument/afterlastpage}{% \ZREF@pl@AfterLastShipout } % \end{macrocode} @@ -3779,7 +3787,7 @@ the height difference of the two baselines is %<*pageattr> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-pageattr}% - [2022-04-07 v2.34 Module pageattr for zref (HO)]% + [2023-09-14 v2.35 Module pageattr for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -3842,7 +3850,6 @@ the height difference of the two baselines is % \end{macrocode} % \begin{macrocode} \RequirePackage{zref-abspage}[2019/11/29] -\RequirePackage{atveryend}[2010/03/24] \RequirePackage{pdftexcmds}[2010/04/01] \let\ZREF@temp=Y% \ltx@IfUndefined{pdf@escapehex}{\let\ZREF@temp=N}{} @@ -3883,7 +3890,7 @@ the height difference of the two baselines is \fi }% }{}% - \AtVeryEndDocument{\ZREF@pa@AtVeryEnd}% + \AddToHook{enddocument/afteraux}{\ZREF@pa@AtVeryEnd}% \fi } % \end{macrocode} @@ -3996,7 +4003,7 @@ the height difference of the two baselines is }% }% } -\AfterLastShipout{% +\AddToHook {enddocument/afterlastpage}{% \ZREF@pa@AfterLastShipout } % \end{macrocode} @@ -4011,7 +4018,7 @@ the height difference of the two baselines is %<*marks> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-marks}% - [2022-04-07 v2.34 Module marks for zref (HO)]% + [2023-09-14 v2.35 Module marks for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -4117,7 +4124,7 @@ the height difference of the two baselines is %<*runs> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-runs}% - [2022-04-07 v2.34 Module runs for zref (HO)]% + [2023-09-14 v2.35 Module runs for zref (HO)]% % \end{macrocode} % % \begin{macro}{\zruns} @@ -4149,7 +4156,7 @@ the height difference of the two baselines is %<*perpage> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-perpage}% - [2022-04-07 v2.34 Module perpage for zref (HO)]% + [2023-09-14 v2.35 Module perpage for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -4352,7 +4359,7 @@ the height difference of the two baselines is %<*titleref> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-titleref}% - [2022-04-07 v2.34 Module titleref for zref (HO)]% + [2023-09-14 v2.35 Module titleref for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -4765,7 +4772,7 @@ the height difference of the two baselines is %<*xr> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-xr}% - [2022-04-07 v2.34 Module xr for zref (HO)]% + [2023-09-14 v2.35 Module xr for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -5301,7 +5308,7 @@ the height difference of the two baselines is %<*hyperref> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-hyperref}% - [2022-04-07 v2.34 Module hyperref for zref (HO)]% + [2023-09-14 v2.35 Module hyperref for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -5331,7 +5338,7 @@ the height difference of the two baselines is %<*savepos> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-savepos}% - [2022-04-07 v2.34 Module savepos for zref (HO)]% + [2023-09-14 v2.35 Module savepos for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -5504,7 +5511,7 @@ the height difference of the two baselines is %<*abspos> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-abspos}% - [2022-04-07 v2.34 Module abspos for zref (HO)]% + [2023-09-14 v2.35 Module abspos for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -5709,16 +5716,22 @@ the height difference of the two baselines is % % \subsubsection{Media} % +% Ensure that |\stockwidth| and |\stockheight| are defined +% \begin{macrocode} +\@ifundefined{stockwidth}{\newdimen\stockwidth}{} +\@ifundefined{stockheight}{\newdimen\stockheight}{} +% \end{macrocode} +% % \begin{macro}{\ZREF@abspos@media@width} % \begin{macrocode} \edef\ZREF@abspos@media@width{% \ltx@ifundefined{pdfpagewidth}{% \ltx@ifundefined{mediawidth}{% - \ltx@ifundefined{stockwidth}{% - paperwidth% - }{% + \ifdim\stockwidth > \z@ stockwidth% - }% + \else + paperwidth% + \fi }{% mediawidth% }% @@ -5736,21 +5749,21 @@ the height difference of the two baselines is \edef\ZREF@abspos@media@height{% \ltx@ifundefined{pdfpageheight}{% \ltx@ifundefined{mediaheight}{% - \ltx@ifundefined{stockheight}{% - paperheight% - }{% + \ifdim\stockwidth > \z@ stockheight% - }% + \else + paperheight% + \fi }{% mediaheight% }% }{% \noexpand\ifcase\pdfpageheight - \ltx@ifundefined{stockheight}{% - paperheight% - }{% + \ifdim\stockwidth > \z@ stockheight% - }% + \else + paperheight% + \fi \noexpand\else pdfpageheight% \noexpand\fi @@ -5759,11 +5772,11 @@ the height difference of the two baselines is \ifluatex \edef\ZREF@abspos@media@height{% \noexpand\ifcase\pageheight - \ltx@ifundefined{stockheight}{% - paperheight% - }{% + \ifdim\stockwidth > \z@ stockheight% - }% + \else + paperheight% + \fi \noexpand\else pdfpageheight% \noexpand\fi}% @@ -6158,7 +6171,7 @@ the height difference of the two baselines is %<*dotfill> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-dotfill}% - [2022-04-07 v2.34 Module dotfill for zref (HO)]% + [2023-09-14 v2.35 Module dotfill for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -6258,7 +6271,7 @@ the height difference of the two baselines is %<*env> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zref-env}% - [2022-04-07 v2.34 Module env for zref (HO)]% + [2023-09-14 v2.35 Module env for zref (HO)]% \RequirePackage{zref-base}[2019/11/29] \ifx\ZREF@base@ok Y% \else @@ -6798,8 +6811,14 @@ the height difference of the two baselines is % https://github.com/ho-tex/zref/issues/10 % \end{Version} % \begin{Version}{2022-04-07 v2.34} -% \item Updated +% \item use the \texttt{zref@unique} counter in the include hook only if the module needs it +% https://github.com/ho-tex/zref/issues/14 % \end{Version} +% \begin{Version}{2023-09-14 v.2.35} +% \item Define the abspage counter only if it is undefined +% https://github.com/ho-tex/zref/issues/14 +% \item Remove dependency from atveryend. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/macros/latex/contrib/zref/zref.pdf b/macros/latex/contrib/zref/zref.pdf index 463bcaf221..79c32906d4 100644 Binary files a/macros/latex/contrib/zref/zref.pdf and b/macros/latex/contrib/zref/zref.pdf differ diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index 7d16a4b1e5..c3cc3ffa8c 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -34,7 +34,7 @@ $mirrors = { 'https://mirror.unpad.ac.id/ctan/' => 1, }, 'Iran' => { - 'https://ctan.asis.sh/' => 1, + 'http://ctan.asis.ai/' => 1, 'https://ctan.yazd.ac.ir/' => 1, }, 'Japan' => { @@ -134,7 +134,6 @@ $mirrors = { 'https://ctan.gust.org.pl/tex-archive/' => 1, 'https://polish-mirror.evolution-host.com/ctan/' => 1, 'https://repo.skni.umcs.pl/ctan/' => 1, - 'https://sunsite.icm.edu.pl/pub/CTAN/' => 1, }, 'Portugal' => { 'https://ftp.eq.uc.pt/software/TeX/' => 1, diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index 3fb30ceb75..5f750bcfaa 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb @@ -26,11 +26,11 @@ depend container_split_src_files/1 depend frozen/0 depend minrelease/2016 depend release/2023 -depend revision/68273 +depend revision/68280 name 00texlive.image category TLCore -revision 68271 +revision 68280 shortdesc TeX Live files only in the source repository longdesc The files here are not copied by the installer and containers longdesc are not built for them; they exist only in the source @@ -4801,7 +4801,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 68262 +revision 68275 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 @@ -24397,7 +24397,7 @@ catalogue-topics font font-cjk font-ttf name arraycols category Package -revision 67862 +revision 68277 shortdesc New column types for array and tabular environments relocated 1 longdesc This small package provides new column types for array and @@ -24406,15 +24406,15 @@ longdesc with adjusted height for big mathematical expressions. The longdesc columns width can be fixed or calculated like in tabularx longdesc environments. Macros for drawing vertical and horizontal rules longdesc of variable thickness are also provided. -containersize 1320 -containerchecksum b5495e0994bdc5dae4c1b301a52c5d6d2360ca66b4044c75c0a9b8f252186664a013f3639abcd2628e6352b268dfbe4692b4c7f3e58ecd83192128e4b8b6fc87 -doccontainersize 464040 -doccontainerchecksum 131d9f16f5731257a88716671b42593047dfa5babcf033d5d8bbb9b8ebd2aee34bfea003b4b55e28b77d7b9d648f97e256694b0aced6b73a9578fd8efdfb5d6d +containersize 1324 +containerchecksum faf429613ee1987b92b369dc357f376c1465531cec8f7f78c37099366fa80954930afd62c553760b71a2226b0d245d9ad9664f4e5383803471bcf4f63f419f7a +doccontainersize 465540 +doccontainerchecksum 6bff5add83a6eb8f0c697bdfc5da076c5a833e856abf0b023002a50a85dd1a7cc24e0cd042a2fd28c18a37a88ac91f4f09a5c4f2911cbba30026fbc03df06c71 docfiles size=115 RELOC/doc/latex/arraycols/README.md details="Readme" RELOC/doc/latex/arraycols/arraycols.pdf details="Package documentation" -srccontainersize 6752 -srccontainerchecksum f458b30ad5a7864baa90defa1b535b948821930bcd42d6e1ae3e417b0799309e343874d7acb2ef219014cfda941a434950716116a3fa68df2d14f4beaa96aec8 +srccontainersize 6924 +srccontainerchecksum 9fe04362a179851b135af96b0eed0d229d19f2d4623acbbc39dfcef375be7dc682ef08af3fcbe146d7ce738cbe8e7e00e9f72d549966efa674433e3024738ab0 srcfiles size=6 RELOC/source/latex/arraycols/arraycols.dtx RELOC/source/latex/arraycols/arraycols.ins @@ -24423,7 +24423,7 @@ runfiles size=1 catalogue-ctan /macros/latex/contrib/arraycols catalogue-license lppl1.3 catalogue-topics table alignment alignment-supp -catalogue-version 1.3 +catalogue-version 1.4 name arrayjobx category Package @@ -167616,7 +167616,7 @@ catalogue-version 0.1.0 name khatalmaqala category Package -revision 68250 +revision 68280 shortdesc Arabic font for university articles relocated 1 longdesc This font family is a modification of "cm-unicode" fonts, with @@ -167626,19 +167626,20 @@ longdesc Technology (Egypt) many years ago. After a few semesters, it longdesc had become the main font for their articles and assignments. longdesc Now, it is on CTAN for easier access. khatalmaqala = khat longdesc (font) + maqala (article) = font for article -containersize 664 -containerchecksum a485368ff12581e67cd1c39993a92004911910a0a52e34527dd6ece0e1b2e49adba6b763ea8c3d8fb4514bc192234689b83b558860d193839e58478ca3113ab9 -doccontainersize 313980 -doccontainerchecksum 4b161ed5e0942a6c02f133d02ce99f3cd23ab7b92265f7a36d35c8def4f3302bcc2ab4481d06b6b18ef1388781bb11ecd164eca11359712f4a8939e846de1204 -docfiles size=225 +containersize 234716 +containerchecksum 78481f7d494a7c1d9312e3c11a700e43b007660aaaf28f74a3aae4966b2387088bb891cc8e73bd431ad992395f7b66a10b9b326d2262509fdac3e153473d37dd +doccontainersize 79908 +doccontainerchecksum ec0f8ec3213a009899134fbf2389f9f33e2747175bf94246c0e035c424728251c0e16a3391e598007b83262353db66acc87431f6856dc1df6e784d5f40b4a2a0 +docfiles size=23 RELOC/doc/fonts/khatalmaqala/OFL.txt RELOC/doc/fonts/khatalmaqala/README.md details="Readme" RELOC/doc/fonts/khatalmaqala/sample-of-khatalmaqala.pdf details="Example of use" RELOC/doc/fonts/khatalmaqala/sample-of-khatalmaqala.tex - RELOC/doc/fonts/khatalmaqala/ttf/khatalmaqala-bold.ttf - RELOC/doc/fonts/khatalmaqala/ttf/khatalmaqala-bolditalic.ttf - RELOC/doc/fonts/khatalmaqala/ttf/khatalmaqala-italic.ttf - RELOC/doc/fonts/khatalmaqala/ttf/khatalmaqala-regular.ttf +runfiles size=202 + RELOC/fonts/truetype/public/khatalmaqala/khatalmaqala-bold.ttf + RELOC/fonts/truetype/public/khatalmaqala/khatalmaqala-bolditalic.ttf + RELOC/fonts/truetype/public/khatalmaqala/khatalmaqala-italic.ttf + RELOC/fonts/truetype/public/khatalmaqala/khatalmaqala-regular.ttf catalogue-contact-bugs https://github.com/zainibnabdalmatin/khatalmaqala/issues catalogue-contact-repository https://github.com/zainibnabdalmatin/khatalmaqala catalogue-ctan /fonts/khatalmaqala @@ -176516,7 +176517,7 @@ catalogue-topics format latex-devel name latex-lab-dev category Package -revision 67328 +revision 68279 shortdesc LaTeX laboratory: Development pre-release relocated 1 longdesc This package provides a testing release for upcoming changes to @@ -176524,11 +176525,11 @@ longdesc the latex-lab bundle, which provides a route for additions to longdesc the LaTeX kernel to be stablised. It accompanies the longdesc pre-testing kernel code (latex-base-dev), and is intended for longdesc testing by knowledgeable users. -containersize 34252 -containerchecksum 7613a5e09e792a3634e0e2c0199bd57e74d0d1129d8270a7f880058ce802988ec9268a3fdc9eac56bb339bcd53783a3fe5da30b7a380c512ff09a9063fbf7ecf -doccontainersize 6809096 -doccontainerchecksum 3e6449c4d6fa5df216d642947dfa38a1be466f1b8aa094d95b9600f34c18c30d77fcc9fd2c9d90b85f3856a84c815bdcda6bb47f8864478be3757d12b5f92f95 -docfiles size=2585 +containersize 35128 +containerchecksum 4282e2f104687189e06029bac4f153b213edc46ebbf3ecbb6e5a2b375244ee7fe8f72d519be930a6f0a1f307411ecbbf6112293301ec106b5667fde73c9ad9d9 +doccontainersize 7098384 +doccontainerchecksum 1275a0adec9c4767f8ad4ab194ee57b175f6ff0c66db6acee7215995d24df45bfa2e4ade995f044ed1109afbe67840b11965d48ab3c0f5816146f1f6ad9cd65c +docfiles size=2681 RELOC/doc/latex-dev/latex-lab/README.md details="Readme" RELOC/doc/latex-dev/latex-lab/blocks-code.pdf RELOC/doc/latex-dev/latex-lab/blocks-code.tex @@ -176541,15 +176542,16 @@ docfiles size=2585 RELOC/doc/latex-dev/latex-lab/documentmetadata-support-doc.tex RELOC/doc/latex-dev/latex-lab/latex-lab-amsmath.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-bib.pdf - RELOC/doc/latex-dev/latex-lab/latex-lab-block-tagging.pdf + RELOC/doc/latex-dev/latex-lab/latex-lab-block.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-firstaid.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-float.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-graphic.pdf + RELOC/doc/latex-dev/latex-lab/latex-lab-math.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-mathpkg.pdf - RELOC/doc/latex-dev/latex-lab/latex-lab-mathtagging.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-mathtools.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-minipage.pdf + RELOC/doc/latex-dev/latex-lab/latex-lab-namespace.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-new-or-1.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-new-or-2.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-sec.pdf @@ -176557,22 +176559,23 @@ docfiles size=2585 RELOC/doc/latex-dev/latex-lab/latex-lab-text.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-toc-hyperref-changes.pdf RELOC/doc/latex-dev/latex-lab/latex-lab-toc-kernel-changes.pdf - RELOC/doc/latex-dev/latex-lab/latex-lab-toc-tagging-functions.pdf -srccontainersize 90844 -srccontainerchecksum 3d5e916f074943f0de2ad971c6635f9b9ad709b7b16d6ea5fa20e78c5640c37715fc2a18055fbee1aad02459a5e0630a768905d35fd461471929a0f0c88beba8 -srcfiles size=121 + RELOC/doc/latex-dev/latex-lab/latex-lab-toc.pdf +srccontainersize 95832 +srccontainerchecksum af459aa61701d478658f7d5ad4bafb77f45ae6ea5bcf9444bf250fa46a1586707b421dd5689ac15d3e18330e772bef67e4397034c2890b57f79416e81006f84e +srcfiles size=127 RELOC/source/latex-dev/latex-lab/documentmetadata-support.dtx RELOC/source/latex-dev/latex-lab/latex-lab-amsmath.dtx RELOC/source/latex-dev/latex-lab/latex-lab-bib.dtx - RELOC/source/latex-dev/latex-lab/latex-lab-block-tagging.dtx + RELOC/source/latex-dev/latex-lab/latex-lab-block.dtx RELOC/source/latex-dev/latex-lab/latex-lab-firstaid.dtx RELOC/source/latex-dev/latex-lab/latex-lab-float.dtx RELOC/source/latex-dev/latex-lab/latex-lab-footnotes.dtx RELOC/source/latex-dev/latex-lab/latex-lab-graphic.dtx + RELOC/source/latex-dev/latex-lab/latex-lab-math.dtx RELOC/source/latex-dev/latex-lab/latex-lab-mathpkg.dtx - RELOC/source/latex-dev/latex-lab/latex-lab-mathtagging.dtx RELOC/source/latex-dev/latex-lab/latex-lab-mathtools.dtx RELOC/source/latex-dev/latex-lab/latex-lab-minipage.dtx + RELOC/source/latex-dev/latex-lab/latex-lab-namespace.dtx RELOC/source/latex-dev/latex-lab/latex-lab-new-or-1.dtx RELOC/source/latex-dev/latex-lab/latex-lab-new-or-2.dtx RELOC/source/latex-dev/latex-lab/latex-lab-sec.dtx @@ -176580,11 +176583,11 @@ srcfiles size=121 RELOC/source/latex-dev/latex-lab/latex-lab-text.dtx RELOC/source/latex-dev/latex-lab/latex-lab-toc-hyperref-changes.dtx RELOC/source/latex-dev/latex-lab/latex-lab-toc-kernel-changes.dtx - RELOC/source/latex-dev/latex-lab/latex-lab-toc-tagging-functions.dtx + RELOC/source/latex-dev/latex-lab/latex-lab-toc.dtx RELOC/source/latex-dev/latex-lab/latex-lab.ins -runfiles size=76 +runfiles size=77 RELOC/tex/latex-dev/latex-lab/bib-latex-lab-testphase.ltx - RELOC/tex/latex-dev/latex-lab/block-tagging-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/block-latex-lab-testphase.ltx RELOC/tex/latex-dev/latex-lab/documentmetadata-support.ltx RELOC/tex/latex-dev/latex-lab/firstaid-latex-lab-testphase.ltx RELOC/tex/latex-dev/latex-lab/float-latex-lab-testphase.ltx @@ -176594,11 +176597,11 @@ runfiles size=76 RELOC/tex/latex-dev/latex-lab/latex-lab-footmisc.ltx RELOC/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx RELOC/tex/latex-dev/latex-lab/latex-lab-kernel-changes.sty + RELOC/tex/latex-dev/latex-lab/latex-lab-math.ltx RELOC/tex/latex-dev/latex-lab/latex-lab-mathpkg.ltx - RELOC/tex/latex-dev/latex-lab/latex-lab-mathtagging.ltx RELOC/tex/latex-dev/latex-lab/latex-lab-mathtools.ltx RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-bib.sty - RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-block-tagging.sty + RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-block.sty RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-firstaid.sty RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-float.sty RELOC/tex/latex-dev/latex-lab/latex-lab-testphase-graphic.sty @@ -176616,14 +176619,15 @@ runfiles size=76 RELOC/tex/latex-dev/latex-lab/phase-I-latex-lab-testphase.ltx RELOC/tex/latex-dev/latex-lab/phase-II-latex-lab-testphase.ltx RELOC/tex/latex-dev/latex-lab/phase-III-latex-lab-testphase.ltx - RELOC/tex/latex-dev/latex-lab/sec-tagging-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/sec-latex-lab-testphase.ltx RELOC/tex/latex-dev/latex-lab/tagpdf-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/tagpdf-ns-latex-lab.def RELOC/tex/latex-dev/latex-lab/text-latex-lab-testphase.ltx - RELOC/tex/latex-dev/latex-lab/toc-tagging-latex-lab-testphase.ltx + RELOC/tex/latex-dev/latex-lab/toc-latex-lab-testphase.ltx catalogue-ctan /macros/latex-dev/required/latex-lab catalogue-license lppl1.3c catalogue-topics format latex-devel -catalogue-version 2023-11-01 pre-release 0 +catalogue-version 2023-11-01 pre-release 1 name latex-make category Package @@ -244010,7 +244014,7 @@ catalogue-version 1.4 name parsimatn category Package -revision 68271 +revision 68276 shortdesc Contemporary Persian font for scientific and formal writings relocated 1 longdesc This Persian font is suitable for official and scientific @@ -244019,10 +244023,10 @@ longdesc designed by the author. During the design process, attention longdesc has been paid to the fact that, in addition to being new and longdesc innovative, the letters be familiar to the average longdesc Persian/Arabic viewer. -containersize 122964 -containerchecksum 7e13f9536e8855a66a8467a73a4063880199a887cb521646362d3c705a84cb5f12b9a0027d8781f84413e81b3bf2e0889c0e613c885dc91a91821486d192700d -doccontainersize 94436 -doccontainerchecksum afc521ced681ec0ccabfe3ecb449e8fa7cfd633c811881ac6fddef419132e4a27fdbc4346e465d5b75c6115e8035933c0a1d4b3f91aba3c2be97ea516d398e34 +containersize 120404 +containerchecksum 2ce07c630e8a19dfe1ec6ef12a9f2f909ca3e4c2d30d3ad920aaefb4072b049966d733aaf0e68fd6e1b467327bccc71997e75246f18eeafa563922bce4a34ea6 +doccontainersize 94384 +doccontainerchecksum 69ce8fd744e60a074328a18443c6eb6dc37211501e3eb552e4760ebe1d7d7b1a9f8c5b26ffa9ad76bda6b20ad5a8bd37aa4fbf57b037332895aaf89d27ad0443 docfiles size=29 RELOC/doc/fonts/parsimatn/OFL.txt RELOC/doc/fonts/parsimatn/README.md details="Readme" @@ -244038,7 +244042,7 @@ catalogue-contact-repository https://github.com/SajadKazemi/parsimatn catalogue-ctan /fonts/parsimatn catalogue-license ofl catalogue-topics font font-ttf font-arabic font-maths persian -catalogue-version 1.0 +catalogue-version 1.1 name parsinevis category Package @@ -315225,7 +315229,7 @@ catalogue-version 0.1 name texinfo category Package -revision 67954 +revision 68275 shortdesc Texinfo documentation system relocated 1 longdesc Texinfo is the preferred format for documentation in the GNU @@ -315236,8 +315240,8 @@ longdesc distribution offer online interactive use (with hypertext longdesc linkages in some cases). The latest release of the texinfo.tex longdesc macros and texi2dvi script may be found in the texinfo-latest longdesc package, which are usually newer than the last full release. -containersize 97952 -containerchecksum 68ff8b8be1b9af0ee9824a47103d455481a14c37852bacda23a4e59ad228693399034e15519d77afe3f2042c79c85bb437c86f74ec2b923d3f207c3ebc6442da +containersize 98028 +containerchecksum f283f92ee00601b9fd3d941a0f6abaa252697271d5c9900ca74251b5b7ce9b5d493259eb35eac1e146e03779c19a3596373652854094b874a70d588cc8e5a5a3 runfiles size=110 RELOC/tex/texinfo/texinfo.ini RELOC/tex/texinfo/texinfo.tex @@ -315580,7 +315584,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 68262 +revision 68275 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. @@ -315588,10 +315592,10 @@ depend texlive-scripts.ARCH depend texlive.infra execute addMap mathpple.map postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat -containersize 114132 -containerchecksum e0c472ae1cf980da46742e97bf21f6cab7e89cbcc467ad0bf6fb0fc0ed149f9c9d7cceb68de9e115f9419a70d8159f0b8029aae18fcd1e713bb0b5ac7ded97c4 -doccontainersize 429632 -doccontainerchecksum effea08dcd0cd71a61c5e8f63d97f1f64f206da3b021d7e0ac70453525361b51a366e948bd27a4e7cb31605b1403de79fc0721083e62154d357a2e00a40a6b6d +containersize 114108 +containerchecksum 0303774013270ec58ab427a00cdd614b3167bcb0ac9ba100cac459aa040be9435b24334faf6602811716ced969eb4c9a4a36d62cfc36da5b39353a5707212a91 +doccontainersize 429652 +doccontainerchecksum 7778f148f40c8dfc58d058a0fca0d46380613993b785ce7e0dc9af3a12729ff3e9b434fd5b02e19784174660d3c3f1809159474442d91549533fe0a054a96e14 docfiles size=550 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 @@ -366116,7 +366120,7 @@ catalogue-version 1.0 name zref category Package -revision 62977 +revision 68278 shortdesc A new reference scheme for LaTeX relocated 1 longdesc This package offers a means to remove the limitation, of only @@ -366141,18 +366145,18 @@ longdesc zref-savepos, make positions on a page available; zref-dotfill, longdesc controlled dot-filling; zref-env, record the latest longdesc environment's name and the line it started on; and zref-xr, longdesc provide the facilities of the xr and xr-hyper packages. -containersize 14476 -containerchecksum 4516c2b785e26dac293dd028c314bdaf75d195c454cd2acd54aeaf6a298b0494031a86926abc670d27bed1ce8622a9607ea71d2b4d268bacdff26b8937c67dfa -doccontainersize 668676 -doccontainerchecksum f65ebb760d1cac9dbc1c6ed4e48a9015c2cd2c5cbeb28e4776802ea84ac6b08c5302eb2126619e93f5bdf7ca76b4b8cdfad3ee9369aea364f680c1deda7bf396 +containersize 14528 +containerchecksum 1c21d99dc4f1627520914ed3620606c724f22754662797b93c4161aaf3e36d5a42a586ae7e4b227cdf67d55c88d3979635e78661d7029f1a5967c503a9f9dde5 +doccontainersize 668780 +doccontainerchecksum 24cf22b54cb13e1458266f4962ba589fa9385f3b8d58493747824d815c372cfa6fa8a8a24d0310264b299ce43148ca001b5c6b73961d1504e1ab6e8a4ac246c0 docfiles size=176 RELOC/doc/latex/zref/README.md details="Readme" RELOC/doc/latex/zref/zref-example-lastpage.tex RELOC/doc/latex/zref/zref-example-nextpage.tex RELOC/doc/latex/zref/zref-example.tex RELOC/doc/latex/zref/zref.pdf details="Package documentation" -srccontainersize 37216 -srccontainerchecksum c4d4fa3cd9921f0c60361c7aafd000998c8bf7f04ccdd39406d51258b006851cce26e1acc6fa4ca91369764b012020b60ac73bd8b540a2212cce236f1335b9c3 +srccontainersize 37528 +srccontainerchecksum 251cc99a193371ca0e11d1690ce6ce545cdf077a483f81d2d5ac5c3495b24c25f383ba6b73e9607578adb0940441247ac4027c7719d2ada0c1b77f7876f9767a srcfiles size=49 RELOC/source/latex/zref/zref.dtx runfiles size=37 @@ -366182,7 +366186,7 @@ catalogue-contact-repository https://github.com/ho-tex/zref catalogue-ctan /macros/latex/contrib/zref catalogue-license lppl1.3c catalogue-topics label-ref -catalogue-version 2.34 +catalogue-version 2.35 name zref-check category Package diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index 0d645e234b..23ae8183cb 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -5a83e4747fda9947f8ed7b306bbcfcb1 texlive.tlpdb +d399a5bc7dc56b8003daa26510862b82 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index 0574da60b2..73081812c7 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -9ab82c0e7689aa198e2f1a2aa56178ce4badbbda44b4b57c78b40766f6c92859958436a81c7b63296015b163100de99e7cc3ab5122bc26bcc9f9f3b3b9367280 texlive.tlpdb +9e87e5f055f4048365a7d8702e821612555705604f2094f61b47514b663f9026bf635214a3e4101bd125231c47cfe404c5b1d4aeb03574f6386471da02cb5374 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index be8d0cfe31..3aa548444a 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc @@ -1,11 +1,11 @@ -----BEGIN PGP SIGNATURE----- -iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmUCSZ8ACgkQTOGHfhlD -jHAj+Af+Pf1PR9c8uH/uwUgKkokeGcZquF96u86cmlxzyrlfhT+wpqNHjlQ9U7s2 -LNKEJvxVMxae7s/S2Ayjo5qVWedtzAke2XvacGVWGfXUXaAmwDaibWM8yk27WiPb -TaZEaLYhDVQJeMW5Uz/vaa4omNyVf00LI7068/1jd6UuLR4ZNlpHqBnIP2pr83w6 -4MCbrs+e8ZItPPCu2cOz+EfsNx+Ef3Qn3hsHy+rYtQZCYNNtQwfgsJPjslij5EP9 -paeB2snfzafOtboDgn2V5saefqmHxMDYkZts9xgIUORQj0icPDSR1yCE2xZy6W94 -D6RNLbDPcIXPAFROL+wwGC0BogM3yg== -=/whi +iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmUDmwgACgkQTOGHfhlD +jHBo6wf/cgi5LcsCAnxEjyxp7Sgp2GefDZ0/gqvooOx+ersD7Vz6gsyYM+vmeZiu +nQRR2+w4S6c10bkJcRvbnORAnJUdHSfnEFEc9d9ds48LAhygdRGBPgV+OO04ODuh +vT/PMaCxQV+sKlL3XMBPk50tJWzBagjp0Cl2ww84aA4+jOrZnwSm74+qkfsSP251 +Xba3hFjn1rg3ZWV0vsMecaKneZLGlELrHhMjszfvMdAgdg+1bAxqDKSzaY83eaAT +bBHbFR2gyyArhkEasYx81A6PKKTl5Z0Iw1L6BxZJ4rgfR5gxB0LOHe1ifMkWy7fm +sQAUaz+VKWPwujLSq+u2e8xNMx+aFQ== +=j0wk -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 3a07807aec..80034ea176 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/timestamp b/timestamp index b97460e1da..0343f0db74 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-09-14-02-02 +2023-09-15-02-02 -- cgit v1.2.3