From 358efc294299fa1b336a63da305121fb8b71447b Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 27 Sep 2022 03:02:45 +0000 Subject: CTAN sync 202209270302 --- CTAN.sites | 5 - FILES.byname | 1362 +++---- FILES.byname.gz | Bin 2456046 -> 2456298 bytes FILES.last07days | 997 ++++-- fonts/neo-euler/Neo-Euler.ltx | 449 +++ fonts/neo-euler/Neo-Euler.otf | Bin 0 -> 438548 bytes fonts/neo-euler/Neo-Euler.pdf | Bin 0 -> 134087 bytes fonts/neo-euler/README.md | 56 + fonts/neo-euler/neo-euler.sty | 127 + fonts/neo-euler/unimath-euler.ltx | 525 +++ fonts/neo-euler/unimath-euler.pdf | Bin 0 -> 1452646 bytes fonts/theanodidot/README | 2 +- fonts/theanodidot/latex/TheanoDidot.sty | 3 +- fonts/theanomodern/README | 2 +- fonts/theanomodern/latex/TheanoModern.sty | 3 +- fonts/theanooldstyle/README | 2 +- fonts/theanooldstyle/latex/TheanoOldStyle.sty | 3 +- macros/latex-dev/base/README.md | 2 +- macros/latex-dev/base/alltt.pdf | Bin 223831 -> 223831 bytes macros/latex-dev/base/cfgguide.pdf | Bin 242888 -> 264112 bytes macros/latex-dev/base/cfgguide.tex | 7 +- macros/latex-dev/base/changes.txt | 3302 ++++++++--------- macros/latex-dev/base/classes.pdf | Bin 560611 -> 560611 bytes macros/latex-dev/base/clsguide.pdf | Bin 402780 -> 414419 bytes macros/latex-dev/base/clsguide.tex | 7 +- macros/latex-dev/base/cmfonts.pdf | Bin 292160 -> 292160 bytes macros/latex-dev/base/cyrguide.pdf | Bin 239689 -> 257314 bytes macros/latex-dev/base/cyrguide.tex | 7 +- macros/latex-dev/base/doc-code.pdf | Bin 1077586 -> 1077609 bytes macros/latex-dev/base/doc.pdf | Bin 755127 -> 755152 bytes macros/latex-dev/base/docstrip.dtx | 20 +- macros/latex-dev/base/docstrip.pdf | Bin 503716 -> 504627 bytes macros/latex-dev/base/encguide.pdf | Bin 1318126 -> 1318126 bytes macros/latex-dev/base/exscale.pdf | Bin 204711 -> 204711 bytes macros/latex-dev/base/fix-cm.pdf | Bin 287733 -> 287733 bytes macros/latex-dev/base/fntguide.pdf | Bin 502880 -> 517838 bytes macros/latex-dev/base/fntguide.tex | 39 +- macros/latex-dev/base/graphpap.pdf | Bin 161713 -> 161713 bytes macros/latex-dev/base/ifthen.pdf | Bin 221211 -> 221211 bytes macros/latex-dev/base/inputenc.pdf | Bin 318204 -> 318204 bytes macros/latex-dev/base/lamport-manual.pdf | Bin 170878 -> 170878 bytes macros/latex-dev/base/latexrelease.pdf | Bin 281906 -> 281906 bytes macros/latex-dev/base/latexsym.pdf | Bin 200760 -> 200760 bytes macros/latex-dev/base/lb2.pdf | Bin 252140 -> 252140 bytes macros/latex-dev/base/letter.pdf | Bin 337880 -> 337294 bytes macros/latex-dev/base/lgc2.pdf | Bin 215684 -> 215684 bytes macros/latex-dev/base/lppl.pdf | Bin 132382 -> 132382 bytes macros/latex-dev/base/ltboxes.dtx | 34 +- macros/latex-dev/base/ltcmd.dtx | 386 +- macros/latex-dev/base/ltcmdhooks-code.pdf | Bin 719018 -> 719285 bytes macros/latex-dev/base/ltcmdhooks-doc.pdf | Bin 478530 -> 478781 bytes macros/latex-dev/base/ltfilehook-code.pdf | Bin 801140 -> 803118 bytes macros/latex-dev/base/ltfilehook-doc.pdf | Bin 547909 -> 547986 bytes macros/latex-dev/base/ltfilehook.dtx | 23 +- macros/latex-dev/base/ltfinal.dtx | 4 +- macros/latex-dev/base/ltfssdcl.dtx | 322 +- macros/latex-dev/base/lthooks-code.pdf | Bin 1091456 -> 1091718 bytes macros/latex-dev/base/lthooks-doc.pdf | Bin 701509 -> 701768 bytes macros/latex-dev/base/ltkeys.dtx | 30 +- macros/latex-dev/base/ltluatex.dtx | 65 +- macros/latex-dev/base/ltluatex.pdf | Bin 317700 -> 318919 bytes macros/latex-dev/base/ltmarks-code.pdf | Bin 715770 -> 715934 bytes macros/latex-dev/base/ltmarks-doc.pdf | Bin 586138 -> 586305 bytes macros/latex-dev/base/ltmath.dtx | 34 +- macros/latex-dev/base/ltnews.pdf | Bin 1210464 -> 1225147 bytes macros/latex-dev/base/ltnews01.pdf | Bin 161518 -> 161519 bytes macros/latex-dev/base/ltnews02.pdf | Bin 159792 -> 159802 bytes macros/latex-dev/base/ltnews03.pdf | Bin 159332 -> 159347 bytes macros/latex-dev/base/ltnews04.pdf | Bin 152525 -> 152526 bytes macros/latex-dev/base/ltnews05.pdf | Bin 174494 -> 174493 bytes macros/latex-dev/base/ltnews06.pdf | Bin 142849 -> 142861 bytes macros/latex-dev/base/ltnews07.pdf | Bin 137811 -> 137791 bytes macros/latex-dev/base/ltnews08.pdf | Bin 155053 -> 155050 bytes macros/latex-dev/base/ltnews09.pdf | Bin 129570 -> 129572 bytes macros/latex-dev/base/ltnews10.pdf | Bin 169416 -> 169425 bytes macros/latex-dev/base/ltnews11.pdf | Bin 111948 -> 111974 bytes macros/latex-dev/base/ltnews12.pdf | Bin 156551 -> 156556 bytes macros/latex-dev/base/ltnews13.pdf | Bin 182225 -> 182252 bytes macros/latex-dev/base/ltnews14.pdf | Bin 170473 -> 170452 bytes macros/latex-dev/base/ltnews15.pdf | Bin 130309 -> 130324 bytes macros/latex-dev/base/ltnews16.pdf | Bin 138073 -> 138082 bytes macros/latex-dev/base/ltnews17.pdf | Bin 166228 -> 166226 bytes macros/latex-dev/base/ltnews18.pdf | Bin 38033 -> 38028 bytes macros/latex-dev/base/ltnews19.pdf | Bin 230028 -> 230031 bytes macros/latex-dev/base/ltnews20.pdf | Bin 318548 -> 318587 bytes macros/latex-dev/base/ltnews21.pdf | Bin 244867 -> 244885 bytes macros/latex-dev/base/ltnews22.pdf | Bin 317773 -> 317795 bytes macros/latex-dev/base/ltnews23.pdf | Bin 286591 -> 286598 bytes macros/latex-dev/base/ltnews24.pdf | Bin 265279 -> 265290 bytes macros/latex-dev/base/ltnews25.pdf | Bin 204935 -> 204955 bytes macros/latex-dev/base/ltnews26.pdf | Bin 379462 -> 379476 bytes macros/latex-dev/base/ltnews27.pdf | Bin 250592 -> 250597 bytes macros/latex-dev/base/ltnews28.pdf | Bin 376643 -> 376643 bytes macros/latex-dev/base/ltnews29.pdf | Bin 455107 -> 455126 bytes macros/latex-dev/base/ltnews30.pdf | Bin 511909 -> 511917 bytes macros/latex-dev/base/ltnews31.pdf | Bin 526323 -> 526372 bytes macros/latex-dev/base/ltnews32.pdf | Bin 546160 -> 546153 bytes macros/latex-dev/base/ltnews33.pdf | Bin 522412 -> 522387 bytes macros/latex-dev/base/ltnews34.pdf | Bin 508044 -> 508096 bytes macros/latex-dev/base/ltnews35.pdf | Bin 563534 -> 563132 bytes macros/latex-dev/base/ltnews35.tex | 4 - macros/latex-dev/base/ltnews36.pdf | Bin 306491 -> 495767 bytes macros/latex-dev/base/ltnews36.tex | 243 +- macros/latex-dev/base/ltoutput.dtx | 13 +- macros/latex-dev/base/ltpara-code.pdf | Bin 667151 -> 667444 bytes macros/latex-dev/base/ltpara-doc.pdf | Bin 560009 -> 560308 bytes macros/latex-dev/base/ltshipout-code.pdf | Bin 819020 -> 818922 bytes macros/latex-dev/base/ltshipout-doc.pdf | Bin 563793 -> 563691 bytes macros/latex-dev/base/ltshipout.dtx | 4 +- macros/latex-dev/base/lttextcomp.dtx | 10 +- macros/latex-dev/base/ltvers.dtx | 4 +- macros/latex-dev/base/ltx3info.pdf | Bin 219349 -> 219349 bytes macros/latex-dev/base/ltxdoc.pdf | Bin 242645 -> 242645 bytes macros/latex-dev/base/makeindx.pdf | Bin 165821 -> 165821 bytes macros/latex-dev/base/manifest.txt | 4 +- macros/latex-dev/base/modguide.pdf | Bin 243605 -> 257804 bytes macros/latex-dev/base/modguide.tex | 7 +- macros/latex-dev/base/nfssfont.pdf | Bin 211180 -> 211180 bytes macros/latex-dev/base/proc.pdf | Bin 227059 -> 227059 bytes macros/latex-dev/base/slides.pdf | Bin 375518 -> 375518 bytes macros/latex-dev/base/slifonts.pdf | Bin 234191 -> 234191 bytes macros/latex-dev/base/source2e.pdf | Bin 5713613 -> 5750608 bytes macros/latex-dev/base/syntonly.pdf | Bin 189966 -> 189680 bytes macros/latex-dev/base/tlc2.pdf | Bin 290615 -> 290615 bytes macros/latex-dev/base/tulm.pdf | Bin 162772 -> 162772 bytes macros/latex-dev/base/usrguide-historic.pdf | Bin 0 -> 438515 bytes macros/latex-dev/base/usrguide-historic.tex | 1832 ++++++++++ macros/latex-dev/base/usrguide.pdf | Bin 430994 -> 473895 bytes macros/latex-dev/base/usrguide.tex | 2570 +++++--------- macros/latex-dev/base/usrguide3.pdf | Bin 410688 -> 0 bytes macros/latex-dev/base/usrguide3.tex | 1112 ------ macros/latex-dev/base/utf8ienc.pdf | Bin 353405 -> 353663 bytes macros/latex-dev/base/webcomp.pdf | Bin 146198 -> 146198 bytes macros/latex-dev/required/tools/README.md | 2 +- macros/latex-dev/required/tools/afterpage.pdf | Bin 197738 -> 197738 bytes macros/latex-dev/required/tools/array.dtx | 12 +- macros/latex-dev/required/tools/array.pdf | Bin 516615 -> 517102 bytes macros/latex-dev/required/tools/bm.pdf | Bin 323432 -> 323432 bytes macros/latex-dev/required/tools/calc.pdf | Bin 370657 -> 370657 bytes macros/latex-dev/required/tools/changes.txt | 6 + macros/latex-dev/required/tools/dcolumn.pdf | Bin 220834 -> 220834 bytes macros/latex-dev/required/tools/delarray.pdf | Bin 191064 -> 191064 bytes macros/latex-dev/required/tools/enumerate.pdf | Bin 215498 -> 215498 bytes macros/latex-dev/required/tools/fileerr.pdf | Bin 187649 -> 187982 bytes macros/latex-dev/required/tools/fontsmpl.pdf | Bin 146446 -> 146446 bytes macros/latex-dev/required/tools/ftnright.pdf | Bin 387159 -> 387505 bytes macros/latex-dev/required/tools/hhline.pdf | Bin 189679 -> 189679 bytes macros/latex-dev/required/tools/indentfirst.pdf | Bin 157954 -> 157954 bytes macros/latex-dev/required/tools/layout.pdf | Bin 259969 -> 259969 bytes macros/latex-dev/required/tools/longtable.pdf | Bin 391313 -> 391313 bytes macros/latex-dev/required/tools/multicol.pdf | Bin 521384 -> 521328 bytes macros/latex-dev/required/tools/rawfonts.pdf | Bin 138963 -> 138963 bytes macros/latex-dev/required/tools/shellesc.pdf | Bin 175929 -> 175929 bytes macros/latex-dev/required/tools/showkeys.pdf | Bin 251782 -> 251782 bytes macros/latex-dev/required/tools/somedefs.pdf | Bin 167572 -> 167572 bytes macros/latex-dev/required/tools/tabularx.pdf | Bin 287073 -> 287073 bytes macros/latex-dev/required/tools/theorem.pdf | Bin 351628 -> 351963 bytes macros/latex-dev/required/tools/tools-overview.pdf | Bin 73672 -> 73672 bytes macros/latex-dev/required/tools/trace.pdf | Bin 222076 -> 222076 bytes macros/latex-dev/required/tools/varioref.pdf | Bin 398985 -> 398798 bytes macros/latex-dev/required/tools/verbatim.dtx | 8 +- macros/latex-dev/required/tools/verbatim.pdf | Bin 330963 -> 330746 bytes macros/latex-dev/required/tools/xr.pdf | Bin 169986 -> 169986 bytes macros/latex-dev/required/tools/xspace.pdf | Bin 257018 -> 257018 bytes .../contrib/pdfmanagement-testphase/CHANGELOG.md | 13 + .../contrib/pdfmanagement-testphase/README.md | 2 +- .../contrib/pdfmanagement-testphase/color-ltx.sty | 2 +- .../colorspace-patches-tmp-ltx.sty | 29 +- .../fontspec-luatex-tmp-ltx.sty | 2 +- .../pdfmanagement-testphase/hyperref-generic.dtx | 108 +- .../pdfmanagement-testphase/hyperref-generic.pdf | Bin 950072 -> 961699 bytes .../hyperxmp-patches-tmp-ltx.sty | 184 - .../l3backend-testphase.dtx | 70 +- .../l3backend-testphase.pdf | Bin 680665 -> 686251 bytes .../contrib/pdfmanagement-testphase/l3pdfannot.dtx | 9 +- .../contrib/pdfmanagement-testphase/l3pdfannot.pdf | Bin 577844 -> 586518 bytes .../contrib/pdfmanagement-testphase/l3pdfdict.dtx | 9 +- .../contrib/pdfmanagement-testphase/l3pdfdict.pdf | Bin 505793 -> 514280 bytes .../pdfmanagement-testphase/l3pdffield-action.dtx | 7 +- .../pdfmanagement-testphase/l3pdffield-action.pdf | Bin 546831 -> 557451 bytes .../l3pdffield-checkbox.dtx | 13 +- .../l3pdffield-checkbox.pdf | Bin 529869 -> 540495 bytes .../pdfmanagement-testphase/l3pdffield-choice.dtx | 9 +- .../pdfmanagement-testphase/l3pdffield-choice.pdf | Bin 533083 -> 543714 bytes .../l3pdffield-pushbutton.dtx | 7 +- .../l3pdffield-pushbutton.pdf | Bin 525255 -> 535895 bytes .../l3pdffield-radiobutton.dtx | 15 +- .../l3pdffield-radiobutton.pdf | Bin 580694 -> 591324 bytes .../l3pdffield-textfield.dtx | 7 +- .../l3pdffield-textfield.pdf | Bin 504492 -> 515125 bytes .../contrib/pdfmanagement-testphase/l3pdffield.dtx | 17 +- .../contrib/pdfmanagement-testphase/l3pdffield.pdf | Bin 738839 -> 749246 bytes .../contrib/pdfmanagement-testphase/l3pdffile.dtx | 19 +- .../contrib/pdfmanagement-testphase/l3pdffile.pdf | Bin 552332 -> 560813 bytes .../pdfmanagement-testphase/l3pdfmanagement.dtx | 97 +- .../pdfmanagement-testphase/l3pdfmanagement.pdf | Bin 673768 -> 681205 bytes .../contrib/pdfmanagement-testphase/l3pdfmeta.dtx | 1578 +++++++- .../contrib/pdfmanagement-testphase/l3pdfmeta.pdf | Bin 672429 -> 833394 bytes .../contrib/pdfmanagement-testphase/l3pdftools.dtx | 13 +- .../contrib/pdfmanagement-testphase/l3pdftools.pdf | Bin 517303 -> 526052 bytes .../contrib/pdfmanagement-testphase/l3pdfxform.dtx | 7 +- .../contrib/pdfmanagement-testphase/l3pdfxform.pdf | Bin 417532 -> 426054 bytes .../contrib/pdfmanagement-testphase/ltdocinit.dtx | 10 +- .../contrib/pdfmanagement-testphase/ltdocinit.pdf | Bin 573525 -> 582749 bytes .../output-patches-tmp-ltx.pdf | Bin 385557 -> 385718 bytes .../pdfmanagement-testphase/pdflscape-ltx.sty | 2 +- .../pdfmanagement-firstaid.dtx | 38 +- .../pdfmanagement-firstaid.pdf | Bin 425614 -> 436654 bytes .../pdfmanagement-testphase.dtx | 30 +- .../pdfmanagement-testphase.pdf | Bin 446650 -> 455669 bytes .../pdfmanagement-testphase/transparent-ltx.sty | 2 +- .../xcolor-patches-tmp-ltx.sty | 2 +- macros/latex/contrib/wargame/README.md | 175 +- macros/latex/contrib/wargame/doc/README.md | 265 -- macros/latex/contrib/wargame/doc/compat.pdf | Bin 432794 -> 432806 bytes macros/latex/contrib/wargame/doc/symbols.pdf | Bin 184481 -> 184493 bytes macros/latex/contrib/wargame/doc/tutorial/Makefile | 2 +- .../latex/contrib/wargame/doc/tutorial/README.md | 2 +- .../latex/contrib/wargame/doc/tutorial/export.tex | 59 +- macros/latex/contrib/wargame/doc/tutorial/game.pdf | Bin 583710 -> 583838 bytes macros/latex/contrib/wargame/doc/tutorial/patch.py | 22 +- macros/latex/contrib/wargame/doc/wargame.pdf | Bin 1308051 -> 1310006 bytes macros/latex/contrib/wargame/source/Makefile | 18 +- macros/latex/contrib/wargame/source/chit/misc.dtx | 5 +- .../latex/contrib/wargame/source/hex/terrain.dtx | 18 +- macros/latex/contrib/wargame/source/util/core.dtx | 17 + .../latex/contrib/wargame/source/utils/export.py | 3752 -------------------- .../latex/contrib/wargame/source/utils/svg2tikz.py | 365 -- .../latex/contrib/wargame/source/utils/wgexport.py | 3750 +++++++++++++++++++ .../contrib/wargame/source/utils/wgsvg2tikz.py | 365 ++ macros/latex/contrib/wargame/source/wargame.dtx | 26 +- macros/latex/contrib/wargame/source/wargame.ins | 18 +- support/TeX4ht/source/ChangeLog | 10 + support/TeX4ht/source/tex4ht-4ht.tex | 29 +- .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 4 - systems/texlive/tlnet/tlpkg/texlive.tlpdb | 255 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2411112 -> 2412740 bytes systems/win32/miktex/tm/packages/next/pr.ini | 8 +- systems/win32/miktex/tm/packages/pr.ini | 8 +- timestamp | 2 +- 243 files changed, 14532 insertions(+), 10611 deletions(-) create mode 100644 fonts/neo-euler/Neo-Euler.ltx create mode 100644 fonts/neo-euler/Neo-Euler.otf create mode 100644 fonts/neo-euler/Neo-Euler.pdf create mode 100644 fonts/neo-euler/README.md create mode 100644 fonts/neo-euler/neo-euler.sty create mode 100644 fonts/neo-euler/unimath-euler.ltx create mode 100644 fonts/neo-euler/unimath-euler.pdf create mode 100644 macros/latex-dev/base/usrguide-historic.pdf create mode 100644 macros/latex-dev/base/usrguide-historic.tex delete mode 100644 macros/latex-dev/base/usrguide3.pdf delete mode 100644 macros/latex-dev/base/usrguide3.tex delete mode 100644 macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty delete mode 100644 macros/latex/contrib/wargame/doc/README.md delete mode 100755 macros/latex/contrib/wargame/source/utils/export.py delete mode 100755 macros/latex/contrib/wargame/source/utils/svg2tikz.py create mode 100755 macros/latex/contrib/wargame/source/utils/wgexport.py create mode 100755 macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py diff --git a/CTAN.sites b/CTAN.sites index fc63de232b..3f4c56698b 100644 --- a/CTAN.sites +++ b/CTAN.sites @@ -131,11 +131,6 @@ by country): cran.asia (Korea) URL: https://cran.asia/tex/ - ftp.harukasan.org (Korea) - URL: ftp://ftp.harukasan.org/CTAN/ - URL: rsync://ftp.harukasan.org/CTAN/ - URL: https://ftp.harukasan.org/CTAN/ - ftp.kaist.ac.kr (Korea) URL: ftp://ftp.kaist.ac.kr/tex-archive/ URL: rsync://ftp.kaist.ac.kr/ctan/ diff --git a/FILES.byname b/FILES.byname index 444b693365..6499992b00 100644 --- a/FILES.byname +++ b/FILES.byname @@ -5409,7 +5409,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 -2022/09/25 | 95044 | FILES.last07days +2022/09/26 | 93671 | 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 @@ -82635,6 +82635,14 @@ 2013/03/04 | 692 | fonts/nanumtype1/vf/ts1nanummjmo.vf 2013/03/04 | 684 | fonts/nanumtype1/vf/ts1nanummjm.vf 2013/03/25 | 30424476 | fonts/nanumtype1.zip +2022/09/26 | 18011 | fonts/neo-euler/Neo-Euler.ltx +2022/09/26 | 438548 | fonts/neo-euler/Neo-Euler.otf +2022/09/26 | 134087 | fonts/neo-euler/Neo-Euler.pdf +2022/09/26 | 4579 | fonts/neo-euler/neo-euler.sty +2022/09/26 | 2014 | fonts/neo-euler/README.md +2022/09/26 | 16836 | fonts/neo-euler/unimath-euler.ltx +2022/09/26 | 1452646 | fonts/neo-euler/unimath-euler.pdf +2022/09/26 | 1878261 | fonts/neo-euler.zip 2021/12/15 | 215551 | fonts/newcomputermodern/doc/newcm-doc.pdf 2021/12/15 | 28354 | fonts/newcomputermodern/doc/newcm-doc.tex 2021/12/09 | 16144 | fonts/newcomputermodern/doc/newcm-unimath-symbols.ltx @@ -143335,11 +143343,11 @@ 2019/07/15 | 1058 | fonts/theanodidot/latex/OT1TheanoDidot-TOsF.fd 2019/07/15 | 1035 | fonts/theanodidot/latex/T1TheanoDidot-TLF.fd 2019/07/15 | 1048 | fonts/theanodidot/latex/T1TheanoDidot-TOsF.fd -2019/07/15 | 2392 | fonts/theanodidot/latex/TheanoDidot.sty +2022/09/26 | 2358 | fonts/theanodidot/latex/TheanoDidot.sty 2019/07/15 | 1045 | fonts/theanodidot/latex/TS1TheanoDidot-TLF.fd 2019/07/15 | 1058 | fonts/theanodidot/latex/TS1TheanoDidot-TOsF.fd 2019/07/15 | 2876 | fonts/theanodidot/map/TheanoDidot.map -2019/07/15 | 2208 | fonts/theanodidot/README +2022/09/26 | 2208 | fonts/theanodidot/README 2019/07/15 | 4100 | fonts/theanodidot/tfm/TheanoDidot-Bold-tlf-lgr.tfm 2019/07/15 | 8128 | fonts/theanodidot/tfm/TheanoDidot-Bold-tlf-ly1.tfm 2019/07/15 | 2896 | fonts/theanodidot/tfm/TheanoDidot-Bold-tlf-ot1.tfm @@ -143380,7 +143388,7 @@ 2019/07/15 | 636 | fonts/theanodidot/vf/TheanoDidot-Regular-tlf-ts1.vf 2019/07/15 | 1728 | fonts/theanodidot/vf/TheanoDidot-Regular-tosf-t1.vf 2019/07/15 | 636 | fonts/theanodidot/vf/TheanoDidot-Regular-tosf-ts1.vf -2019/07/16 | 542205 | fonts/theanodidot.zip +2022/09/26 | 542187 | fonts/theanodidot.zip 2019/07/27 | 4299 | fonts/theanomodern/doc/SILOpenFontLicense.txt 2019/07/27 | 30221 | fonts/theanomodern/doc/theanomodern-samples.pdf 2019/07/27 | 536 | fonts/theanomodern/doc/theanomodern-samples.tex @@ -143402,11 +143410,11 @@ 2019/07/27 | 1077 | fonts/theanomodern/latex/OT1TheanoModern-TOsF.fd 2019/07/27 | 1054 | fonts/theanomodern/latex/T1TheanoModern-TLF.fd 2019/07/27 | 1067 | fonts/theanomodern/latex/T1TheanoModern-TOsF.fd -2019/07/27 | 2437 | fonts/theanomodern/latex/TheanoModern.sty +2022/09/26 | 2403 | fonts/theanomodern/latex/TheanoModern.sty 2019/07/27 | 1064 | fonts/theanomodern/latex/TS1TheanoModern-TLF.fd 2019/07/27 | 1077 | fonts/theanomodern/latex/TS1TheanoModern-TOsF.fd 2019/07/27 | 2936 | fonts/theanomodern/map/TheanoModern.map -2019/07/27 | 1670 | fonts/theanomodern/README +2022/09/26 | 1670 | fonts/theanomodern/README 2019/07/27 | 4060 | fonts/theanomodern/tfm/TheanoModern-Bold-tlf-lgr.tfm 2019/07/27 | 7768 | fonts/theanomodern/tfm/TheanoModern-Bold-tlf-ly1.tfm 2019/07/27 | 2740 | fonts/theanomodern/tfm/TheanoModern-Bold-tlf-ot1.tfm @@ -143447,7 +143455,7 @@ 2019/07/27 | 636 | fonts/theanomodern/vf/TheanoModern-Regular-tlf-ts1.vf 2019/07/27 | 1728 | fonts/theanomodern/vf/TheanoModern-Regular-tosf-t1.vf 2019/07/27 | 636 | fonts/theanomodern/vf/TheanoModern-Regular-tosf-ts1.vf -2019/07/27 | 554833 | fonts/theanomodern.zip +2022/09/26 | 554814 | fonts/theanomodern.zip 2019/07/27 | 4299 | fonts/theanooldstyle/doc/SILOpenFontLicense.txt 2019/07/27 | 31615 | fonts/theanooldstyle/doc/theanooldstyle-samples.pdf 2019/07/27 | 544 | fonts/theanooldstyle/doc/theanooldstyle-samples.tex @@ -143469,11 +143477,11 @@ 2019/07/27 | 1115 | fonts/theanooldstyle/latex/OT1TheanoOldStyle-TOsF.fd 2019/07/27 | 1092 | fonts/theanooldstyle/latex/T1TheanoOldStyle-TLF.fd 2019/07/27 | 1105 | fonts/theanooldstyle/latex/T1TheanoOldStyle-TOsF.fd -2019/07/27 | 2527 | fonts/theanooldstyle/latex/TheanoOldStyle.sty +2022/09/26 | 2493 | fonts/theanooldstyle/latex/TheanoOldStyle.sty 2019/07/27 | 1102 | fonts/theanooldstyle/latex/TS1TheanoOldStyle-TLF.fd 2019/07/27 | 1115 | fonts/theanooldstyle/latex/TS1TheanoOldStyle-TOsF.fd 2019/07/27 | 3056 | fonts/theanooldstyle/map/TheanoOldStyle.map -2019/07/27 | 1686 | fonts/theanooldstyle/README +2022/09/26 | 1686 | fonts/theanooldstyle/README 2019/07/27 | 4188 | fonts/theanooldstyle/tfm/TheanoOldStyle-Bold-tlf-lgr.tfm 2019/07/27 | 8216 | fonts/theanooldstyle/tfm/TheanoOldStyle-Bold-tlf-ly1.tfm 2019/07/27 | 2960 | fonts/theanooldstyle/tfm/TheanoOldStyle-Bold-tlf-ot1.tfm @@ -143514,7 +143522,7 @@ 2019/07/27 | 636 | fonts/theanooldstyle/vf/TheanoOldStyle-Regular-tlf-ts1.vf 2019/07/27 | 1728 | fonts/theanooldstyle/vf/TheanoOldStyle-Regular-tosf-t1.vf 2019/07/27 | 640 | fonts/theanooldstyle/vf/TheanoOldStyle-Regular-tosf-ts1.vf -2019/07/28 | 654866 | fonts/theanooldstyle.zip +2022/09/26 | 654847 | fonts/theanooldstyle.zip 2017/01/04 | 11358 | fonts/tinos/doc/LICENSE.txt 2017/01/04 | 24368 | fonts/tinos/doc/tinos-samples.pdf 2017/01/04 | 294 | fonts/tinos/doc/tinos-samples.tex @@ -188994,9 +189002,9 @@ 2018/06/24 | 21731702 | install/fonts/tex-gyre.tds.zip 2020/02/12 | 3333445 | install/fonts/thai/fonts-arundina.tds.zip 2021/10/18 | 20960980 | install/fonts/thai/fonts-tlwg.tds.zip -2019/07/16 | 550161 | install/fonts/theanodidot.tds.zip -2019/07/27 | 562787 | install/fonts/theanomodern.tds.zip -2019/07/27 | 662816 | install/fonts/theanooldstyle.tds.zip +2022/09/26 | 550143 | install/fonts/theanodidot.tds.zip +2022/09/26 | 562768 | install/fonts/theanomodern.tds.zip +2022/09/26 | 662797 | install/fonts/theanooldstyle.tds.zip 2022/09/24 | 3638749 | install/fonts/tinos.tds.zip 2022/09/25 | 827639 | install/fonts/universalis.tds.zip 2022/03/10 | 8052461 | install/fonts/uptex-fonts.tds.zip @@ -189346,7 +189354,7 @@ 2012/04/13 | 261959 | install/macros/latex/contrib/usebib.tds.zip 2014/05/10 | 440916 | install/macros/latex/contrib/verse.tds.zip 2012/04/18 | 16307 | install/macros/latex/contrib/vpe.tds.zip -2022/09/24 | 2898217 | install/macros/latex/contrib/wargame.tds.zip +2022/09/26 | 2901441 | install/macros/latex/contrib/wargame.tds.zip 2020/05/01 | 936344 | install/macros/latex/contrib/xcjk2uni.tds.zip 2016/08/05 | 475695 | install/macros/latex/contrib/xcolor-solarized.tds.zip 2009/02/05 | 111968 | install/macros/latex/contrib/xfor.tds.zip @@ -189362,12 +189370,12 @@ 2020/04/09 | 806385 | install/macros/latex/contrib/zhlipsum.tds.zip 2022/07/14 | 321454 | install/macros/latex/contrib/zhnumber.tds.zip 2022/05/28 | 1626594 | install/macros/latex/contrib/zref-clever.tds.zip -2022/07/17 | 38581474 | install/macros/latex-dev/latex-base-dev.tds.zip +2022/09/23 | 38961369 | install/macros/latex-dev/latex-base-dev.tds.zip 2022/06/16 | 2795156 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip 2022/03/15 | 246503 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip 2022/06/16 | 3110800 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip 2022/05/19 | 2829818 | install/macros/latex-dev/required/latex-lab-dev.tds.zip -2022/06/16 | 7338999 | install/macros/latex-dev/required/latex-tools-dev.tds.zip +2022/09/23 | 7340097 | install/macros/latex-dev/required/latex-tools-dev.tds.zip 2022/07/05 | 38317838 | install/macros/latex/latex-base.tds.zip 2020/06/01 | 1578753 | install/macros/latex/required/amscls.tds.zip 2022/09/17 | 3014186 | install/macros/latex/required/babel-base.tds.zip @@ -225807,59 +225815,58 @@ 2019/12/05 | 299397 | macros/latex/contrib/pdflscape/pdflscape.pdf 2019/12/05 | 170 | macros/latex/contrib/pdflscape/README.md 2019/12/06 | 301872 | macros/latex/contrib/pdflscape.zip -2022/08/24 | 7641 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md -2022/08/24 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty -2022/08/24 | 2670 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty -2022/08/24 | 150154 | macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty -2022/08/24 | 175632 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx -2022/08/24 | 950072 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf -2022/08/24 | 5905 | macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty -2022/08/24 | 70946 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx -2022/08/24 | 680665 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf -2022/08/24 | 28676 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx -2022/08/24 | 577844 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf -2022/08/24 | 17353 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx -2022/08/24 | 505793 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf -2022/08/24 | 26591 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx -2022/08/24 | 546831 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf -2022/08/24 | 18208 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx -2022/08/24 | 529869 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf -2022/08/24 | 20475 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx -2022/08/24 | 533083 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf -2022/08/24 | 67875 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx -2022/08/24 | 738839 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf -2022/08/24 | 26581 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx -2022/08/24 | 525255 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf -2022/08/24 | 30715 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx -2022/08/24 | 580694 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf -2022/08/24 | 22032 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx -2022/08/24 | 504492 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf -2022/08/24 | 27977 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx -2022/08/24 | 552332 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf -2022/08/24 | 63844 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx -2022/08/24 | 673768 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf -2022/08/24 | 35428 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx -2022/08/24 | 672429 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf -2022/08/24 | 15698 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx -2022/08/24 | 517303 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf -2022/08/24 | 6463 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx -2022/08/24 | 417532 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf -2022/08/24 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty -2022/08/24 | 19689 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx -2022/08/24 | 573525 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf -2022/08/24 | 2134 | macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua -2022/08/24 | 5043 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx -2022/08/24 | 385557 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf -2022/08/24 | 1822 | macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty -2022/08/24 | 11769 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx -2022/08/24 | 425614 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf -2022/08/24 | 18048 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx -2022/08/24 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins -2022/08/24 | 446650 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf -2022/08/24 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md -2022/08/24 | 580 | macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty -2022/08/24 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty -2022/08/24 | 11207026 | macros/latex/contrib/pdfmanagement-testphase.zip +2022/09/26 | 8007 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +2022/09/26 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +2022/09/26 | 2880 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +2022/09/26 | 150154 | macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty +2022/09/26 | 176582 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +2022/09/26 | 961699 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf +2022/09/26 | 72949 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +2022/09/26 | 686251 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf +2022/09/26 | 28627 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +2022/09/26 | 586518 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf +2022/09/26 | 17304 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +2022/09/26 | 514280 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf +2022/09/26 | 26550 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +2022/09/26 | 557451 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf +2022/09/26 | 18170 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +2022/09/26 | 540495 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf +2022/09/26 | 20435 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +2022/09/26 | 543714 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf +2022/09/26 | 67833 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +2022/09/26 | 749246 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf +2022/09/26 | 26540 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +2022/09/26 | 535895 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf +2022/09/26 | 30678 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +2022/09/26 | 591324 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf +2022/09/26 | 21991 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +2022/09/26 | 515125 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf +2022/09/26 | 27907 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +2022/09/26 | 560813 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf +2022/09/26 | 63555 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +2022/09/26 | 681205 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf +2022/09/26 | 88197 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +2022/09/26 | 833394 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf +2022/09/26 | 15651 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +2022/09/26 | 526052 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf +2022/09/26 | 6413 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +2022/09/26 | 426054 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf +2022/09/26 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty +2022/09/26 | 19820 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +2022/09/26 | 582749 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf +2022/09/26 | 2134 | macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua +2022/09/26 | 5043 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx +2022/09/26 | 385718 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf +2022/09/26 | 1822 | macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty +2022/09/26 | 12168 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +2022/09/26 | 436654 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf +2022/09/26 | 18021 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +2022/09/26 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins +2022/09/26 | 455669 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf +2022/09/26 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md +2022/09/26 | 580 | macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty +2022/09/26 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +2022/09/26 | 11385678 | macros/latex/contrib/pdfmanagement-testphase.zip 2011/05/05 | 156 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.aux 2011/05/05 | 3368 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.log 2011/05/05 | 64982 | macros/latex/contrib/pdfmarginpar/doc/pdfmarginparexample.pdf @@ -235028,78 +235035,77 @@ 2006/04/21 | 15221 | macros/latex/contrib/wallpaper/wallpapermanual.pdf 2006/04/21 | 6919 | macros/latex/contrib/wallpaper/wallpaper.sty 2006/04/21 | 1278934 | macros/latex/contrib/wallpaper.zip -2022/09/24 | 432794 | macros/latex/contrib/wargame/doc/compat.pdf -2022/09/24 | 10164 | macros/latex/contrib/wargame/doc/README.md -2022/09/24 | 184481 | macros/latex/contrib/wargame/doc/symbols.pdf -2022/09/24 | 14095 | macros/latex/contrib/wargame/doc/tutorial/export.tex -2022/09/24 | 583710 | macros/latex/contrib/wargame/doc/tutorial/game.pdf -2022/09/24 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty -2022/09/24 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex -2022/09/24 | 1054 | macros/latex/contrib/wargame/doc/tutorial/Makefile -2022/09/24 | 853 | macros/latex/contrib/wargame/doc/tutorial/patch.py -2022/09/24 | 1254 | macros/latex/contrib/wargame/doc/tutorial/README.md -2022/09/24 | 1308051 | macros/latex/contrib/wargame/doc/wargame.pdf -2022/09/24 | 10164 | macros/latex/contrib/wargame/README.md -2022/09/24 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx -2022/09/24 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx -2022/09/24 | 12639 | macros/latex/contrib/wargame/source/chit/misc.dtx -2022/09/24 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx -2022/09/24 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx -2022/09/24 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx -2022/09/24 | 2311 | macros/latex/contrib/wargame/source/hex/core.dtx -2022/09/24 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx -2022/09/24 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx -2022/09/24 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx -2022/09/24 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx -2022/09/24 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx -2022/09/24 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx -2022/09/24 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx -2022/09/24 | 8133 | macros/latex/contrib/wargame/source/hex/terrain.dtx -2022/09/24 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx -2022/09/24 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx -2022/09/24 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx -2022/09/24 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx -2022/09/24 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx -2022/09/24 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx -2022/09/24 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx -2022/09/24 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx -2022/09/24 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx -2022/09/24 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx -2022/09/24 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx -2022/09/24 | 8558 | macros/latex/contrib/wargame/source/Makefile -2022/09/24 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx -2022/09/24 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx -2022/09/24 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx -2022/09/24 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx -2022/09/24 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx -2022/09/24 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx -2022/09/24 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx -2022/09/24 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx -2022/09/24 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx -2022/09/24 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx -2022/09/24 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx -2022/09/24 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx -2022/09/24 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx -2022/09/24 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx -2022/09/24 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx -2022/09/24 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx -2022/09/24 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx -2022/09/24 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx -2022/09/24 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx -2022/09/24 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx -2022/09/24 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx -2022/09/24 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx -2022/09/24 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx -2022/09/24 | 932 | macros/latex/contrib/wargame/source/package.dtx -2022/09/24 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx -2022/09/24 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx -2022/09/24 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex -2022/09/24 | 40592 | macros/latex/contrib/wargame/source/util/core.dtx -2022/09/24 | 132160 | macros/latex/contrib/wargame/source/utils/export.py -2022/09/24 | 10300 | macros/latex/contrib/wargame/source/utils/svg2tikz.py -2022/09/24 | 84635 | macros/latex/contrib/wargame/source/wargame.dtx -2022/09/24 | 6966 | macros/latex/contrib/wargame/source/wargame.ins -2022/09/25 | 2652747 | macros/latex/contrib/wargame.zip +2022/09/26 | 432806 | macros/latex/contrib/wargame/doc/compat.pdf +2022/09/26 | 184493 | macros/latex/contrib/wargame/doc/symbols.pdf +2022/09/26 | 13995 | macros/latex/contrib/wargame/doc/tutorial/export.tex +2022/09/26 | 583838 | macros/latex/contrib/wargame/doc/tutorial/game.pdf +2022/09/26 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty +2022/09/26 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex +2022/09/26 | 1056 | macros/latex/contrib/wargame/doc/tutorial/Makefile +2022/09/26 | 821 | macros/latex/contrib/wargame/doc/tutorial/patch.py +2022/09/26 | 1256 | macros/latex/contrib/wargame/doc/tutorial/README.md +2022/09/26 | 1310006 | macros/latex/contrib/wargame/doc/wargame.pdf +2022/09/26 | 10843 | macros/latex/contrib/wargame/README.md +2022/09/26 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx +2022/09/26 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx +2022/09/26 | 12681 | macros/latex/contrib/wargame/source/chit/misc.dtx +2022/09/26 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx +2022/09/26 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx +2022/09/26 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx +2022/09/26 | 2311 | macros/latex/contrib/wargame/source/hex/core.dtx +2022/09/26 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx +2022/09/26 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx +2022/09/26 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx +2022/09/26 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx +2022/09/26 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx +2022/09/26 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx +2022/09/26 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx +2022/09/26 | 8205 | macros/latex/contrib/wargame/source/hex/terrain.dtx +2022/09/26 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx +2022/09/26 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx +2022/09/26 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx +2022/09/26 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx +2022/09/26 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx +2022/09/26 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx +2022/09/26 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx +2022/09/26 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx +2022/09/26 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx +2022/09/26 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx +2022/09/26 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx +2022/09/26 | 8618 | macros/latex/contrib/wargame/source/Makefile +2022/09/26 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx +2022/09/26 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx +2022/09/26 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx +2022/09/26 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx +2022/09/26 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx +2022/09/26 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx +2022/09/26 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx +2022/09/26 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx +2022/09/26 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx +2022/09/26 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx +2022/09/26 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx +2022/09/26 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx +2022/09/26 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx +2022/09/26 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx +2022/09/26 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx +2022/09/26 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx +2022/09/26 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx +2022/09/26 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx +2022/09/26 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx +2022/09/26 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx +2022/09/26 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx +2022/09/26 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx +2022/09/26 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx +2022/09/26 | 932 | macros/latex/contrib/wargame/source/package.dtx +2022/09/26 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx +2022/09/26 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx +2022/09/26 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex +2022/09/26 | 41240 | macros/latex/contrib/wargame/source/util/core.dtx +2022/09/26 | 133283 | macros/latex/contrib/wargame/source/utils/wgexport.py +2022/09/26 | 10300 | macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py +2022/09/26 | 84739 | macros/latex/contrib/wargame/source/wargame.dtx +2022/09/26 | 7038 | macros/latex/contrib/wargame/source/wargame.ins +2022/09/26 | 2651836 | macros/latex/contrib/wargame.zip 2011/04/08 | 254870 | macros/latex/contrib/warning/warning-doc.pdf 2011/04/08 | 2368 | macros/latex/contrib/warning/warning-doc.tex 2001/08/17 | 2425 | macros/latex/contrib/warning/warning.sty @@ -236077,288 +236083,288 @@ 2022/04/18 | 501158 | macros/latex/contrib/zwpagelayout/zwpagelayout.pdf 2022/04/18 | 36154 | macros/latex/contrib/zwpagelayout/zwpagelayout.sty 2022/04/18 | 69553 | macros/latex/contrib/zwpagelayout/zwpagelayout.tex -2022/07/17 | 7104 | macros/latex-dev/base/alltt.dtx -2022/07/17 | 2890 | macros/latex-dev/base/alltt.ins -2022/07/17 | 223831 | macros/latex-dev/base/alltt.pdf -2022/07/17 | 3282 | macros/latex-dev/base/bugs.txt -2022/07/17 | 242888 | macros/latex-dev/base/cfgguide.pdf -2022/07/17 | 22456 | macros/latex-dev/base/cfgguide.tex -2022/07/17 | 42708 | macros/latex-dev/base/changes.old.txt -2022/07/17 | 399774 | macros/latex-dev/base/changes.txt -2022/07/17 | 156236 | macros/latex-dev/base/classes.dtx -2022/07/17 | 4087 | macros/latex-dev/base/classes.ins -2022/07/17 | 560611 | macros/latex-dev/base/classes.pdf -2022/07/17 | 402780 | macros/latex-dev/base/clsguide.pdf -2022/07/17 | 69050 | macros/latex-dev/base/clsguide.tex -2022/07/17 | 5273 | macros/latex-dev/base/cmextra.ins -2022/07/17 | 44410 | macros/latex-dev/base/cmfonts.fdd -2022/07/17 | 4324 | macros/latex-dev/base/cmfonts.ins -2022/07/17 | 292160 | macros/latex-dev/base/cmfonts.pdf -2022/07/17 | 239689 | macros/latex-dev/base/cyrguide.pdf -2022/07/17 | 17495 | macros/latex-dev/base/cyrguide.tex -2022/07/17 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty -2022/07/17 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty -2022/07/17 | 1077586 | macros/latex-dev/base/doc-code.pdf -2022/07/17 | 96 | macros/latex-dev/base/doc-code.tex -2022/07/17 | 241167 | macros/latex-dev/base/doc.dtx -2022/07/17 | 755127 | macros/latex-dev/base/doc.pdf -2022/07/17 | 170209 | macros/latex-dev/base/docstrip.dtx -2022/07/17 | 4273 | macros/latex-dev/base/docstrip.ins -2022/07/17 | 503716 | macros/latex-dev/base/docstrip.pdf -2022/07/17 | 4390 | macros/latex-dev/base/ec.ins -2022/07/17 | 1318126 | macros/latex-dev/base/encguide.pdf -2022/07/17 | 52813 | macros/latex-dev/base/encguide.tex -2022/07/17 | 7216 | macros/latex-dev/base/exscale.dtx -2022/07/17 | 3338 | macros/latex-dev/base/exscale.ins -2022/07/17 | 204711 | macros/latex-dev/base/exscale.pdf -2022/07/17 | 23516 | macros/latex-dev/base/fix-cm.dtx -2022/07/17 | 2892 | macros/latex-dev/base/fix-cm.ins -2022/07/17 | 287733 | macros/latex-dev/base/fix-cm.pdf -2022/07/17 | 502880 | macros/latex-dev/base/fntguide.pdf -2022/07/17 | 106880 | macros/latex-dev/base/fntguide.tex -2022/07/17 | 60321 | macros/latex-dev/base/fontdef.dtx -2022/07/17 | 9779 | macros/latex-dev/base/format.ins -2022/07/17 | 5509 | macros/latex-dev/base/graphpap.dtx -2022/07/17 | 2892 | macros/latex-dev/base/graphpap.ins -2022/07/17 | 161713 | macros/latex-dev/base/graphpap.pdf -2022/07/17 | 2705 | macros/latex-dev/base/idx.tex -2022/07/17 | 18753 | macros/latex-dev/base/ifthen.dtx -2022/07/17 | 2888 | macros/latex-dev/base/ifthen.ins -2022/07/17 | 221211 | macros/latex-dev/base/ifthen.pdf -2022/07/17 | 106904 | macros/latex-dev/base/inputenc.dtx -2022/07/17 | 5714 | macros/latex-dev/base/inputenc.ins -2022/07/17 | 318204 | macros/latex-dev/base/inputenc.pdf -2022/07/17 | 4079 | macros/latex-dev/base/lablst.tex -2022/07/17 | 13759 | macros/latex-dev/base/lamport-manual.err -2022/07/17 | 170878 | macros/latex-dev/base/lamport-manual.pdf -2022/07/17 | 38730 | macros/latex-dev/base/latex209.dtx -2022/07/17 | 4219 | macros/latex-dev/base/latex209.ins -2022/07/17 | 44976 | macros/latex-dev/base/latexrelease.dtx -2022/07/17 | 6047 | macros/latex-dev/base/latexrelease.ins -2022/07/17 | 281906 | macros/latex-dev/base/latexrelease.pdf -2022/07/17 | 6709 | macros/latex-dev/base/latexsym.dtx -2022/07/17 | 5041 | macros/latex-dev/base/latexsym.ins -2022/07/17 | 200760 | macros/latex-dev/base/latexsym.pdf -2022/07/17 | 52710 | macros/latex-dev/base/lb2.err -2022/07/17 | 252140 | macros/latex-dev/base/lb2.pdf -2022/07/17 | 1279 | macros/latex-dev/base/legal.txt -2022/07/17 | 63280 | macros/latex-dev/base/letter.dtx -2022/07/17 | 3372 | macros/latex-dev/base/letter.ins -2022/07/17 | 337880 | macros/latex-dev/base/letter.pdf -2022/07/17 | 20652 | macros/latex-dev/base/lgc2.err -2022/07/17 | 215684 | macros/latex-dev/base/lgc2.pdf -2022/07/17 | 9068 | macros/latex-dev/base/lppl-1-0.txt -2022/07/17 | 14341 | macros/latex-dev/base/lppl-1-1.txt -2022/07/17 | 14421 | macros/latex-dev/base/lppl-1-2.txt -2022/07/17 | 132382 | macros/latex-dev/base/lppl.pdf -2022/07/17 | 23386 | macros/latex-dev/base/lppl.tex -2022/07/17 | 19040 | macros/latex-dev/base/lppl.txt -2022/07/17 | 4298 | macros/latex-dev/base/ltalloc.dtx -2022/07/17 | 17389 | macros/latex-dev/base/ltbibl.dtx -2022/07/17 | 44772 | macros/latex-dev/base/ltboxes.dtx -2022/07/17 | 143062 | macros/latex-dev/base/ltclass.dtx -2022/07/17 | 172373 | macros/latex-dev/base/ltcmd.dtx -2022/07/17 | 719018 | macros/latex-dev/base/ltcmdhooks-code.pdf -2022/07/17 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex -2022/07/17 | 478530 | macros/latex-dev/base/ltcmdhooks-doc.pdf -2022/07/17 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex -2022/07/17 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx -2022/07/17 | 9557 | macros/latex-dev/base/ltcntrl.dtx -2022/07/17 | 24286 | macros/latex-dev/base/ltcounts.dtx -2022/07/17 | 85858 | macros/latex-dev/base/ltdefns.dtx -2022/07/17 | 35984 | macros/latex-dev/base/ltdirchk.dtx -2022/07/17 | 27069 | macros/latex-dev/base/lterror.dtx -2022/07/17 | 18711 | macros/latex-dev/base/ltexpl.dtx -2022/07/17 | 801140 | macros/latex-dev/base/ltfilehook-code.pdf -2022/07/17 | 105 | macros/latex-dev/base/ltfilehook-code.tex -2022/07/17 | 547909 | macros/latex-dev/base/ltfilehook-doc.pdf -2022/07/17 | 241 | macros/latex-dev/base/ltfilehook-doc.tex -2022/07/17 | 66541 | macros/latex-dev/base/ltfilehook.dtx -2022/07/17 | 58933 | macros/latex-dev/base/ltfiles.dtx -2022/07/17 | 47773 | macros/latex-dev/base/ltfinal.dtx -2022/07/17 | 55687 | macros/latex-dev/base/ltfloat.dtx -2022/07/17 | 29267 | macros/latex-dev/base/ltfntcmd.dtx -2022/07/17 | 58551 | macros/latex-dev/base/ltfssaxes.dtx -2022/07/17 | 82481 | macros/latex-dev/base/ltfssbas.dtx -2022/07/17 | 10370 | macros/latex-dev/base/ltfsscmp.dtx -2022/07/17 | 71136 | macros/latex-dev/base/ltfssdcl.dtx -2022/07/17 | 84215 | macros/latex-dev/base/ltfssini.dtx -2022/07/17 | 72475 | macros/latex-dev/base/ltfsstrc.dtx -2022/07/17 | 1091456 | macros/latex-dev/base/lthooks-code.pdf -2022/07/17 | 102 | macros/latex-dev/base/lthooks-code.tex -2022/07/17 | 701509 | macros/latex-dev/base/lthooks-doc.pdf -2022/07/17 | 238 | macros/latex-dev/base/lthooks-doc.tex -2022/07/17 | 211770 | macros/latex-dev/base/lthooks.dtx -2022/07/17 | 4945 | macros/latex-dev/base/lthyphen.dtx -2022/07/17 | 5859 | macros/latex-dev/base/ltidxglo.dtx -2022/07/17 | 19132 | macros/latex-dev/base/ltkeys.dtx -2022/07/17 | 4757 | macros/latex-dev/base/ltlength.dtx -2022/07/17 | 36152 | macros/latex-dev/base/ltlists.dtx -2022/07/17 | 3725 | macros/latex-dev/base/ltlogos.dtx -2022/07/17 | 65782 | macros/latex-dev/base/ltluatex.dtx -2022/07/17 | 317700 | macros/latex-dev/base/ltluatex.pdf -2022/07/17 | 715770 | macros/latex-dev/base/ltmarks-code.pdf -2022/07/17 | 102 | macros/latex-dev/base/ltmarks-code.tex -2022/07/17 | 586138 | macros/latex-dev/base/ltmarks-doc.pdf -2022/07/17 | 238 | macros/latex-dev/base/ltmarks-doc.tex -2022/07/17 | 63132 | macros/latex-dev/base/ltmarks.dtx -2022/07/17 | 40234 | macros/latex-dev/base/ltmath.dtx -2022/07/17 | 6213 | macros/latex-dev/base/ltmeta.dtx -2022/07/17 | 58745 | macros/latex-dev/base/ltmiscen.dtx -2022/07/17 | 161518 | macros/latex-dev/base/ltnews01.pdf -2022/07/17 | 5246 | macros/latex-dev/base/ltnews01.tex -2022/07/17 | 159792 | macros/latex-dev/base/ltnews02.pdf -2022/07/17 | 5462 | macros/latex-dev/base/ltnews02.tex -2022/07/17 | 159332 | macros/latex-dev/base/ltnews03.pdf -2022/07/17 | 5369 | macros/latex-dev/base/ltnews03.tex -2022/07/17 | 152525 | macros/latex-dev/base/ltnews04.pdf -2022/07/17 | 5678 | macros/latex-dev/base/ltnews04.tex -2022/07/17 | 174494 | macros/latex-dev/base/ltnews05.pdf -2022/07/17 | 5699 | macros/latex-dev/base/ltnews05.tex -2022/07/17 | 142849 | macros/latex-dev/base/ltnews06.pdf -2022/07/17 | 5544 | macros/latex-dev/base/ltnews06.tex -2022/07/17 | 137811 | macros/latex-dev/base/ltnews07.pdf -2022/07/17 | 5576 | macros/latex-dev/base/ltnews07.tex -2022/07/17 | 155053 | macros/latex-dev/base/ltnews08.pdf -2022/07/17 | 5732 | macros/latex-dev/base/ltnews08.tex -2022/07/17 | 129570 | macros/latex-dev/base/ltnews09.pdf -2022/07/17 | 5451 | macros/latex-dev/base/ltnews09.tex -2022/07/17 | 169416 | macros/latex-dev/base/ltnews10.pdf -2022/07/17 | 5825 | macros/latex-dev/base/ltnews10.tex -2022/07/17 | 111948 | macros/latex-dev/base/ltnews11.pdf -2022/07/17 | 5529 | macros/latex-dev/base/ltnews11.tex -2022/07/17 | 156551 | macros/latex-dev/base/ltnews12.pdf -2022/07/17 | 5574 | macros/latex-dev/base/ltnews12.tex -2022/07/17 | 182225 | macros/latex-dev/base/ltnews13.pdf -2022/07/17 | 7029 | macros/latex-dev/base/ltnews13.tex -2022/07/17 | 170473 | macros/latex-dev/base/ltnews14.pdf -2022/07/17 | 6424 | macros/latex-dev/base/ltnews14.tex -2022/07/17 | 130309 | macros/latex-dev/base/ltnews15.pdf -2022/07/17 | 5986 | macros/latex-dev/base/ltnews15.tex -2022/07/17 | 138073 | macros/latex-dev/base/ltnews16.pdf -2022/07/17 | 5775 | macros/latex-dev/base/ltnews16.tex -2022/07/17 | 166228 | macros/latex-dev/base/ltnews17.pdf -2022/07/17 | 8970 | macros/latex-dev/base/ltnews17.tex -2022/07/17 | 38033 | macros/latex-dev/base/ltnews18.pdf -2022/07/17 | 1341 | macros/latex-dev/base/ltnews18.tex -2022/07/17 | 230028 | macros/latex-dev/base/ltnews19.pdf -2022/07/17 | 4170 | macros/latex-dev/base/ltnews19.tex -2022/07/17 | 318548 | macros/latex-dev/base/ltnews20.pdf -2022/07/17 | 7221 | macros/latex-dev/base/ltnews20.tex -2022/07/17 | 244867 | macros/latex-dev/base/ltnews21.pdf -2022/07/17 | 9926 | macros/latex-dev/base/ltnews21.tex -2022/07/17 | 317773 | macros/latex-dev/base/ltnews22.pdf -2022/07/17 | 10792 | macros/latex-dev/base/ltnews22.tex -2022/07/17 | 286591 | macros/latex-dev/base/ltnews23.pdf -2022/07/17 | 10791 | macros/latex-dev/base/ltnews23.tex -2022/07/17 | 265279 | macros/latex-dev/base/ltnews24.pdf -2022/07/17 | 12334 | macros/latex-dev/base/ltnews24.tex -2022/07/17 | 204935 | macros/latex-dev/base/ltnews25.pdf -2022/07/17 | 5588 | macros/latex-dev/base/ltnews25.tex -2022/07/17 | 379462 | macros/latex-dev/base/ltnews26.pdf -2022/07/17 | 10798 | macros/latex-dev/base/ltnews26.tex -2022/07/17 | 250592 | macros/latex-dev/base/ltnews27.pdf -2022/07/17 | 5671 | macros/latex-dev/base/ltnews27.tex -2022/07/17 | 376643 | macros/latex-dev/base/ltnews28.pdf -2022/07/17 | 15047 | macros/latex-dev/base/ltnews28.tex -2022/07/17 | 455107 | macros/latex-dev/base/ltnews29.pdf -2022/07/17 | 18944 | macros/latex-dev/base/ltnews29.tex -2022/07/17 | 511909 | macros/latex-dev/base/ltnews30.pdf -2022/07/17 | 23637 | macros/latex-dev/base/ltnews30.tex -2022/07/17 | 526323 | macros/latex-dev/base/ltnews31.pdf -2022/07/17 | 30428 | macros/latex-dev/base/ltnews31.tex -2022/07/17 | 546160 | macros/latex-dev/base/ltnews32.pdf -2022/07/17 | 33239 | macros/latex-dev/base/ltnews32.tex -2022/07/17 | 522412 | macros/latex-dev/base/ltnews33.pdf -2022/07/17 | 33907 | macros/latex-dev/base/ltnews33.tex -2022/07/17 | 508044 | macros/latex-dev/base/ltnews34.pdf -2022/07/17 | 32307 | macros/latex-dev/base/ltnews34.tex -2022/07/17 | 563534 | macros/latex-dev/base/ltnews35.pdf -2022/07/17 | 38973 | macros/latex-dev/base/ltnews35.tex -2022/07/17 | 306491 | macros/latex-dev/base/ltnews36.pdf -2022/07/17 | 6703 | macros/latex-dev/base/ltnews36.tex -2022/07/17 | 20469 | macros/latex-dev/base/ltnews.cls -2022/07/17 | 1210464 | macros/latex-dev/base/ltnews.pdf -2022/07/17 | 8367 | macros/latex-dev/base/ltnews.tex -2022/07/17 | 148294 | macros/latex-dev/base/ltoutenc.dtx -2022/07/17 | 3367 | macros/latex-dev/base/ltoutenc.ins -2022/07/17 | 178421 | macros/latex-dev/base/ltoutput.dtx -2022/07/17 | 14091 | macros/latex-dev/base/ltpage.dtx -2022/07/17 | 2728 | macros/latex-dev/base/ltpageno.dtx -2022/07/17 | 667151 | macros/latex-dev/base/ltpara-code.pdf -2022/07/17 | 99 | macros/latex-dev/base/ltpara-code.tex -2022/07/17 | 560009 | macros/latex-dev/base/ltpara-doc.pdf -2022/07/17 | 234 | macros/latex-dev/base/ltpara-doc.tex -2022/07/17 | 51606 | macros/latex-dev/base/ltpara.dtx -2022/07/17 | 6155 | macros/latex-dev/base/ltpar.dtx -2022/07/17 | 69002 | macros/latex-dev/base/ltpictur.dtx -2022/07/17 | 59499 | macros/latex-dev/base/ltplain.dtx -2022/07/17 | 33946 | macros/latex-dev/base/ltsect.dtx -2022/07/17 | 819020 | macros/latex-dev/base/ltshipout-code.pdf -2022/07/17 | 104 | macros/latex-dev/base/ltshipout-code.tex -2022/07/17 | 563793 | macros/latex-dev/base/ltshipout-doc.pdf -2022/07/17 | 240 | macros/latex-dev/base/ltshipout-doc.tex -2022/07/17 | 80053 | macros/latex-dev/base/ltshipout.dtx -2022/07/17 | 45240 | macros/latex-dev/base/ltspace.dtx -2022/07/17 | 47896 | macros/latex-dev/base/lttab.dtx -2022/07/17 | 90370 | macros/latex-dev/base/lttextcomp.dtx -2022/07/17 | 8731 | macros/latex-dev/base/ltthm.dtx -2022/07/17 | 14786 | macros/latex-dev/base/ltvers.dtx -2022/07/17 | 219349 | macros/latex-dev/base/ltx3info.pdf -2022/07/17 | 18299 | macros/latex-dev/base/ltx3info.tex -2022/07/17 | 27122 | macros/latex-dev/base/ltxcheck.tex -2022/07/17 | 22410 | macros/latex-dev/base/ltxdoc.dtx -2022/07/17 | 242645 | macros/latex-dev/base/ltxdoc.pdf -2022/07/17 | 7524 | macros/latex-dev/base/ltxguide.cls -2022/07/17 | 18363 | macros/latex-dev/base/ltxref.dtx -2022/07/17 | 10601 | macros/latex-dev/base/makeindx.dtx -2022/07/17 | 3434 | macros/latex-dev/base/makeindx.ins -2022/07/17 | 165821 | macros/latex-dev/base/makeindx.pdf -2022/07/17 | 11103 | macros/latex-dev/base/manifest.txt -2022/07/17 | 1937 | macros/latex-dev/base/minimal.cls -2022/07/17 | 243605 | macros/latex-dev/base/modguide.pdf -2022/07/17 | 16233 | macros/latex-dev/base/modguide.tex -2022/07/17 | 4254 | macros/latex-dev/base/newdc.ins -2022/07/17 | 6357 | macros/latex-dev/base/newlfont.dtx -2022/07/17 | 18399 | macros/latex-dev/base/nfssfont.dtx -2022/07/17 | 2893 | macros/latex-dev/base/nfssfont.ins -2022/07/17 | 211180 | macros/latex-dev/base/nfssfont.pdf -2022/07/17 | 3960 | macros/latex-dev/base/olddc.ins -2022/07/17 | 8626 | macros/latex-dev/base/oldlfont.dtx -2022/07/17 | 9345 | macros/latex-dev/base/preload.dtx -2022/07/17 | 13589 | macros/latex-dev/base/proc.dtx -2022/07/17 | 3401 | macros/latex-dev/base/proc.ins -2022/07/17 | 227059 | macros/latex-dev/base/proc.pdf -2022/07/17 | 3100 | macros/latex-dev/base/README.md -2022/07/17 | 7200 | macros/latex-dev/base/sample2e.tex -2022/07/17 | 89727 | macros/latex-dev/base/slides.dtx -2022/07/17 | 6760 | macros/latex-dev/base/slides.ins -2022/07/17 | 375518 | macros/latex-dev/base/slides.pdf -2022/07/17 | 15699 | macros/latex-dev/base/slifonts.fdd -2022/07/17 | 234191 | macros/latex-dev/base/slifonts.pdf -2022/07/17 | 1694 | macros/latex-dev/base/small2e.tex -2022/07/17 | 9401 | macros/latex-dev/base/source2edoc.cls -2022/07/17 | 5713613 | macros/latex-dev/base/source2e.pdf -2022/07/17 | 15306 | macros/latex-dev/base/source2e.tex -2022/07/17 | 9395 | macros/latex-dev/base/syntonly.dtx -2022/07/17 | 2896 | macros/latex-dev/base/syntonly.ins -2022/07/17 | 189966 | macros/latex-dev/base/syntonly.pdf -2022/07/17 | 12520 | macros/latex-dev/base/testpage.tex -2022/07/17 | 172867 | macros/latex-dev/base/tlc2.err -2022/07/17 | 290615 | macros/latex-dev/base/tlc2.pdf -2022/07/17 | 12242 | macros/latex-dev/base/tulm.fdd -2022/07/17 | 3781 | macros/latex-dev/base/tulm.ins -2022/07/17 | 162772 | macros/latex-dev/base/tulm.pdf -2022/07/17 | 3181 | macros/latex-dev/base/unpack.ins -2022/07/17 | 410688 | macros/latex-dev/base/usrguide3.pdf -2022/07/17 | 46813 | macros/latex-dev/base/usrguide3.tex -2022/07/17 | 430994 | macros/latex-dev/base/usrguide.pdf -2022/07/17 | 68435 | macros/latex-dev/base/usrguide.tex -2022/07/17 | 92280 | macros/latex-dev/base/utf8ienc.dtx -2022/07/17 | 353405 | macros/latex-dev/base/utf8ienc.pdf -2022/07/17 | 10251 | macros/latex-dev/base/webcomp.err -2022/07/17 | 146198 | macros/latex-dev/base/webcomp.pdf -2022/07/17 | 38035770 | macros/latex-dev/base.zip +2022/09/23 | 7104 | macros/latex-dev/base/alltt.dtx +2022/09/23 | 2890 | macros/latex-dev/base/alltt.ins +2022/09/23 | 223831 | macros/latex-dev/base/alltt.pdf +2022/09/23 | 3282 | macros/latex-dev/base/bugs.txt +2022/09/23 | 264112 | macros/latex-dev/base/cfgguide.pdf +2022/09/23 | 22720 | macros/latex-dev/base/cfgguide.tex +2022/09/23 | 42708 | macros/latex-dev/base/changes.old.txt +2022/09/23 | 391068 | macros/latex-dev/base/changes.txt +2022/09/23 | 156236 | macros/latex-dev/base/classes.dtx +2022/09/23 | 4087 | macros/latex-dev/base/classes.ins +2022/09/23 | 560611 | macros/latex-dev/base/classes.pdf +2022/09/23 | 414419 | macros/latex-dev/base/clsguide.pdf +2022/09/23 | 69315 | macros/latex-dev/base/clsguide.tex +2022/09/23 | 5273 | macros/latex-dev/base/cmextra.ins +2022/09/23 | 44410 | macros/latex-dev/base/cmfonts.fdd +2022/09/23 | 4324 | macros/latex-dev/base/cmfonts.ins +2022/09/23 | 292160 | macros/latex-dev/base/cmfonts.pdf +2022/09/23 | 257314 | macros/latex-dev/base/cyrguide.pdf +2022/09/23 | 17779 | macros/latex-dev/base/cyrguide.tex +2022/09/23 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty +2022/09/23 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty +2022/09/23 | 1077609 | macros/latex-dev/base/doc-code.pdf +2022/09/23 | 96 | macros/latex-dev/base/doc-code.tex +2022/09/23 | 241167 | macros/latex-dev/base/doc.dtx +2022/09/23 | 755152 | macros/latex-dev/base/doc.pdf +2022/09/23 | 170595 | macros/latex-dev/base/docstrip.dtx +2022/09/23 | 4273 | macros/latex-dev/base/docstrip.ins +2022/09/23 | 504627 | macros/latex-dev/base/docstrip.pdf +2022/09/23 | 4390 | macros/latex-dev/base/ec.ins +2022/09/23 | 1318126 | macros/latex-dev/base/encguide.pdf +2022/09/23 | 52813 | macros/latex-dev/base/encguide.tex +2022/09/23 | 7216 | macros/latex-dev/base/exscale.dtx +2022/09/23 | 3338 | macros/latex-dev/base/exscale.ins +2022/09/23 | 204711 | macros/latex-dev/base/exscale.pdf +2022/09/23 | 23516 | macros/latex-dev/base/fix-cm.dtx +2022/09/23 | 2892 | macros/latex-dev/base/fix-cm.ins +2022/09/23 | 287733 | macros/latex-dev/base/fix-cm.pdf +2022/09/23 | 517838 | macros/latex-dev/base/fntguide.pdf +2022/09/23 | 108231 | macros/latex-dev/base/fntguide.tex +2022/09/23 | 60321 | macros/latex-dev/base/fontdef.dtx +2022/09/23 | 9779 | macros/latex-dev/base/format.ins +2022/09/23 | 5509 | macros/latex-dev/base/graphpap.dtx +2022/09/23 | 2892 | macros/latex-dev/base/graphpap.ins +2022/09/23 | 161713 | macros/latex-dev/base/graphpap.pdf +2022/09/23 | 2705 | macros/latex-dev/base/idx.tex +2022/09/23 | 18753 | macros/latex-dev/base/ifthen.dtx +2022/09/23 | 2888 | macros/latex-dev/base/ifthen.ins +2022/09/23 | 221211 | macros/latex-dev/base/ifthen.pdf +2022/09/23 | 106904 | macros/latex-dev/base/inputenc.dtx +2022/09/23 | 5714 | macros/latex-dev/base/inputenc.ins +2022/09/23 | 318204 | macros/latex-dev/base/inputenc.pdf +2022/09/23 | 4079 | macros/latex-dev/base/lablst.tex +2022/09/23 | 13759 | macros/latex-dev/base/lamport-manual.err +2022/09/23 | 170878 | macros/latex-dev/base/lamport-manual.pdf +2022/09/23 | 38730 | macros/latex-dev/base/latex209.dtx +2022/09/23 | 4219 | macros/latex-dev/base/latex209.ins +2022/09/23 | 44976 | macros/latex-dev/base/latexrelease.dtx +2022/09/23 | 6047 | macros/latex-dev/base/latexrelease.ins +2022/09/23 | 281906 | macros/latex-dev/base/latexrelease.pdf +2022/09/23 | 6709 | macros/latex-dev/base/latexsym.dtx +2022/09/23 | 5041 | macros/latex-dev/base/latexsym.ins +2022/09/23 | 200760 | macros/latex-dev/base/latexsym.pdf +2022/09/23 | 52710 | macros/latex-dev/base/lb2.err +2022/09/23 | 252140 | macros/latex-dev/base/lb2.pdf +2022/09/23 | 1279 | macros/latex-dev/base/legal.txt +2022/09/23 | 63280 | macros/latex-dev/base/letter.dtx +2022/09/23 | 3372 | macros/latex-dev/base/letter.ins +2022/09/23 | 337294 | macros/latex-dev/base/letter.pdf +2022/09/23 | 20652 | macros/latex-dev/base/lgc2.err +2022/09/23 | 215684 | macros/latex-dev/base/lgc2.pdf +2022/09/23 | 9068 | macros/latex-dev/base/lppl-1-0.txt +2022/09/23 | 14341 | macros/latex-dev/base/lppl-1-1.txt +2022/09/23 | 14421 | macros/latex-dev/base/lppl-1-2.txt +2022/09/23 | 132382 | macros/latex-dev/base/lppl.pdf +2022/09/23 | 23386 | macros/latex-dev/base/lppl.tex +2022/09/23 | 19040 | macros/latex-dev/base/lppl.txt +2022/09/23 | 4298 | macros/latex-dev/base/ltalloc.dtx +2022/09/23 | 17389 | macros/latex-dev/base/ltbibl.dtx +2022/09/23 | 45712 | macros/latex-dev/base/ltboxes.dtx +2022/09/23 | 143062 | macros/latex-dev/base/ltclass.dtx +2022/09/23 | 182935 | macros/latex-dev/base/ltcmd.dtx +2022/09/23 | 719285 | macros/latex-dev/base/ltcmdhooks-code.pdf +2022/09/23 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex +2022/09/23 | 478781 | macros/latex-dev/base/ltcmdhooks-doc.pdf +2022/09/23 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex +2022/09/23 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx +2022/09/23 | 9557 | macros/latex-dev/base/ltcntrl.dtx +2022/09/23 | 24286 | macros/latex-dev/base/ltcounts.dtx +2022/09/23 | 85858 | macros/latex-dev/base/ltdefns.dtx +2022/09/23 | 35984 | macros/latex-dev/base/ltdirchk.dtx +2022/09/23 | 27069 | macros/latex-dev/base/lterror.dtx +2022/09/23 | 18711 | macros/latex-dev/base/ltexpl.dtx +2022/09/23 | 803118 | macros/latex-dev/base/ltfilehook-code.pdf +2022/09/23 | 105 | macros/latex-dev/base/ltfilehook-code.tex +2022/09/23 | 547986 | macros/latex-dev/base/ltfilehook-doc.pdf +2022/09/23 | 241 | macros/latex-dev/base/ltfilehook-doc.tex +2022/09/23 | 67351 | macros/latex-dev/base/ltfilehook.dtx +2022/09/23 | 58933 | macros/latex-dev/base/ltfiles.dtx +2022/09/23 | 47773 | macros/latex-dev/base/ltfinal.dtx +2022/09/23 | 55687 | macros/latex-dev/base/ltfloat.dtx +2022/09/23 | 29267 | macros/latex-dev/base/ltfntcmd.dtx +2022/09/23 | 58551 | macros/latex-dev/base/ltfssaxes.dtx +2022/09/23 | 82481 | macros/latex-dev/base/ltfssbas.dtx +2022/09/23 | 10370 | macros/latex-dev/base/ltfsscmp.dtx +2022/09/23 | 75111 | macros/latex-dev/base/ltfssdcl.dtx +2022/09/23 | 84215 | macros/latex-dev/base/ltfssini.dtx +2022/09/23 | 72475 | macros/latex-dev/base/ltfsstrc.dtx +2022/09/23 | 1091718 | macros/latex-dev/base/lthooks-code.pdf +2022/09/23 | 102 | macros/latex-dev/base/lthooks-code.tex +2022/09/23 | 701768 | macros/latex-dev/base/lthooks-doc.pdf +2022/09/23 | 238 | macros/latex-dev/base/lthooks-doc.tex +2022/09/23 | 211770 | macros/latex-dev/base/lthooks.dtx +2022/09/23 | 4945 | macros/latex-dev/base/lthyphen.dtx +2022/09/23 | 5859 | macros/latex-dev/base/ltidxglo.dtx +2022/09/23 | 19677 | macros/latex-dev/base/ltkeys.dtx +2022/09/23 | 4757 | macros/latex-dev/base/ltlength.dtx +2022/09/23 | 36152 | macros/latex-dev/base/ltlists.dtx +2022/09/23 | 3725 | macros/latex-dev/base/ltlogos.dtx +2022/09/23 | 67401 | macros/latex-dev/base/ltluatex.dtx +2022/09/23 | 318919 | macros/latex-dev/base/ltluatex.pdf +2022/09/23 | 715934 | macros/latex-dev/base/ltmarks-code.pdf +2022/09/23 | 102 | macros/latex-dev/base/ltmarks-code.tex +2022/09/23 | 586305 | macros/latex-dev/base/ltmarks-doc.pdf +2022/09/23 | 238 | macros/latex-dev/base/ltmarks-doc.tex +2022/09/23 | 63132 | macros/latex-dev/base/ltmarks.dtx +2022/09/23 | 41493 | macros/latex-dev/base/ltmath.dtx +2022/09/23 | 6213 | macros/latex-dev/base/ltmeta.dtx +2022/09/23 | 58745 | macros/latex-dev/base/ltmiscen.dtx +2022/09/23 | 161519 | macros/latex-dev/base/ltnews01.pdf +2022/09/23 | 5246 | macros/latex-dev/base/ltnews01.tex +2022/09/23 | 159802 | macros/latex-dev/base/ltnews02.pdf +2022/09/23 | 5462 | macros/latex-dev/base/ltnews02.tex +2022/09/23 | 159347 | macros/latex-dev/base/ltnews03.pdf +2022/09/23 | 5369 | macros/latex-dev/base/ltnews03.tex +2022/09/23 | 152526 | macros/latex-dev/base/ltnews04.pdf +2022/09/23 | 5678 | macros/latex-dev/base/ltnews04.tex +2022/09/23 | 174493 | macros/latex-dev/base/ltnews05.pdf +2022/09/23 | 5699 | macros/latex-dev/base/ltnews05.tex +2022/09/23 | 142861 | macros/latex-dev/base/ltnews06.pdf +2022/09/23 | 5544 | macros/latex-dev/base/ltnews06.tex +2022/09/23 | 137791 | macros/latex-dev/base/ltnews07.pdf +2022/09/23 | 5576 | macros/latex-dev/base/ltnews07.tex +2022/09/23 | 155050 | macros/latex-dev/base/ltnews08.pdf +2022/09/23 | 5732 | macros/latex-dev/base/ltnews08.tex +2022/09/23 | 129572 | macros/latex-dev/base/ltnews09.pdf +2022/09/23 | 5451 | macros/latex-dev/base/ltnews09.tex +2022/09/23 | 169425 | macros/latex-dev/base/ltnews10.pdf +2022/09/23 | 5825 | macros/latex-dev/base/ltnews10.tex +2022/09/23 | 111974 | macros/latex-dev/base/ltnews11.pdf +2022/09/23 | 5529 | macros/latex-dev/base/ltnews11.tex +2022/09/23 | 156556 | macros/latex-dev/base/ltnews12.pdf +2022/09/23 | 5574 | macros/latex-dev/base/ltnews12.tex +2022/09/23 | 182252 | macros/latex-dev/base/ltnews13.pdf +2022/09/23 | 7029 | macros/latex-dev/base/ltnews13.tex +2022/09/23 | 170452 | macros/latex-dev/base/ltnews14.pdf +2022/09/23 | 6424 | macros/latex-dev/base/ltnews14.tex +2022/09/23 | 130324 | macros/latex-dev/base/ltnews15.pdf +2022/09/23 | 5986 | macros/latex-dev/base/ltnews15.tex +2022/09/23 | 138082 | macros/latex-dev/base/ltnews16.pdf +2022/09/23 | 5775 | macros/latex-dev/base/ltnews16.tex +2022/09/23 | 166226 | macros/latex-dev/base/ltnews17.pdf +2022/09/23 | 8970 | macros/latex-dev/base/ltnews17.tex +2022/09/23 | 38028 | macros/latex-dev/base/ltnews18.pdf +2022/09/23 | 1341 | macros/latex-dev/base/ltnews18.tex +2022/09/23 | 230031 | macros/latex-dev/base/ltnews19.pdf +2022/09/23 | 4170 | macros/latex-dev/base/ltnews19.tex +2022/09/23 | 318587 | macros/latex-dev/base/ltnews20.pdf +2022/09/23 | 7221 | macros/latex-dev/base/ltnews20.tex +2022/09/23 | 244885 | macros/latex-dev/base/ltnews21.pdf +2022/09/23 | 9926 | macros/latex-dev/base/ltnews21.tex +2022/09/23 | 317795 | macros/latex-dev/base/ltnews22.pdf +2022/09/23 | 10792 | macros/latex-dev/base/ltnews22.tex +2022/09/23 | 286598 | macros/latex-dev/base/ltnews23.pdf +2022/09/23 | 10791 | macros/latex-dev/base/ltnews23.tex +2022/09/23 | 265290 | macros/latex-dev/base/ltnews24.pdf +2022/09/23 | 12334 | macros/latex-dev/base/ltnews24.tex +2022/09/23 | 204955 | macros/latex-dev/base/ltnews25.pdf +2022/09/23 | 5588 | macros/latex-dev/base/ltnews25.tex +2022/09/23 | 379476 | macros/latex-dev/base/ltnews26.pdf +2022/09/23 | 10798 | macros/latex-dev/base/ltnews26.tex +2022/09/23 | 250597 | macros/latex-dev/base/ltnews27.pdf +2022/09/23 | 5671 | macros/latex-dev/base/ltnews27.tex +2022/09/23 | 376643 | macros/latex-dev/base/ltnews28.pdf +2022/09/23 | 15047 | macros/latex-dev/base/ltnews28.tex +2022/09/23 | 455126 | macros/latex-dev/base/ltnews29.pdf +2022/09/23 | 18944 | macros/latex-dev/base/ltnews29.tex +2022/09/23 | 511917 | macros/latex-dev/base/ltnews30.pdf +2022/09/23 | 23637 | macros/latex-dev/base/ltnews30.tex +2022/09/23 | 526372 | macros/latex-dev/base/ltnews31.pdf +2022/09/23 | 30428 | macros/latex-dev/base/ltnews31.tex +2022/09/23 | 546153 | macros/latex-dev/base/ltnews32.pdf +2022/09/23 | 33239 | macros/latex-dev/base/ltnews32.tex +2022/09/23 | 522387 | macros/latex-dev/base/ltnews33.pdf +2022/09/23 | 33907 | macros/latex-dev/base/ltnews33.tex +2022/09/23 | 508096 | macros/latex-dev/base/ltnews34.pdf +2022/09/23 | 32307 | macros/latex-dev/base/ltnews34.tex +2022/09/23 | 563132 | macros/latex-dev/base/ltnews35.pdf +2022/09/23 | 38793 | macros/latex-dev/base/ltnews35.tex +2022/09/23 | 495767 | macros/latex-dev/base/ltnews36.pdf +2022/09/23 | 14967 | macros/latex-dev/base/ltnews36.tex +2022/09/23 | 20469 | macros/latex-dev/base/ltnews.cls +2022/09/23 | 1225147 | macros/latex-dev/base/ltnews.pdf +2022/09/23 | 8367 | macros/latex-dev/base/ltnews.tex +2022/09/23 | 148294 | macros/latex-dev/base/ltoutenc.dtx +2022/09/23 | 3367 | macros/latex-dev/base/ltoutenc.ins +2022/09/23 | 178723 | macros/latex-dev/base/ltoutput.dtx +2022/09/23 | 14091 | macros/latex-dev/base/ltpage.dtx +2022/09/23 | 2728 | macros/latex-dev/base/ltpageno.dtx +2022/09/23 | 667444 | macros/latex-dev/base/ltpara-code.pdf +2022/09/23 | 99 | macros/latex-dev/base/ltpara-code.tex +2022/09/23 | 560308 | macros/latex-dev/base/ltpara-doc.pdf +2022/09/23 | 234 | macros/latex-dev/base/ltpara-doc.tex +2022/09/23 | 51606 | macros/latex-dev/base/ltpara.dtx +2022/09/23 | 6155 | macros/latex-dev/base/ltpar.dtx +2022/09/23 | 69002 | macros/latex-dev/base/ltpictur.dtx +2022/09/23 | 59499 | macros/latex-dev/base/ltplain.dtx +2022/09/23 | 33946 | macros/latex-dev/base/ltsect.dtx +2022/09/23 | 818922 | macros/latex-dev/base/ltshipout-code.pdf +2022/09/23 | 104 | macros/latex-dev/base/ltshipout-code.tex +2022/09/23 | 563691 | macros/latex-dev/base/ltshipout-doc.pdf +2022/09/23 | 240 | macros/latex-dev/base/ltshipout-doc.tex +2022/09/23 | 80052 | macros/latex-dev/base/ltshipout.dtx +2022/09/23 | 45240 | macros/latex-dev/base/ltspace.dtx +2022/09/23 | 47896 | macros/latex-dev/base/lttab.dtx +2022/09/23 | 90660 | macros/latex-dev/base/lttextcomp.dtx +2022/09/23 | 8731 | macros/latex-dev/base/ltthm.dtx +2022/09/23 | 14786 | macros/latex-dev/base/ltvers.dtx +2022/09/23 | 219349 | macros/latex-dev/base/ltx3info.pdf +2022/09/23 | 18299 | macros/latex-dev/base/ltx3info.tex +2022/09/23 | 27122 | macros/latex-dev/base/ltxcheck.tex +2022/09/23 | 22410 | macros/latex-dev/base/ltxdoc.dtx +2022/09/23 | 242645 | macros/latex-dev/base/ltxdoc.pdf +2022/09/23 | 7524 | macros/latex-dev/base/ltxguide.cls +2022/09/23 | 18363 | macros/latex-dev/base/ltxref.dtx +2022/09/23 | 10601 | macros/latex-dev/base/makeindx.dtx +2022/09/23 | 3434 | macros/latex-dev/base/makeindx.ins +2022/09/23 | 165821 | macros/latex-dev/base/makeindx.pdf +2022/09/23 | 11124 | macros/latex-dev/base/manifest.txt +2022/09/23 | 1937 | macros/latex-dev/base/minimal.cls +2022/09/23 | 257804 | macros/latex-dev/base/modguide.pdf +2022/09/23 | 16497 | macros/latex-dev/base/modguide.tex +2022/09/23 | 4254 | macros/latex-dev/base/newdc.ins +2022/09/23 | 6357 | macros/latex-dev/base/newlfont.dtx +2022/09/23 | 18399 | macros/latex-dev/base/nfssfont.dtx +2022/09/23 | 2893 | macros/latex-dev/base/nfssfont.ins +2022/09/23 | 211180 | macros/latex-dev/base/nfssfont.pdf +2022/09/23 | 3960 | macros/latex-dev/base/olddc.ins +2022/09/23 | 8626 | macros/latex-dev/base/oldlfont.dtx +2022/09/23 | 9345 | macros/latex-dev/base/preload.dtx +2022/09/23 | 13589 | macros/latex-dev/base/proc.dtx +2022/09/23 | 3401 | macros/latex-dev/base/proc.ins +2022/09/23 | 227059 | macros/latex-dev/base/proc.pdf +2022/09/23 | 3100 | macros/latex-dev/base/README.md +2022/09/23 | 7200 | macros/latex-dev/base/sample2e.tex +2022/09/23 | 89727 | macros/latex-dev/base/slides.dtx +2022/09/23 | 6760 | macros/latex-dev/base/slides.ins +2022/09/23 | 375518 | macros/latex-dev/base/slides.pdf +2022/09/23 | 15699 | macros/latex-dev/base/slifonts.fdd +2022/09/23 | 234191 | macros/latex-dev/base/slifonts.pdf +2022/09/23 | 1694 | macros/latex-dev/base/small2e.tex +2022/09/23 | 9401 | macros/latex-dev/base/source2edoc.cls +2022/09/23 | 5750608 | macros/latex-dev/base/source2e.pdf +2022/09/23 | 15306 | macros/latex-dev/base/source2e.tex +2022/09/23 | 9395 | macros/latex-dev/base/syntonly.dtx +2022/09/23 | 2896 | macros/latex-dev/base/syntonly.ins +2022/09/23 | 189680 | macros/latex-dev/base/syntonly.pdf +2022/09/23 | 12520 | macros/latex-dev/base/testpage.tex +2022/09/23 | 172867 | macros/latex-dev/base/tlc2.err +2022/09/23 | 290615 | macros/latex-dev/base/tlc2.pdf +2022/09/23 | 12242 | macros/latex-dev/base/tulm.fdd +2022/09/23 | 3781 | macros/latex-dev/base/tulm.ins +2022/09/23 | 162772 | macros/latex-dev/base/tulm.pdf +2022/09/23 | 3181 | macros/latex-dev/base/unpack.ins +2022/09/23 | 438515 | macros/latex-dev/base/usrguide-historic.pdf +2022/09/23 | 68732 | macros/latex-dev/base/usrguide-historic.tex +2022/09/23 | 473895 | macros/latex-dev/base/usrguide.pdf +2022/09/23 | 49935 | macros/latex-dev/base/usrguide.tex +2022/09/23 | 92280 | macros/latex-dev/base/utf8ienc.dtx +2022/09/23 | 353663 | macros/latex-dev/base/utf8ienc.pdf +2022/09/23 | 10251 | macros/latex-dev/base/webcomp.err +2022/09/23 | 146198 | macros/latex-dev/base/webcomp.pdf +2022/09/26 | 38412818 | macros/latex-dev/base.zip 2022/06/16 | 8663 | macros/latex-dev/required/amsmath/amsbsy.dtx 2022/06/16 | 1505 | macros/latex-dev/required/amsmath/amsbsy.ins 2022/06/16 | 174944 | macros/latex-dev/required/amsmath/amsbsy.pdf @@ -236454,78 +236460,78 @@ 2022/05/19 | 22370 | macros/latex-dev/required/latex-lab/usage-of-@footnotetext.txt 2022/05/19 | 1594 | macros/latex-dev/required/latex-lab/usage-of-kern-kern.txt 2022/05/19 | 2808057 | macros/latex-dev/required/latex-lab.zip -2022/06/16 | 14072 | macros/latex-dev/required/tools/afterpage.dtx -2022/06/16 | 2538 | macros/latex-dev/required/tools/afterpage.ins -2022/06/16 | 197738 | macros/latex-dev/required/tools/afterpage.pdf -2022/06/16 | 11749 | macros/latex-dev/required/tools/array-2016-10-06.sty -2022/06/16 | 12559 | macros/latex-dev/required/tools/array-2020-02-10.sty -2022/06/16 | 128179 | macros/latex-dev/required/tools/array.dtx -2022/06/16 | 516615 | macros/latex-dev/required/tools/array.pdf -2022/06/16 | 61565 | macros/latex-dev/required/tools/bm.dtx -2022/06/16 | 2524 | macros/latex-dev/required/tools/bm.ins -2022/06/16 | 323432 | macros/latex-dev/required/tools/bm.pdf -2022/06/16 | 53167 | macros/latex-dev/required/tools/calc.dtx -2022/06/16 | 370657 | macros/latex-dev/required/tools/calc.pdf -2022/06/16 | 62156 | macros/latex-dev/required/tools/changes.txt -2022/06/16 | 12709 | macros/latex-dev/required/tools/dcolumn.dtx -2022/06/16 | 220834 | macros/latex-dev/required/tools/dcolumn.pdf -2022/06/16 | 6789 | macros/latex-dev/required/tools/delarray.dtx -2022/06/16 | 191064 | macros/latex-dev/required/tools/delarray.pdf -2022/06/16 | 10644 | macros/latex-dev/required/tools/enumerate.dtx -2022/06/16 | 215498 | macros/latex-dev/required/tools/enumerate.pdf -2022/06/16 | 4959 | macros/latex-dev/required/tools/fileerr.dtx -2022/06/16 | 187649 | macros/latex-dev/required/tools/fileerr.pdf -2022/06/16 | 10771 | macros/latex-dev/required/tools/fontsmpl.dtx -2022/06/16 | 146446 | macros/latex-dev/required/tools/fontsmpl.pdf -2022/06/16 | 39696 | macros/latex-dev/required/tools/ftnright.dtx -2022/06/16 | 387159 | macros/latex-dev/required/tools/ftnright.pdf -2022/06/16 | 11148 | macros/latex-dev/required/tools/hhline.dtx -2022/06/16 | 189679 | macros/latex-dev/required/tools/hhline.pdf -2022/06/16 | 2220 | macros/latex-dev/required/tools/indentfirst.dtx -2022/06/16 | 157954 | macros/latex-dev/required/tools/indentfirst.pdf -2022/06/16 | 32029 | macros/latex-dev/required/tools/layout.dtx -2022/06/16 | 259969 | macros/latex-dev/required/tools/layout.pdf -2022/06/16 | 12133 | macros/latex-dev/required/tools/longtable-2020-01-07.sty -2022/06/16 | 76397 | macros/latex-dev/required/tools/longtable.dtx -2022/06/16 | 2538 | macros/latex-dev/required/tools/longtable.ins -2022/06/16 | 391313 | macros/latex-dev/required/tools/longtable.pdf -2022/06/16 | 3284 | macros/latex-dev/required/tools/manifest.txt -2022/06/16 | 29712 | macros/latex-dev/required/tools/multicol-2017-04-11.sty -2022/06/16 | 31646 | macros/latex-dev/required/tools/multicol-2019-10-01.sty -2022/06/16 | 184548 | macros/latex-dev/required/tools/multicol.dtx -2022/06/16 | 2576 | macros/latex-dev/required/tools/multicol.ins -2022/06/16 | 521384 | macros/latex-dev/required/tools/multicol.pdf -2022/06/16 | 8976 | macros/latex-dev/required/tools/rawfonts.dtx -2022/06/16 | 138963 | macros/latex-dev/required/tools/rawfonts.pdf -2022/06/16 | 1664 | macros/latex-dev/required/tools/README.md -2022/06/16 | 9493 | macros/latex-dev/required/tools/shellesc.dtx -2022/06/16 | 175929 | macros/latex-dev/required/tools/shellesc.pdf -2022/06/16 | 8632 | macros/latex-dev/required/tools/showkeys-2014-10-28.sty -2022/06/16 | 30107 | macros/latex-dev/required/tools/showkeys.dtx -2022/06/16 | 251782 | macros/latex-dev/required/tools/showkeys.pdf -2022/06/16 | 5791 | macros/latex-dev/required/tools/somedefs.dtx -2022/06/16 | 167572 | macros/latex-dev/required/tools/somedefs.pdf -2022/06/16 | 35875 | macros/latex-dev/required/tools/tabularx.dtx -2022/06/16 | 2535 | macros/latex-dev/required/tools/tabularx.ins -2022/06/16 | 287073 | macros/latex-dev/required/tools/tabularx.pdf -2022/06/16 | 43448 | macros/latex-dev/required/tools/theorem.dtx -2022/06/16 | 351628 | macros/latex-dev/required/tools/theorem.pdf -2022/06/16 | 5680 | macros/latex-dev/required/tools/tools.ins -2022/06/16 | 73672 | macros/latex-dev/required/tools/tools-overview.pdf -2022/06/16 | 5211 | macros/latex-dev/required/tools/tools-overview.tex -2022/06/16 | 25146 | macros/latex-dev/required/tools/trace.dtx -2022/06/16 | 222076 | macros/latex-dev/required/tools/trace.pdf -2022/06/16 | 33863 | macros/latex-dev/required/tools/varioref-2016-02-16.sty -2022/06/16 | 114350 | macros/latex-dev/required/tools/varioref.dtx -2022/06/16 | 2531 | macros/latex-dev/required/tools/varioref.ins -2022/06/16 | 398985 | macros/latex-dev/required/tools/varioref.pdf -2022/06/16 | 72136 | macros/latex-dev/required/tools/verbatim.dtx -2022/06/16 | 330963 | macros/latex-dev/required/tools/verbatim.pdf -2022/06/16 | 6218 | macros/latex-dev/required/tools/xr.dtx -2022/06/16 | 169986 | macros/latex-dev/required/tools/xr.pdf -2022/06/16 | 17856 | macros/latex-dev/required/tools/xspace.dtx -2022/06/16 | 257018 | macros/latex-dev/required/tools/xspace.pdf -2022/06/17 | 7249756 | macros/latex-dev/required/tools.zip +2022/09/23 | 14072 | macros/latex-dev/required/tools/afterpage.dtx +2022/09/23 | 2538 | macros/latex-dev/required/tools/afterpage.ins +2022/09/23 | 197738 | macros/latex-dev/required/tools/afterpage.pdf +2022/09/23 | 11749 | macros/latex-dev/required/tools/array-2016-10-06.sty +2022/09/23 | 12559 | macros/latex-dev/required/tools/array-2020-02-10.sty +2022/09/23 | 128521 | macros/latex-dev/required/tools/array.dtx +2022/09/23 | 517102 | macros/latex-dev/required/tools/array.pdf +2022/09/23 | 61565 | macros/latex-dev/required/tools/bm.dtx +2022/09/23 | 2524 | macros/latex-dev/required/tools/bm.ins +2022/09/23 | 323432 | macros/latex-dev/required/tools/bm.pdf +2022/09/23 | 53167 | macros/latex-dev/required/tools/calc.dtx +2022/09/23 | 370657 | macros/latex-dev/required/tools/calc.pdf +2022/09/23 | 62388 | macros/latex-dev/required/tools/changes.txt +2022/09/23 | 12709 | macros/latex-dev/required/tools/dcolumn.dtx +2022/09/23 | 220834 | macros/latex-dev/required/tools/dcolumn.pdf +2022/09/23 | 6789 | macros/latex-dev/required/tools/delarray.dtx +2022/09/23 | 191064 | macros/latex-dev/required/tools/delarray.pdf +2022/09/23 | 10644 | macros/latex-dev/required/tools/enumerate.dtx +2022/09/23 | 215498 | macros/latex-dev/required/tools/enumerate.pdf +2022/09/23 | 4959 | macros/latex-dev/required/tools/fileerr.dtx +2022/09/23 | 187982 | macros/latex-dev/required/tools/fileerr.pdf +2022/09/23 | 10771 | macros/latex-dev/required/tools/fontsmpl.dtx +2022/09/23 | 146446 | macros/latex-dev/required/tools/fontsmpl.pdf +2022/09/23 | 39696 | macros/latex-dev/required/tools/ftnright.dtx +2022/09/23 | 387505 | macros/latex-dev/required/tools/ftnright.pdf +2022/09/23 | 11148 | macros/latex-dev/required/tools/hhline.dtx +2022/09/23 | 189679 | macros/latex-dev/required/tools/hhline.pdf +2022/09/23 | 2220 | macros/latex-dev/required/tools/indentfirst.dtx +2022/09/23 | 157954 | macros/latex-dev/required/tools/indentfirst.pdf +2022/09/23 | 32029 | macros/latex-dev/required/tools/layout.dtx +2022/09/23 | 259969 | macros/latex-dev/required/tools/layout.pdf +2022/09/23 | 12133 | macros/latex-dev/required/tools/longtable-2020-01-07.sty +2022/09/23 | 76397 | macros/latex-dev/required/tools/longtable.dtx +2022/09/23 | 2538 | macros/latex-dev/required/tools/longtable.ins +2022/09/23 | 391313 | macros/latex-dev/required/tools/longtable.pdf +2022/09/23 | 3284 | macros/latex-dev/required/tools/manifest.txt +2022/09/23 | 29712 | macros/latex-dev/required/tools/multicol-2017-04-11.sty +2022/09/23 | 31646 | macros/latex-dev/required/tools/multicol-2019-10-01.sty +2022/09/23 | 184548 | macros/latex-dev/required/tools/multicol.dtx +2022/09/23 | 2576 | macros/latex-dev/required/tools/multicol.ins +2022/09/23 | 521328 | macros/latex-dev/required/tools/multicol.pdf +2022/09/23 | 8976 | macros/latex-dev/required/tools/rawfonts.dtx +2022/09/23 | 138963 | macros/latex-dev/required/tools/rawfonts.pdf +2022/09/23 | 1664 | macros/latex-dev/required/tools/README.md +2022/09/23 | 9493 | macros/latex-dev/required/tools/shellesc.dtx +2022/09/23 | 175929 | macros/latex-dev/required/tools/shellesc.pdf +2022/09/23 | 8632 | macros/latex-dev/required/tools/showkeys-2014-10-28.sty +2022/09/23 | 30107 | macros/latex-dev/required/tools/showkeys.dtx +2022/09/23 | 251782 | macros/latex-dev/required/tools/showkeys.pdf +2022/09/23 | 5791 | macros/latex-dev/required/tools/somedefs.dtx +2022/09/23 | 167572 | macros/latex-dev/required/tools/somedefs.pdf +2022/09/23 | 35875 | macros/latex-dev/required/tools/tabularx.dtx +2022/09/23 | 2535 | macros/latex-dev/required/tools/tabularx.ins +2022/09/23 | 287073 | macros/latex-dev/required/tools/tabularx.pdf +2022/09/23 | 43448 | macros/latex-dev/required/tools/theorem.dtx +2022/09/23 | 351963 | macros/latex-dev/required/tools/theorem.pdf +2022/09/23 | 5680 | macros/latex-dev/required/tools/tools.ins +2022/09/23 | 73672 | macros/latex-dev/required/tools/tools-overview.pdf +2022/09/23 | 5211 | macros/latex-dev/required/tools/tools-overview.tex +2022/09/23 | 25146 | macros/latex-dev/required/tools/trace.dtx +2022/09/23 | 222076 | macros/latex-dev/required/tools/trace.pdf +2022/09/23 | 33863 | macros/latex-dev/required/tools/varioref-2016-02-16.sty +2022/09/23 | 114350 | macros/latex-dev/required/tools/varioref.dtx +2022/09/23 | 2531 | macros/latex-dev/required/tools/varioref.ins +2022/09/23 | 398798 | macros/latex-dev/required/tools/varioref.pdf +2022/09/23 | 72131 | macros/latex-dev/required/tools/verbatim.dtx +2022/09/23 | 330746 | macros/latex-dev/required/tools/verbatim.pdf +2022/09/23 | 6218 | macros/latex-dev/required/tools/xr.dtx +2022/09/23 | 169986 | macros/latex-dev/required/tools/xr.pdf +2022/09/23 | 17856 | macros/latex-dev/required/tools/xspace.dtx +2022/09/23 | 257018 | macros/latex-dev/required/tools/xspace.pdf +2022/09/26 | 7250827 | macros/latex-dev/required/tools.zip 1999/05/03 | 8998 | macros/latex/exptl/delimtxt/delimtxt.dtx 1999/03/28 | 143 | macros/latex/exptl/delimtxt/delimtxt.ins 2006/03/21 | 55074 | macros/latex/exptl/delimtxt/delimtxt.pdf @@ -281068,6 +281074,8 @@ 2020/06/08 | 120320 | systems/texlive/tlnet/archive/abnt.doc.r55471.tar.xz 2019/02/28 | 4585444 | systems/texlive/tlnet/archive/abntex2.doc.r49248.tar.xz 2019/02/28 | 29920 | systems/texlive/tlnet/archive/abntex2.r49248.tar.xz +2022/09/26 | 151348 | systems/texlive/tlnet/archive/abntexto.doc.r64513.tar.xz +2022/09/26 | 5296 | systems/texlive/tlnet/archive/abntexto.r64513.tar.xz 2020/06/08 | 2800 | systems/texlive/tlnet/archive/abnt.r55471.tar.xz 2022/04/08 | 35013704 | systems/texlive/tlnet/archive/aboensis.doc.r62977.tar.xz 2022/04/08 | 96600 | systems/texlive/tlnet/archive/aboensis.r62977.tar.xz @@ -283332,7 +283340,7 @@ 2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz 2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz 2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz -2022/09/23 | 6760 | systems/texlive/tlnet/archive/collection-latexextra.r64469.tar.xz +2022/09/26 | 6776 | systems/texlive/tlnet/archive/collection-latexextra.r64512.tar.xz 2022/06/10 | 700 | systems/texlive/tlnet/archive/collection-latex.r63515.tar.xz 2022/06/12 | 736 | systems/texlive/tlnet/archive/collection-latexrecommended.r63547.tar.xz 2022/09/15 | 920 | systems/texlive/tlnet/archive/collection-luatex.r64393.tar.xz @@ -283342,7 +283350,7 @@ 2022/09/14 | 1544 | systems/texlive/tlnet/archive/collection-pictures.r64373.tar.xz 2022/08/14 | 968 | systems/texlive/tlnet/archive/collection-plaingeneric.r64113.tar.xz 2021/12/17 | 812 | systems/texlive/tlnet/archive/collection-pstricks.r61329.tar.xz -2022/09/17 | 1648 | systems/texlive/tlnet/archive/collection-publishers.r64416.tar.xz +2022/09/26 | 1648 | systems/texlive/tlnet/archive/collection-publishers.r64513.tar.xz 2020/03/04 | 340 | systems/texlive/tlnet/archive/collection-texworks.r54074.tar.xz 2020/03/04 | 388 | systems/texlive/tlnet/archive/collection-wintools.r54074.tar.xz 2022/02/28 | 648 | systems/texlive/tlnet/archive/collection-xetex.r62240.tar.xz @@ -283645,8 +283653,8 @@ 2019/02/28 | 1544 | systems/texlive/tlnet/archive/crbox.r29803.tar.xz 2022/08/13 | 95776 | systems/texlive/tlnet/archive/create-theorem.doc.r64104.tar.xz 2022/08/13 | 10224 | systems/texlive/tlnet/archive/create-theorem.r64104.tar.xz -2022/09/04 | 61676 | systems/texlive/tlnet/archive/crefthe.doc.r64280.tar.xz -2022/09/04 | 3220 | systems/texlive/tlnet/archive/crefthe.r64280.tar.xz +2022/09/26 | 61900 | systems/texlive/tlnet/archive/crefthe.doc.r64498.tar.xz +2022/09/26 | 3244 | systems/texlive/tlnet/archive/crefthe.r64498.tar.xz 2020/03/24 | 34244 | systems/texlive/tlnet/archive/crimson.doc.r54512.tar.xz 2020/03/24 | 85172 | systems/texlive/tlnet/archive/crimsonpro.doc.r54512.tar.xz 2020/03/24 | 2563452 | systems/texlive/tlnet/archive/crimsonpro.r54512.tar.xz @@ -286991,6 +286999,8 @@ 2019/02/28 | 6560 | systems/texlive/tlnet/archive/jneurosci.r17346.tar.xz 2020/11/07 | 594576 | systems/texlive/tlnet/archive/jnuexam.doc.r56867.tar.xz 2020/11/07 | 7892 | systems/texlive/tlnet/archive/jnuexam.r56867.tar.xz +2022/09/26 | 440624 | systems/texlive/tlnet/archive/jobname-suffix.doc.r64512.tar.xz +2022/09/26 | 1752 | systems/texlive/tlnet/archive/jobname-suffix.r64512.tar.xz 2020/12/17 | 173112 | systems/texlive/tlnet/archive/josefin.doc.r57152.tar.xz 2020/12/17 | 1097116 | systems/texlive/tlnet/archive/josefin.r57152.tar.xz 2022/07/15 | 160748 | systems/texlive/tlnet/archive/jpneduenumerate.doc.r63893.tar.xz @@ -287690,9 +287700,9 @@ 2021/07/20 | 5380 | systems/texlive/tlnet/archive/letterswitharrows.source.r59993.tar.xz 2020/04/15 | 1005116 | systems/texlive/tlnet/archive/lettre.doc.r54722.tar.xz 2020/04/15 | 25428 | systems/texlive/tlnet/archive/lettre.r54722.tar.xz -2020/03/26 | 272308 | systems/texlive/tlnet/archive/lettrine.doc.r54560.tar.xz -2020/03/26 | 7052 | systems/texlive/tlnet/archive/lettrine.r54560.tar.xz -2020/03/26 | 16720 | systems/texlive/tlnet/archive/lettrine.source.r54560.tar.xz +2022/09/26 | 286324 | systems/texlive/tlnet/archive/lettrine.doc.r64511.tar.xz +2022/09/26 | 7224 | systems/texlive/tlnet/archive/lettrine.r64511.tar.xz +2022/09/26 | 17184 | systems/texlive/tlnet/archive/lettrine.source.r64511.tar.xz 2019/02/28 | 24736 | systems/texlive/tlnet/archive/levy.doc.r21750.tar.xz 2019/02/28 | 34736 | systems/texlive/tlnet/archive/levy.r21750.tar.xz 2019/02/28 | 40844 | systems/texlive/tlnet/archive/lewis.doc.r15878.tar.xz @@ -288268,8 +288278,8 @@ 2020/02/18 | 209076 | systems/texlive/tlnet/archive/luatodonotes.doc.r53825.tar.xz 2020/02/18 | 26600 | systems/texlive/tlnet/archive/luatodonotes.r53825.tar.xz 2020/02/18 | 20788 | systems/texlive/tlnet/archive/luatodonotes.source.r53825.tar.xz -2022/09/15 | 95932 | systems/texlive/tlnet/archive/luatruthtable.doc.r64392.tar.xz -2022/09/15 | 2092 | systems/texlive/tlnet/archive/luatruthtable.r64392.tar.xz +2022/09/26 | 95932 | systems/texlive/tlnet/archive/luatruthtable.doc.r64508.tar.xz +2022/09/26 | 2236 | systems/texlive/tlnet/archive/luatruthtable.r64508.tar.xz 2021/06/04 | 214628 | systems/texlive/tlnet/archive/lua-typo.doc.r59457.tar.xz 2021/06/04 | 8804 | systems/texlive/tlnet/archive/lua-typo.r59457.tar.xz 2021/06/04 | 22768 | systems/texlive/tlnet/archive/lua-typo.source.r59457.tar.xz @@ -289724,8 +289734,8 @@ 2019/02/28 | 2504 | systems/texlive/tlnet/archive/outlining.source.r45601.tar.xz 2021/02/24 | 108816 | systems/texlive/tlnet/archive/overlays.doc.r57866.tar.xz 2021/02/24 | 2464 | systems/texlive/tlnet/archive/overlays.r57866.tar.xz -2020/08/10 | 39568 | systems/texlive/tlnet/archive/overlock.doc.r56079.tar.xz -2020/08/10 | 590276 | systems/texlive/tlnet/archive/overlock.r56079.tar.xz +2022/09/26 | 39916 | systems/texlive/tlnet/archive/overlock.doc.r64495.tar.xz +2022/09/26 | 590276 | systems/texlive/tlnet/archive/overlock.r64495.tar.xz 2020/02/25 | 372204 | systems/texlive/tlnet/archive/overpic.doc.r53889.tar.xz 2020/02/25 | 1728 | systems/texlive/tlnet/archive/overpic.r53889.tar.xz 2020/02/25 | 4784 | systems/texlive/tlnet/archive/overpic.source.r53889.tar.xz @@ -290411,10 +290421,10 @@ 2019/02/28 | 2196 | systems/texlive/tlnet/archive/play.r15878.tar.xz 2019/02/28 | 4972 | systems/texlive/tlnet/archive/play.source.r15878.tar.xz 2021/03/23 | 25344 | systems/texlive/tlnet/archive/pl.doc.r58661.tar.xz -2020/03/24 | 336496 | systems/texlive/tlnet/archive/plex.doc.r54512.tar.xz +2022/09/26 | 336512 | systems/texlive/tlnet/archive/plex.doc.r64496.tar.xz 2019/02/28 | 545036 | systems/texlive/tlnet/archive/plex-otf.doc.r47562.tar.xz 2019/02/28 | 3544 | systems/texlive/tlnet/archive/plex-otf.r47562.tar.xz -2020/03/24 | 10534068 | systems/texlive/tlnet/archive/plex.r54512.tar.xz +2022/09/26 | 10488340 | systems/texlive/tlnet/archive/plex.r64496.tar.xz 2020/10/10 | 219292 | systems/texlive/tlnet/archive/plimsoll.doc.r56605.tar.xz 2020/10/10 | 4692 | systems/texlive/tlnet/archive/plimsoll.r56605.tar.xz 2020/10/10 | 2364 | systems/texlive/tlnet/archive/plimsoll.source.r56605.tar.xz @@ -291455,9 +291465,9 @@ 2022/02/05 | 969684 | systems/texlive/tlnet/archive/sankey.doc.r61874.tar.xz 2022/02/05 | 9856 | systems/texlive/tlnet/archive/sankey.r61874.tar.xz 2022/02/05 | 27868 | systems/texlive/tlnet/archive/sankey.source.r61874.tar.xz -2020/06/08 | 526860 | systems/texlive/tlnet/archive/sanskrit.doc.r55475.tar.xz -2020/06/08 | 16284 | systems/texlive/tlnet/archive/sanskrit.r55475.tar.xz -2020/06/08 | 22216 | systems/texlive/tlnet/archive/sanskrit.source.r55475.tar.xz +2022/09/26 | 543200 | systems/texlive/tlnet/archive/sanskrit.doc.r64502.tar.xz +2022/09/26 | 16328 | systems/texlive/tlnet/archive/sanskrit.r64502.tar.xz +2022/09/26 | 22476 | systems/texlive/tlnet/archive/sanskrit.source.r64502.tar.xz 2020/06/08 | 290432 | systems/texlive/tlnet/archive/sanskrit-t1.doc.r55475.tar.xz 2020/06/08 | 454128 | systems/texlive/tlnet/archive/sanskrit-t1.r55475.tar.xz 2020/02/02 | 158040 | systems/texlive/tlnet/archive/sansmathaccent.doc.r53628.tar.xz @@ -291621,8 +291631,8 @@ 2019/12/12 | 6840 | systems/texlive/tlnet/archive/selinput.source.r53098.tar.xz 2019/02/28 | 509908 | systems/texlive/tlnet/archive/selnolig.doc.r38721.tar.xz 2019/02/28 | 54008 | systems/texlive/tlnet/archive/selnolig.r38721.tar.xz -2022/09/23 | 412240 | systems/texlive/tlnet/archive/semantex.doc.r64472.tar.xz -2022/09/23 | 26172 | systems/texlive/tlnet/archive/semantex.r64472.tar.xz +2022/09/26 | 419900 | systems/texlive/tlnet/archive/semantex.doc.r64510.tar.xz +2022/09/26 | 26344 | systems/texlive/tlnet/archive/semantex.r64510.tar.xz 2019/02/28 | 357820 | systems/texlive/tlnet/archive/semantic.doc.r15878.tar.xz 2020/01/31 | 270076 | systems/texlive/tlnet/archive/semantic-markup.doc.r53607.tar.xz 2020/01/31 | 2500 | systems/texlive/tlnet/archive/semantic-markup.r53607.tar.xz @@ -292618,13 +292628,13 @@ 2019/02/28 | 340 | systems/texlive/tlnet/archive/texfot.amd64-freebsd.r33155.tar.xz 2019/02/28 | 336 | systems/texlive/tlnet/archive/texfot.amd64-netbsd.r33155.tar.xz 2019/02/28 | 336 | systems/texlive/tlnet/archive/texfot.armhf-linux.r33155.tar.xz -2022/02/24 | 33592 | systems/texlive/tlnet/archive/texfot.doc.r62157.tar.xz +2022/09/26 | 33712 | systems/texlive/tlnet/archive/texfot.doc.r64507.tar.xz 2019/02/28 | 336 | systems/texlive/tlnet/archive/texfot.i386-cygwin.r33155.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/texfot.i386-freebsd.r33155.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/texfot.i386-linux.r33155.tar.xz 2019/02/28 | 336 | systems/texlive/tlnet/archive/texfot.i386-netbsd.r33155.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/texfot.i386-solaris.r33155.tar.xz -2022/02/24 | 6436 | systems/texlive/tlnet/archive/texfot.r62157.tar.xz +2022/09/26 | 6684 | systems/texlive/tlnet/archive/texfot.r64507.tar.xz 2021/02/25 | 340 | systems/texlive/tlnet/archive/texfot.universal-darwin.r57908.tar.xz 2019/02/28 | 684 | systems/texlive/tlnet/archive/texfot.win32.r33155.tar.xz 2019/02/28 | 340 | systems/texlive/tlnet/archive/texfot.x86_64-cygwin.r33557.tar.xz @@ -292712,7 +292722,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 -2022/09/24 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64481.tar.xz +2022/09/26 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64501.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 @@ -292736,7 +292746,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 -2022/09/24 | 113652 | systems/texlive/tlnet/archive/texlive-scripts.r64481.tar.xz +2022/09/26 | 113692 | systems/texlive/tlnet/archive/texlive-scripts.r64501.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2022/04/19 | 36296 | systems/texlive/tlnet/archive/texlive-scripts.win32.r63068.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -293087,8 +293097,8 @@ 2019/02/28 | 2000 | systems/texlive/tlnet/archive/tikz-dimline.r35805.tar.xz 2020/07/01 | 447640 | systems/texlive/tlnet/archive/tikzducks.doc.r55713.tar.xz 2020/07/01 | 17952 | systems/texlive/tlnet/archive/tikzducks.r55713.tar.xz -2022/08/23 | 346904 | systems/texlive/tlnet/archive/tikz-ext.doc.r64166.tar.xz -2022/08/23 | 15716 | systems/texlive/tlnet/archive/tikz-ext.r64166.tar.xz +2022/09/26 | 483896 | systems/texlive/tlnet/archive/tikz-ext.doc.r64506.tar.xz +2022/09/26 | 20824 | systems/texlive/tlnet/archive/tikz-ext.r64506.tar.xz 2019/08/21 | 316036 | systems/texlive/tlnet/archive/tikz-feynhand.doc.r51915.tar.xz 2019/08/21 | 6912 | systems/texlive/tlnet/archive/tikz-feynhand.r51915.tar.xz 2020/10/10 | 322304 | systems/texlive/tlnet/archive/tikz-feynman.doc.r56615.tar.xz @@ -293201,8 +293211,8 @@ 2019/02/28 | 7400 | systems/texlive/tlnet/archive/timetable.r15878.tar.xz 2019/02/28 | 98352 | systems/texlive/tlnet/archive/timing-diagrams.doc.r31491.tar.xz 2019/02/28 | 2372 | systems/texlive/tlnet/archive/timing-diagrams.r31491.tar.xz -2019/02/28 | 29264 | systems/texlive/tlnet/archive/tinos.doc.r42882.tar.xz -2019/02/28 | 3230744 | systems/texlive/tlnet/archive/tinos.r42882.tar.xz +2022/09/26 | 29268 | systems/texlive/tlnet/archive/tinos.doc.r64504.tar.xz +2022/09/26 | 3230740 | systems/texlive/tlnet/archive/tinos.r64504.tar.xz 2019/02/28 | 3676376 | systems/texlive/tlnet/archive/tipa-de.doc.r22005.tar.xz 2019/02/28 | 416 | systems/texlive/tlnet/archive/tipa-de.r22005.tar.xz 2019/02/28 | 2343456 | systems/texlive/tlnet/archive/tipa.doc.r29349.tar.xz @@ -293568,9 +293578,9 @@ 2022/08/14 | 40864 | systems/texlive/tlnet/archive/ucs.source.r64114.tar.xz 2019/02/28 | 6280 | systems/texlive/tlnet/archive/ucthesis.doc.r15878.tar.xz 2019/02/28 | 19284 | systems/texlive/tlnet/archive/ucthesis.r15878.tar.xz -2022/09/24 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64491.tar.xz -2022/09/24 | 7048 | systems/texlive/tlnet/archive/udes-genie-these.r64491.tar.xz -2022/09/24 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64491.tar.xz +2022/09/26 | 127040 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64509.tar.xz +2022/09/26 | 7200 | systems/texlive/tlnet/archive/udes-genie-these.r64509.tar.xz +2022/09/26 | 14480 | systems/texlive/tlnet/archive/udes-genie-these.source.r64509.tar.xz 2021/02/24 | 477784 | systems/texlive/tlnet/archive/udesoftec.doc.r57866.tar.xz 2021/02/24 | 108164 | systems/texlive/tlnet/archive/udesoftec.r57866.tar.xz 2021/02/24 | 44528 | systems/texlive/tlnet/archive/udesoftec.source.r57866.tar.xz @@ -293698,8 +293708,8 @@ 2019/02/28 | 2004 | systems/texlive/tlnet/archive/units.r42428.tar.xz 2019/02/28 | 7256 | systems/texlive/tlnet/archive/units.source.r42428.tar.xz 2019/08/30 | 595332 | systems/texlive/tlnet/archive/universa.doc.r51984.tar.xz -2019/02/28 | 35596 | systems/texlive/tlnet/archive/universalis.doc.r33860.tar.xz -2019/02/28 | 514020 | systems/texlive/tlnet/archive/universalis.r33860.tar.xz +2022/09/26 | 35596 | systems/texlive/tlnet/archive/universalis.doc.r64505.tar.xz +2022/09/26 | 514004 | systems/texlive/tlnet/archive/universalis.r64505.tar.xz 2019/08/30 | 16744 | systems/texlive/tlnet/archive/universa.r51984.tar.xz 2019/08/30 | 55964 | systems/texlive/tlnet/archive/universa.source.r51984.tar.xz 2022/09/09 | 2823976 | systems/texlive/tlnet/archive/univie-ling.doc.r64318.tar.xz @@ -294575,16 +294585,16 @@ 2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz 2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz 2022/07/17 | 124404 | systems/texlive/tlnet/install-tl -2022/09/24 | 5831656 | systems/texlive/tlnet/install-tl-unx.tar.gz -2022/09/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2022/09/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/09/26 | 5833042 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/09/26 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/09/26 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat -2022/09/24 | 20437483 | systems/texlive/tlnet/install-tl-windows.exe -2022/09/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2022/09/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/09/24 | 25516589 | systems/texlive/tlnet/install-tl.zip -2022/09/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/09/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/09/26 | 20435964 | systems/texlive/tlnet/install-tl-windows.exe +2022/09/26 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/09/26 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/09/26 | 25516642 | systems/texlive/tlnet/install-tl.zip +2022/09/26 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/09/26 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2022/04/03 | 1229 | systems/texlive/tlnet/README.md 2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022 2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -294594,7 +294604,7 @@ 2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2022/09/12 | 49769 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2022/09/23 | 7157 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2022/09/25 | 7379 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/07/21 | 222477 | 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 @@ -294637,16 +294647,16 @@ 2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2022/09/24 | 17656758 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2022/09/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/09/26 | 17660060 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/09/26 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2022/09/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2022/09/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/09/24 | 2411336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/09/26 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/09/26 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/09/26 | 2411112 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2022/08/01 | 42206 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm -2022/06/19 | 156508 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm +2022/09/25 | 156577 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm 2022/04/18 | 38007 | systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm 2021/05/20 | 6032 | systems/texlive/tlnet/tlpkg/TeXLive/trans.pl 2020/03/07 | 116238 | systems/texlive/tlnet/tlpkg/tlperl/bin/libgcc_s_dw2-1.dll @@ -300002,7 +300012,7 @@ 2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma 2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma 2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma -2022/09/25 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/09/26 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma 2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma 2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma 2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma @@ -301711,9 +301721,9 @@ 2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma 2022/07/26 | 39695 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma 2022/08/27 | 43640 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma -2022/09/25 | 295616 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/09/25 | 1498418 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/09/25 | 1377459 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/09/26 | 295628 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/09/26 | 1496344 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/09/26 | 1375537 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2022/07/26 | 13519 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma 2022/08/27 | 14450 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma 2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma @@ -301959,102 +301969,102 @@ 2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma 2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma 2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma -2022/09/25 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/09/25 | 57319 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/09/25 | 1161752 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/09/25 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/09/25 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/09/25 | 65131 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/09/25 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2022/09/25 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/09/25 | 31564 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2022/09/25 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2022/09/25 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2022/09/25 | 57505 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/09/25 | 270468 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2022/09/25 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2022/09/25 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2022/09/25 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/09/25 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2022/09/25 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/09/25 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/09/25 | 45792 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2022/09/25 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2022/09/25 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2022/09/25 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2022/09/25 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/09/25 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2022/09/25 | 63242 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/09/25 | 155430 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2022/09/25 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2022/09/25 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2022/09/25 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2022/09/25 | 25118 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/09/25 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2022/09/25 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2022/09/25 | 115580 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/09/25 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/09/25 | 565080 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/09/25 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma -2022/09/25 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2022/09/25 | 109651 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/09/25 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2022/09/25 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/09/25 | 682212 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/09/25 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2022/09/25 | 527571 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/09/25 | 103598 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2022/09/25 | 2023131 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/09/25 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/09/25 | 32073 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2022/09/25 | 8825 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2022/09/25 | 209138 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/09/25 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2022/09/25 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/09/25 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2022/09/25 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2022/09/25 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2022/09/25 | 55319 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/09/25 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2022/09/25 | 43616 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/09/25 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2022/09/25 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/09/25 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/09/25 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2022/09/25 | 824994 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2022/09/25 | 203419 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2022/09/25 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2022/09/25 | 88482 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/09/25 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2022/09/25 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2022/09/25 | 37506 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/09/25 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2022/09/25 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2022/09/25 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/09/25 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2022/09/25 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/09/25 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/09/25 | 27465 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2022/09/25 | 18512 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/09/25 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/09/25 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2022/09/25 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2022/09/25 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2022/09/25 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/09/25 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/09/25 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2022/09/25 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2022/09/25 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/09/25 | 352462 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/09/25 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/09/25 | 630437 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2022/09/25 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2022/09/25 | 295656 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/09/25 | 1495560 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2022/09/25 | 1375644 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/09/25 | 14433 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/09/26 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/09/26 | 57316 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/09/26 | 1161749 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/09/26 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/09/26 | 35263 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/09/26 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/09/26 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2022/09/26 | 77210 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/09/26 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/09/26 | 394143 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/09/26 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/09/26 | 57505 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/09/26 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/09/26 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/09/26 | 103245 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/09/26 | 24210 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/09/26 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/09/26 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/09/26 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/09/26 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/09/26 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/09/26 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/09/26 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2022/09/26 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2022/09/26 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/09/26 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/09/26 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/09/26 | 79062 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/09/26 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/09/26 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/09/26 | 25117 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/09/26 | 112877 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/09/26 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/09/26 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/09/26 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2022/09/26 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/09/26 | 247205 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma +2022/09/26 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/09/26 | 109649 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/09/26 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/09/26 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/09/26 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/09/26 | 599107 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/09/26 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/09/26 | 103597 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/09/26 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/09/26 | 74098 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/09/26 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/09/26 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/09/26 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/09/26 | 286684 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/09/26 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/09/26 | 140014 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/09/26 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/09/26 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/09/26 | 55319 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/09/26 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/09/26 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/09/26 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/09/26 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/09/26 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2022/09/26 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/09/26 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/09/26 | 203419 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/09/26 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/09/26 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/09/26 | 1323745 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/09/26 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/09/26 | 37503 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/09/26 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/09/26 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/09/26 | 769654 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/09/26 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/09/26 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/09/26 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/09/26 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/09/26 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/09/26 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/09/26 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/09/26 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/09/26 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/09/26 | 2821674 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/09/26 | 62359 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/09/26 | 41189 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/09/26 | 33861 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/09/26 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/09/26 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/09/26 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/09/26 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/09/26 | 43526 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/09/26 | 295566 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/09/26 | 1495438 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/09/26 | 1376640 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/09/26 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma -2022/09/25 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini +2022/09/26 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini 2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma 2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma 2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma @@ -302561,7 +302571,7 @@ 2022/02/22 | 6917 | systems/win32/miktex/tm/packages/preview.tar.lzma 2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma 2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma -2022/09/25 | 931 | systems/win32/miktex/tm/packages/pr.ini +2022/09/26 | 931 | systems/win32/miktex/tm/packages/pr.ini 2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma 2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma 2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma @@ -304524,7 +304534,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 -2022/09/26 | 186 | timestamp +2022/09/27 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2022/02/28 | 917 | usergrps/dante/dtk/doc/beispiel.bib @@ -305858,40 +305868,40 @@ 1999/06/04 | 27445 | usergrps/uktug/baskervi/baskrep.cls 1999/05/12 | 7702 | usergrps/uktug/baskervi/epstopdf 1997/10/01 | 444 | usergrps/uktug/baskervi/README -2022/08/07 | 9678 | usergrps/usergrps/bg.html -2022/08/07 | 9347 | usergrps/usergrps/br.html -2022/08/07 | 9640 | usergrps/usergrps/cn.html -2022/08/07 | 9803 | usergrps/usergrps/cz.html -2022/08/07 | 9928 | usergrps/usergrps/de.html -2022/08/07 | 9307 | usergrps/usergrps/dk.html -2022/08/07 | 9211 | usergrps/usergrps/ee.html -2022/08/07 | 9436 | usergrps/usergrps/esc.html -2022/08/07 | 9581 | usergrps/usergrps/es.html -2022/08/07 | 9682 | usergrps/usergrps/fr.html -2022/08/07 | 9457 | usergrps/usergrps/gr.html -2022/08/07 | 9861 | usergrps/usergrps/hu.html -2022/08/07 | 9357 | usergrps/usergrps/ie.html -2022/08/07 | 6409 | usergrps/usergrps/index.html -2022/08/07 | 9332 | usergrps/usergrps/is.html -2022/08/07 | 9584 | usergrps/usergrps/it.html -2022/08/07 | 9301 | usergrps/usergrps/kh.html -2022/08/07 | 9701 | usergrps/usergrps/kr.html -2022/08/07 | 9541 | usergrps/usergrps/labels.pdf +2022/09/26 | 9678 | usergrps/usergrps/bg.html +2022/09/26 | 9347 | usergrps/usergrps/br.html +2022/09/26 | 9640 | usergrps/usergrps/cn.html +2022/09/26 | 9803 | usergrps/usergrps/cz.html +2022/09/26 | 9928 | usergrps/usergrps/de.html +2022/09/26 | 9307 | usergrps/usergrps/dk.html +2022/09/26 | 9211 | usergrps/usergrps/ee.html +2022/09/26 | 9436 | usergrps/usergrps/esc.html +2022/09/26 | 9581 | usergrps/usergrps/es.html +2022/09/26 | 9682 | usergrps/usergrps/fr.html +2022/09/26 | 9457 | usergrps/usergrps/gr.html +2022/09/26 | 9861 | usergrps/usergrps/hu.html +2022/09/26 | 9357 | usergrps/usergrps/ie.html +2022/09/26 | 6409 | usergrps/usergrps/index.html +2022/09/26 | 9332 | usergrps/usergrps/is.html +2022/09/26 | 9584 | usergrps/usergrps/it.html +2022/09/26 | 9301 | usergrps/usergrps/kh.html +2022/09/26 | 9701 | usergrps/usergrps/kr.html +2022/09/26 | 9542 | usergrps/usergrps/labels.pdf 2022/05/12 | 2105 | usergrps/usergrps/labels.tex -2022/08/07 | 9348 | usergrps/usergrps/lt.html -2022/08/07 | 33096 | usergrps/usergrps/lugs.html -2022/08/07 | 48884 | usergrps/usergrps/lugs.pdf -2022/08/07 | 20954 | usergrps/usergrps/lugs.tex -2022/08/07 | 9291 | usergrps/usergrps/mx.html -2022/08/07 | 9630 | usergrps/usergrps/nl.html -2022/08/07 | 9402 | usergrps/usergrps/no.html -2022/08/07 | 9866 | usergrps/usergrps/pl.html -2022/08/07 | 9430 | usergrps/usergrps/pt.html -2022/08/07 | 9286 | usergrps/usergrps/tw.html -2022/08/07 | 9472 | usergrps/usergrps/us.html -2022/08/07 | 9341 | usergrps/usergrps/uy.html -2022/08/07 | 9412 | usergrps/usergrps/vn.html -2022/08/07 | 9351 | usergrps/usergrps/za.html +2022/09/26 | 9348 | usergrps/usergrps/lt.html +2022/09/26 | 33099 | usergrps/usergrps/lugs.html +2022/09/26 | 48927 | usergrps/usergrps/lugs.pdf +2022/09/26 | 20960 | usergrps/usergrps/lugs.tex +2022/09/26 | 9291 | usergrps/usergrps/mx.html +2022/09/26 | 9637 | usergrps/usergrps/nl.html +2022/09/26 | 9402 | usergrps/usergrps/no.html +2022/09/26 | 9866 | usergrps/usergrps/pl.html +2022/09/26 | 9430 | usergrps/usergrps/pt.html +2022/09/26 | 9286 | usergrps/usergrps/tw.html +2022/09/26 | 9472 | usergrps/usergrps/us.html +2022/09/26 | 9341 | usergrps/usergrps/uy.html +2022/09/26 | 9412 | usergrps/usergrps/vn.html +2022/09/26 | 9351 | usergrps/usergrps/za.html 1992/12/06 | 2551 | web/aplweb/announcement 1993/11/03 | 802292 | web/aplweb/aplweba.zip 1993/11/03 | 771814 | web/aplweb/aplwebb.zip diff --git a/FILES.byname.gz b/FILES.byname.gz index ee4774cf63..b617bd6cb3 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 8fb6d105b3..f95a833a4d 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,221 +1,410 @@ +2022/09/26 | 9928 | usergrps/usergrps/de.html +2022/09/26 | 9866 | usergrps/usergrps/pl.html +2022/09/26 | 9861 | usergrps/usergrps/hu.html +2022/09/26 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx +2022/09/26 | 9803 | usergrps/usergrps/cz.html +2022/09/26 | 9701 | usergrps/usergrps/kr.html +2022/09/26 | 9682 | usergrps/usergrps/fr.html +2022/09/26 | 9678 | usergrps/usergrps/bg.html +2022/09/26 | 9640 | usergrps/usergrps/cn.html +2022/09/26 | 9637 | usergrps/usergrps/nl.html +2022/09/26 | 961699 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf +2022/09/26 | 95932 | systems/texlive/tlnet/archive/luatruthtable.doc.r64508.tar.xz +2022/09/26 | 9584 | usergrps/usergrps/it.html +2022/09/26 | 9581 | usergrps/usergrps/es.html +2022/09/26 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2022/09/26 | 9542 | usergrps/usergrps/labels.pdf +2022/09/26 | 9472 | usergrps/usergrps/us.html +2022/09/26 | 9457 | usergrps/usergrps/gr.html +2022/09/26 | 9436 | usergrps/usergrps/esc.html +2022/09/26 | 9430 | usergrps/usergrps/pt.html +2022/09/26 | 9412 | usergrps/usergrps/vn.html +2022/09/26 | 9402 | usergrps/usergrps/no.html +2022/09/26 | 9357 | usergrps/usergrps/ie.html +2022/09/26 | 9351 | usergrps/usergrps/za.html +2022/09/26 | 9348 | usergrps/usergrps/lt.html +2022/09/26 | 9347 | usergrps/usergrps/br.html +2022/09/26 | 9341 | usergrps/usergrps/uy.html +2022/09/26 | 9332 | usergrps/usergrps/is.html +2022/09/26 | 932 | macros/latex/contrib/wargame/source/package.dtx +2022/09/26 | 931 | systems/win32/miktex/tm/packages/pr.ini +2022/09/26 | 9307 | usergrps/usergrps/dk.html +2022/09/26 | 9301 | usergrps/usergrps/kh.html +2022/09/26 | 9291 | usergrps/usergrps/mx.html +2022/09/26 | 9286 | usergrps/usergrps/tw.html +2022/09/26 | 9211 | usergrps/usergrps/ee.html +2022/09/26 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx +2022/09/26 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/09/26 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/09/26 | 88197 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +2022/09/26 | 8618 | macros/latex/contrib/wargame/source/Makefile +2022/09/26 | 84739 | macros/latex/contrib/wargame/source/wargame.dtx +2022/09/26 | 833394 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf +2022/09/26 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx +2022/09/26 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/09/26 | 821 | macros/latex/contrib/wargame/doc/tutorial/patch.py +2022/09/26 | 8205 | macros/latex/contrib/wargame/source/hex/terrain.dtx +2022/09/26 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/09/26 | 8007 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +2022/09/26 | 79062 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/09/26 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx +2022/09/26 | 77210 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/09/26 | 769654 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/09/26 | 7654 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +2022/09/26 | 749246 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf +2022/09/26 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx +2022/09/26 | 74098 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/09/26 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/09/26 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/09/26 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/09/26 | 72949 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +2022/09/26 | 7250827 | macros/latex-dev/required/tools.zip +2022/09/26 | 7224 | systems/texlive/tlnet/archive/lettrine.r64511.tar.xz +2022/09/26 | 7200 | systems/texlive/tlnet/archive/udes-genie-these.r64509.tar.xz +2022/09/26 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/09/26 | 7038 | macros/latex/contrib/wargame/source/wargame.ins +2022/09/26 | 686251 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf +2022/09/26 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/09/26 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/09/26 | 681205 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf +2022/09/26 | 67833 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +2022/09/26 | 6776 | systems/texlive/tlnet/archive/collection-latexextra.r64512.tar.xz +2022/09/26 | 6684 | systems/texlive/tlnet/archive/texfot.r64507.tar.xz +2022/09/26 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/09/26 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty +2022/09/26 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/09/26 | 662797 | install/fonts/theanooldstyle.tds.zip +2022/09/26 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx +2022/09/26 | 654847 | fonts/theanooldstyle.zip +2022/09/26 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/09/26 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx +2022/09/26 | 6413 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +2022/09/26 | 6409 | usergrps/usergrps/index.html +2022/09/26 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/09/26 | 63555 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +2022/09/26 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/09/26 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/09/26 | 62359 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/09/26 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx +2022/09/26 | 61900 | systems/texlive/tlnet/archive/crefthe.doc.r64498.tar.xz +2022/09/26 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx +2022/09/26 | 599107 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/09/26 | 591324 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf +2022/09/26 | 590276 | systems/texlive/tlnet/archive/overlock.r64495.tar.xz +2022/09/26 | 586518 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf +2022/09/26 | 58634 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/09/26 | 583838 | macros/latex/contrib/wargame/doc/tutorial/game.pdf +2022/09/26 | 5833042 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/09/26 | 582749 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf +2022/09/26 | 580 | macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty +2022/09/26 | 57505 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/09/26 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/09/26 | 57316 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/09/26 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex +2022/09/26 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/09/26 | 562768 | install/fonts/theanomodern.tds.zip +2022/09/26 | 560813 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf +2022/09/26 | 557451 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf +2022/09/26 | 554814 | fonts/theanomodern.zip +2022/09/26 | 55319 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/09/26 | 550143 | install/fonts/theanodidot.tds.zip +2022/09/26 | 543714 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf +2022/09/26 | 543200 | systems/texlive/tlnet/archive/sanskrit.doc.r64502.tar.xz +2022/09/26 | 542187 | fonts/theanodidot.zip +2022/09/26 | 540495 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf +2022/09/26 | 535895 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf +2022/09/26 | 5296 | systems/texlive/tlnet/archive/abntexto.r64513.tar.xz +2022/09/26 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/09/26 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/09/26 | 526052 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf +2022/09/26 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/09/26 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx +2022/09/26 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/09/26 | 515125 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf +2022/09/26 | 514280 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf +2022/09/26 | 514004 | systems/texlive/tlnet/archive/universalis.r64505.tar.xz +2022/09/26 | 5043 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.dtx +2022/09/26 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/09/26 | 48927 | usergrps/usergrps/lugs.pdf +2022/09/26 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2022/09/26 | 4884 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins +2022/09/26 | 483896 | systems/texlive/tlnet/archive/tikz-ext.doc.r64506.tar.xz +2022/09/26 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/09/26 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/09/26 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx +2022/09/26 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx +2022/09/26 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx +2022/09/26 | 4579 | fonts/neo-euler/neo-euler.sty +2022/09/26 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/09/26 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/09/26 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/09/26 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/09/26 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/09/26 | 455669 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf +2022/09/26 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx +2022/09/26 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx +2022/09/26 | 440624 | systems/texlive/tlnet/archive/jobname-suffix.doc.r64512.tar.xz +2022/09/26 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex +2022/09/26 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2022/09/26 | 438548 | fonts/neo-euler/Neo-Euler.otf +2022/09/26 | 436654 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf +2022/09/26 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/09/26 | 43526 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/09/26 | 432806 | macros/latex/contrib/wargame/doc/compat.pdf +2022/09/26 | 426054 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf +2022/09/26 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64501.tar.xz +2022/09/26 | 419900 | systems/texlive/tlnet/archive/semantex.doc.r64510.tar.xz +2022/09/26 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx +2022/09/26 | 41240 | macros/latex/contrib/wargame/source/util/core.dtx +2022/09/26 | 41189 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/09/26 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/09/26 | 4041 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty +2022/09/26 | 39916 | systems/texlive/tlnet/archive/overlock.doc.r64495.tar.xz +2022/09/26 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx +2022/09/26 | 394143 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/09/26 | 385718 | macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf +2022/09/26 | 38412818 | macros/latex-dev/base.zip +2022/09/26 | 37503 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/09/26 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx +2022/09/26 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx +2022/09/26 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/09/26 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx +2022/09/26 | 35596 | systems/texlive/tlnet/archive/universalis.doc.r64505.tar.xz +2022/09/26 | 35263 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/09/26 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/09/26 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/09/26 | 33861 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/09/26 | 33712 | systems/texlive/tlnet/archive/texfot.doc.r64507.tar.xz +2022/09/26 | 336512 | systems/texlive/tlnet/archive/plex.doc.r64496.tar.xz +2022/09/26 | 33099 | usergrps/usergrps/lugs.html +2022/09/26 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/09/26 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/09/26 | 3244 | systems/texlive/tlnet/archive/crefthe.r64498.tar.xz +2022/09/26 | 3230740 | systems/texlive/tlnet/archive/tinos.r64504.tar.xz +2022/09/26 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx +2022/09/26 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx +2022/09/26 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/09/26 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/09/26 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/09/26 | 30678 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +2022/09/26 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/09/26 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx +2022/09/26 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/09/26 | 295628 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/09/26 | 295566 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/09/26 | 29268 | systems/texlive/tlnet/archive/tinos.doc.r64504.tar.xz +2022/09/26 | 2901441 | install/macros/latex/contrib/wargame.tds.zip +2022/09/26 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx +2022/09/26 | 2880 | macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +2022/09/26 | 286684 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/09/26 | 286324 | systems/texlive/tlnet/archive/lettrine.doc.r64511.tar.xz +2022/09/26 | 28627 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +2022/09/26 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/09/26 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx +2022/09/26 | 2835 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +2022/09/26 | 2821674 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/09/26 | 27907 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +2022/09/26 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/09/26 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/09/26 | 26550 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +2022/09/26 | 26540 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +2022/09/26 | 2651836 | macros/latex/contrib/wargame.zip +2022/09/26 | 26344 | systems/texlive/tlnet/archive/semantex.r64510.tar.xz +2022/09/26 | 25516642 | systems/texlive/tlnet/install-tl.zip +2022/09/26 | 25117 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/09/26 | 2493 | fonts/theanooldstyle/latex/TheanoOldStyle.sty +2022/09/26 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx +2022/09/26 | 247205 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma +2022/09/26 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/09/26 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx +2022/09/26 | 24210 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/09/26 | 2411112 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/09/26 | 2403 | fonts/theanomodern/latex/TheanoModern.sty +2022/09/26 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/09/26 | 2358 | fonts/theanodidot/latex/TheanoDidot.sty +2022/09/26 | 2311 | macros/latex/contrib/wargame/source/hex/core.dtx +2022/09/26 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx +2022/09/26 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx +2022/09/26 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx +2022/09/26 | 22476 | systems/texlive/tlnet/archive/sanskrit.source.r64502.tar.xz +2022/09/26 | 2236 | systems/texlive/tlnet/archive/luatruthtable.r64508.tar.xz +2022/09/26 | 2208 | fonts/theanodidot/README +2022/09/26 | 21991 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +2022/09/26 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2022/09/26 | 2134 | macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua +2022/09/26 | 20960 | usergrps/usergrps/lugs.tex +2022/09/26 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/09/26 | 20824 | systems/texlive/tlnet/archive/tikz-ext.r64506.tar.xz +2022/09/26 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx +2022/09/26 | 20435 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +2022/09/26 | 20435964 | systems/texlive/tlnet/install-tl-windows.exe +2022/09/26 | 203419 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/09/26 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/09/26 | 2014 | fonts/neo-euler/README.md +2022/09/26 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx +2022/09/26 | 19820 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +2022/09/26 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/09/26 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx +2022/09/26 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx +2022/09/26 | 1878261 | fonts/neo-euler.zip +2022/09/26 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/09/26 | 184493 | macros/latex/contrib/wargame/doc/symbols.pdf +2022/09/26 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/09/26 | 1822 | macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty +2022/09/26 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx +2022/09/26 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/09/26 | 18170 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +2022/09/26 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx +2022/09/26 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx +2022/09/26 | 18021 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +2022/09/26 | 18011 | fonts/neo-euler/Neo-Euler.ltx +2022/09/26 | 17660060 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/09/26 | 176582 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +2022/09/26 | 1752 | systems/texlive/tlnet/archive/jobname-suffix.r64512.tar.xz +2022/09/26 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/09/26 | 17304 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +2022/09/26 | 17184 | systems/texlive/tlnet/archive/lettrine.source.r64511.tar.xz +2022/09/26 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/09/26 | 1686 | fonts/theanooldstyle/README +2022/09/26 | 16836 | fonts/neo-euler/unimath-euler.ltx +2022/09/26 | 1670 | fonts/theanomodern/README +2022/09/26 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx +2022/09/26 | 1648 | systems/texlive/tlnet/archive/collection-publishers.r64513.tar.xz +2022/09/26 | 16328 | systems/texlive/tlnet/archive/sanskrit.r64502.tar.xz +2022/09/26 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx +2022/09/26 | 15651 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +2022/09/26 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/09/26 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/09/26 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/09/26 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx +2022/09/26 | 151348 | systems/texlive/tlnet/archive/abntexto.doc.r64513.tar.xz +2022/09/26 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx +2022/09/26 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/09/26 | 150154 | macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty +2022/09/26 | 1496344 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/09/26 | 1495438 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/09/26 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/09/26 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/09/26 | 1452646 | fonts/neo-euler/unimath-euler.pdf +2022/09/26 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/09/26 | 14480 | systems/texlive/tlnet/archive/udes-genie-these.source.r64509.tar.xz +2022/09/26 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/09/26 | 140014 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/09/26 | 13995 | macros/latex/contrib/wargame/doc/tutorial/export.tex +2022/09/26 | 1376640 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/09/26 | 1375537 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/09/26 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx +2022/09/26 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/09/26 | 134087 | fonts/neo-euler/Neo-Euler.pdf +2022/09/26 | 133283 | macros/latex/contrib/wargame/source/utils/wgexport.py +2022/09/26 | 1323745 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/09/26 | 1310006 | macros/latex/contrib/wargame/doc/wargame.pdf +2022/09/26 | 127040 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64509.tar.xz +2022/09/26 | 12681 | macros/latex/contrib/wargame/source/chit/misc.dtx +2022/09/26 | 1256 | macros/latex/contrib/wargame/doc/tutorial/README.md +2022/09/26 | 12168 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +2022/09/26 | 1200 | macros/latex/contrib/pdfmanagement-testphase/README.md +2022/09/26 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx +2022/09/26 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx +2022/09/26 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx +2022/09/26 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini +2022/09/26 | 1161749 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/09/26 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx +2022/09/26 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/09/26 | 11385678 | macros/latex/contrib/pdfmanagement-testphase.zip +2022/09/26 | 113692 | systems/texlive/tlnet/archive/texlive-scripts.r64501.tar.xz +2022/09/26 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2022/09/26 | 112877 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/09/26 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx +2022/09/26 | 109649 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/09/26 | 10843 | macros/latex/contrib/wargame/README.md +2022/09/26 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/09/26 | 1056 | macros/latex/contrib/wargame/doc/tutorial/Makefile +2022/09/26 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/09/26 | 10488340 | systems/texlive/tlnet/archive/plex.r64496.tar.xz +2022/09/26 | 103597 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/09/26 | 103245 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/09/26 | 10300 | macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py +2022/09/26 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx 2022/09/25 | 97444 | macros/latex/contrib/lettrine/doc/lettrine.pdf 2022/09/25 | 9741 | macros/latex/contrib/lettrine/doc/lettrine-demo-de.tex -2022/09/25 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2022/09/25 | 931 | systems/win32/miktex/tm/packages/pr.ini 2022/09/25 | 9196 | macros/latex/contrib/abntexto/abntexto-manual.tex 2022/09/25 | 9119 | macros/latex/contrib/lettrine/lettrine-2018-08-18.sty -2022/09/25 | 88482 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/09/25 | 8825 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma 2022/09/25 | 827639 | install/fonts/universalis.tds.zip -2022/09/25 | 824994 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2022/09/25 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma 2022/09/25 | 8127 | macros/latex/contrib/lettrine/lettrine-2015-08-31.sty 2022/09/25 | 811655 | fonts/universalis.zip -2022/09/25 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2022/09/25 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/09/25 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/09/25 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/09/25 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/09/25 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/09/25 | 7379 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/09/25 | 73141 | macros/latex/contrib/lettrine/doc/lettrine-demo-lua.pdf -2022/09/25 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2022/09/25 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/09/25 | 682212 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/09/25 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma 2022/09/25 | 6679 | macros/latex/contrib/lettrine/lettrine-2006-03-17.sty -2022/09/25 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma -2022/09/25 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/09/25 | 65131 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/09/25 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/09/25 | 63242 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/09/25 | 630437 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma 2022/09/25 | 62638 | macros/latex/contrib/lettrine/doc/lettrine-demo-fr.pdf -2022/09/25 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/09/25 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2022/09/25 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma 2022/09/25 | 5854 | macros/luatex/latex/luatruthtable/luatruthtable.sty 2022/09/25 | 57736 | macros/latex/contrib/lettrine/doc/lettrine-demo-de.pdf -2022/09/25 | 57505 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/09/25 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/09/25 | 57319 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/09/25 | 565080 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/09/25 | 55319 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/09/25 | 527571 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/09/25 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/09/25 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/09/25 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/09/25 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/09/25 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2022/09/25 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma 2022/09/25 | 46766 | macros/latex/contrib/lettrine/lettrine.dtx -2022/09/25 | 45792 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma 2022/09/25 | 454372 | macros/latex/contrib/semantex.zip 2022/09/25 | 440171 | macros/latex/contrib/jobname-suffix.zip -2022/09/25 | 43889 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/09/25 | 43616 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/09/25 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma 2022/09/25 | 4298 | macros/latex/contrib/lettrine/doc/lettrine-demo-lua.tex -2022/09/25 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2022/09/25 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2022/09/25 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2022/09/25 | 37506 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/09/25 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma 2022/09/25 | 3631597 | fonts/tinos.zip -2022/09/25 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/09/25 | 352462 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/09/25 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2022/09/25 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma 2022/09/25 | 333588 | macros/latex/contrib/lettrine.zip -2022/09/25 | 325980 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/09/25 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2022/09/25 | 32073 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2022/09/25 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/09/25 | 31564 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2022/09/25 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/09/25 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2022/09/25 | 295656 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/09/25 | 295616 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/09/25 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2022/09/25 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2022/09/25 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/09/25 | 27465 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma 2022/09/25 | 2724 | fonts/universalis/latex/universalis.sty -2022/09/25 | 270468 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2022/09/25 | 2652747 | macros/latex/contrib/wargame.zip 2022/09/25 | 2570 | macros/latex/contrib/lettrine/lettrine.ins -2022/09/25 | 25118 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/09/25 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma -2022/09/25 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2022/09/25 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/09/25 | 23949 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma 2022/09/25 | 228 | macros/latex/contrib/abntexto/README 2022/09/25 | 21449 | macros/latex/contrib/lettrine/contrib.dtx -2022/09/25 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/09/25 | 209138 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/09/25 | 203419 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2022/09/25 | 2023131 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/09/25 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma 2022/09/25 | 1907 | fonts/universalis/README -2022/09/25 | 18512 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/09/25 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2022/09/25 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma 2022/09/25 | 18084 | macros/latex/contrib/abntexto/abntexto.cls 2022/09/25 | 1777 | macros/latex/contrib/lettrine/contrib.ins -2022/09/25 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2022/09/25 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/09/25 | 156577 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm 2022/09/25 | 155753 | macros/latex/contrib/abntexto.zip -2022/09/25 | 155430 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2022/09/25 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2022/09/25 | 1498418 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/09/25 | 1495560 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma 2022/09/25 | 1492 | macros/latex/contrib/lettrine/README.md 2022/09/25 | 148750 | macros/latex/contrib/abntexto/abntexto-manual.pdf -2022/09/25 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma 2022/09/25 | 14470 | macros/latex/contrib/lettrine/doc/W.pdf -2022/09/25 | 14433 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2022/09/25 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2022/09/25 | 1377459 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma -2022/09/25 | 1375644 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/09/25 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2022/09/25 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma 2022/09/25 | 11992 | macros/latex/contrib/lettrine/doc/lettrine-demo-fr.tex -2022/09/25 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini -2022/09/25 | 1161752 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/09/25 | 115580 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/09/25 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2022/09/25 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2022/09/25 | 109651 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/09/25 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2022/09/25 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/09/25 | 103598 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2022/09/25 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma 2022/09/25 | 101701 | macros/luatex/latex/luatruthtable.zip -2022/09/24 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx 2022/09/24 | 96848 | systems/texlive/tlnet/archive/texinfo.r64481.tar.xz 2022/09/24 | 933 | graphics/pgf/contrib/tikz-ext/README.md -2022/09/24 | 932 | macros/latex/contrib/wargame/source/package.dtx 2022/09/24 | 9328 | systems/texlive/tlnet/archive/bibtex8.r64491.tar.xz 2022/09/24 | 921574 | language/sanskrit/sktdoc.ps 2022/09/24 | 91420 | language/sanskrit/README.pdf 2022/09/24 | 91056 | systems/texlive/tlnet/archive/hyperref.r64491.tar.xz -2022/09/24 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx 2022/09/24 | 892256 | systems/texlive/tlnet/archive/beebe.r64481.tar.xz 2022/09/24 | 8730 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex 2022/09/24 | 8719 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex 2022/09/24 | 8588 | systems/texlive/tlnet/archive/media4svg.r64491.tar.xz -2022/09/24 | 8558 | macros/latex/contrib/wargame/source/Makefile -2022/09/24 | 853 | macros/latex/contrib/wargame/doc/tutorial/patch.py 2022/09/24 | 852 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex -2022/09/24 | 84635 | macros/latex/contrib/wargame/source/wargame.dtx 2022/09/24 | 8419 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex -2022/09/24 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx -2022/09/24 | 8133 | macros/latex/contrib/wargame/source/hex/terrain.dtx -2022/09/24 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx -2022/09/24 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx 2022/09/24 | 7169 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex 2022/09/24 | 7142 | macros/latex/contrib/jobname-suffix/jobname-suffix.tex -2022/09/24 | 7048 | systems/texlive/tlnet/archive/udes-genie-these.r64491.tar.xz -2022/09/24 | 6966 | macros/latex/contrib/wargame/source/wargame.ins 2022/09/24 | 67504 | systems/texlive/tlnet/archive/bibtexu.doc.r64491.tar.xz 2022/09/24 | 6716 | macros/latex/contrib/udes-genie-these/references.bib 2022/09/24 | 6712 | systems/texlive/tlnet/archive/ut-thesis.source.r64491.tar.xz 2022/09/24 | 66426 | macros/latex/contrib/crefthe.zip -2022/09/24 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty 2022/09/24 | 65997 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx -2022/09/24 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx 2022/09/24 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r64491.tar.xz -2022/09/24 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx 2022/09/24 | 624 | systems/texlive/tlnet/archive/bibtexu.r64491.tar.xz -2022/09/24 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx -2022/09/24 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx 2022/09/24 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r64491.tar.xz 2022/09/24 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r64487.tar.xz -2022/09/24 | 583710 | macros/latex/contrib/wargame/doc/tutorial/game.pdf -2022/09/24 | 5831656 | systems/texlive/tlnet/install-tl-unx.tar.gz 2022/09/24 | 5784 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex 2022/09/24 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r64491.tar.xz 2022/09/24 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r64491.tar.xz -2022/09/24 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex 2022/09/24 | 557856 | graphics/pgf/contrib/tikz-ext.zip 2022/09/24 | 5465 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex 2022/09/24 | 53458 | macros/latex/contrib/crefthe/crefthe-doc.pdf 2022/09/24 | 531 | macros/latex/contrib/jobname-suffix/README.md 2022/09/24 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r64491.tar.xz 2022/09/24 | 525958 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf -2022/09/24 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx 2022/09/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r64491.tar.xz 2022/09/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r64491.tar.xz -2022/09/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2022/09/24 | 4736 | macros/latex/contrib/semantex/stripsemantex.sty -2022/09/24 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx -2022/09/24 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx -2022/09/24 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx -2022/09/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/09/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2022/09/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/09/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc -2022/09/24 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx -2022/09/24 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx -2022/09/24 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex 2022/09/24 | 439023 | language/sanskrit/sktdoc.pdf 2022/09/24 | 439023 | language/sanskrit/ps-type1/sktdoc.pdf 2022/09/24 | 437856 | macros/latex/contrib/jobname-suffix/jobname-suffix.pdf -2022/09/24 | 432794 | macros/latex/contrib/wargame/doc/compat.pdf -2022/09/24 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64481.tar.xz 2022/09/24 | 415160 | systems/texlive/tlnet/archive/hyperref.source.r64491.tar.xz -2022/09/24 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx -2022/09/24 | 40592 | macros/latex/contrib/wargame/source/util/core.dtx 2022/09/24 | 4047 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex 2022/09/24 | 399604 | systems/texlive/tlnet/archive/bibtex.doc.r64491.tar.xz 2022/09/24 | 397 | macros/latex/contrib/udes-genie-these/symboles.tex 2022/09/24 | 397503 | macros/latex/contrib/semantex/semantex.pdf -2022/09/24 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx 2022/09/24 | 39184 | systems/texlive/tlnet/archive/tkz-euclide.r64491.tar.xz -2022/09/24 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx -2022/09/24 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx 2022/09/24 | 3680204 | systems/texlive/tlnet/archive/hyperref.doc.r64491.tar.xz 2022/09/24 | 3661 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex -2022/09/24 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx 2022/09/24 | 3638749 | install/fonts/tinos.tds.zip 2022/09/24 | 360716 | systems/texlive/tlnet/archive/asymptote.r64491.tar.xz 2022/09/24 | 35457 | support/texfot.zip @@ -226,19 +415,13 @@ 2022/09/24 | 33168 | systems/texlive/tlnet/archive/bibtex8.doc.r64491.tar.xz 2022/09/24 | 32363 | support/texfot/texfot.pdf 2022/09/24 | 322096 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r64491.tar.xz -2022/09/24 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx -2022/09/24 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx 2022/09/24 | 3179 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex 2022/09/24 | 3170 | macros/latex/contrib/jobname-suffix/jobname-suffix.sty -2022/09/24 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx 2022/09/24 | 298118 | macros/latex/contrib/semantex/semantex.sty 2022/09/24 | 2962 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex 2022/09/24 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r64491.tar.xz 2022/09/24 | 2904 | macros/latex/contrib/udes-genie-these/document.tex -2022/09/24 | 2898217 | install/macros/latex/contrib/wargame.tds.zip -2022/09/24 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx 2022/09/24 | 284 | macros/latex/contrib/udes-genie-these/acronymes.tex -2022/09/24 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx 2022/09/24 | 2796 | macros/latex/contrib/crefthe/README.md 2022/09/24 | 2692 | systems/texlive/tlnet/archive/colorframed.r64491.tar.xz 2022/09/24 | 2672 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex @@ -246,114 +429,92 @@ 2022/09/24 | 2632 | systems/texlive/tlnet/archive/ut-thesis.r64491.tar.xz 2022/09/24 | 2593 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex 2022/09/24 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r64491.tar.xz -2022/09/24 | 25516589 | systems/texlive/tlnet/install-tl.zip -2022/09/24 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx -2022/09/24 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx 2022/09/24 | 244224 | systems/texlive/tlnet/archive/citation-style-language.doc.r64491.tar.xz -2022/09/24 | 2411336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2022/09/24 | 2383368 | systems/texlive/tlnet/archive/asymptote.doc.r64491.tar.xz 2022/09/24 | 23704 | systems/texlive/tlnet/archive/colorframed.doc.r64491.tar.xz -2022/09/24 | 2311 | macros/latex/contrib/wargame/source/hex/core.dtx -2022/09/24 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx -2022/09/24 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx -2022/09/24 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx -2022/09/24 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx -2022/09/24 | 20437483 | systems/texlive/tlnet/install-tl-windows.exe -2022/09/24 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx 2022/09/24 | 1962 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins -2022/09/24 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx 2022/09/24 | 1938380 | systems/texlive/tlnet/archive/simpleicons.doc.r64491.tar.xz 2022/09/24 | 1936970 | language/sanskrit.zip 2022/09/24 | 192 | macros/latex/contrib/udes-genie-these/merci.tex -2022/09/24 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx 2022/09/24 | 19106 | macros/latex/contrib/crefthe/LICENSE 2022/09/24 | 186 | macros/latex/contrib/udes-genie-these/resume-francais.tex -2022/09/24 | 184481 | macros/latex/contrib/wargame/doc/symbols.pdf -2022/09/24 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx 2022/09/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r64491.tar.xz -2022/09/24 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx 2022/09/24 | 181088 | macros/latex/contrib/semantex/semantex.tex -2022/09/24 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx -2022/09/24 | 17656758 | systems/texlive/tlnet/tlpkg/texlive.tlpdb 2022/09/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r64491.tar.xz 2022/09/24 | 170472 | systems/texlive/tlnet/archive/media4svg.doc.r64491.tar.xz 2022/09/24 | 1689 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex 2022/09/24 | 1660 | macros/latex/contrib/semantex/README.md 2022/09/24 | 165 | macros/latex/contrib/udes-genie-these/resume-anglais.tex -2022/09/24 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx 2022/09/24 | 1622 | fonts/tinos/README -2022/09/24 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx 2022/09/24 | 15696 | support/texfot/texfot.pl -2022/09/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 2022/09/24 | 1535 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex -2022/09/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 2022/09/24 | 151888 | install/macros/latex/contrib/udes-genie-these.tds.zip -2022/09/24 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx -2022/09/24 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx 2022/09/24 | 14880 | systems/texlive/tlnet/archive/bibtex.r64491.tar.xz -2022/09/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/09/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2022/09/24 | 144090 | macros/latex/contrib/udes-genie-these.zip -2022/09/24 | 14095 | macros/latex/contrib/wargame/doc/tutorial/export.tex 2022/09/24 | 1408 | macros/latex/contrib/udes-genie-these/README.md 2022/09/24 | 138448 | systems/texlive/tlnet/archive/ut-thesis.doc.r64491.tar.xz -2022/09/24 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64491.tar.xz -2022/09/24 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx -2022/09/24 | 132160 | macros/latex/contrib/wargame/source/utils/export.py -2022/09/24 | 1308051 | macros/latex/contrib/wargame/doc/wargame.pdf 2022/09/24 | 13003 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex 2022/09/24 | 129716 | systems/texlive/tlnet/archive/citation-style-language.r64491.tar.xz 2022/09/24 | 12883 | macros/latex/contrib/crefthe/crefthe-doc.tex 2022/09/24 | 1274 | fonts/tinos/latex/tinos.sty -2022/09/24 | 12639 | macros/latex/contrib/wargame/source/chit/misc.dtx 2022/09/24 | 12605 | macros/latex/contrib/crefthe/crefthe.sty -2022/09/24 | 1254 | macros/latex/contrib/wargame/doc/tutorial/README.md 2022/09/24 | 124734 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf 2022/09/24 | 12448600 | systems/texlive/tlnet/archive/tlgs.win32.r64483.tar.xz 2022/09/24 | 12400 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex -2022/09/24 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx -2022/09/24 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx -2022/09/24 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx -2022/09/24 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64491.tar.xz 2022/09/24 | 1165688 | systems/texlive/tlnet/archive/tkz-euclide.doc.r64491.tar.xz 2022/09/24 | 11644 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib 2022/09/24 | 1160 | language/sanskrit/build-ctan-dist.sh -2022/09/24 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx -2022/09/24 | 113652 | systems/texlive/tlnet/archive/texlive-scripts.r64481.tar.xz 2022/09/24 | 113122 | language/sanskrit/skt.c -2022/09/24 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx 2022/09/24 | 10740 | systems/texlive/tlnet/archive/graphics-def.r64487.tar.xz -2022/09/24 | 1054 | macros/latex/contrib/wargame/doc/tutorial/Makefile 2022/09/24 | 1053 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex -2022/09/24 | 10300 | macros/latex/contrib/wargame/source/utils/svg2tikz.py -2022/09/24 | 10164 | macros/latex/contrib/wargame/README.md -2022/09/24 | 10164 | macros/latex/contrib/wargame/doc/README.md -2022/09/24 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx +2022/09/23 | 99 | macros/latex-dev/base/ltpara-code.tex +2022/09/23 | 9926 | macros/latex-dev/base/ltnews21.tex 2022/09/23 | 982712 | systems/texlive/tlnet/archive/eplain.doc.r64476.tar.xz +2022/09/23 | 9779 | macros/latex-dev/base/format.ins +2022/09/23 | 96 | macros/latex-dev/base/doc-code.tex 2022/09/23 | 96842 | systems/win32/miktex/tm/packages/chemobabel__source.tar.lzma +2022/09/23 | 9557 | macros/latex-dev/base/ltcntrl.dtx 2022/09/23 | 953092 | systems/texlive/tlnet/archive/tex4ht.r64479.tar.xz +2022/09/23 | 9493 | macros/latex-dev/required/tools/shellesc.dtx +2022/09/23 | 9401 | macros/latex-dev/base/source2edoc.cls +2022/09/23 | 9395 | macros/latex-dev/base/syntonly.dtx 2022/09/23 | 9389 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex +2022/09/23 | 9345 | macros/latex-dev/base/preload.dtx 2022/09/23 | 92646 | systems/win32/miktex/tm/packages/luatruthtable__doc.tar.lzma +2022/09/23 | 92280 | macros/latex-dev/base/utf8ienc.dtx 2022/09/23 | 9201 | macros/latex/contrib/graphics-def/dvisvgm.def 2022/09/23 | 913 | macros/latex/contrib/media4svg/ChangeLog 2022/09/23 | 91060 | systems/win32/miktex/tm/packages/hyperref.tar.lzma +2022/09/23 | 9068 | macros/latex-dev/base/lppl-1-0.txt +2022/09/23 | 90660 | macros/latex-dev/base/lttextcomp.dtx 2022/09/23 | 904 | biblio/citation-style-language/citeproc-node-group.lua 2022/09/23 | 9049 | systems/win32/miktex/tm/packages/qrbill.tar.lzma 2022/09/23 | 903644 | systems/texlive/tlnet/archive/proflycee.doc.r64471.tar.xz 2022/09/23 | 9031 | systems/win32/miktex/tm/packages/newpax.tar.lzma +2022/09/23 | 8976 | macros/latex-dev/required/tools/rawfonts.dtx +2022/09/23 | 89727 | macros/latex-dev/base/slides.dtx +2022/09/23 | 8970 | macros/latex-dev/base/ltnews17.tex 2022/09/23 | 894756 | install/fonts/overlock.tds.zip 2022/09/23 | 8903 | macros/latex/contrib/media4svg/example/beamer-example.tex 2022/09/23 | 87698 | systems/win32/miktex/tm/packages/proflycee__source.tar.lzma +2022/09/23 | 8731 | macros/latex-dev/base/ltthm.dtx 2022/09/23 | 872966 | systems/win32/miktex/tm/packages/babel__doc.tar.lzma 2022/09/23 | 872954 | fonts/overlock.zip 2022/09/23 | 871510 | systems/win32/miktex/tm/packages/verifiche__doc.tar.lzma +2022/09/23 | 8632 | macros/latex-dev/required/tools/showkeys-2014-10-28.sty +2022/09/23 | 8626 | macros/latex-dev/base/oldlfont.dtx +2022/09/23 | 85858 | macros/latex-dev/base/ltdefns.dtx 2022/09/23 | 85558 | systems/win32/miktex/tm/packages/garamond-libre__doc.tar.lzma 2022/09/23 | 85106 | systems/win32/miktex/tm/packages/qrbill__doc.tar.lzma 2022/09/23 | 8425 | biblio/citation-style-language/citeproc-context.lua +2022/09/23 | 84215 | macros/latex-dev/base/ltfssini.dtx 2022/09/23 | 841686 | systems/win32/miktex/tm/packages/bithesis__doc.tar.lzma +2022/09/23 | 8367 | macros/latex-dev/base/ltnews.tex 2022/09/23 | 8297 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex +2022/09/23 | 82481 | macros/latex-dev/base/ltfssbas.dtx 2022/09/23 | 8210524 | systems/texlive/tlnet/archive/oberdiek.doc.r64463.tar.xz 2022/09/23 | 819051 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma +2022/09/23 | 818922 | macros/latex-dev/base/ltshipout-code.pdf 2022/09/23 | 8165296 | systems/win32/miktex/tm/packages/oberdiek__doc.tar.lzma 2022/09/23 | 8154 | systems/win32/miktex/tm/packages/photobook__source.tar.lzma 2022/09/23 | 8128 | biblio/citation-style-language/elsevier-harvard.csl @@ -361,119 +522,253 @@ 2022/09/23 | 81140 | systems/win32/miktex/tm/packages/tkz-euclide__source.tar.lzma 2022/09/23 | 809146 | systems/win32/miktex/tm/packages/jsclasses__doc.tar.lzma 2022/09/23 | 8052 | biblio/citation-style-language/american-political-science-association.csl +2022/09/23 | 803118 | macros/latex-dev/base/ltfilehook-code.pdf +2022/09/23 | 80052 | macros/latex-dev/base/ltshipout.dtx 2022/09/23 | 7999 | systems/win32/miktex/tm/packages/abspos__source.tar.lzma 2022/09/23 | 799705 | systems/win32/miktex/tm/packages/chemobabel__doc.tar.lzma 2022/09/23 | 7934 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex 2022/09/23 | 7783 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex 2022/09/23 | 7749 | systems/win32/miktex/tm/packages/pagegrid__source.tar.lzma +2022/09/23 | 76397 | macros/latex-dev/required/tools/longtable.dtx +2022/09/23 | 755152 | macros/latex-dev/base/doc.pdf +2022/09/23 | 7524 | macros/latex-dev/base/ltxguide.cls +2022/09/23 | 75111 | macros/latex-dev/base/ltfssdcl.dtx 2022/09/23 | 7433 | systems/win32/miktex/tm/packages/hereapplies__source.tar.lzma 2022/09/23 | 7368 | systems/texlive/tlnet/archive/pagegrid.source.r64470.tar.xz +2022/09/23 | 73672 | macros/latex-dev/required/tools/tools-overview.pdf 2022/09/23 | 735522 | systems/win32/miktex/tm/packages/l3build__doc.tar.lzma +2022/09/23 | 7340097 | install/macros/latex-dev/required/latex-tools-dev.tds.zip 2022/09/23 | 7321 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex 2022/09/23 | 7308 | biblio/citation-style-language/citeproc-node-choose.lua 2022/09/23 | 7287 | systems/win32/miktex/tm/packages/udes-genie-these.tar.lzma 2022/09/23 | 728796 | systems/win32/miktex/tm/packages/quattrocento.tar.lzma +2022/09/23 | 72475 | macros/latex-dev/base/ltfsstrc.dtx +2022/09/23 | 7221 | macros/latex-dev/base/ltnews20.tex +2022/09/23 | 7216 | macros/latex-dev/base/exscale.dtx +2022/09/23 | 72131 | macros/latex-dev/required/tools/verbatim.dtx +2022/09/23 | 7200 | macros/latex-dev/base/sample2e.tex 2022/09/23 | 7195682 | systems/win32/miktex/tm/packages/garamond-libre.tar.lzma +2022/09/23 | 719285 | macros/latex-dev/base/ltcmdhooks-code.pdf 2022/09/23 | 7180 | systems/texlive/tlnet/archive/abspos.source.r64465.tar.xz -2022/09/23 | 7157 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2022/09/23 | 715934 | macros/latex-dev/base/ltmarks-code.pdf 2022/09/23 | 713937 | systems/win32/miktex/tm/packages/babel__source.tar.lzma +2022/09/23 | 7104 | macros/latex-dev/base/alltt.dtx +2022/09/23 | 7029 | macros/latex-dev/base/ltnews13.tex +2022/09/23 | 701768 | macros/latex-dev/base/lthooks-doc.pdf 2022/09/23 | 69907 | biblio/citation-style-language/apa.csl 2022/09/23 | 695025 | systems/win32/miktex/tm/packages/librecaslon.tar.lzma +2022/09/23 | 69315 | macros/latex-dev/base/clsguide.tex +2022/09/23 | 69002 | macros/latex-dev/base/ltpictur.dtx +2022/09/23 | 68732 | macros/latex-dev/base/usrguide-historic.tex 2022/09/23 | 6837 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex 2022/09/23 | 679580 | systems/texlive/tlnet/archive/fontname.doc.r64477.tar.xz 2022/09/23 | 6790 | systems/win32/miktex/tm/packages/pdfcol__source.tar.lzma +2022/09/23 | 6789 | macros/latex-dev/required/tools/delarray.dtx 2022/09/23 | 6765 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex -2022/09/23 | 6760 | systems/texlive/tlnet/archive/collection-latexextra.r64469.tar.xz +2022/09/23 | 6760 | macros/latex-dev/base/slides.ins +2022/09/23 | 67401 | macros/latex-dev/base/ltluatex.dtx +2022/09/23 | 67351 | macros/latex-dev/base/ltfilehook.dtx +2022/09/23 | 6709 | macros/latex-dev/base/latexsym.dtx +2022/09/23 | 667444 | macros/latex-dev/base/ltpara-code.pdf 2022/09/23 | 665 | fonts/simpleicons/README.md 2022/09/23 | 6648 | systems/win32/miktex/tm/packages/langnames__source.tar.lzma 2022/09/23 | 6591 | fonts/plex/latex/plex-sans.sty 2022/09/23 | 6576 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex 2022/09/23 | 6448 | systems/texlive/tlnet/archive/pdfcol.source.r64469.tar.xz +2022/09/23 | 6424 | macros/latex-dev/base/ltnews14.tex +2022/09/23 | 6357 | macros/latex-dev/base/newlfont.dtx 2022/09/23 | 6357 | macros/latex/contrib/colorframed/colorframed.sty 2022/09/23 | 634128 | systems/win32/miktex/tm/packages/atkinson__doc.tar.lzma +2022/09/23 | 63280 | macros/latex-dev/base/letter.dtx +2022/09/23 | 63132 | macros/latex-dev/base/ltmarks.dtx 2022/09/23 | 6283 | biblio/citation-style-language/citeproc-node-sort.lua 2022/09/23 | 6282 | macros/latex/contrib/graphics-def/dvips.def +2022/09/23 | 62388 | macros/latex-dev/required/tools/changes.txt +2022/09/23 | 6218 | macros/latex-dev/required/tools/xr.dtx +2022/09/23 | 6213 | macros/latex-dev/base/ltmeta.dtx 2022/09/23 | 61818 | biblio/citation-style-language/citeproc-engine.lua 2022/09/23 | 617 | biblio/citation-style-language/citeproc-lua.1 +2022/09/23 | 61565 | macros/latex-dev/required/tools/bm.dtx +2022/09/23 | 6155 | macros/latex-dev/base/ltpar.dtx 2022/09/23 | 6100 | biblio/citation-style-language/citeproc-node-locale.lua +2022/09/23 | 6047 | macros/latex-dev/base/latexrelease.ins 2022/09/23 | 6047 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty +2022/09/23 | 60321 | macros/latex-dev/base/fontdef.dtx 2022/09/23 | 601452 | systems/win32/miktex/tm/packages/exam-zh__source.tar.lzma +2022/09/23 | 5986 | macros/latex-dev/base/ltnews15.tex 2022/09/23 | 5982 | macros/latex/contrib/media4svg/README.md +2022/09/23 | 59499 | macros/latex-dev/base/ltplain.dtx 2022/09/23 | 594403 | install/biblio/citation-style-language.tds.zip 2022/09/23 | 591448 | biblio/citation-style-language.zip +2022/09/23 | 58933 | macros/latex-dev/base/ltfiles.dtx +2022/09/23 | 58745 | macros/latex-dev/base/ltmiscen.dtx +2022/09/23 | 586305 | macros/latex-dev/base/ltmarks-doc.pdf +2022/09/23 | 5859 | macros/latex-dev/base/ltidxglo.dtx +2022/09/23 | 58551 | macros/latex-dev/base/ltfssaxes.dtx +2022/09/23 | 5825 | macros/latex-dev/base/ltnews10.tex 2022/09/23 | 58109 | systems/win32/miktex/tm/packages/newpax__doc.tar.lzma +2022/09/23 | 5791 | macros/latex-dev/required/tools/somedefs.dtx +2022/09/23 | 5775 | macros/latex-dev/base/ltnews16.tex 2022/09/23 | 577125 | systems/win32/miktex/tm/packages/librebaskerville.tar.lzma +2022/09/23 | 5750608 | macros/latex-dev/base/source2e.pdf +2022/09/23 | 5732 | macros/latex-dev/base/ltnews08.tex 2022/09/23 | 57289 | systems/win32/miktex/tm/packages/jsclasses__source.tar.lzma +2022/09/23 | 5714 | macros/latex-dev/base/inputenc.ins +2022/09/23 | 5699 | macros/latex-dev/base/ltnews05.tex 2022/09/23 | 569988 | systems/win32/miktex/tm/packages/calculator__doc.tar.lzma 2022/09/23 | 5696 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex +2022/09/23 | 5680 | macros/latex-dev/required/tools/tools.ins +2022/09/23 | 5678 | macros/latex-dev/base/ltnews04.tex +2022/09/23 | 5671 | macros/latex-dev/base/ltnews27.tex 2022/09/23 | 566213 | systems/win32/miktex/tm/packages/asmeconf__doc.tar.lzma 2022/09/23 | 5657 | systems/win32/miktex/tm/packages/blowup__source.tar.lzma +2022/09/23 | 563691 | macros/latex-dev/base/ltshipout-doc.pdf +2022/09/23 | 563132 | macros/latex-dev/base/ltnews35.pdf +2022/09/23 | 560611 | macros/latex-dev/base/classes.pdf +2022/09/23 | 560308 | macros/latex-dev/base/ltpara-doc.pdf 2022/09/23 | 5593947 | systems/win32/miktex/tm/packages/cormorantgaramond.tar.lzma +2022/09/23 | 5588 | macros/latex-dev/base/ltnews25.tex +2022/09/23 | 5576 | macros/latex-dev/base/ltnews07.tex +2022/09/23 | 5574 | macros/latex-dev/base/ltnews12.tex +2022/09/23 | 55687 | macros/latex-dev/base/ltfloat.dtx +2022/09/23 | 5544 | macros/latex-dev/base/ltnews06.tex +2022/09/23 | 5529 | macros/latex-dev/base/ltnews11.tex +2022/09/23 | 5509 | macros/latex-dev/base/graphpap.dtx 2022/09/23 | 5502 | systems/win32/miktex/tm/packages/hereapplies.tar.lzma 2022/09/23 | 5498 | biblio/citation-style-language/citeproc-node-text.lua 2022/09/23 | 549204 | systems/win32/miktex/tm/packages/librebodoni.tar.lzma +2022/09/23 | 547986 | macros/latex-dev/base/ltfilehook-doc.pdf +2022/09/23 | 5462 | macros/latex-dev/base/ltnews02.tex +2022/09/23 | 546153 | macros/latex-dev/base/ltnews32.pdf 2022/09/23 | 545602 | systems/win32/miktex/tm/packages/biblatex-philosophy__doc.tar.lzma +2022/09/23 | 5451 | macros/latex-dev/base/ltnews09.tex 2022/09/23 | 5411084 | systems/win32/miktex/tm/packages/merriweather.tar.lzma 2022/09/23 | 5390 | systems/win32/miktex/tm/packages/verifiche.tar.lzma +2022/09/23 | 5369 | macros/latex-dev/base/ltnews03.tex 2022/09/23 | 5343 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex +2022/09/23 | 53167 | macros/latex-dev/required/tools/calc.dtx 2022/09/23 | 5308 | systems/texlive/tlnet/archive/blowup.source.r64466.tar.xz +2022/09/23 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx 2022/09/23 | 5288 | biblio/citation-style-language/nature.csl +2022/09/23 | 52813 | macros/latex-dev/base/encguide.tex +2022/09/23 | 5273 | macros/latex-dev/base/cmextra.ins +2022/09/23 | 52710 | macros/latex-dev/base/lb2.err +2022/09/23 | 526372 | macros/latex-dev/base/ltnews31.pdf +2022/09/23 | 5246 | macros/latex-dev/base/ltnews01.tex 2022/09/23 | 52387 | systems/win32/miktex/tm/packages/kpfonts__source.tar.lzma +2022/09/23 | 522387 | macros/latex-dev/base/ltnews33.pdf +2022/09/23 | 521328 | macros/latex-dev/required/tools/multicol.pdf +2022/09/23 | 5211 | macros/latex-dev/required/tools/tools-overview.tex +2022/09/23 | 517838 | macros/latex-dev/base/fntguide.pdf +2022/09/23 | 517102 | macros/latex-dev/required/tools/array.pdf +2022/09/23 | 51606 | macros/latex-dev/base/ltpara.dtx 2022/09/23 | 515058 | systems/win32/miktex/tm/packages/lobster2.tar.lzma +2022/09/23 | 511917 | macros/latex-dev/base/ltnews30.pdf +2022/09/23 | 508096 | macros/latex-dev/base/ltnews34.pdf +2022/09/23 | 504627 | macros/latex-dev/base/docstrip.pdf +2022/09/23 | 5041 | macros/latex-dev/base/latexsym.ins 2022/09/23 | 5029 | biblio/citation-style-language/citeproc-cli.lua 2022/09/23 | 50119 | systems/win32/miktex/tm/packages/nwejm__source.tar.lzma +2022/09/23 | 49935 | macros/latex-dev/base/usrguide.tex 2022/09/23 | 49840 | systems/texlive/tlnet/archive/nwejm.source.r64462.tar.xz +2022/09/23 | 4959 | macros/latex-dev/required/tools/fileerr.dtx +2022/09/23 | 495767 | macros/latex-dev/base/ltnews36.pdf +2022/09/23 | 4945 | macros/latex-dev/base/lthyphen.dtx 2022/09/23 | 489 | macros/latex/contrib/graphics-def/README.md 2022/09/23 | 4835 | systems/win32/miktex/tm/packages/luatruthtable__source.tar.lzma 2022/09/23 | 4810795 | fonts/simpleicons.zip +2022/09/23 | 47896 | macros/latex-dev/base/lttab.dtx +2022/09/23 | 478781 | macros/latex-dev/base/ltcmdhooks-doc.pdf +2022/09/23 | 47773 | macros/latex-dev/base/ltfinal.dtx +2022/09/23 | 4757 | macros/latex-dev/base/ltlength.dtx 2022/09/23 | 47520 | biblio/citation-style-language/chicago-fullnote-bibliography.csl +2022/09/23 | 473895 | macros/latex-dev/base/usrguide.pdf 2022/09/23 | 46907 | biblio/citation-style-language/citeproc-bibtex-data.lua 2022/09/23 | 468 | systems/texlive/tlnet/archive/tds.r64477.tar.xz 2022/09/23 | 466283 | systems/win32/miktex/tm/packages/charissil__doc.tar.lzma 2022/09/23 | 4601 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex 2022/09/23 | 45970 | biblio/citation-style-language/chicago-note-bibliography.csl +2022/09/23 | 45712 | macros/latex-dev/base/ltboxes.dtx +2022/09/23 | 455126 | macros/latex-dev/base/ltnews29.pdf +2022/09/23 | 45240 | macros/latex-dev/base/ltspace.dtx +2022/09/23 | 44976 | macros/latex-dev/base/latexrelease.dtx 2022/09/23 | 44606 | biblio/citation-style-language/citeproc-output.lua 2022/09/23 | 444642 | systems/win32/miktex/tm/packages/abspos__doc.tar.lzma +2022/09/23 | 44410 | macros/latex-dev/base/cmfonts.fdd 2022/09/23 | 4436 | systems/win32/miktex/tm/packages/unicode-data__doc.tar.lzma 2022/09/23 | 443576 | systems/texlive/tlnet/archive/abspos.doc.r64465.tar.xz +2022/09/23 | 4390 | macros/latex-dev/base/ec.ins +2022/09/23 | 438515 | macros/latex-dev/base/usrguide-historic.pdf 2022/09/23 | 4379 | systems/win32/miktex/tm/packages/crossword.tar.lzma 2022/09/23 | 4375 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex +2022/09/23 | 43448 | macros/latex-dev/required/tools/theorem.dtx +2022/09/23 | 4324 | macros/latex-dev/base/cmfonts.ins 2022/09/23 | 43131 | macros/latex/contrib/media4svg/example/beamer-example-4.svg +2022/09/23 | 4298 | macros/latex-dev/base/ltalloc.dtx +2022/09/23 | 4273 | macros/latex-dev/base/docstrip.ins +2022/09/23 | 42708 | macros/latex-dev/base/changes.old.txt +2022/09/23 | 4254 | macros/latex-dev/base/newdc.ins 2022/09/23 | 42280 | systems/texlive/tlnet/archive/eplain.r64476.tar.xz +2022/09/23 | 4219 | macros/latex-dev/base/latex209.ins 2022/09/23 | 417656 | systems/win32/miktex/tm/packages/hereapplies__doc.tar.lzma +2022/09/23 | 4170 | macros/latex-dev/base/ltnews19.tex 2022/09/23 | 416827 | systems/win32/miktex/tm/packages/hyperref__source.tar.lzma 2022/09/23 | 416462 | systems/win32/miktex/tm/packages/merriweather__doc.tar.lzma +2022/09/23 | 41493 | macros/latex-dev/base/ltmath.dtx +2022/09/23 | 414419 | macros/latex-dev/base/clsguide.pdf 2022/09/23 | 4124 | systems/win32/miktex/tm/packages/ppt-slides.tar.lzma -2022/09/23 | 412240 | systems/texlive/tlnet/archive/semantex.doc.r64472.tar.xz 2022/09/23 | 4098823 | systems/win32/miktex/tm/packages/nwejm.tar.lzma 2022/09/23 | 40987 | systems/win32/miktex/tm/packages/stex.tar.lzma 2022/09/23 | 4089760 | systems/texlive/tlnet/archive/nwejm.r64462.tar.xz +2022/09/23 | 4087 | macros/latex-dev/base/classes.ins 2022/09/23 | 4085 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex +2022/09/23 | 4079 | macros/latex-dev/base/lablst.tex 2022/09/23 | 40704 | systems/texlive/tlnet/archive/oberdiek.r64463.tar.xz 2022/09/23 | 40584 | systems/win32/miktex/tm/packages/oberdiek.tar.lzma 2022/09/23 | 40542 | systems/win32/miktex/tm/packages/biblatex-philosophy__source.tar.lzma 2022/09/23 | 4054136 | systems/win32/miktex/tm/packages/bidi__doc.tar.lzma 2022/09/23 | 4049540 | systems/texlive/tlnet/archive/bidi.doc.r64474.tar.xz +2022/09/23 | 398798 | macros/latex-dev/required/tools/varioref.pdf 2022/09/23 | 3980 | biblio/citation-style-language/citeproc-latex.lua 2022/09/23 | 3978 | fonts/plex/latex/plex-serif.sty 2022/09/23 | 3975 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex +2022/09/23 | 39696 | macros/latex-dev/required/tools/ftnright.dtx 2022/09/23 | 396576 | systems/texlive/tlnet/archive/eplain.source.r64476.tar.xz +2022/09/23 | 3960 | macros/latex-dev/base/olddc.ins 2022/09/23 | 3948 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex +2022/09/23 | 391313 | macros/latex-dev/required/tools/longtable.pdf +2022/09/23 | 391068 | macros/latex-dev/base/changes.txt +2022/09/23 | 38961369 | install/macros/latex-dev/latex-base-dev.tds.zip 2022/09/23 | 38823 | systems/win32/miktex/tm/packages/tkz-euclide.tar.lzma +2022/09/23 | 38793 | macros/latex-dev/base/ltnews35.tex +2022/09/23 | 387505 | macros/latex-dev/required/tools/ftnright.pdf +2022/09/23 | 38730 | macros/latex-dev/base/latex209.dtx 2022/09/23 | 384 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOneZero.tfm 2022/09/23 | 38103 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma 2022/09/23 | 3803 | fonts/plex/latex/plex-mono.sty +2022/09/23 | 38028 | macros/latex-dev/base/ltnews18.pdf 2022/09/23 | 380209 | systems/win32/miktex/tm/packages/semantex__doc.tar.lzma +2022/09/23 | 379476 | macros/latex-dev/base/ltnews26.pdf +2022/09/23 | 3781 | macros/latex-dev/base/tulm.ins 2022/09/23 | 37682 | systems/win32/miktex/tm/packages/exam-zh.tar.lzma +2022/09/23 | 376643 | macros/latex-dev/base/ltnews28.pdf +2022/09/23 | 375518 | macros/latex-dev/base/slides.pdf +2022/09/23 | 3725 | macros/latex-dev/base/ltlogos.dtx 2022/09/23 | 3723 | systems/win32/miktex/tm/packages/pagegrid.tar.lzma +2022/09/23 | 370657 | macros/latex-dev/required/tools/calc.pdf 2022/09/23 | 369332 | systems/texlive/tlnet/archive/latex2man.doc.r64477.tar.xz 2022/09/23 | 3677108 | systems/win32/miktex/tm/packages/hyperref__doc.tar.lzma 2022/09/23 | 3659 | systems/win32/miktex/tm/packages/ppt-slides__source.tar.lzma 2022/09/23 | 3647 | systems/win32/miktex/tm/packages/beamertheme-tcolorbox__source.tar.lzma +2022/09/23 | 36152 | macros/latex-dev/base/ltlists.dtx 2022/09/23 | 35995 | systems/win32/miktex/tm/packages/l3build.tar.lzma +2022/09/23 | 35984 | macros/latex-dev/base/ltdirchk.dtx +2022/09/23 | 35875 | macros/latex-dev/required/tools/tabularx.dtx 2022/09/23 | 35744 | systems/win32/miktex/tm/packages/semantex__source.tar.lzma 2022/09/23 | 356375 | systems/win32/miktex/tm/packages/crumbs__doc.tar.lzma +2022/09/23 | 353663 | macros/latex-dev/base/utf8ienc.pdf 2022/09/23 | 35321 | systems/win32/miktex/tm/packages/bithesis__source.tar.lzma +2022/09/23 | 351963 | macros/latex-dev/required/tools/theorem.pdf 2022/09/23 | 3515 | systems/win32/miktex/tm/packages/chemobabel.tar.lzma 2022/09/23 | 34997 | systems/win32/miktex/tm/packages/xindex.tar.lzma 2022/09/23 | 3484 | systems/texlive/tlnet/archive/pagegrid.r64470.tar.xz @@ -482,51 +777,96 @@ 2022/09/23 | 3473 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex 2022/09/23 | 346245 | systems/win32/miktex/tm/packages/xindex__doc.tar.lzma 2022/09/23 | 344 | biblio/citation-style-language/citeproc.lua +2022/09/23 | 3434 | macros/latex-dev/base/makeindx.ins 2022/09/23 | 340482 | systems/win32/miktex/tm/packages/umtypewriter.tar.lzma +2022/09/23 | 3401 | macros/latex-dev/base/proc.ins +2022/09/23 | 33946 | macros/latex-dev/base/ltsect.dtx 2022/09/23 | 339113 | systems/win32/miktex/tm/packages/crossword__doc.tar.lzma +2022/09/23 | 33907 | macros/latex-dev/base/ltnews33.tex +2022/09/23 | 33863 | macros/latex-dev/required/tools/varioref-2016-02-16.sty +2022/09/23 | 3372 | macros/latex-dev/base/letter.ins +2022/09/23 | 337294 | macros/latex-dev/base/letter.pdf 2022/09/23 | 337202 | systems/win32/miktex/tm/packages/atkinson.tar.lzma 2022/09/23 | 33702 | biblio/citation-style-language/citeproc-node-names.lua +2022/09/23 | 3367 | macros/latex-dev/base/ltoutenc.ins 2022/09/23 | 33552 | systems/win32/miktex/tm/packages/librebaskerville__doc.tar.lzma +2022/09/23 | 3338 | macros/latex-dev/base/exscale.ins +2022/09/23 | 33239 | macros/latex-dev/base/ltnews32.tex 2022/09/23 | 3313 | fonts/overlock/latex/overlock.sty +2022/09/23 | 330746 | macros/latex-dev/required/tools/verbatim.pdf +2022/09/23 | 3284 | macros/latex-dev/required/tools/manifest.txt 2022/09/23 | 328427 | systems/win32/miktex/tm/packages/pagegrid__doc.tar.lzma +2022/09/23 | 3282 | macros/latex-dev/base/bugs.txt 2022/09/23 | 327708 | systems/texlive/tlnet/archive/pagegrid.doc.r64470.tar.xz 2022/09/23 | 326522 | systems/win32/miktex/tm/packages/csquotes__doc.tar.lzma 2022/09/23 | 32558 | biblio/citation-style-language/citation-style-language.sty 2022/09/23 | 32476 | systems/texlive/tlnet/archive/kpathsea.r64475.tar.xz +2022/09/23 | 323432 | macros/latex-dev/required/tools/bm.pdf +2022/09/23 | 32307 | macros/latex-dev/base/ltnews34.tex 2022/09/23 | 3212997 | systems/win32/miktex/tm/packages/charissil.tar.lzma +2022/09/23 | 32029 | macros/latex-dev/required/tools/layout.dtx 2022/09/23 | 31893 | systems/win32/miktex/tm/packages/librefranklin__doc.tar.lzma +2022/09/23 | 318919 | macros/latex-dev/base/ltluatex.pdf +2022/09/23 | 318587 | macros/latex-dev/base/ltnews20.pdf +2022/09/23 | 318204 | macros/latex-dev/base/inputenc.pdf +2022/09/23 | 3181 | macros/latex-dev/base/unpack.ins 2022/09/23 | 317834 | systems/win32/miktex/tm/packages/pdfcol__doc.tar.lzma +2022/09/23 | 317795 | macros/latex-dev/base/ltnews22.pdf 2022/09/23 | 317332 | systems/texlive/tlnet/archive/pdfcol.doc.r64469.tar.xz +2022/09/23 | 31646 | macros/latex-dev/required/tools/multicol-2019-10-01.sty 2022/09/23 | 3145287 | systems/win32/miktex/tm/packages/animate__doc.tar.lzma 2022/09/23 | 31366 | systems/win32/miktex/tm/packages/l3build__source.tar.lzma 2022/09/23 | 3111 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex 2022/09/23 | 310434 | macros/latex/contrib/media4svg/example/beamer-example-2.svg +2022/09/23 | 3100 | macros/latex-dev/base/README.md 2022/09/23 | 309030 | systems/win32/miktex/tm/packages/unicode-data.tar.lzma 2022/09/23 | 308639 | systems/win32/miktex/tm/packages/mintspirit__doc.tar.lzma 2022/09/23 | 308412 | systems/texlive/tlnet/archive/mintspirit.doc.r64461.tar.xz +2022/09/23 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty +2022/09/23 | 30428 | macros/latex-dev/base/ltnews31.tex 2022/09/23 | 303504 | systems/win32/miktex/tm/packages/oldstandard__doc.tar.lzma 2022/09/23 | 30276 | systems/win32/miktex/tm/packages/calculator__source.tar.lzma 2022/09/23 | 302028 | systems/texlive/tlnet/archive/oldstandard.doc.r64464.tar.xz 2022/09/23 | 3013 | systems/win32/miktex/tm/packages/pdfcol.tar.lzma +2022/09/23 | 30107 | macros/latex-dev/required/tools/showkeys.dtx 2022/09/23 | 3008405 | systems/win32/miktex/tm/packages/librefranklin.tar.lzma +2022/09/23 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty 2022/09/23 | 2993 | biblio/citation-style-language/citeproc-ir-node.lua 2022/09/23 | 2987 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex 2022/09/23 | 29856 | macros/latex/contrib/media4svg/media4svg.sty +2022/09/23 | 29712 | macros/latex-dev/required/tools/multicol-2017-04-11.sty 2022/09/23 | 294793 | systems/win32/miktex/tm/packages/blowup__doc.tar.lzma 2022/09/23 | 294208 | systems/texlive/tlnet/archive/blowup.doc.r64466.tar.xz 2022/09/23 | 29374 | systems/win32/miktex/tm/packages/asmeconf.tar.lzma 2022/09/23 | 2929181 | systems/win32/miktex/tm/packages/beamer__doc.tar.lzma +2022/09/23 | 29267 | macros/latex-dev/base/ltfntcmd.dtx +2022/09/23 | 292160 | macros/latex-dev/base/cmfonts.pdf 2022/09/23 | 2917 | systems/win32/miktex/tm/packages/blowup.tar.lzma +2022/09/23 | 290615 | macros/latex-dev/base/tlc2.pdf 2022/09/23 | 2901549 | systems/win32/miktex/tm/packages/cabin.tar.lzma +2022/09/23 | 2896 | macros/latex-dev/base/syntonly.ins 2022/09/23 | 2895 | systems/win32/TLW64/00README.TLW64 2022/09/23 | 28946 | systems/win32/miktex/tm/packages/photobook.tar.lzma +2022/09/23 | 2893 | macros/latex-dev/base/nfssfont.ins +2022/09/23 | 2892 | macros/latex-dev/base/graphpap.ins +2022/09/23 | 2892 | macros/latex-dev/base/fix-cm.ins +2022/09/23 | 2890 | macros/latex-dev/base/alltt.ins +2022/09/23 | 2888 | macros/latex-dev/base/ifthen.ins +2022/09/23 | 287733 | macros/latex-dev/base/fix-cm.pdf +2022/09/23 | 287073 | macros/latex-dev/required/tools/tabularx.pdf +2022/09/23 | 286598 | macros/latex-dev/base/ltnews23.pdf 2022/09/23 | 2841 | fonts/simpleicons/enc/simpleiconsOne.enc +2022/09/23 | 281906 | macros/latex-dev/base/latexrelease.pdf 2022/09/23 | 2802 | systems/win32/miktex/tm/packages/crumbs__source.tar.lzma 2022/09/23 | 2781 | biblio/citation-style-language/CHANGELOG.md 2022/09/23 | 2780 | systems/texlive/tlnet/archive/pdfcol.r64469.tar.xz 2022/09/23 | 274 | fonts/simpleicons/tex/usimpleiconsOneZero.fd 2022/09/23 | 2749 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex +2022/09/23 | 2728 | macros/latex-dev/base/ltpageno.dtx 2022/09/23 | 2726 | fonts/simpleicons/enc/simpleiconsEight.enc +2022/09/23 | 27122 | macros/latex-dev/base/ltxcheck.tex +2022/09/23 | 27069 | macros/latex-dev/base/lterror.dtx +2022/09/23 | 2705 | macros/latex-dev/base/idx.tex 2022/09/23 | 2692 | systems/texlive/tlnet/archive/blowup.r64466.tar.xz 2022/09/23 | 2682 | fonts/simpleicons/enc/simpleiconsFour.enc 2022/09/23 | 2681 | systems/win32/miktex/tm/packages/abspos.tar.lzma @@ -534,45 +874,74 @@ 2022/09/23 | 2655 | fonts/simpleicons/enc/simpleiconsTwo.enc 2022/09/23 | 2655 | biblio/citation-style-language/citeproc-node-label.lua 2022/09/23 | 2652978 | systems/win32/miktex/tm/packages/simpleicons.tar.lzma +2022/09/23 | 265290 | macros/latex-dev/base/ltnews24.pdf 2022/09/23 | 264 | fonts/simpleicons/tex/usimpleiconsThree.fd 2022/09/23 | 264 | fonts/simpleicons/tex/usimpleiconsSeven.fd 2022/09/23 | 264 | fonts/simpleicons/tex/usimpleiconsEight.fd 2022/09/23 | 26415 | macros/latex/contrib/colorframed.zip +2022/09/23 | 264112 | macros/latex-dev/base/cfgguide.pdf 2022/09/23 | 263820 | systems/win32/miktex/tm/packages/clicks__doc.tar.lzma 2022/09/23 | 2627 | fonts/simpleicons/enc/simpleiconsSeven.enc 2022/09/23 | 2621 | fonts/simpleicons/enc/simpleiconsFive.enc -2022/09/23 | 26172 | systems/texlive/tlnet/archive/semantex.r64472.tar.xz 2022/09/23 | 260804 | systems/texlive/tlnet/archive/tds.doc.r64477.tar.xz 2022/09/23 | 259 | fonts/simpleicons/tex/usimpleiconsNine.fd 2022/09/23 | 259 | fonts/simpleicons/tex/usimpleiconsFour.fd 2022/09/23 | 259 | fonts/simpleicons/tex/usimpleiconsFive.fd +2022/09/23 | 259969 | macros/latex-dev/required/tools/layout.pdf 2022/09/23 | 2594 | systems/win32/miktex/tm/packages/beamertheme-tcolorbox.tar.lzma 2022/09/23 | 2594725 | systems/win32/miktex/tm/packages/stex__doc.tar.lzma +2022/09/23 | 257804 | macros/latex-dev/base/modguide.pdf +2022/09/23 | 2576 | macros/latex-dev/required/tools/multicol.ins +2022/09/23 | 257314 | macros/latex-dev/base/cyrguide.pdf 2022/09/23 | 25715 | biblio/citation-style-language/csl-locales-ru-RU.xml +2022/09/23 | 257018 | macros/latex-dev/required/tools/xspace.pdf 2022/09/23 | 256293 | systems/win32/miktex/tm/packages/fixdif__doc.tar.lzma 2022/09/23 | 256227 | systems/win32/miktex/tm/packages/piton__doc.tar.lzma 2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsTwo.fd 2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsSix.fd 2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsOne.fd 2022/09/23 | 2544 | fonts/simpleicons/enc/simpleiconsThree.enc +2022/09/23 | 2538 | macros/latex-dev/required/tools/longtable.ins +2022/09/23 | 2538 | macros/latex-dev/required/tools/afterpage.ins +2022/09/23 | 2535 | macros/latex-dev/required/tools/tabularx.ins +2022/09/23 | 2531 | macros/latex-dev/required/tools/varioref.ins +2022/09/23 | 2524 | macros/latex-dev/required/tools/bm.ins 2022/09/23 | 2521 | fonts/simpleicons/enc/simpleiconsSix.enc +2022/09/23 | 252140 | macros/latex-dev/base/lb2.pdf +2022/09/23 | 251782 | macros/latex-dev/required/tools/showkeys.pdf +2022/09/23 | 25146 | macros/latex-dev/required/tools/trace.dtx +2022/09/23 | 250597 | macros/latex-dev/base/ltnews27.pdf 2022/09/23 | 2501 | fonts/simpleicons/enc/simpleiconsNine.enc 2022/09/23 | 2492594 | systems/win32/miktex/tm/packages/asmeconf__source.tar.lzma 2022/09/23 | 24803 | macros/latex/contrib/graphics-def.zip 2022/09/23 | 2452 | systems/texlive/tlnet/archive/abspos.r64465.tar.xz +2022/09/23 | 244885 | macros/latex-dev/base/ltnews21.pdf 2022/09/23 | 24466 | biblio/citation-style-language/csl-locales-bg-BG.xml 2022/09/23 | 243624 | systems/texlive/tlnet/archive/texdraw.doc.r64477.tar.xz 2022/09/23 | 24345 | biblio/citation-style-language/csl-locales-hi-IN.xml +2022/09/23 | 24286 | macros/latex-dev/base/ltcounts.dtx +2022/09/23 | 242645 | macros/latex-dev/base/ltxdoc.pdf +2022/09/23 | 241 | macros/latex-dev/base/ltfilehook-doc.tex 2022/09/23 | 24118 | systems/win32/miktex/tm/packages/animate.tar.lzma +2022/09/23 | 241167 | macros/latex-dev/base/doc.dtx +2022/09/23 | 240 | macros/latex-dev/base/ltshipout-doc.tex 2022/09/23 | 240 | biblio/citation-style-language/citeproc-lua.lua 2022/09/23 | 2393 | systems/win32/miktex/tm/packages/garamond-libre__source.tar.lzma +2022/09/23 | 238 | macros/latex-dev/base/ltmarks-doc.tex +2022/09/23 | 238 | macros/latex-dev/base/lthooks-doc.tex +2022/09/23 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex 2022/09/23 | 2384 | systems/win32/miktex/tm/packages/crumbs.tar.lzma 2022/09/23 | 23682 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex +2022/09/23 | 23637 | macros/latex-dev/base/ltnews30.tex 2022/09/23 | 23553 | biblio/citation-style-language/csl-locales-lv-LV.xml 2022/09/23 | 2352 | fonts/plex/README +2022/09/23 | 23516 | macros/latex-dev/base/fix-cm.dtx 2022/09/23 | 23516111 | systems/win32/miktex/tm/packages/alegreya.tar.lzma +2022/09/23 | 234 | macros/latex-dev/base/ltpara-doc.tex 2022/09/23 | 2348 | systems/win32/miktex/tm/packages/luatruthtable.tar.lzma 2022/09/23 | 23467 | biblio/citation-style-language/csl-locales-th-TH.xml +2022/09/23 | 234191 | macros/latex-dev/base/slifonts.pdf +2022/09/23 | 23386 | macros/latex-dev/base/lppl.tex 2022/09/23 | 23360 | biblio/citation-style-language/csl-locales-it-IT.xml 2022/09/23 | 233557 | systems/win32/miktex/tm/packages/citation-style-language__doc.tar.lzma 2022/09/23 | 23241 | systems/win32/miktex/tm/packages/semantex.tar.lzma @@ -581,9 +950,12 @@ 2022/09/23 | 23079 | biblio/citation-style-language/chicago-author-date.csl 2022/09/23 | 230581 | systems/win32/miktex/tm/packages/cabin__doc.tar.lzma 2022/09/23 | 23024 | biblio/citation-style-language/csl-locales-el-GR.xml +2022/09/23 | 230031 | macros/latex-dev/base/ltnews19.pdf 2022/09/23 | 22953 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma 2022/09/23 | 227617 | biblio/citation-style-language/citation-style-language-doc.pdf 2022/09/23 | 22752 | biblio/citation-style-language/csl-locales-lt-LT.xml +2022/09/23 | 22720 | macros/latex-dev/base/cfgguide.tex +2022/09/23 | 227059 | macros/latex-dev/base/proc.pdf 2022/09/23 | 2268 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex 2022/09/23 | 22627 | biblio/citation-style-language/csl-locales-en-US.xml 2022/09/23 | 22542 | biblio/citation-style-language/csl-locales-pt-BR.xml @@ -591,20 +963,27 @@ 2022/09/23 | 224583 | systems/win32/miktex/tm/packages/ppt-slides__doc.tar.lzma 2022/09/23 | 22454 | biblio/citation-style-language/csl-locales-pt-PT.xml 2022/09/23 | 22434 | biblio/citation-style-language/csl-locales-es-MX.xml +2022/09/23 | 22410 | macros/latex-dev/base/ltxdoc.dtx 2022/09/23 | 224082 | systems/win32/miktex/tm/packages/stex__source.tar.lzma +2022/09/23 | 223831 | macros/latex-dev/base/alltt.pdf 2022/09/23 | 22358 | biblio/citation-style-language/csl-locales-nl-NL.xml 2022/09/23 | 22356 | biblio/citation-style-language/csl-locales-fr-FR.xml 2022/09/23 | 22337 | biblio/citation-style-language/csl-locales-fa-IR.xml 2022/09/23 | 22218 | biblio/citation-style-language/csl-locales-de-AT.xml +2022/09/23 | 2220 | macros/latex-dev/required/tools/indentfirst.dtx +2022/09/23 | 222076 | macros/latex-dev/required/tools/trace.pdf 2022/09/23 | 22157 | systems/win32/miktex/tm/packages/bithesis.tar.lzma 2022/09/23 | 22143 | biblio/citation-style-language/csl-locales-de-DE.xml 2022/09/23 | 22122 | biblio/citation-style-language/csl-locales-sr-RS.xml +2022/09/23 | 221211 | macros/latex-dev/base/ifthen.pdf 2022/09/23 | 2210 | systems/win32/miktex/tm/packages/clicks__source.tar.lzma 2022/09/23 | 22098 | biblio/citation-style-language/csl-locales-fr-CA.xml +2022/09/23 | 220834 | macros/latex-dev/required/tools/dcolumn.pdf 2022/09/23 | 21990 | biblio/citation-style-language/citeproc-util.lua 2022/09/23 | 2198824 | systems/win32/miktex/tm/packages/kpfonts.tar.lzma 2022/09/23 | 21966 | biblio/citation-style-language/csl-locales-km-KH.xml 2022/09/23 | 21941 | biblio/citation-style-language/csl-locales-mn-MN.xml +2022/09/23 | 219349 | macros/latex-dev/base/ltx3info.pdf 2022/09/23 | 21912 | systems/win32/miktex/tm/packages/jsclasses.tar.lzma 2022/09/23 | 21822 | biblio/citation-style-language/csl-locales-he-IL.xml 2022/09/23 | 21812 | biblio/citation-style-language/csl-locales-vi-VN.xml @@ -617,6 +996,8 @@ 2022/09/23 | 21579 | biblio/citation-style-language/csl-locales-cs-CZ.xml 2022/09/23 | 21576 | biblio/citation-style-language/csl-locales-cy-GB.xml 2022/09/23 | 21574 | biblio/citation-style-language/csl-locales-sk-SK.xml +2022/09/23 | 215684 | macros/latex-dev/base/lgc2.pdf +2022/09/23 | 215498 | macros/latex-dev/required/tools/enumerate.pdf 2022/09/23 | 2154055 | systems/win32/miktex/tm/packages/fira__doc.tar.lzma 2022/09/23 | 21512 | biblio/citation-style-language/csl-locales-eu.xml 2022/09/23 | 21482 | biblio/citation-style-language/csl-locales-ja-JP.xml @@ -637,97 +1018,179 @@ 2022/09/23 | 21301 | biblio/citation-style-language/csl-locales-nn-NO.xml 2022/09/23 | 21261 | biblio/citation-style-language/csl-locales-et-EE.xml 2022/09/23 | 21225 | biblio/citation-style-language/citeproc-bibtex.lua +2022/09/23 | 211770 | macros/latex-dev/base/lthooks.dtx 2022/09/23 | 2111 | fonts/overlock/README +2022/09/23 | 211180 | macros/latex-dev/base/nfssfont.pdf 2022/09/23 | 211089 | install/macros/latex/contrib/media4svg.tds.zip 2022/09/23 | 210888 | fonts/simpleicons/tex/simpleiconsglyphs-pdftex.tex 2022/09/23 | 209550 | macros/latex/contrib/media4svg.zip 2022/09/23 | 20747 | biblio/citation-style-language/csl-locales-uk-UA.xml 2022/09/23 | 207100 | fonts/simpleicons/tex/simpleiconsglyphs-xeluatex.tex +2022/09/23 | 20652 | macros/latex-dev/base/lgc2.err 2022/09/23 | 20503 | systems/win32/miktex/tm/packages/librebodoni__doc.tar.lzma +2022/09/23 | 204955 | macros/latex-dev/base/ltnews25.pdf +2022/09/23 | 204711 | macros/latex-dev/base/exscale.pdf +2022/09/23 | 20469 | macros/latex-dev/base/ltnews.cls 2022/09/23 | 20206 | macros/latex/contrib/media4svg/example/random.mp4 2022/09/23 | 20185 | systems/win32/miktex/tm/packages/marcellus__doc.tar.lzma +2022/09/23 | 200760 | macros/latex-dev/base/latexsym.pdf 2022/09/23 | 2005 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex 2022/09/23 | 1992 | systems/win32/miktex/tm/packages/fixdif.tar.lzma 2022/09/23 | 199155 | systems/win32/miktex/tm/packages/opencolor__doc.tar.lzma 2022/09/23 | 199047 | systems/win32/miktex/tm/packages/clearsans__doc.tar.lzma 2022/09/23 | 19817 | biblio/citation-style-language/csl-locales-ar.xml +2022/09/23 | 197738 | macros/latex-dev/required/tools/afterpage.pdf +2022/09/23 | 19677 | macros/latex-dev/base/ltkeys.dtx 2022/09/23 | 19478 | macros/latex/contrib/graphics-def/luatex.def 2022/09/23 | 19448 | macros/latex/contrib/graphics-def/pdftex.def 2022/09/23 | 19423 | biblio/citation-style-language/csl-locales-zh-TW.xml 2022/09/23 | 1939734 | systems/win32/miktex/tm/packages/simpleicons__doc.tar.lzma +2022/09/23 | 1937 | macros/latex-dev/base/minimal.cls 2022/09/23 | 1928929 | fonts/simpleicons/doc/simpleicons.pdf 2022/09/23 | 192405 | systems/win32/miktex/tm/packages/babel.tar.lzma +2022/09/23 | 191064 | macros/latex-dev/required/tools/delarray.pdf 2022/09/23 | 19056 | biblio/citation-style-language/csl-locales-zh-CN.xml +2022/09/23 | 19040 | macros/latex-dev/base/lppl.txt +2022/09/23 | 189680 | macros/latex-dev/base/syntonly.pdf +2022/09/23 | 189679 | macros/latex-dev/required/tools/hhline.pdf +2022/09/23 | 18944 | macros/latex-dev/base/ltnews29.tex 2022/09/23 | 18830 | macros/latex/contrib/colorframed/colorframed-doc.pdf +2022/09/23 | 187982 | macros/latex-dev/required/tools/fileerr.pdf +2022/09/23 | 18753 | macros/latex-dev/base/ifthen.dtx +2022/09/23 | 18711 | macros/latex-dev/base/ltexpl.dtx 2022/09/23 | 18583 | systems/win32/miktex/tm/packages/verifiche__source.tar.lzma 2022/09/23 | 18568 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex 2022/09/23 | 18460 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex +2022/09/23 | 184548 | macros/latex-dev/required/tools/multicol.dtx 2022/09/23 | 1844 | fonts/simpleicons/doc/simpleicons.tex +2022/09/23 | 18399 | macros/latex-dev/base/nfssfont.dtx 2022/09/23 | 18366 | systems/win32/miktex/tm/packages/csquotes.tar.lzma +2022/09/23 | 18363 | macros/latex-dev/base/ltxref.dtx +2022/09/23 | 18299 | macros/latex-dev/base/ltx3info.tex +2022/09/23 | 182935 | macros/latex-dev/base/ltcmd.dtx 2022/09/23 | 1825064 | fonts/simpleicons/opentype/SimpleIcons.otf +2022/09/23 | 182252 | macros/latex-dev/base/ltnews13.pdf 2022/09/23 | 1791 | systems/win32/miktex/tm/packages/opencolor.tar.lzma 2022/09/23 | 1791 | systems/win32/miktex/tm/packages/clicks.tar.lzma +2022/09/23 | 178723 | macros/latex-dev/base/ltoutput.dtx +2022/09/23 | 17856 | macros/latex-dev/required/tools/xspace.dtx 2022/09/23 | 178312 | systems/win32/miktex/tm/packages/marcellus.tar.lzma 2022/09/23 | 17804 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex 2022/09/23 | 1778643 | systems/win32/miktex/tm/packages/nicematrix__doc.tar.lzma +2022/09/23 | 17779 | macros/latex-dev/base/cyrguide.tex +2022/09/23 | 175929 | macros/latex-dev/required/tools/shellesc.pdf 2022/09/23 | 17499 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma +2022/09/23 | 174493 | macros/latex-dev/base/ltnews05.pdf +2022/09/23 | 17389 | macros/latex-dev/base/ltbibl.dtx 2022/09/23 | 17335 | macros/latex/contrib/media4svg/example/beamer-example-3.svg +2022/09/23 | 172867 | macros/latex-dev/base/tlc2.err 2022/09/23 | 1712797 | systems/win32/miktex/tm/packages/oldstandard.tar.lzma +2022/09/23 | 170878 | macros/latex-dev/base/lamport-manual.pdf +2022/09/23 | 170595 | macros/latex-dev/base/docstrip.dtx +2022/09/23 | 170452 | macros/latex-dev/base/ltnews14.pdf 2022/09/23 | 1702 | biblio/citation-style-language/citeproc-node-layout.lua 2022/09/23 | 1702308 | systems/texlive/tlnet/archive/oldstandard.r64464.tar.xz 2022/09/23 | 1700386 | fonts/simpleicons/type1/SimpleIcons.pfb +2022/09/23 | 169986 | macros/latex-dev/required/tools/xr.pdf +2022/09/23 | 1694 | macros/latex-dev/base/small2e.tex +2022/09/23 | 169425 | macros/latex-dev/base/ltnews10.pdf 2022/09/23 | 169048 | systems/win32/miktex/tm/packages/xindex__source.tar.lzma 2022/09/23 | 168046 | systems/win32/miktex/tm/packages/beamertheme-tcolorbox__doc.tar.lzma 2022/09/23 | 16802 | systems/win32/miktex/tm/packages/crossword__source.tar.lzma 2022/09/23 | 1675 | biblio/citation-style-language/citeproc-node-number.lua +2022/09/23 | 167572 | macros/latex-dev/required/tools/somedefs.pdf 2022/09/23 | 1673 | biblio/citation-style-language/README.md 2022/09/23 | 166850 | systems/win32/miktex/tm/packages/beamer.tar.lzma +2022/09/23 | 1664 | macros/latex-dev/required/tools/README.md +2022/09/23 | 166226 | macros/latex-dev/base/ltnews17.pdf +2022/09/23 | 165821 | macros/latex-dev/base/makeindx.pdf 2022/09/23 | 1657334 | systems/win32/miktex/tm/packages/csvsimple__doc.tar.lzma 2022/09/23 | 16533 | systems/win32/miktex/tm/packages/proflycee.tar.lzma +2022/09/23 | 16497 | macros/latex-dev/base/modguide.tex 2022/09/23 | 16400 | systems/texlive/tlnet/archive/proflycee.r64471.tar.xz +2022/09/23 | 162772 | macros/latex-dev/base/tulm.pdf +2022/09/23 | 161713 | macros/latex-dev/base/graphpap.pdf +2022/09/23 | 161519 | macros/latex-dev/base/ltnews01.pdf 2022/09/23 | 1612001 | systems/win32/miktex/tm/packages/kpfonts__doc.tar.lzma 2022/09/23 | 1609188 | systems/win32/miktex/tm/packages/nwejm__doc.tar.lzma 2022/09/23 | 1608828 | systems/texlive/tlnet/archive/nwejm.doc.r64462.tar.xz 2022/09/23 | 16054 | biblio/citation-style-language/modern-humanities-research-association.csl +2022/09/23 | 159802 | macros/latex-dev/base/ltnews02.pdf +2022/09/23 | 159347 | macros/latex-dev/base/ltnews03.pdf 2022/09/23 | 158788 | systems/win32/miktex/tm/packages/cormorantgaramond__doc.tar.lzma +2022/09/23 | 157954 | macros/latex-dev/required/tools/indentfirst.pdf +2022/09/23 | 15699 | macros/latex-dev/base/slifonts.fdd +2022/09/23 | 156556 | macros/latex-dev/base/ltnews12.pdf +2022/09/23 | 156236 | macros/latex-dev/base/classes.dtx 2022/09/23 | 15617 | biblio/citation-style-language/citeproc-node-style.lua 2022/09/23 | 1559 | fonts/simpleicons/tex/simpleicons.sty 2022/09/23 | 15528 | systems/texlive/tlnet/archive/texdraw.r64477.tar.xz +2022/09/23 | 155050 | macros/latex-dev/base/ltnews08.pdf 2022/09/23 | 15472187 | systems/win32/miktex/tm/packages/fira.tar.lzma 2022/09/23 | 15470 | systems/win32/miktex/tm/packages/qrbill__source.tar.lzma 2022/09/23 | 15427 | systems/win32/miktex/tm/packages/piton__source.tar.lzma 2022/09/23 | 15413 | biblio/citation-style-language/ieee.csl 2022/09/23 | 153951 | systems/win32/miktex/tm/packages/nicematrix__source.tar.lzma +2022/09/23 | 15306 | macros/latex-dev/base/source2e.tex +2022/09/23 | 152526 | macros/latex-dev/base/ltnews04.pdf 2022/09/23 | 1521 | macros/latex/contrib/colorframed/README.md +2022/09/23 | 15047 | macros/latex-dev/base/ltnews28.tex +2022/09/23 | 14967 | macros/latex-dev/base/ltnews36.tex 2022/09/23 | 148579 | systems/win32/miktex/tm/packages/quattrocento__doc.tar.lzma 2022/09/23 | 14847 | systems/win32/miktex/tm/packages/newpax__source.tar.lzma 2022/09/23 | 14833 | biblio/citation-style-language/citeproc-element.lua +2022/09/23 | 148294 | macros/latex-dev/base/ltoutenc.dtx 2022/09/23 | 148072 | systems/texlive/tlnet/archive/bidi.source.r64474.tar.xz 2022/09/23 | 148015 | systems/win32/miktex/tm/packages/bidi__source.tar.lzma 2022/09/23 | 14788 | macros/latex/contrib/graphics-def/xetex.def +2022/09/23 | 14786 | macros/latex-dev/base/ltvers.dtx 2022/09/23 | 1476 | biblio/citation-style-language/citeproc-nodes.lua +2022/09/23 | 146446 | macros/latex-dev/required/tools/fontsmpl.pdf +2022/09/23 | 146198 | macros/latex-dev/base/webcomp.pdf 2022/09/23 | 14556 | biblio/citation-style-language/citation-style-language-doc.tex 2022/09/23 | 14443 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex +2022/09/23 | 14421 | macros/latex-dev/base/lppl-1-2.txt 2022/09/23 | 14360021 | install/fonts/plex.tds.zip +2022/09/23 | 14341 | macros/latex-dev/base/lppl-1-1.txt +2022/09/23 | 143062 | macros/latex-dev/base/ltclass.dtx +2022/09/23 | 142861 | macros/latex-dev/base/ltnews06.pdf 2022/09/23 | 14251303 | fonts/plex.zip 2022/09/23 | 14223 | systems/win32/miktex/tm/packages/udes-genie-these__source.tar.lzma +2022/09/23 | 14091 | macros/latex-dev/base/ltpage.dtx 2022/09/23 | 14072 | systems/texlive/tlnet/archive/latex2man.r64477.tar.xz +2022/09/23 | 14072 | macros/latex-dev/required/tools/afterpage.dtx 2022/09/23 | 1401924 | systems/win32/miktex/tm/packages/exam-zh__doc.tar.lzma +2022/09/23 | 138963 | macros/latex-dev/required/tools/rawfonts.pdf +2022/09/23 | 138082 | macros/latex-dev/base/ltnews16.pdf 2022/09/23 | 138077 | systems/win32/miktex/tm/packages/langnames.tar.lzma +2022/09/23 | 137791 | macros/latex-dev/base/ltnews07.pdf +2022/09/23 | 13759 | macros/latex-dev/base/lamport-manual.err 2022/09/23 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r64479.tar.xz +2022/09/23 | 13589 | macros/latex-dev/base/proc.dtx 2022/09/23 | 13585 | biblio/citation-style-language/citeproc-node-date.lua +2022/09/23 | 1341 | macros/latex-dev/base/ltnews18.tex 2022/09/23 | 13272 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex 2022/09/23 | 1327019 | systems/win32/miktex/tm/packages/clearsans.tar.lzma +2022/09/23 | 132382 | macros/latex-dev/base/lppl.pdf +2022/09/23 | 1318126 | macros/latex-dev/base/encguide.pdf 2022/09/23 | 131655 | systems/win32/miktex/tm/packages/photobook__doc.tar.lzma 2022/09/23 | 131460 | systems/texlive/tlnet/archive/bidi.r64474.tar.xz 2022/09/23 | 131082 | systems/win32/miktex/tm/packages/bidi.tar.lzma +2022/09/23 | 130324 | macros/latex-dev/base/ltnews15.pdf 2022/09/23 | 12997 | systems/win32/miktex/tm/packages/biblatex-philosophy.tar.lzma +2022/09/23 | 129572 | macros/latex-dev/base/ltnews09.pdf +2022/09/23 | 128521 | macros/latex-dev/required/tools/array.dtx +2022/09/23 | 1279 | macros/latex-dev/base/legal.txt 2022/09/23 | 1275916 | systems/texlive/tlnet/archive/tex4ht.source.r64479.tar.xz 2022/09/23 | 1272265 | macros/latex/contrib/tkz/tkz-euclide.zip +2022/09/23 | 12709 | macros/latex-dev/required/tools/dcolumn.dtx 2022/09/23 | 127051 | systems/win32/miktex/tm/packages/citation-style-language.tar.lzma +2022/09/23 | 12559 | macros/latex-dev/required/tools/array-2020-02-10.sty 2022/09/23 | 125303 | fonts/simpleicons/doc/bindings.tex +2022/09/23 | 12520 | macros/latex-dev/base/testpage.tex 2022/09/23 | 12427 | systems/win32/miktex/tm/packages/fixdif__source.tar.lzma 2022/09/23 | 1236 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSeven.tfm +2022/09/23 | 12334 | macros/latex-dev/base/ltnews24.tex 2022/09/23 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsTwo.tfm 2022/09/23 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsThree.tfm 2022/09/23 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSix.tfm @@ -737,34 +1200,59 @@ 2022/09/23 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsEight.tfm 2022/09/23 | 12296 | macros/latex/contrib/graphics-def/dvipdfmx.def 2022/09/23 | 1228 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOne.tfm +2022/09/23 | 1225147 | macros/latex-dev/base/ltnews.pdf 2022/09/23 | 1224 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex +2022/09/23 | 12242 | macros/latex-dev/base/tulm.fdd +2022/09/23 | 12133 | macros/latex-dev/required/tools/longtable-2020-01-07.sty 2022/09/23 | 11958 | biblio/citation-style-language/vancouver.csl +2022/09/23 | 11749 | macros/latex-dev/required/tools/array-2016-10-06.sty 2022/09/23 | 117309 | systems/win32/miktex/tm/packages/udes-genie-these__doc.tar.lzma 2022/09/23 | 11550 | systems/win32/miktex/tm/packages/csvsimple.tar.lzma 2022/09/23 | 11538 | macros/latex/contrib/tkz/tkz-euclide/README.md 2022/09/23 | 1152 | systems/win32/miktex/tm/packages/umtypewriter__doc.tar.lzma 2022/09/23 | 115122 | systems/win32/miktex/tm/packages/langnames__doc.tar.lzma +2022/09/23 | 114350 | macros/latex-dev/required/tools/varioref.dtx 2022/09/23 | 11224 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg 2022/09/23 | 11209 | biblio/citation-style-language/modern-language-association.csl 2022/09/23 | 1119 | fonts/simpleicons/map/simpleicons.map +2022/09/23 | 111974 | macros/latex-dev/base/ltnews11.pdf 2022/09/23 | 1115627 | systems/win32/miktex/tm/packages/alegreya__doc.tar.lzma +2022/09/23 | 11148 | macros/latex-dev/required/tools/hhline.dtx +2022/09/23 | 11124 | macros/latex-dev/base/manifest.txt 2022/09/23 | 1109639 | macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf 2022/09/23 | 1109277 | systems/win32/miktex/tm/packages/mintspirit.tar.lzma 2022/09/23 | 11060 | biblio/citation-style-language/american-sociological-association.csl 2022/09/23 | 1105472 | systems/texlive/tlnet/archive/mintspirit.r64461.tar.xz 2022/09/23 | 11034 | biblio/citation-style-language/american-medical-association.csl +2022/09/23 | 1091718 | macros/latex-dev/base/lthooks-code.pdf 2022/09/23 | 108694 | systems/win32/miktex/tm/packages/oberdiek__source.tar.lzma 2022/09/23 | 1086908 | systems/win32/miktex/tm/packages/tkz-euclide__doc.tar.lzma 2022/09/23 | 108532 | systems/texlive/tlnet/archive/fontname.r64477.tar.xz 2022/09/23 | 108452 | systems/texlive/tlnet/archive/oberdiek.source.r64463.tar.xz +2022/09/23 | 108231 | macros/latex-dev/base/fntguide.tex 2022/09/23 | 108184 | systems/win32/miktex/tm/packages/librecaslon__doc.tar.lzma +2022/09/23 | 10798 | macros/latex-dev/base/ltnews26.tex +2022/09/23 | 10792 | macros/latex-dev/base/ltnews22.tex +2022/09/23 | 10791 | macros/latex-dev/base/ltnews23.tex +2022/09/23 | 1077609 | macros/latex-dev/base/doc-code.pdf +2022/09/23 | 10771 | macros/latex-dev/required/tools/fontsmpl.dtx 2022/09/23 | 10723 | biblio/citation-style-language/harvard-cite-them-right.csl +2022/09/23 | 106904 | macros/latex-dev/base/inputenc.dtx 2022/09/23 | 10687 | macros/latex/contrib/colorframed/colorframed-doc.tex 2022/09/23 | 10652 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex +2022/09/23 | 10644 | macros/latex-dev/required/tools/enumerate.dtx 2022/09/23 | 1061956 | systems/texlive/tlnet/archive/kpathsea.doc.r64475.tar.xz +2022/09/23 | 10601 | macros/latex-dev/base/makeindx.dtx +2022/09/23 | 105 | macros/latex-dev/base/ltfilehook-code.tex +2022/09/23 | 104 | macros/latex-dev/base/ltshipout-code.tex 2022/09/23 | 104889 | systems/win32/miktex/tm/packages/lobster2__doc.tar.lzma 2022/09/23 | 10463 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex 2022/09/23 | 10401 | systems/win32/miktex/tm/packages/calculator.tar.lzma +2022/09/23 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex +2022/09/23 | 10370 | macros/latex-dev/base/ltfsscmp.dtx +2022/09/23 | 102 | macros/latex-dev/base/ltmarks-code.tex +2022/09/23 | 102 | macros/latex-dev/base/lthooks-code.tex +2022/09/23 | 10251 | macros/latex-dev/base/webcomp.err 2022/09/23 | 10203 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex 2022/09/23 | 10019 | biblio/citation-style-language/american-chemical-society.csl 2022/09/22 | 968 | macros/latex/contrib/proflycee/doc/cap.csv @@ -1093,120 +1581,3 @@ 2022/09/20 | 1044489 | info/biblio/font.bib 2022/09/20 | 102215 | macros/latex/contrib/csvsimple/csvsimple-l3.tex 2022/09/20 | 10136 | indexing/xindex/lualatex/xindex-lapp.lua -2022/09/19 | 94352 | macros/latex/contrib/ppt-slides/socrates.jpg -2022/09/19 | 93393 | graphics/chemobabel/example-ja.pdf -2022/09/19 | 9128 | graphics/chemobabel/chemobabel.sty -2022/09/19 | 8372 | macros/latex/contrib/ppt-slides/ppt-slides.tex -2022/09/19 | 822 | fonts/kpfonts/README.txt -2022/09/19 | 80138 | graphics/chemobabel/images-for-doc.tar.gz -2022/09/19 | 797485 | install/fonts/lobster2.tds.zip -2022/09/19 | 787363 | fonts/lobster2.zip -2022/09/19 | 7785 | fonts/kpfonts/fonts/afm/jkplkbsc.afm -2022/09/19 | 7785 | fonts/kpfonts/fonts/afm/jkpkbsc.afm -2022/09/19 | 7354769 | fonts/kpfonts.zip -2022/09/19 | 7352 | fonts/kpfonts/fonts/afm/jkplkmsc.afm -2022/09/19 | 7352 | fonts/kpfonts/fonts/afm/jkpkmsc.afm -2022/09/19 | 73178 | fonts/kpfonts/latex/kpfonts.sty -2022/09/19 | 695 | macros/latex/contrib/blowup/blowup-ex5.tex -2022/09/19 | 693252 | systems/texlive/tlnet/archive/librecaslon.r64432.tar.xz -2022/09/19 | 651493 | graphics/chemobabel/chemobabel-ja.pdf -2022/09/19 | 5856 | macros/latex/contrib/ppt-slides/ppt-slides.sty -2022/09/19 | 5740 | fonts/kpfonts/fonts/afm/jkplbitc.afm -2022/09/19 | 5740 | fonts/kpfonts/fonts/afm/jkpbitc.afm -2022/09/19 | 5727 | fonts/kpfonts/fonts/afm/jkpmitc.afm -2022/09/19 | 5727 | fonts/kpfonts/fonts/afm/jkplmitc.afm -2022/09/19 | 5719 | fonts/kpfonts/fonts/afm/jkpmnc.afm -2022/09/19 | 5719 | fonts/kpfonts/fonts/afm/jkplmnc.afm -2022/09/19 | 5711 | fonts/kpfonts/fonts/afm/jkplbnc.afm -2022/09/19 | 5711 | fonts/kpfonts/fonts/afm/jkpbnc.afm -2022/09/19 | 5702 | fonts/kpfonts/fonts/afm/jkpttmnc.afm -2022/09/19 | 5698 | fonts/kpfonts/fonts/afm/jkpssbnc.afm -2022/09/19 | 5697 | fonts/kpfonts/fonts/afm/jkpssmnc.afm -2022/09/19 | 5690 | fonts/kpfonts/fonts/afm/jkpttbnc.afm -2022/09/19 | 548875 | graphics/chemobabel/chemobabel-en.pdf -2022/09/19 | 547356 | systems/texlive/tlnet/archive/librebodoni.r64431.tar.xz -2022/09/19 | 5047 | fonts/kpfonts/fonts/afm/jkplbite.afm -2022/09/19 | 5047 | fonts/kpfonts/fonts/afm/jkpbite.afm -2022/09/19 | 5034 | fonts/kpfonts/fonts/afm/jkpmite.afm -2022/09/19 | 5034 | fonts/kpfonts/fonts/afm/jkplmite.afm -2022/09/19 | 4996 | fonts/kpfonts/fonts/afm/jkplbne.afm -2022/09/19 | 4996 | fonts/kpfonts/fonts/afm/jkpbne.afm -2022/09/19 | 4989 | fonts/kpfonts/fonts/afm/jkpmne.afm -2022/09/19 | 4989 | fonts/kpfonts/fonts/afm/jkplmne.afm -2022/09/19 | 4939 | fonts/kpfonts/fonts/afm/jkpssmne.afm -2022/09/19 | 4937 | fonts/kpfonts/fonts/afm/jkpssbne.afm -2022/09/19 | 49194 | graphics/chemobabel/chemobabel.dtx -2022/09/19 | 485 | macros/latex/contrib/blowup/README.md -2022/09/19 | 470833 | fonts/kpfonts/doc/kpfonts.pdf -2022/09/19 | 4644 | fonts/kpfonts/Changes -2022/09/19 | 4486 | fonts/librefranklin/latex/librefranklin.sty -2022/09/19 | 4478 | fonts/kpfonts/fonts/afm/jkplbsce.afm -2022/09/19 | 4478 | fonts/kpfonts/fonts/afm/jkpbsce.afm -2022/09/19 | 4476 | fonts/kpfonts/fonts/afm/jkpmsce.afm -2022/09/19 | 4476 | fonts/kpfonts/fonts/afm/jkplmsce.afm -2022/09/19 | 4456 | fonts/kpfonts/fonts/afm/jkpttmne.afm -2022/09/19 | 4454 | fonts/kpfonts/fonts/afm/jkpttbne.afm -2022/09/19 | 4337 | fonts/kpfonts/fonts/afm/jkpssbsce.afm -2022/09/19 | 4336 | fonts/kpfonts/fonts/afm/jkpssmsce.afm -2022/09/19 | 399 | support/texaccents/README.md -2022/09/19 | 3947122 | install/fonts/librefranklin.tds.zip -2022/09/19 | 3923 | macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex -2022/09/19 | 3904036 | fonts/librefranklin.zip -2022/09/19 | 38164 | systems/texlive/tlnet/archive/nicematrix.r64433.tar.xz -2022/09/19 | 37616 | systems/texlive/tlnet/archive/exam-zh.r64434.tar.xz -2022/09/19 | 33360 | fonts/kpfonts/doc/kpfonts.tex -2022/09/19 | 323429 | macros/latex/contrib/ppt-slides.zip -2022/09/19 | 309422 | macros/luatex/latex/piton.zip -2022/09/19 | 29172 | systems/texlive/tlnet/archive/asmeconf.r64435.tar.xz -2022/09/19 | 27166 | macros/luatex/latex/piton/piton.dtx -2022/09/19 | 2655724 | systems/texlive/tlnet/archive/asmeconf.doc.r64435.tar.xz -2022/09/19 | 24368 | systems/texlive/tlnet/archive/dviasm.doc.r64430.tar.xz -2022/09/19 | 229579 | macros/latex/contrib/ppt-slides/ppt-slides.pdf -2022/09/19 | 227733 | macros/luatex/latex/piton/piton.pdf -2022/09/19 | 2176 | fonts/librefranklin/README -2022/09/19 | 21293 | fonts/kpfonts/fonts/afm/jkplbsc8a.afm -2022/09/19 | 21293 | fonts/kpfonts/fonts/afm/jkpbsc8a.afm -2022/09/19 | 21191 | fonts/kpfonts/fonts/afm/jkpmsc8a.afm -2022/09/19 | 21191 | fonts/kpfonts/fonts/afm/jkplmsc8a.afm -2022/09/19 | 20752 | fonts/kpfonts/fonts/afm/jkpmn8a.afm -2022/09/19 | 20752 | fonts/kpfonts/fonts/afm/jkplmn8a.afm -2022/09/19 | 20676 | fonts/kpfonts/fonts/afm/jkplbn8a.afm -2022/09/19 | 20676 | fonts/kpfonts/fonts/afm/jkpbn8a.afm -2022/09/19 | 20233 | fonts/kpfonts/fonts/afm/jkpssbsc8a.afm -2022/09/19 | 20192 | systems/texlive/tlnet/archive/librebodoni.doc.r64431.tar.xz -2022/09/19 | 19690 | fonts/kpfonts/fonts/afm/jkpssbn8a.afm -2022/09/19 | 19586 | fonts/kpfonts/fonts/afm/jkpssmn8a.afm -2022/09/19 | 19499 | fonts/kpfonts/fonts/afm/jkpmit8a.afm -2022/09/19 | 19499 | fonts/kpfonts/fonts/afm/jkplmit8a.afm -2022/09/19 | 19491 | fonts/kpfonts/fonts/afm/jkplbit8a.afm -2022/09/19 | 19491 | fonts/kpfonts/fonts/afm/jkpbit8a.afm -2022/09/19 | 19469 | fonts/kpfonts/fonts/afm/jkpssmsc8a.afm -2022/09/19 | 181 | graphics/chemobabel/chemobabel.ins -2022/09/19 | 1818852 | systems/texlive/tlnet/archive/nicematrix.doc.r64433.tar.xz -2022/09/19 | 1789216 | systems/texlive/tlnet/archive/exam-zh.doc.r64434.tar.xz -2022/09/19 | 174 | macros/latex/contrib/ppt-slides/DEPENDS.txt -2022/09/19 | 1741 | graphics/chemobabel/example-ja.tex -2022/09/19 | 1672 | fonts/lobster2/README -2022/09/19 | 165969 | support/texaccents.zip -2022/09/19 | 1576 | macros/latex/contrib/ppt-slides/README.md -2022/09/19 | 15203 | macros/luatex/latex/piton/piton.lua -2022/09/19 | 151584 | macros/luatex/latex/piton/piton-french.pdf -2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light.tex -2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light-mono.tex -2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark.tex -2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark-mono.tex -2022/09/19 | 1419 | fonts/lobster2/latex/LobsterTwo.sty -2022/09/19 | 1406 | graphics/chemobabel/example-en.tex -2022/09/19 | 1387 | graphics/chemobabel/README.md -2022/09/19 | 13464 | macros/luatex/latex/piton/piton-french.tex -2022/09/19 | 1338 | graphics/chemobabel/LICENSE -2022/09/19 | 132001 | graphics/chemobabel/example-en.pdf -2022/09/19 | 13080 | fonts/kpfonts/fonts/afm/jkpsskmsc.afm -2022/09/19 | 1276 | macros/latex/contrib/blowup/blowup-ex4.tex -2022/09/19 | 1263 | macros/latex/contrib/blowup/blowup-ex2.tex -2022/09/19 | 1257630 | graphics/chemobabel.zip -2022/09/19 | 120672 | systems/texlive/tlnet/archive/nicematrix.source.r64433.tar.xz -2022/09/19 | 11952 | fonts/kpfonts/fonts/afm/jkpsskbsc.afm -2022/09/19 | 1131 | macros/latex/contrib/blowup/blowup.ins -2022/09/19 | 107940 | systems/texlive/tlnet/archive/librecaslon.doc.r64432.tar.xz -2022/09/19 | 10304 | systems/texlive/tlnet/archive/dviasm.r64430.tar.xz diff --git a/fonts/neo-euler/Neo-Euler.ltx b/fonts/neo-euler/Neo-Euler.ltx new file mode 100644 index 0000000000..222e575a9b --- /dev/null +++ b/fonts/neo-euler/Neo-Euler.ltx @@ -0,0 +1,449 @@ +\RequirePackage{pdfmanagement-testphase} +\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-GB} +\documentclass[a4paper,12pt]{scrartcl} + +\usepackage{amsmath, array, varioref} +\usepackage[british]{babel} +\usepackage{fourier-orns} +\usepackage{neo-euler} +\setmainfont{cmunorm.otf} + [BoldFont = cmunobx.otf , + ItalicFont = cmunoti.otf , + BoldItalicFont = cmunobi.otf + ] +\setsansfont{Cabin}[Scale=MatchLowercase] +\setmonofont{Inconsolatazi4}[Scale=MatchLowercase,StylisticSet={2,3}] +\usepackage{subfig} +\captionsetup[subtable]{position=top} +\usepackage{realscripts} +\usepackage{microtype} +\usepackage{hyperref} +\hypersetup{pdftitle={Neo-Euler User’s Guide}, + pdfauthor={Daniel FLIPO}, + bookmarksopen, + colorlinks + } +\newcommand*{\hlabel}[1]{\phantomsection\label{#1}} + +\newcommand*{\NEOTF}{Neo-Euler} +\newcommand*{\pkg}[1]{\texttt{#1}} +\newcommand*{\file}[1]{\texttt{#1}} +\newcommand*{\opt}[1]{\texttt{#1}} +\newcommand*{\cmd}[1]{\texttt{\textbackslash #1}}\newcommand*{\showtchar}[1]{\cmd{#1}~\csname #1\endcsname} +\newcommand*{\showmchar}[1]{\cmd{#1}~$(\csname #1\endcsname)$} +\newcommand*{\showmchardollar}[1]{\texttt{\$\cmd{#1}\$}~$(\csname #1\endcsname)$} + +\renewcommand{\labelitemi}{\lefthand} + +\title{Neo Euler maths font, OTF version} +\author{Daniel Flipo \\ \texttt{daniel.flipo@free.fr}} + +\newcommand*{\version}{0.20} + +\begin{document} +\maketitle + +\section{What is \NEOTF{}?} + +\NEOTF{} is a fork of the Euler project initiated by Khaled Hosny in 2009 +and abandoned in 2016% +\footnote{See \url{https://github.com/aliftype/euler-otf}}. +The font name has been kept (Neo Euler) but the file name has been changed +from \file{euler.otf} to \file{Neo-Euler.otf}. + +\file{Neo-Euler.otf} is an OpenType version of Hermann Zapf’s Euler maths font, +as the original font it contains three alphabets $Euler Roman$, +$\symscr{SCRIPT}$ and $\symfrak{Euler Fraktur}$ (none of them being suitable +for typesetting text) and has some specificities: +\begin{itemize} +\item it is an \emph{upright} maths font, Latin and Greek letters are + \emph{not available} in italic or bold italic shape (only upright and bold) ; +\item integral symbols are upright too; +\item all inequalities symbols are \emph{slanted}, so \cmd{leq} and geq are + printed as $\leq$ and $\geq$ (same as \cmd{leqslant} and \cmd{geqslant}). +\end{itemize} + +\NEOTF{} requires LuaTeX or XeTeX as engine and the \pkg{unicode-math} package% +\footnote{Please read the documentation \file{unicode-math.pdf}.}. + +Coverage: currently, all Plain, LaTeX and AMS maths symbols are provided; sans +serif and typewriter families of Latin and Greek letters and digits are not +included. + +Please note that the current version (\version) is \emph{experimental, +do expect metrics and glyphs to change} until version 1.0 is reached. +Comments, suggestions and bug reports are welcome! + +\pagebreak[4] +\section{Usage} + +\subsection{Calling \cmd{setmathfont}} + +A basic call for \NEOTF{} would be: +\begin{verbatim} +\usepackage[math-style=upright]{unicode-math} +\setmathfont{Neo-Euler.otf} % Call by file name or +\setmathfont{Neo Euler} % Call by font name or +\end{verbatim} +this loads \NEOTF{} as maths font% +\footnote{Both calls work equally well with LuaTeX; with XeTeX a call by font + name will fail unless the font is declared as a \emph{system font}.} + with the default options, see subsections~\ref{ssection-cv}, + \ref{ssection-ss} and~\ref{ssec-other-features} for customisation. + +Please note that the three sets of text fonts have to be chosen separately. + +\subsection{Calling \pkg{neo-euler.sty} (recommended)} + +As an alternative to load \NEOTF{} you can type:\\[.5\baselineskip] +\verb+\usepackage{neo-euler}+\\[.5\baselineskip] +\verb+\usepackage[ +\textit{options} +\footnote{Possible \textit{options} are \opt{Scale=} or any of the options + described in sections \ref{ssection-cv}, \ref{ssection-ss} and + \ref{ssec-other-features}.}% +\verb+ ]{neo-euler}+\\[.5\baselineskip] +it loads \pkg{unicode-math} with the \opt{math-style=upright} option and +sets Neo-Euler as maths font but does a bit more: +\begin{enumerate} +\item it checks at \verb+\begin{document}+ if packages \pkg{amssymb} or + \pkg{latexsym} are loaded and issues warnings in case they are; +\item it provides aliases for glyphs named differently in Unicode, so that + \pkg{latexsym} or AMS names are also available; +\item it defines some specific maths characters \showmchar{varemptyset}, etc. +\end{enumerate} + +The \pkg{neo-euler.sty} package is meant to replace the \pkg{eulervm.sty} +package for users switching from pdfLaTeX to LuaLaTeX or XeLaTeX. +It does not interfere with text fonts which have to be chosen separately. + +\section{What is provided?} + +\NEOTF{} provides all glyphs available in the \pkg{amssymb} and \pkg{latexsym} +packages and many more, f.i. lots of extensible accents and arrows. + +These two packages \emph{should not} be loaded as they might override \NEOTF{} +glyphs. + +As mentioned above, there is neither italic nor bold italic shapes. +Furthermore, the font has currently no sans-serif, no typewriter family +included. Fraktur and Blackboard Bold styles are included. +See in section~\vref{ssec-math-alphabets} how to choose +from other maths fonts if sans-serif or typewriter glyphs are needed. + +A full list of available glyphs is shown in file \file{unimath-euler.pdf}. + +\subsection{Character variants} +\label{ssection-cv} + +\NEOTF{} provides fourteen ``Character Variants’’ options, listed on +table~\vref{cv}, to choose between different glyphs for Greek characters +and some others. +\begin{table}[ht] + \centering \caption{Character variants.} + \hlabel{cv} + \begin{tabular}{@{}>{\ttfamily}lccl@{}} + \hline + & Default & Variant & Name\\ + \hline + cv01 & $\hslash$ & $\muphbar$ & \cmd{hslash} \\ + cv02 & $\emptyset$ & $\varemptyset$ & \cmd{emptyset} \\ + cv03 & $\epsilon$ & $\varepsilon$ & \cmd{epsilon} \\ + cv04 & $\kappa$ & $\varkappa$ & \cmd{kappa} \\ + cv05 & $\pi$ & $\varpi$ & \cmd{pi} \\ + cv06 & $\phi$ & $\varphi$ & \cmd{phi} \\ + cv09 & $\theta$ & $\vartheta$ & \cmd{theta} \\ + cv10 & $\Theta$ & $\varTheta$ & \cmd{Theta}\\ + \hline + \end{tabular} +\end{table} + +For instance, to get \cmd{epsilon} and \cmd{phi} typeset as $\varepsilon$ +and $\varphi$ instead of $\epsilon$ and $\phi$ (with matching bold variants +$\symbf{\varepsilon}$ and $\symbf{\varphi}$), you can +add option \verb+CharacterVariant={3,6}+ to the \cmd{setmathfont} call: +\begin{verbatim} +\setmathfont{Neo-Euler.otf}[CharacterVariant={3,6}] +\end{verbatim} + +Please note that curly braces are mandatory whenever more than one +``Character Variant’’ is selected. + +Note about \cmd{hbar}: \pkg{unicode-math} defines \cmd{hbar} as +\cmd{hslash} (U+210F) while \pkg{amsmath} provides two different glyphs +(h with horizontal or diagonal stroke).\\ +\pkg{neo-euler} follows \pkg{unicode-math}; the h with horizontal +stroke can be printed using \cmd{hslash} or \cmd{hbar} together with character +variant \opt{cv01} or with \cmd{muphbar} (replacement for AMS’ command +\cmd{hbar}). + +\subsection{Stylistic sets} +\label{ssection-ss} + +\NEOTF{} provides two ``Stylistic Sets’’ options to choose between different +glyphs for families of maths symbols. + +\verb+StylisticSet=5+, alias \verb+Style=smaller+, converts some symbols into +their smaller variants, see table~\vref{ss05}. + +\verb+StylisticSet=6+, alias \verb+Style=subsetneq+, converts some inclusion +symbols, see table~\vref{ss06}. +\begin{table}[ht] + \centering + \caption{Stylistic Sets 5 and 6} + \subfloat[\opt{Style=smaller\quad (+ss05)}]{\hlabel{ss05}% + \begin{tabular}[t]{@{}lcc@{}} + \hline + Command & Default & Variant \\ + \hline + \cmd{in} & $\in$ & $\smallin$ \\ + \cmd{ni} & $\ni$ & $\smallni$ \\ + \cmd{mid} & $\mid$ & $\shortmid$ \\ + \cmd{nmid} & $\nmid$ & $\nshortmid$ \\ + \cmd{parallel} & $\parallel$ & $\shortparallel$ \\ + \cmd{nparallel} & $\nparallel$ & $\nshortparallel$ \\ + \hline + \end{tabular} + }\hspace{10mm} % eof subfloat + \subfloat[\opt{Style=subsetneq\quad (+ss06)}]{\hlabel{ss06}% + \begin{tabular}[t]{@{}lcc@{}} + \hline + Command & Default & Variant \\ + \hline + \cmd{subsetneq} & $\subsetneq$ & $\varsubsetneq$ \\ + \cmd{supsetneq} & $\supsetneq$ & $\varsupsetneq$ \\ + \cmd{subsetneqq} & $\subsetneqq$ & $\varsubsetneqq$ \\ + \cmd{supsetneqq} & $\supsetneqq$ & $\varsupsetneqq$ \\ + \hline + \end{tabular} + }% eof subfloat +\end{table} + + +To enable Stylistic Sets 5 and 6 for \NEOTF{}, you should enter +\begin{verbatim} +\setmathfont{Neo-Euler.otf}[StylisticSet={5,6}] or +\usepackage[Style={smaller,subsetneq}]{Neo-Euler.otf} +\end{verbatim} +{\samepage then, \verb+\[A \subsetneq B\quad x \in E \quad D \parallel D' \]+ +will print as +\setmathfont{Neo-Euler.otf}[StylisticSet={5,6}] +\[A \subsetneq B\quad x \in E \quad D \parallel D' \] +instead of +\setmathfont{Neo-Euler.otf} +\[A \subsetneq B\quad x \in E \quad D \parallel D' \] +} + +\subsection{Other font features} +\label{ssec-other-features} + +To get oldstyle numbers in maths, the feature \opt{+onum} is available: +\begin{verbatim} +\setmathfont{Neo-Euler.otf}[Numbers=OldStyle] or +\usepackage[Style={fulloldstyle}]{neo-euler} +\end{verbatim} + +\setmathfont{Neo-Euler.otf}[Numbers=OldStyle] +$0123456789, \symbf{0123456789}$ +\setmathfont{Neo-Euler.otf} + +\subsection{Standard \LaTeX{} math commands} +\label{ssec-math-commands} + +All standard \LaTeX{} maths commands, all \pkg{amssymb} commands and all +\pkg{latexsym} commands are supported by \NEOTF{}, for some of them loading +\pkg{neo-euler.sty} is required. + +Various wide accents are also supported: +\begin{itemize} +\item \cmd{widehat} and \cmd{widetilde} +\[\widehat{x}\; \widehat{xx} \;\widehat{xxx} \;\widehat{xxxx}\; + \widehat{xxxxx} \;\widehat{xxxxxx} \;\widetilde{x}\; \widetilde{xx}\; + \widetilde{xxx} \;\widetilde{xxxx} \;\widetilde{xxxxx}\; + \widetilde{xxxxxx}\] + +\item \cmd{overline} and \cmd{underline} + \[\overline{x}\quad \overline{xy}\quad \overline{xyz}\quad + \overline{A\cup B}\quad \overline{A\cup (B\cap C)\cup D}\quad + \underline{m+n+p}\] + +\item \cmd{wideoverbar}, \cmd{widecheck} and \cmd{widebreve} + \[\wideoverbar{x}\quad \wideoverbar{xy}\quad \wideoverbar{xyz}\quad + \widecheck{x}\quad \widecheck{xxxx}\quad \widecheck{xxxxxx}\quad + \widebreve{x}\quad \widebreve{xxxx}\quad \widebreve{xxxxxx} + \] + +\item \cmd{overparen} and \cmd{underparen} + \[\overparen{x}\quad \overparen{xy}\quad \overparen{xyz}\quad + \mathring{\overparen{A\cup B}}\quad + \overparen{A\cup (B\cap C)\cup D}^{\smwhtcircle}\quad + \overparen{x+y}^{2}\quad \overparen{a+b+...+z}^{26}\] +\vspace{-\baselineskip} +\[\underparen{x}\quad \underparen{xz} \quad \underparen{xyz} + \quad \underparen{x+z}_{2}\quad \underparen{a+b+...+z}_{26}\] + +\item \cmd{overbrace} and \cmd{underbrace} + \[\overbrace{a}\quad \overbrace{ab}\quad \overbrace{abc}\quad + \overbrace{abcd}\quad \overbrace{abcde}\quad + \overbrace{a+b+c}^{3}\quad \overbrace{ a+b+. . . +z }^{26}\] + \vspace{-\baselineskip} + \[\underbrace{a}\quad\underbrace{ab}\quad\underbrace{abc}\quad + \underbrace{abcd}\quad \underbrace{abcde}\quad + \underbrace{a+b+c}_{3} \quad \underbrace{ a+b+...+z }_{26}\] + +\item \cmd{overbracket} and \cmd{underbracket} + \[\overbracket{a}\quad \overbracket{ab}\quad \overbracket{abc}\quad + \overbracket{abcd}\quad \overbracket{abcde}\quad + \overbracket{a+b+c}^{3}\quad \overbracket{ a+b+. . . +z }^{26}\] + \vspace{-\baselineskip} + \[\underbracket{a}\quad\underbracket{ab}\quad\underbracket{abc}\quad + \underbracket{abcd}\quad \underbracket{abcde}\quad + \underbracket{a+b+c}_{3} \quad \underbracket{ a+b+...+z }_{26}\] + +\item \cmd{overrightarrow}, \cmd{overleftarrow} and \cmd{overleftrightarrow} + \[\overrightarrow{v}\quad \overrightarrow{M}\quad \overrightarrow{vv} + \quad \overrightarrow{AB}\quad \overrightarrow{ABC} + \quad \overrightarrow{ABCD} \quad \overrightarrow{ABCDEFGH}. + \] + \vspace{-\baselineskip} + \[\overleftarrow{v}\quad \overleftarrow{M}\quad \overleftarrow{vv} + \quad \overleftarrow{AB}\quad \overleftarrow{ABC} + \quad \overleftarrow{ABCD} \quad \overleftarrow{ABCDEFGH}\] + \vspace{-\baselineskip} + \[\overleftrightarrow{v}\quad \overleftrightarrow{M}\quad + \overleftrightarrow{vv}\quad + \overleftrightarrow{AB}\quad \overleftrightarrow{ABC}\quad + \overleftrightarrow{ABCD} \quad \overleftrightarrow{ABCDEFGH}\] + +\item \cmd{overrightharpoon} and \cmd{overleftharpoon} + \[\overrightharpoon{v}\quad \overrightharpoon{M}\quad \overrightharpoon{vv} + \quad \overrightharpoon{AB}\quad \overrightharpoon{ABC} + \quad \overrightharpoon{ABCD} \quad \overrightharpoon{ABCDEFGH}. + \] + \vspace{-\baselineskip} + \[\overleftharpoon{v}\quad \overleftharpoon{M}\quad \overleftharpoon{vv} + \quad \overleftharpoon{AB}\quad \overleftharpoon{ABC} + \quad \overleftharpoon{ABCD} \quad \overleftharpoon{ABCDEFGH}\] + +\item \cmd{underrightarrow}, \cmd{underleftarrow} and \cmd{underleftrightarrow} + \[\underrightarrow{v}\quad \underrightarrow{M}\quad \underrightarrow{vv} + \quad \underrightarrow{AB}\quad \underrightarrow{ABC} + \quad \underrightarrow{ABCD} \quad \underrightarrow{ABCDEFGH}. + \] + \vspace{-\baselineskip} + \[\underleftarrow{v}\quad \underleftarrow{M}\quad \underleftarrow{vv} + \quad \underleftarrow{AB}\quad \underleftarrow{ABC} + \quad \underleftarrow{ABCD} \quad \underleftarrow{ABCDEFGH}\] + \vspace{-\baselineskip} + \[\underleftrightarrow{v}\quad \underleftrightarrow{M}\quad + \underleftrightarrow{vv}\quad + \underleftrightarrow{AB}\quad \underleftrightarrow{ABC}\quad + \underleftrightarrow{ABCD} \quad \underleftrightarrow{ABCDEFGH}\] + +\item \cmd{underrightharpoondown} and \cmd{underleftharpoondown} + \[\underrightharpoondown{v} \quad \underrightharpoondown{M}\quad + \underrightharpoondown{vv}\quad \underrightharpoondown{AB}\quad + \underrightharpoondown{ABC}\quad \underrightharpoondown{ABCD} + \quad \underrightharpoondown{ABCDEFGH}. + \] + \vspace{-\baselineskip} + \[\underleftharpoondown{v} \quad \underleftharpoondown{M}\quad + \underleftharpoondown{vv}\quad \underleftharpoondown{AB}\quad + \underleftharpoondown{ABC}\quad \underleftharpoondown{ABCD} + \quad \underleftharpoondown{ABCDEFGH}. + \] + +\item Finally \cmd{widearc} and \cmd{overrightarc} (loading + \pkg{neo-euler.sty} is required) +\[\widearc{AMB}\quad \overrightarc{AMB}\] +\end{itemize} + +\subsection{Mathematical alphabets} +\label{ssec-math-alphabets} + +\begin{itemize} +\item All Latin and Greek characters are available in upright + and bold via the \verb+\symup{}+ and \verb+\symbf{}+ commands. + +\item Calligraphic alphabet (\cmd{symscr} or \cmd{symcal} or + \cmd{mathcal} command), uppercase:\\ + $\symscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\ + also in boldface (\cmd{symbfscr},\cmd{symbfcal} or \cmd{mathbfcal} command):\\ + $\symbfscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ + +\item Blackboard-bold alphabet (\cmd{symbb} or \cmd{mathbb} command), + uppercase, lowercase and digits: + + $\symbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ + + $\symbb{abcdefghijklmnopqrstuvwxyz\quad 0123456789}$ + +\item Fraktur alphabet medium and bold + (\cmd{symfrak}, or \cmd{symbffrak} commands): + + $\symfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ\quad abcdefghijklmnopqrstuvwxyz}$\\ + $\symbffrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\ + \hphantom{$\symfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ\quad}$}% + $\symbffrak{abcdefghijklmnopqrstuvwxyz}$ + +\item Sans serif and Typewriter alphabets have to be imported from another + math font, f.i. \file{STIXTwoMath}: +\begin{verbatim} +\setmathfont{STIXTwoMath-Regular.otf}[range=sfup,Scale=MatchUppercase] +$\symsfup{ABCD...klm}$ +\end{verbatim} +\setmathfont{STIXTwoMath-Regular.otf}[range=sfup,Scale=MatchUppercase] +$\symsfup{ABCDEFGHIJKLM abcdefghijklm}$ + +\begin{verbatim} +\setmathfont{STIXTwoMath-Regular.otf}[range=tt,Scale=MatchUppercase] +$\symtt{ABCDE...XYZ abcde...xyz}$ +\end{verbatim} +\setmathfont{STIXTwoMath-Regular.otf}[range=tt,Scale=MatchUppercase] +$\symtt{ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz}$ +\end{itemize} + + +\subsection{Missing symbols} + +\NEOTF{} does not aim at being as complete as \file{STIXTwoMath-Regular} or +\file{Cambria}, the current glyph coverage compares with TeXGyre math fonts. +In case some symbols do not show up in the output file, you will see warnings +in the \file{.log} file, for instance: + +\setmathfont{STIXTwoMath-Regular.otf}[range={"2964}] +\texttt{Missing character: There is no }$⥤$% +\texttt{ (U+2964) in font Neo Euler} + +Borrowing them from a more complete font, say \file{Asana-Math}, +is a possible workaround: +\verb+\setmathfont{Asana-Math.otf}[range={"2964},Scale=1.02]+\\ +scaling is possible, multiple character ranges are separated with commas:\\ +\verb+\setmathfont{Asana-Math.otf}[range={"294A-"2951,"2964,"2ABB-"2ABE}]+ + +Let’s mention \pkg{albatross}, a useful tool to find out the list of fonts +providing a given glyph: f.i. type in a terminal ``\texttt{albatross U+2964}’’, +see the manpage or \file{albatross-manual.pdf}. + +\section{Acknowledgements} + +Khaled Hosni achieved most of the portage of Hermann Zapf’s Euler font to +Unicode between 2009 and 2016. After Hermann’s death in 2015, he decided to +stop the project but his \file{euler.otf} font, although not available on CTAN, +continued to be used, see +\href{https://tex.stackexchange.com/questions/425098/which-opentype-math-fonts-are-available}{https://tex.stackexchange.com/questions/425098/}. +I offered Khaled my help to finalise the font, we agreed I would try to +complete the font and maintain it on my own. + +\bigskip +\begin{center}\Huge +\decotwo +\end{center} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-engine: luatex +%%% TeX-master: t +%%% coding: utf-8 +%%% End: diff --git a/fonts/neo-euler/Neo-Euler.otf b/fonts/neo-euler/Neo-Euler.otf new file mode 100644 index 0000000000..95e2a9ab4a Binary files /dev/null and b/fonts/neo-euler/Neo-Euler.otf differ diff --git a/fonts/neo-euler/Neo-Euler.pdf b/fonts/neo-euler/Neo-Euler.pdf new file mode 100644 index 0000000000..09834d6741 Binary files /dev/null and b/fonts/neo-euler/Neo-Euler.pdf differ diff --git a/fonts/neo-euler/README.md b/fonts/neo-euler/README.md new file mode 100644 index 0000000000..8d72ed1384 --- /dev/null +++ b/fonts/neo-euler/README.md @@ -0,0 +1,56 @@ +Neo-Euler package +==================== + +## Description + +`Neo-Euler.otf’ is an OpenType version of Hermann Zapf’s Euler maths font. +It is the continuation of the Euler project initiated by Khaled Hosny in +2009 and abandoned in 2016. +A style file `neo-euler.sty’ is provided as a replacement of the +`eulervm.sty’ package for LuaLaTeX and XeLaTeX users. + +## Contents + +* Neo-Euler.otf OpenType maths font +* neo-euler.sty LaTeX style file: replaces eulervm.sty for LuaTeX/XeTeX +* Neo-Euler.pdf Documentation in PDF format +* Neo-Euler.ltx LaTeX source of Neo-Euler.pdf +* unimath-euler.pdf Modified version of unimath-symbols.pdf + showing available Neo-Euler symbols compared to + LatinModern, STIXTwo, Erewhon, TeXGyrePagella and Asana. +* unimath-euler.ltx LaTeX source of unimath-concrete.pdf +* README.md (this file) + +## Installation + +This package is meant to be installed automatically by TeXLive, MikTeX, etc. +Otherwise, the package can be installed under TEXMFHOME or TEXMFLOCAL, f.i. +Neo-Euler.otf in directory texmf-local/fonts/opentype/public/neo-euler/ +and neo-euler.sty in directory texmf-local/tex/latex/neo-euler/. +Documentation files and their sources can go to directory +texmf-local/doc/fonts/public/neo-euler/ + +Don't forget to rebuild the file database (mktexlsr or so) if you install +under TEXMFLOCAL. + +Finally, make the system font database aware of the Neo-Euler font +(fontconfig under Linux). + +## License + +* The font `Neo-Euler.otf’ is licensed under the SIL Open Font License, +Version 1.1. This license is available with a FAQ at: +http://scripts.sil.org/OFL +* The other files are distributed under the terms of the LaTeX Project +Public License from CTAN archives in directory macros/latex/base/lppl.txt. +Either version 1.3 or, at your option, any later version. + +## Changes + +* First public version: 0.20 + + +--- +Copyright 2009-2016 Khaled Hosny +Copyright 2022- Daniel Flipo +E-mail: daniel (dot) flipo (at) free (dot) fr diff --git a/fonts/neo-euler/neo-euler.sty b/fonts/neo-euler/neo-euler.sty new file mode 100644 index 0000000000..a5f04e7c35 --- /dev/null +++ b/fonts/neo-euler/neo-euler.sty @@ -0,0 +1,127 @@ +\NeedsTeXFormat{LaTeX2e}[2018/01/01] +\def\fileversion{0.20} +\def\filedate{2022-09-26} +\ProvidesPackage{neo-euler}[\filedate\space\fileversion] + +% Ensure luatex or xetex engine +\RequirePackage{iftex}[2019/10/24] +\RequireTUTeX +\RequirePackage[math-style=upright]{unicode-math} + +\newopentypefeature{Style}{smaller}{+ss05} +\newopentypefeature{Style}{subsetneq}{+ss06} + +% Options: forward them to \setmathfont. +\RequirePackage{xkeyval} +\newtoks\NEUtoks +\newcommand*{\Store@KV@Option}[2]{% + \NEUtoks=\expandafter{\the\NEUtoks #1={#2},}} + +\DeclareOptionX{CharacterVariant}{\Store@KV@Option{CharacterVariant}{#1}} +\DeclareOptionX{StylisticSet}{\Store@KV@Option{StylisticSet}{#1}} +\DeclareOptionX{Style}{\Store@KV@Option{Style}{#1}} +\DeclareOptionX{Scale}{\Store@KV@Option{Scale}{#1}} +\DeclareOptionX{Numbers}{\Store@KV@Option{Numbers}{#1}} +\ProcessOptionsX + +% Following Joseph Wright in https://tex.stackexchange.com/questions/451 +\begingroup + \edef\temp{% + \endgroup + \noexpand\setmathfont{Neo-Euler.otf}% + [\unexpanded\expandafter{\the\NEUtoks}]% + } + \temp + +\AtBeginDocument{% + % Euler specific math + % \Umathchardef\ = + % : \mathord=0 \mathrel=3 ; =0 + \Umathchardef\muphbar = 0 0 "0127 \relax + \Umathchardef\varemptyset = 0 0 "E021 \relax + \Umathchardef\mbfwp = 0 0 "E045 \relax + \Umathchardef\mbfdotlessi = 0 0 "E046 \relax + \Umathchardef\mbfdotlessj = 0 0 "E047 \relax + \Umathchardef\mbfhbar = 0 0 "E048 \relax + \let\lesseqslantgtr\lesseqgtr + \let\gtreqslantless\gtreqless + \let\lesseqqslantgtr\lesseqqgtr + \let\gtreqqslantless\gtreqqless + \let\nleqqslant\nleqq + \let\ngeqqslant\ngeqq +% \widearc and\overrightarc + \newcommand*{\widearc}{\Umathaccent 0 0 "E540 }% + \newcommand*{\overrightarc}{\Umathaccent 0 0 "20D5 }% + % amssymb + \@ifpackageloaded{amssymb}% + {\PackageWarning{neo-euler}{% + Neo-Euler provides all AMS symbols.\MessageBreak + Loading amssymb.sty is not advisable.\MessageBreak + Reported}% + }% + {% AMS Symbols not referenced in unicode-math-table.tex + % \Umathchardef\ = + % : \mathord=0 \mathrel=3 ; =0 + \Umathchardef\circledR = 0 0 "24C7 \relax + \Umathchardef\circledS = 0 0 "24C8 \relax + \Umathchardef\diagup = 0 0 "E0A0 \relax + \Umathchardef\diagdown = 0 0 "E0A1 \relax + \Umathchardef\shortmid = 3 0 "E0A2 \relax + \Umathchardef\shortparallel = 3 0 "E0A3 \relax + \Umathchardef\nshortmid = 3 0 "E0A4 \relax + \Umathchardef\nshortparallel = 3 0 "E0A5 \relax + \Umathchardef\lvertneqq = 3 0 "E0A6 \relax + \Umathchardef\gvertneqq = 3 0 "E0A7 \relax + \Umathchardef\nleqslant = 3 0 "E0A8 \relax + \Umathchardef\ngeqslant = 3 0 "E0A9 \relax + \Umathchardef\nleqq = 3 0 "E0AA \relax + \Umathchardef\ngeqq = 3 0 "E0AB \relax + \Umathchardef\varsubsetneq = 3 0 "E0AC \relax + \Umathchardef\varsupsetneq = 3 0 "E0AD \relax + \Umathchardef\nsubseteqq = 3 0 "E0AE \relax + \Umathchardef\nsupseteqq = 3 0 "E0AF \relax + \Umathchardef\varsubsetneqq = 3 0 "E09C \relax + \Umathchardef\varsupsetneqq = 3 0 "E09D \relax + \Umathchardef\npreceq = 3 0 "E09E \relax + \Umathchardef\nsucceq = 3 0 "E09F \relax + \let\centerdot\cdotp + \let\restriction\upharpoonright + \let\doteqdot\Doteq + \let\doublecup\Cup + \let\doublecap\Cap + \let\llless\lll + \let\gggtr\ggg + \let\circlearrowleft\acwopencirclearrow + \let\circlearrowright\cwopencirclearrow + \let\lozenge\mdlgwhtlozenge + \let\blacklozenge\mdlgblklozenge + \let\square\mdlgwhtsquare + \let\blacksquare\mdlgblksquare + \let\dashleftarrow\leftdasharrow + \let\dashrightarrow\rightdasharrow + \let\ntriangleleft\nvartriangleleft + \let\ntriangleright\nvartriangleright + \let\varpropto\propto + \let\thicksim\sim + \let\thickapprox\approx + \let\smallsmile\smile + \let\smallfrown\frown + }% + % latexsym + \@ifpackageloaded{latexsym}% + {\PackageWarning{neo-euler}{% + Neo-Euler provides all LaTeX symbols.\MessageBreak + Loading latexsym.sty is not advisable.\MessageBreak + Reported}% + }% + {\let\lhd\vartriangleleft + \let\rhd\vartriangleright + \let\unlhd\trianglelefteq + \let\unrhd\trianglerighteq + \let\leadsto\rightcurvedarrow + \let\Box\lgwhtsquare + \let\Diamond\mdlgwhtdiamond + }% +} + +\endinput diff --git a/fonts/neo-euler/unimath-euler.ltx b/fonts/neo-euler/unimath-euler.ltx new file mode 100644 index 0000000000..7d53cdf3ca --- /dev/null +++ b/fonts/neo-euler/unimath-euler.ltx @@ -0,0 +1,525 @@ +%%^^A%% unimath-symbols.ltx -- part of UNICODE-MATH +%%^^A%% Listing of Unicode mathematics symbols using a variety of fonts. + +%!TEX TS-program = LuaLaTeX + +%% Changes by David Carlisle: https://github.com/wspr/unicode-math/issues/570 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SYMBOLS DEFINED BY UNICODE-MATH +%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[final]{article} +\makeatletter + +\usepackage{ragged2e,setspace,booktabs,catchfile,shortvrb,geometry,metalogo,textcomp,longtable,array,hyperref} + +\usepackage{ninecolors} +\NineColors{saturation=high} + +\geometry{margin=24mm} +\hypersetup{colorlinks,linkcolor=black} + +\def\cmd#1{\texttt{\textbackslash\expandafter\@gobble\string#1}} + +\usepackage{fontspec} +\setmainfont{texgyrepagella}% + [ + Extension = .otf, + UprightFont = *-regular, + ItalicFont = *-italic, + BoldFont = *-bold, + BoldItalicFont = *-bolditalic, + Ligatures=TeX, + Numbers={Lowercase,Monospaced}, + ] +\usepackage[math-style=literal,bold-style=literal]{unicode-math} + +\ExplSyntaxOn +\cs_generate_variant:Nn \fontspec_set_fontface:NNnn {c} + +\def\FINISH{} +\newcount\Nfonts +\def\defmathfont#1#2#3#4{ + \Nfonts=\numexpr\Nfonts+1\relax + \tl_set:cn {L#1} {#4} + \newcounter{#1} + \setcounter{#1}{-1} + \setmathfont[version=#1,SizeFeatures={ + {Size=-10, Colour=999999}, + {Size=10-, Colour=#3}}]{#2} + \fontspec_set_fontface:cNnn {#1} \x {ItalicFont={},BoldFont={}} {#2} + \tl_gput_right:Nn \FINISH { + \refstepcounter{#1}\label{count:#1} + } +} +% Added (df) for euler +\def\defmathupfont#1#2#3#4{ + \Nfonts=\numexpr\Nfonts+1\relax + \tl_set:cn {L#1} {#4} + \newcounter{#1} + \setcounter{#1}{-1} + \setmathfont[version=#1,math-style=upright,SizeFeatures={ + {Size=-10, Colour=999999}, + {Size=10-, Colour=#3}}]{#2} + \fontspec_set_fontface:cNnn {#1} \x {ItalicFont={},BoldFont={}} {#2} + \tl_gput_right:Nn \FINISH { + \refstepcounter{#1}\label{count:#1} + } +} +\ExplSyntaxOff + +\defmathfont{lm}{latinmodern-math.otf}{CC6666}{L} +%\defmathfont{xits}{XITSMath-Regular.otf}{6666CC}{X} +\defmathfont{stix}{STIXTwoMath-Regular.otf}{66CC66}{S} +\defmathfont{erewhon}{Erewhon-Math.otf}{AA6666}{E} +\defmathfont{pagella}{texgyrepagella-math.otf}{66CCCC}{P} +\defmathfont{asana}{Asana-Math.otf}{AACC66}{A} +\defmathupfont{euler}{Neo-Euler.otf}{AA66CC}{N} + +\def\INPUT{\input{unicode-math-table.tex}} +\def\TABLE{% +\par\noindent +\setlength\tabcolsep{5pt}% +\begin{longtable}[l]{@{}l *{\Nfonts}{c} lp{100pt}@{}} + \toprule + \textsc{usv} & \Llm & \Lstix & \Lerewhon & \Lpagella & \Lasana & \Leuler + & Macro & Description \\ + \midrule \endhead + \INPUT\\ + \bottomrule +\end{longtable} +} +\makeatletter +\def\USV#1{\footnotesize\scshape\MakeLowercase{u+\@gobble#1}} +\makeatother +\def\CMD#1{\footnotesize\cmd#1} +\def\DESC#1{\vspace{-6pt}% + \begin{spacing}{0.5} + \RaggedRight\scriptsize #1% + \end{spacing} +} + +\newcommand\SHOW[1]{% + \def\UnicodeMathSymbol##1##2##3##4{% + \def\1{#1}\def\2{##3}% + \ifx\1\2\PRINTLINE{##1}{##2}{##4}\fi + }% + \TABLE +} +\ExplSyntaxOn +\def\PRINTLINE#1#2#3{ + \def\tempa{ + \USV{#1} & + \SYMB{#2}{lm}{#1} & +% \SYMB{#2}{xits}{#1} & + \SYMB{#2}{stix}{#1} & + \SYMB{#2}{erewhon}{#1} & + \SYMB{#2}{pagella}{#1} & + \SYMB{#2}{asana}{#1} & + \SYMB{#2}{euler}{#1} & + \CMD{#2} + \tl_if_in:NnT \PLAIN {#2} + { + \makebox[0pt][l] + { \color[gray]{0.7} \textsuperscript{\sffamily (p)} } + } + \tl_if_in:NnT \LTXSYM {#2} + { + \makebox[0pt][l] + { \color[gray]{0.7} \textsuperscript{\sffamily (l)} } + } + \tl_if_in:NnT \AMSSYMB {#2} + { + \makebox[0pt][l] + { \color[gray]{0.7} \textsuperscript{\sffamily (a)} } + } + & + \DESC{#3} \\ + }% + \expandafter\tempa +} +\ExplSyntaxOff +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1$% + \fi +} + +\def\PLAIN{\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega\varepsilon\vartheta\varpi\varrho\varsigma\varphi\Gamma\Delta\Theta\Lambda\Xi\Pi\Sigma\Upsilon\Phi\Psi\Omega +% +\aleph\hbar\imath\jmath\ell\wp\Re\Im\partial\infty\prime\emptyset\nabla\surd\top\bot\angle\triangle\forall\exists\neg\flat\natural\sharp\clubsuit\diamondsuit\heartsuit\spadesuit +% +\coprod\bigvee\bigwedge\biguplus\bigcap\bigcup\int\prod\sum\bigotimes\bigoplus\bigodot\oint\bigsqcup\smallint +% +\triangleleft\triangleright\bigtriangleup\bigtriangledown\wedge\land\vee\lor\cap\cup\ddagger\dagger\sqcap\sqcup\uplus\amalg\diamond\bullet\wr\div\odot\oslash\otimes\ominus\oplus\mp\pm\circ\bigcirc\setminus\cdot\ast\times\star\propto\sqsubseteq\sqsupseteq\parallel\mid\dashv\vdash\nearrow\searrow\nwarrow\swarrow\Leftrightarrow\Leftarrow\Rightarrow\neq\ne\lnot\leq\le\geq\ge\succ\prec\approx\succeq\preceq\supset\subset\supseteq\subseteq\in\ni\owns\gg\ll\not\leftrightarrow\leftarrow\gets\rightarrow\to\mapstochar\mapsto\sim\simeq\perp\equiv\asymp\smile\frown\leftharpoonup\leftharpoondown\rightharpoonup\rightharpoondown +% +\joinrel\relbar\Relbar\lhook\hookrightarrow\rhook\hookleftarrow\bowtie\models\Longrightarrow\longrightarrow\longleftarrow\Longleftarrow\longmapsto\longleftrightarrow\Longleftrightarrow\iff +% +\ldotp\cdotp\colon\ldots\cdots\vdots\ddots +% +\acute\grave\ddot\tilde\bar\breve\check\hat\vec\dot\widetilde\widehat +% +\overrightarrow\overleftarrow\overbrace\underbrace\lmoustache\rmoustache\lgroup\rgroup\arrowvert\Arrowvert\bracevert\Vert\vert\uparrow\downarrow\updownarrow\Uparrow\Downarrow\Updownarrow\backslash\rangle\langle\rbrace\lbrace\rceil\lceil\rfloor\lfloor\sqrt} + + +\def\LTXSYM{ +\cong +\notin +\rightleftharpoons +\doteq +\mathring +} + +\def\AMSSYMB{\boxdot\boxplus\boxtimes\square\blacksquare\centerdot\lozenge\blacklozenge\circlearrowright\circlearrowleft\leftrightharpoons\boxminus\Vdash\Vvdash\vDash\twoheadrightarrow\twoheadleftarrow\leftleftarrows\rightrightarrows\upuparrows\downdownarrows\upharpoonright\restriction\downharpoonright\upharpoonleft\downharpoonleft\rightarrowtail\leftarrowtail\leftrightarrows\rightleftarrows\Lsh\Rsh\rightsquigarrow\leftrightsquigarrow\looparrowleft\looparrowright\circeq\succsim\gtrsim\gtrapprox\multimap\therefore\because\doteqdot\Doteq\triangleq\precsim\lesssim\lessapprox\eqslantless\eqslantgtr\curlyeqprec\curlyeqsucc\preccurlyeq\leqq\leqslant\lessgtr\backprime\risingdotseq\fallingdotseq\succcurlyeq\geqq\geqslant\gtrless\vartriangleright\vartriangleleft\trianglerighteq\trianglelefteq\bigstar\between\blacktriangledown\blacktriangleright\blacktriangleleft\vartriangle\blacktriangle\triangledown\eqcirc\lesseqgtr\gtreqless\lesseqqgtr\gtreqqless\Rrightarrow\Lleftarrow\veebar\barwedge\doublebarwedge\measuredangle\sphericalangle\varpropto\smallsmile\smallfrown\Subset\Supset\Cup\doublecup\Cap\doublecap\curlywedge\curlyvee\leftthreetimes\rightthreetimes\subseteqq\supseteqq\bumpeq\Bumpeq\lll\llless\ggg\gggtr\circledS\pitchfork\dotplus\backsim\backsimeq\complement\intercal\circledcirc\circledast\circleddash\lvertneqq\gvertneqq\nleq\ngeq\nless\ngtr\nprec\nsucc\lneqq\gneqq\nleqslant\ngeqslant\lneq\gneq\npreceq\nsucceq\precnsim\succnsim\lnsim\gnsim\nleqq\ngeqq\precneqq\succneqq\precnapprox\succnapprox\lnapprox\gnapprox\nsim\ncong\diagup\diagdown\varsubsetneq\varsupsetneq\nsubseteqq\nsupseteqq\subsetneqq\supsetneqq\varsubsetneqq\varsupsetneqq\subsetneq\supsetneq\nsubseteq\nsupseteq\nparallel\nmid\nshortmid\nshortparallel\nvdash\nVdash\nvDash\nVDash\ntrianglerighteq\ntrianglelefteq\ntriangleleft\ntriangleright\nleftarrow\nrightarrow\nLeftarrow\nRightarrow\nLeftrightarrow\nleftrightarrow\divideontimes\varnothing\nexists\Finv\Game\eth\eqsim\beth\gimel\daleth\lessdot\gtrdot\ltimes\rtimes\shortmid\shortparallel\smallsetminus\thicksim\thickapprox\approxeq\succapprox\precapprox\curvearrowleft\curvearrowright\digamma\varkappa\Bbbk\hslash\backepsilon} + +\input{unicode-math.dtx} + +\begin{document} +\MakeShortVerb\| +\title{Symbols defined by \textsf{unicode-math}} +\author{Will Robertson} +\date{Modified (df) to show Neo Euler Math symbols} +\maketitle + +This document uses the file \texttt{unicode-math-table.tex} +to print every symbol defined by the \textsf{unicode-math} +package. +Use this document to find the command name or the Unicode glyph slot for a symbol that you wish to use. +The following fonts are shown: (with approximate symbol counts) +\begin{itemize} +\item[\Llm] \mathversion{lm} $\mathup{Latin\ Modern\ Math}$ (\ref{count:lm}) +%\item[\Lxits] \mathversion{xits} $\mathup{XITS\ Math}$ (\ref{count:xits}) +\item[\Lstix] \mathversion{stix} $\mathup{STIX\ Math\ Two}$ (\ref{count:stix}) +\item[\Lerewhon] \mathversion{erewhon} $\mathup{Erewhon\ Math}$ (\ref{count:erewhon}) +\item[\Lpagella] \mathversion{pagella} $\mathup{TeX\ Gyre\ Pagella\ Math}$ (\ref{count:pagella}) +\item[\Lasana] \mathversion{asana} $\mathup{Asana\ Math}$ (\ref{count:asana}) +\item[\Leuler] \mathversion{euler} $\mathup{Neo\ Euler}$ (\ref{count:euler}) +\end{itemize} +Symbols defined in Plain \TeX\ are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (p)}} after their macro name. +\LaTeX\ follows Plain \TeX, but defines a handful more, indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (l)}}. +Symbols defined in \textsf{amssymb} are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (a)}}. + +Note that this list of fonts is not intended to be exhaustive but I am happy to add new fonts by request if they are distributed in \TeX\ Live.\footnote{Only a single \TeX\ Gyre Math font is shown here by design as they all largely have the same symbol coverage.} + +\tableofcontents + +\clearpage +\section{Opening symbols, \cmd\mathopen} +\begingroup +\def\sqrt{\sqrtsign{}} +\def\cuberoot{\cuberootsign{}} +\def\fourthroot{\fourthrootsign{}} +\def\longdivision{\longdivisionsign{}} +\SHOW\mathopen +\endgroup + +\clearpage +\section{Closing symbols, \cmd\mathclose} +\SHOW\mathclose + +\section{Fence symbols, \cmd\mathfence} +\SHOW\mathfence + +\clearpage +\section{Punctuation symbols, \cmd\mathpunct} +\SHOW\mathpunct + +\section{`Over' symbols, \cmd\mathover} +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle #1{\mitx+\mity}$% + \fi +} +\SHOW\mathover +\endgroup + +\section{`Under' symbols, \cmd\mathunder} +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle #1{\mitx+\mity}$% + \fi +} +\SHOW\mathunder +\endgroup + +\clearpage +\section{Accents, \cmd\mathaccent} + +Note that accents will only be properly placed if used with an OpenType font with the necessary information. + +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1 \mitx$% + \fi +} +\SHOW\mathaccent +\endgroup + +% Added (df) +\section{Accents wide, \cmd\mathaccentwide} +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1 {\mitx+\mity}$% + \fi +} +\SHOW\mathaccentwide +\endgroup + +\section{Bottom accents, \cmd\mathbotaccent} +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1 \mitx$% + \fi +} +\SHOW\mathbotaccent +\endgroup + +% Added (df) +\section{Bottom accents wide, \cmd\mathbotaccentwide} +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \refstepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1 {\mitx+\mity}$% + \fi +} +\SHOW\mathbotaccentwide +\endgroup + +\section{Big operators, \cmd\mathop} + +Of the operators shown below, a subset need to be flagged by \textsf{unicode-math} for \cmd\nolimits\ adjustments. +The limits behaviour as specified by \textsf{unicode-math} are shown with grey subscripts and superscripts. +\begingroup +\def\SYMB#1#2#3{% + \expandafter\iffontchar\csname#2\endcsname #3\relax + \stepcounter{#2}% + \mathversion{#2}% + $\displaystyle#1_0^1$% + \fi +} +\SHOW\mathop +\endgroup + +\clearpage +\section{Binary relations, \cmd\mathbin} +\SHOW\mathbin + +\clearpage +\section{Ordinary symbols, \cmd\mathord} +\SHOW\mathord + +\clearpage +\section{Relation symbols, \cmd\mathrel} +\SHOW\mathrel + +\clearpage +\section{Alphabetical symbols, \cmd\mathalpha} + +% first read in all \mathalpha symbols into a variable: +\ExplSyntaxOn +\cs_set:Npn \UnicodeMathSymbol #1#2#3#4 { + \str_if_eq:nnT {\mathalpha} {#3} { + \exp_not:n { \UnicodeMathSymbol {#1}{#2}{#3}{#4} } + } +} +\CatchFileEdef + \ALPHA{unicode-math-table.tex} + {\char_set_catcode_space:N \ } + +% now each time we print an alphabet we remove the slot; +% this ensures we won't miss anything + +\def\INPUT{\ALPHA} +\cs_new:Npn \SLOTS #1#2 { + \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 { + \bool_lazy_and:nnT + { \int_compare_p:n {##1 >= #1} } + { \int_compare_p:n {##1 <= #2} } + { + \PRINTLINE{##1}{##2}{##4} + } + } + \TABLE + \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 { + \bool_lazy_or:nnT + { \int_compare_p:n {##1 > #2} } + { \int_compare_p:n {##1 < #1} } + { + \exp_not:n { \UnicodeMathSymbol {##1}{##2}{##3}{##4} } + } + } + \edef\ALPHA{\ALPHA} +} + +\ExplSyntaxOff + +\subsection{Normal weight} + +\subsubsection{Upright Greek, uppercase} +\SLOTS{"00391}{"003A9} + +\subsubsection{Upright Greek, lowercase} +\SLOTS{"003B1}{"003F5} + +\subsubsection{Italic, Latin, uppercase} +\SLOTS{"1D434}{"1D44D} + +\subsubsection{Italic, Latin, lowercase} +\SLOTS{"1D44E}{"1D467} + +\subsubsection{Italic Greek, uppercase} +\SLOTS{"1D6E2}{"1D6FA} + +\subsubsection{Italic Greek, lowercase} +\SLOTS{"1D6FC}{"1D71B} + +\subsubsection{Script, Latin, uppercase} +\SLOTS{"1D49C}{"1D4B5} + +\subsubsection{Script, Latin, lowercase} +\SLOTS{"1D4B6}{"1D4CF} + +\subsubsection{Fraktur, Latin, uppercase} +\SLOTS{"1D504}{"1D51C} + +\subsubsection{Fraktur, Latin, lowercase} +\SLOTS{"1D51E}{"1D537} + +\subsubsection{Blackboard, Latin, uppercase} +\SLOTS{"1D538}{"1D550} + +\subsubsection{Blackboard, Latin, lowercase} +\SLOTS{"1D552}{"1D56B} + +\subsubsection{Sans serif, Latin, uppercase} +\SLOTS{"1D5A0}{"1D5B9} + +\subsubsection{Sans serif, Latin, lowercase} +\SLOTS{"1D5BA}{"1D5D3} + +\subsubsection{Italic sans serif, Latin, uppercase} +\SLOTS{"1D608}{"1D621} + +\subsubsection{Italic sans serif, Latin, lowercase} +\SLOTS{"1D622}{"1D63B} + +\subsubsection{Typewriter, Latin, uppercase} +\SLOTS{"1D670}{"1D689} + +\subsubsection{Typewriter, Latin, lowercase} +\SLOTS{"1D68A}{"1D6A3} + +\subsection{Bold} + +\subsubsection{Bold, Latin, uppercase} +\SLOTS{"1D400}{"1D419} + +\subsubsection{Bold, Latin, lowercase} +\SLOTS{"1D41A}{"1D433} + +\subsubsection{Bold Greek, uppercase} +\SLOTS{"1D6A8}{"1D6C0} + +\subsubsection{Bold Greek, lowercase} +\SLOTS{"1D6C2}{"1D6E1} + +\subsubsection{Bold italic, Latin, uppercase} +\SLOTS{"1D468}{"1D481} + +\subsubsection{Bold italic, Latin, lowercase} +\SLOTS{"1D482}{"1D49B} + +\subsubsection{Bold italic Greek, uppercase} +\SLOTS{"1D71C}{"1D734} + +\subsubsection{Bold italic Greek, lowercase} +\SLOTS{"1D736}{"1D755} + +\subsubsection{Bold script, Latin, uppercase} +\SLOTS{"1D4D0}{"1D4E9} + +\subsubsection{Bold script, Latin, lowercase} +\SLOTS{"1D4EA}{"1D503} + +\subsubsection{Bold fraktur, Latin, uppercase} +\SLOTS{"1D56C}{"1D585} + +\subsubsection{Bold fraktur, Latin, lowercase} +\SLOTS{"1D586}{"1D59F} + +\subsubsection{Bold sans serif, Latin, uppercase} +\SLOTS{"1D5D4}{"1D5ED} + +\subsubsection{Bold sans serif, Latin, lowercase} +\SLOTS{"1D5EE}{"1D607} + +\subsubsection{Bold italic sans serif, Latin, uppercase} +\SLOTS{"1D63C}{"1D655} + +\subsubsection{Bold italic sans serif, Latin, lowercase} +\SLOTS{"1D656}{"1D66F} + +\subsubsection{Bold sans serif Greek, uppercase} +\SLOTS{"1D756}{"1D76E} + +\subsubsection{Bold sans serif Greek, lowercase} +\SLOTS{"1D770}{"1D78F} + +\subsubsection{Bold italic sans serif Greek, uppercase} +\SLOTS{"1D790}{"1D7A8} + +\subsubsection{Bold italic sans serif Greek, lowercase} +\SLOTS{"1D7AA}{"1D7C9} + +\subsection{Miscellaneous} +\def\UnicodeMathSymbol#1#2#3#4{\PRINTLINE{#1}{#2}{#4}} +\TABLE + +\FINISH +\mbox{} +\end{document} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% This package is free software and may be redistributed and/or modified under +% the conditions of the LaTeX Project Public License, version 1.3c or higher +% (your choice): . +% ------------------------------------------------ +% Copyright 2006-2019 Will Robertson, LPPL "maintainer" +% Copyright 2010-2017 Philipp Stephani +% Copyright 2011-2017 Joseph Wright +% Copyright 2012-2015 Khaled Hosny +% ------------------------------------------------ +% +% ©/ + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% TeX-engine: luatex +%%% End: diff --git a/fonts/neo-euler/unimath-euler.pdf b/fonts/neo-euler/unimath-euler.pdf new file mode 100644 index 0000000000..2720d59281 Binary files /dev/null and b/fonts/neo-euler/unimath-euler.pdf differ diff --git a/fonts/theanodidot/README b/fonts/theanodidot/README index 0f73ea27c4..788af24a71 100644 --- a/fonts/theanodidot/README +++ b/fonts/theanodidot/README @@ -1,5 +1,5 @@ This is the README for the TheanoDidot package, -version 2019/07/15. +version 2022/09/26. This package provides the TheanoDidot font designed by Alexey Kryukov, in both TrueType and Type1 formats, with diff --git a/fonts/theanodidot/latex/TheanoDidot.sty b/fonts/theanodidot/latex/TheanoDidot.sty index 6fd60b3b91..163f92c692 100644 --- a/fonts/theanodidot/latex/TheanoDidot.sty +++ b/fonts/theanodidot/latex/TheanoDidot.sty @@ -1,6 +1,6 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{TheanoDidot} - [2019/07/15 (Bob Tennent and autoinst) Style file for Theano Didot fonts.] + [2022/09/26 (Bob Tennent and autoinst) Style file for Theano Didot fonts.] \RequirePackage{ifxetex,ifluatex,xkeyval,textcomp} @@ -44,7 +44,6 @@ \fi \iftheanodidot@ttf - \ifxetex\XeTeXtracingfonts=1\fi \defaultfontfeatures{ Ligatures = TeX , Scale = \TheanoDidot@scale , diff --git a/fonts/theanomodern/README b/fonts/theanomodern/README index 074f2e70c8..fa7725fa1a 100644 --- a/fonts/theanomodern/README +++ b/fonts/theanomodern/README @@ -1,5 +1,5 @@ This is the README for the TheanoModern package, -version 2019/07/27. +version 2022/09/26. This package provides the TheanoModern font designed by Alexey Kryukov, in both TrueType and Type1 formats, with diff --git a/fonts/theanomodern/latex/TheanoModern.sty b/fonts/theanomodern/latex/TheanoModern.sty index 1432e20c46..d5cb9c7a74 100644 --- a/fonts/theanomodern/latex/TheanoModern.sty +++ b/fonts/theanomodern/latex/TheanoModern.sty @@ -1,6 +1,6 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{TheanoModern} - [2019/07/27 (Bob Tennent and autoinst) Style file for Theano Modern fonts.] + [2022/09/26 (Bob Tennent and autoinst) Style file for Theano Modern fonts.] \RequirePackage{ifxetex,ifluatex,xkeyval,textcomp} @@ -44,7 +44,6 @@ \fi \iftheanomodern@ttf - \ifxetex\XeTeXtracingfonts=1\fi \defaultfontfeatures{ Ligatures = TeX , Scale = \TheanoModern@scale , diff --git a/fonts/theanooldstyle/README b/fonts/theanooldstyle/README index 73558243e0..c689c12e5a 100644 --- a/fonts/theanooldstyle/README +++ b/fonts/theanooldstyle/README @@ -1,5 +1,5 @@ This is the README for the TheanoOldStyle package, -version 2019/07/27. +version 2022/09/26. This package provides the TheanoOldStyle font designed by Alexey Kryukov, in both TrueType and Type1 formats, with diff --git a/fonts/theanooldstyle/latex/TheanoOldStyle.sty b/fonts/theanooldstyle/latex/TheanoOldStyle.sty index a00637772e..2756c5c84f 100644 --- a/fonts/theanooldstyle/latex/TheanoOldStyle.sty +++ b/fonts/theanooldstyle/latex/TheanoOldStyle.sty @@ -1,6 +1,6 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{TheanoOldStyle} - [2019/07/27 (Bob Tennent and autoinst) Style file for Theano OldStyle fonts.] + [2022/09/26 (Bob Tennent and autoinst) Style file for Theano OldStyle fonts.] \RequirePackage{ifxetex,ifluatex,xkeyval,textcomp} @@ -44,7 +44,6 @@ \fi \iftheanooldstyle@ttf - \ifxetex\XeTeXtracingfonts=1\fi \defaultfontfeatures{ Ligatures = TeX , Scale = \TheanoOldStyle@scale , diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md index c020d51d21..f3b01200a8 100644 --- a/macros/latex-dev/base/README.md +++ b/macros/latex-dev/base/README.md @@ -1,7 +1,7 @@ The LaTeX kernel ================ -Release 2022-11-01 pre-release 1 +Release 2022-11-01 pre-release 2 Overview -------- diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf index cf5ccb38f8..637fe1ad6b 100644 Binary files a/macros/latex-dev/base/alltt.pdf and b/macros/latex-dev/base/alltt.pdf differ diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf index 0f5d6bb7b0..e2b3128fa4 100644 Binary files a/macros/latex-dev/base/cfgguide.pdf and b/macros/latex-dev/base/cfgguide.pdf differ diff --git a/macros/latex-dev/base/cfgguide.tex b/macros/latex-dev/base/cfgguide.tex index 7694ef9b63..53f53d90b4 100644 --- a/macros/latex-dev/base/cfgguide.tex +++ b/macros/latex-dev/base/cfgguide.tex @@ -40,7 +40,12 @@ \title{Configuration options for \LaTeXe} \author{\copyright~Copyright 1998, 2001, 2003 \LaTeX\ Project Team.\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{cfgguide.tex} for full details.}% +} \date{14 February 2003} diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt index 0c9fbba1c2..874426197d 100644 --- a/macros/latex-dev/base/changes.txt +++ b/macros/latex-dev/base/changes.txt @@ -6,12 +6,74 @@ completeness or accuracy and it contains some references to files that are not part of the distribution. ================================================================================ +2022-09-20 Frank Mittelbach + + * ltfssdcl.dtx (section{Interface Commands}): + Drop any surplus 'm' in series argument of \DeclareSymbolFont and + \SetSymbolFont (gh/918) + +2022-09-17 Frank Mittelbach + + * ltfssdcl.dtx: + New logic for freezing math versions to avoid issues with \mathchoice (gh/921) + +2022-09-07 Frank Mittelbach + + * ltboxes.dtx (section{\LaTeX\ Box commands}): + Check for nested minipages and warn if the outer one contains footnotes (gh/168) + +2022-09-03 Frank Mittelbach + + * ltmath.dtx (subsubsection{The UNSORTED Rest}): + Guard \smash against reboxing (gh/517) + +2022-09-03 Frank Mittelbach + + * docstrip.dtx (subsection{The handling of options}): + Complete the handling of @@-modules from l3docstrip.dtx (gh/337) + for +/- lines it was not done (gh/903) + +2022-08-21 Frank Mittelbach + + * ltkeys.dtx (subsection{Option usage scope}): + Correct error message text for load-only keys. + +2022-08-18 Phelype Oleinik + + * ltfilehook.dtx (subsection{Preventing a package from loading}): + Inhibit checking the loaded version when package is load-disabled, + and write to the .log (gh/888). + +2022-08-13 Marcel Krüger + + * ltluatex.dtx: + Unregister mlist_to_hlist callback when no related callbacks are registered + +2022-08-10 Joseph Wright + + * ltcmd.dtx: + Add support for keyval detection using "={...}" syntax + +2022-08-07 Frank Mittelbach + + * lttextcomp.dtx: Make \DeclareEncodingSubset act globally so that + it can be used in fd files (gh/905) + +2022-07-23 Joseph Wright + + * ltkeys.dtx: Output 'friendly' package names in messages + 2022-07-10 David Carlisle * cmfonts.fdd: avoid EC sans serif fonts at small design sizes. The medium weight is bolder and wider than the bold extended. Scale the 8pt font for sizes 5,6,7. gh/879 +2022-06-23 Joseph Wright + + * ltoutput.dtx + Add registers \stockheight and \stockwidth + 2022-06-22 David Carlisle * ltkeys.dtx: @@ -125,7 +187,7 @@ All changes above are only part of the development branch for the next release. 2022-06-02 David Carlisle * ltfinal.dtx: add \NoCaseChange (previously available in the - textcase package) + textcase package) 2022-06-01 Frank Mittelbach @@ -167,7 +229,7 @@ All changes above are only part of the development branch for the next release. 2022-05-08 Marcel Krüger - * utf8ienc.dtx: + * utf8ienc.dtx: Declare Unicode codepoints U+3008 and U+3009 to be equivalent to their canonical equivalent codepoints 2329/232A (corresponding to \textlangle/\textrangle) @@ -257,7 +319,7 @@ All changes above are only part of the development branch for the next release. 2022-02-21 Joseph Wright - * ltkeys.dtx: + * ltkeys.dtx: More efficient module expansion 2022-02-19 Frank Mittelbach @@ -273,15 +335,15 @@ All changes above are only part of the development branch for the next release. 2022-02-16 Joseph Wright - * ltkeys.dtx: + * ltkeys.dtx: Allow for active characters in module argument \DeclareUnknownKeyHandler better than with the "s" 2022-02-15 Joseph Wright - * ltkeys.dtx: - Expand optional module argument in design-level commands - Add \DeclareUnknownKeysHandler + * ltkeys.dtx: + Expand optional module argument in design-level commands + Add \DeclareUnknownKeysHandler 2022-02-07 Joseph Wright @@ -308,7 +370,7 @@ All changes above are only part of the development branch for the next release. 2022-01-15 Joseph Wright * ltkeys.dtx: - Clear option data in \AtEndOfPackage hook + Clear option data in \AtEndOfPackage hook 2022-01-06 Joseph Wright @@ -391,12 +453,12 @@ All changes above are only part of the development branch for the next release. 2021-11-30 Joseph Wright - * ltclasses.dtx + * ltclasses.dtx New option handling routine using ltkeys 2021-11-26 Joseph Wright - * ltkeys.dtx + * ltkeys.dtx New file to integrate keyval option processing into the kernel 2021-11-17 Marcel Krüger @@ -421,7 +483,7 @@ All changes above are only part of the development branch for the next release. * doc.dtx: Replaced doc.dtx with V3 version. The old doc can be reactivated with \usepackage{doc}[=v2]. Hyperref usage (on by default) can be turned off with - \usepackage[hyperref=false]{doc}. + \usepackage[hyperref=false]{doc}. New options etc are documented: use texdoc doc (code documentation only partly done). @@ -437,9 +499,9 @@ All changes above are only part of the development branch for the next release. 2021-12-02 Joseph Wright - * ltcmd.dtx - Insert correct default values for optional arguments into the end - of environments + * ltcmd.dtx + Insert correct default values for optional arguments into the end + of environments ######################### # 2021-11-15 Release @@ -543,11 +605,11 @@ All changes above are only part of the development branch for the next release. Use \msg_... instead of \__kernel_msg... commands for normalized error and warning commands. - * ltfilehooks.dtx, lthooks.dtx, ltpara.dtx: - Internal changes to message names + * ltfilehook.dtx, lthooks.dtx, ltpara.dtx: + Internal changes to message names * ltcmd.dtx: - Check for end-of-enviroment commands + Check for end-of-enviroment commands 2021-08-25 Phelype Oleinik @@ -839,7 +901,7 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx (section{Plain \TeX}): Allocate \@inputcheck and \@unused early - so that they are before expl3 allocates more streams. + so that they are before expl3 allocates more streams. In the past this was done in ltfiles (gh/538). 2021-03-18 Phelype Oleinik @@ -972,7 +1034,7 @@ All changes above are only part of the development branch for the next release. 2021-01-31 David Carlisle * ltfilehook.dtx: set \protect to \string to avoid bad - expansion and possible non termination. github/481 + expansion and possible non termination. github/481 2021-01-27 Frank Mittelbach @@ -1240,13 +1302,13 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx (section{DocInclude}): Quotes around the aux file name removed, - they are not needed and upset BibTeX (gh/400) + they are not needed and upset BibTeX (gh/400) 2020-10-04 Frank Mittelbach * ltfiles.dtx (section{File Handling}): Quotes around the aux file name removed, - they are not needed and upset BibTeX (gh/400) + they are not needed and upset BibTeX (gh/400) 2020-10-04 Frank Mittelbach @@ -1267,7 +1329,7 @@ All changes above are only part of the development branch for the next release. * ltfssini.dtx (section{Custom series settings for main document families}): \bfdefault@previous was called \bfseries@previous by mistake \mddefault@previous was called \mdseries@previous by mistake - (gh/395) + (gh/395) 2020-09-26 Frank Mittelbach @@ -1717,7 +1779,7 @@ All changes above are only part of the development branch for the next release. * ltfssini.dtx: Added some debugging code, but not extracted at the moment. Make the \ifx selection in \bfseries outside - of \fontseries argument so that it is not done several times. + of \fontseries argument so that it is not done several times. When \fontseriesforce is used do not auto-update the series if the family changes (gh/277) Recognize current family if it is not a ``meta'' family and @@ -1752,8 +1814,8 @@ All changes above are only part of the development branch for the next release. 2020-03-07 Marcel Krüger - * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist - and other engine callbacks hidden by user-defined ones + * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist + and other engine callbacks hidden by user-defined ones ######################### # 2020-02-02 PL 1 Release @@ -1822,11 +1884,11 @@ All changes above are only part of the development branch for the next release. 2020-01-05 David Carlisle * base/ltclass.dtx: Support more write streams for - filecontents in LuaTeX (gh/238) + filecontents in LuaTeX (gh/238) 2020-01-05 Marcel Fabian Krüger - * base/ltluatex.dtx: New reverselist callback type. + * base/ltluatex.dtx: New reverselist callback type. 2019-12-24 Frank Mittelbach @@ -1908,13 +1970,13 @@ All changes above are only part of the development branch for the next release. 2019-11-14 Joseph Wright - * ltfinal.dtx: Add loader for ltexpl - * ltexpl.dtx: New file for pre-loading expl3 + * ltfinal.dtx: Add loader for ltexpl + * ltexpl.dtx: New file for pre-loading expl3 2019-11-11 David Carlisle * ltfiles.dtx: use \quote@name again for \@filef@und in - \@iffileonpath + \@iffileonpath 2019-11-02 Frank Mittelbach @@ -1942,7 +2004,7 @@ All changes above are only part of the development branch for the next release. 2019-11-09 David Carlisle * ltfiles.dtx: More filename normalisation: expand before - removing quotes. + removing quotes. ######################### # 2019-10-01 PL 3 Release @@ -1960,7 +2022,7 @@ All changes above are only part of the development branch for the next release. 2019-11-09 David Carlisle * ltfiles.dtx: More filename normalisation: expand before - removing quotes. + removing quotes. ######################### # 2019-10-01 PL 2 Release @@ -2172,7 +2234,7 @@ All changes above are only part of the development branch for the next release. 2018-11-18 Enrico Gregorio - * ltoutenc.dtx + * ltoutenc.dtx Added \Hwithstroke and \hwithstroke 2018-11-09 Frank Mittelbach @@ -2274,17 +2336,17 @@ All changes above are only part of the development branch for the next release. * ltfinal.dtx: Make \UTFviii@undefined@err and \UTFviii@invalid@err also safe for initial file name for invalid UTF-8 and non-UTF-8 filesystems. - issue #48 + issue #48 2018-05-08 David Carlisle * ltclass.dtx: Update to suspicious rollback code for issue #43 - Make the suspicious rollback message a warning not error. + Make the suspicious rollback message a warning not error. Make the current and latest options to latexrelease set the - default rollback request to 0 so package rollback is disabled. + default rollback request to 0 so package rollback is disabled. ######################### # 2018-04-01 PL 4 Release @@ -2346,7 +2408,7 @@ All changes above are only part of the development branch for the next release. 2018-03-30 David Carlisle * ltfinal.dtx: add \UseRawInputEncoding and further - adjustments to the input encoding setup. + adjustments to the input encoding setup. 2018-03-27 Frank Mittelbach @@ -2360,7 +2422,7 @@ All changes above are only part of the development branch for the next release. * utf8ienc.dtx: Add \UTFviii@invalid * inputenc.dtx: Make \inputencoding{..} do nothing if it - specified the current encoding. + specified the current encoding. * ltfinal.dtx: Default to UTF-8 input encoding @@ -2384,7 +2446,7 @@ All changes above are only part of the development branch for the next release. 2018-02-01 Frank Mittelbach * doc.dtx: Only use\DocStyleParms if defined - (previously the test defined it but this will change in the kernel) + (previously the test defined it but this will change in the kernel) 2018-01-08 David Carlisle @@ -2397,12 +2459,12 @@ All changes above are only part of the development branch for the next release. * ltvers.dtx: possible 2018-02-01 release * ltdefns.dtx: new \@ifundefined definitions to avoid setting - csname to \relax + csname to \relax 2017-12-17 Frank Mittelbach * latexrelease.dtx: Add \latexreleaseversion info - to \ProvidesPackage output so that different versions announce + to \ProvidesPackage output so that different versions announce themselves properly 2017-04-20 David Carlisle @@ -2507,7 +2569,7 @@ All changes above are only part of the development branch for the next release. 2017-02-18 Joseph Wright * ltluatex.dtx: parametrise Lua access to register - allocation count data + allocation count data 2017-02-12 David Carlisle @@ -2517,7 +2579,7 @@ All changes above are only part of the development branch for the next release. 2017-01-28 David Carlisle * build.lua bugs.txt, manifest.txt: drop latexbug.tex from the - distribution + distribution * ltoutenc.dtx, utf8ienc.dtx: add \= for YyGg U+0232, U+0233, U+1E20, U+1E21 @@ -2616,12 +2678,12 @@ All changes above are only part of the development branch for the next release. 2016-10-15 Joseph Wright - * ltdirchk.dtx: Require e-TeX + * ltdirchk.dtx: Require e-TeX 2016-10-04 David Carlisle * ltoutput.dtx: Avoid deadcycles error building float pages - with negative sized floats + with negative sized floats 2016-10-02 David Carlisle @@ -2740,8 +2802,8 @@ All changes above are only part of the development branch for the next release. 2016-01-04 Joseph Wright - * ltfinal.dtx: Drop loading XeTeX character class data, - adjust \newXeTeXintercharclass to allocate from 1 not 4. + * ltfinal.dtx: Drop loading XeTeX character class data, + adjust \newXeTeXintercharclass to allocate from 1 not 4. 2015-12-30 David Carlisle @@ -2753,8 +2815,8 @@ All changes above are only part of the development branch for the next release. 2015-12-10 Joseph Wright - * ltfinal.dtx: Load Unicode settings via new common system - (generic package "unicode-data"). + * ltfinal.dtx: Load Unicode settings via new common system + (generic package "unicode-data"). 2015-12-02 David Carlisle @@ -2804,10 +2866,10 @@ All changes above are only part of the development branch for the next release. 2015-10-02 Joseph Wright - * ltvers.dtx: PL1 + * ltvers.dtx: PL1 - * ltdirchk.dtx: Allow for full reversal of LuaTeX support - * ltluatex.dtx + * ltdirchk.dtx: Allow for full reversal of LuaTeX support + * ltluatex.dtx ######################### # 2015/10/01 Release @@ -2857,12 +2919,12 @@ All changes above are only part of the development branch for the next release. 2015-08-06 Joseph Wright - * Store Unicode data more efficiently + * Store Unicode data more efficiently 2015-07-30 Joseph Wright * README.txt: Retain extension when releasing - (CTAN policy change) + (CTAN policy change) ######################### @@ -2888,18 +2950,18 @@ All changes above are only part of the development branch for the next release. * ltfinal.dtx: set version to 2015/01/01 PL 1, and remove ltpatch.ltx system. - * ltfsscmp.dtx: use 0000/00/00 date for old version. + * ltfsscmp.dtx: use 0000/00/00 date for old version. 2015-06-20 Joseph Wright - * ltunicode.dtx: Include first token in a range in - catcode settings. + * ltunicode.dtx: Include first token in a range in + catcode settings. 2015-06-19 David Carlisle * ltvers.dtx: date - * ltplain.dtx: remove duplicated (old) definition of \newtoks and + * ltplain.dtx: remove duplicated (old) definition of \newtoks and use -1 for the first upper bound on register types that need a contiguous range so that the allocation is never restarted at 256. @@ -2913,7 +2975,7 @@ All changes above are only part of the development branch for the next release. 2015-05-11 Joseph Wright - * ltunicode.dtx: Apply East Asian catcode settings to LuaTeX + * ltunicode.dtx: Apply East Asian catcode settings to LuaTeX 2015-05-10 @@ -2979,7 +3041,7 @@ All changes above are only part of the development branch for the next release. 2015-02-22 * latex209.dtx: Dropped \@no@font@optfalse in various places - - no longer provided by ltfsscmp.dtx. + - no longer provided by ltfsscmp.dtx. 2015-02-22 @@ -3037,7 +3099,7 @@ All changes above are only part of the development branch for the next release. 2015-01-14 David Carlisle * ltspace.dtx: Modify \addpenalty so it doesn't add redundant - skips (+ and - the same value) + skips (+ and - the same value) * fixltx2e.dtx: remove code from fixltx2e, add a stub package warning. @@ -3080,7 +3142,7 @@ All changes above are only part of the development branch for the next release. * latexversion.dtx: New option handling * ltvers.dtx: define \IncludeInRelease and latexvesrsion date - docstrip guards + docstrip guards 2015-01-03 Joseph Wright @@ -3120,8 +3182,8 @@ All changes above are only part of the development branch for the next release. 2014-11-07 Joseph Wright - * Rename 00readme.txt to README (named README.txt in the development - repository) + * Rename 00readme.txt to README (named README.txt in the development + repository) ###################### # 2014/05/01 Release @@ -3165,7 +3227,7 @@ All changes above are only part of the development branch for the next release. 2014-04-30 David Carlisle * inputenc.dtx: Allow (x-)ascii and utf8x aliases for utf8 in - xetex/luatex + xetex/luatex 2014-04-27 @@ -3224,7 +3286,7 @@ All changes above are only part of the development branch for the next release. 2011-02-24 Frank Mittelbach * lppl.tex: removed spurious \null from the source that generates - an empty line. + an empty line. 2010-08-17 Frank Mittelbach @@ -3245,7 +3307,7 @@ All changes above are only part of the development branch for the next release. 2009-10-20 Will Robertson - * ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko + * ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko ###################### # 2009/09/24 Release @@ -3275,12 +3337,12 @@ All changes above are only part of the development branch for the next release. 2007-10-29 Frank Mittelbach * exscale.dtx: Use box 0 within group to avoid changing this - scratch register (some bug reported on ctt) + scratch register (some bug reported on ctt) 2007-10-19 Frank Mittelbach * classes.dtx: Explain why \@mkboth is insde the heading - arg for \tableofcontents (pr/3285 and pr/3984) + arg for \tableofcontents (pr/3285 and pr/3984) 2007-08-31 Frank Mittelbach @@ -3448,7 +3510,7 @@ All changes above are only part of the development branch for the next release. 2004-07-23 Frank Mittelbach * doc.dtx: environment names incorrectly sorted in - index (pr/3615) + index (pr/3615) 2004-05-08 Frank Mittelbach @@ -3496,13 +3558,13 @@ All changes above are only part of the development branch for the next release. 2004-02-16 Frank Mittelbach * classes.dtx (section*{\indexname}]): Moved setting of \columnsep and - \columnseprule later to avoid affecting the wrong page (pr/3616) + \columnseprule later to avoid affecting the wrong page (pr/3616) 2004-02-15 Chris Rowley * ltspace.dtx - Added better \nobreakdashes + Added better \nobreakdashes 2004-02-13 Frank Mittelbach @@ -3522,7 +3584,7 @@ All changes above are only part of the development branch for the next release. * utf8ienc.dtx: no newlines in error messages allowed (due to inputenc) space in the wrong place "\count @64" - added commands already defined in the kernel (found by BG) + added commands already defined in the kernel (found by BG) added test file pr/3480 2004-02-04 Frank Mittelbach @@ -3536,31 +3598,31 @@ All changes above are only part of the development branch for the next release. * ltoutput.dtx - Small fix for \enlargethispage, pr/3528 + Small fix for \enlargethispage, pr/3528 2004-02-02 Chris Rowley * inputenc.dtx - Tidied up a bit more of the code + Tidied up a bit more of the code 2004-02-02 Chris Rowley * fontdef.dtx - Many math things made robust + Many math things made robust - Added two `bigtriangle synonyms' for compatibility with the - stmaryrd symbols package + Added two `bigtriangle synonyms' for compatibility with the + stmaryrd symbols package 2004-02-02 Chris Rowley * ltoutenc.dtx - Added \textbigcircle to OMS + Added \textbigcircle to OMS - Fixed bad bug in \DeclareTextSymbol as per Heiko - in pr/3563 + Fixed bad bug in \DeclareTextSymbol as per Heiko + in pr/3563 2004-02-02 Chris Rowley @@ -3614,7 +3676,7 @@ All changes above are only part of the development branch for the next release. 2003-12-16 Frank Mittelbach * ltoutput.dtx: Ensure that \@elt has a defined - state in \@makecol (pr/3586) + state in \@makecol (pr/3586) 2003-12-11 Frank Mittelbach @@ -3740,9 +3802,9 @@ All changes above are only part of the development branch for the next release. being too old (though in fact it is 30 months) * ltoutenc.dtx: Corrected \cs{c} for T1 (pr/3442) - Added \cs{textbardbl} (pr/3400) + Added \cs{textbardbl} (pr/3400) Definition of \textexclamdown changed (pr/3368) - Definition of \textquestiondown changed (pr/3368) + Definition of \textquestiondown changed (pr/3368) Changed def for \textregistered to avoid small caps (pr/3420) 2002-06-16 Frank Mittelbach @@ -3766,9 +3828,9 @@ All changes above are only part of the development branch for the next release. 2001-07-12 Chris Rowley - * inputenc.dtx: + * inputenc.dtx: - Added latin9.def (from Karsten Tinnefeld) + Added latin9.def (from Karsten Tinnefeld) 2001-07-12 Chris Rowley @@ -3806,20 +3868,20 @@ All changes above are only part of the development branch for the next release. * ltoutenc.dtx - Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def - files, pr/3255 + Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def + files, pr/3255 - Made compatible T1 and OT1 accents (on i and \i), pr/3295 + Made compatible T1 and OT1 accents (on i and \i), pr/3295 2001-05-28 Chris Rowley * usrguide.tex - Described short-form for guillemets in T1 encoding, pr/3192 + Described short-form for guillemets in T1 encoding, pr/3192 2001-05-28 Chris Rowley - * ltxguide.cls: + * ltxguide.cls: Added some definitions @@ -3913,9 +3975,9 @@ All changes above are only part of the development branch for the next release. 2000-07-31 Chris Rowley - * ltoutput.dtx: + * ltoutput.dtx: - Changed handling of space above footnotes. + Changed handling of space above footnotes. 2000-07-29 Frank Mittelbach @@ -3961,13 +4023,13 @@ All changes above are only part of the development branch for the next release. 2000-06-01 Chris Rowley - * ltpage.dtx: + * ltpage.dtx: - Changed grouping method in \markboth and \markright - (see also pr/3203) + Changed grouping method in \markboth and \markright + (see also pr/3203) - Less expansion by using token register in \markboth - and \markright + Less expansion by using token register in \markboth + and \markright 2000-05-26 Frank Mittelbach @@ -3977,14 +4039,14 @@ All changes above are only part of the development branch for the next release. 2000-05-22 Chris Rowley - * doc.dtx: + * doc.dtx: - Less obscure wording at start of index? (pr/3202) + Less obscure wording at start of index? (pr/3202) - * inputenc.dtx: + * inputenc.dtx: - Added latin2 option for textdegree (pr/3207) - Updated documantaion + Added latin2 option for textdegree (pr/3207) + Updated documantaion * ltpage.dtx: reimplementation of \markboth and \markright to avoid problem with expanion at wrong point in time in some cases @@ -4032,7 +4094,7 @@ All changes above are only part of the development branch for the next release. 2000-01-07 Rainer Schoepf * ltmiscen.dtx: Disable hyphenation in verbatim even if the font - allows it. + allows it. 1999-12-19 Frank Mittelbach @@ -4072,7 +4134,7 @@ All changes above are only part of the development branch for the next release. 1999-10-28 Frank Mittelbach * ltoutenc.dtx (subsubsection{Declaration commands}): - Give \accent@spacefactor a default definition to prevent horrible + Give \accent@spacefactor a default definition to prevent horrible death in case or incorrect input (pr/3084) 1999-10-26 Frank Mittelbach @@ -4199,7 +4261,7 @@ All changes above are only part of the development branch for the next release. 1999-05-09 Frank Mittelbach * cmfonts.fdd: docstrip `nowarn' guard was the wrong way around - for font OT1/cmr/bx/ui (pr/3036) + for font OT1/cmr/bx/ui (pr/3036) 1999-04-04 Frank Mittelbach @@ -4207,21 +4269,21 @@ All changes above are only part of the development branch for the next release. 1999-04-02 Chris Rowley - * inputenc.dtx + * inputenc.dtx - Corrected cp852 for pr/2992 + Corrected cp852 for pr/2992 - * ltboxex.dtx + * ltboxex.dtx - Made robust the flag in \@iiiparbox: pr/2975} + Made robust the flag in \@iiiparbox: pr/2975} - * ltdefns.dtx + * ltdefns.dtx - Fixed new version of \@yargdef: pr/3013 + Fixed new version of \@yargdef: pr/3013 - * usrguide.tex + * usrguide.tex - Added to documentation of uc/lc list + Added to documentation of uc/lc list 1999-03-22 Rainer Schoepf @@ -4229,11 +4291,11 @@ All changes above are only part of the development branch for the next release. 1999-03-12 Chris Rowley - * clsguide.tex + * clsguide.tex Added to documentation of options - * cyrguide.tex: + * cyrguide.tex: Further editing @@ -4255,7 +4317,7 @@ All changes above are only part of the development branch for the next release. 1999-03-03 Chris Rowley - * ltxguide.cls: + * ltxguide.cls: Added some definitions @@ -4271,7 +4333,7 @@ All changes above are only part of the development branch for the next release. * handbuch.err: Added. * install.txt: Add link to truetex.txt and vtex.txt. Remove - timings for slow computers. + timings for slow computers. 1999-02-27 Frank Mittelbach @@ -4306,7 +4368,7 @@ All changes above are only part of the development branch for the next release. 1999-02-10 Rainer Schoepf - * letter.dtx: Reset footnote counter for every new letter (PR + * letter.dtx: Reset footnote counter for every new letter (PR 2957). 1999-02-09 Chris Rowley @@ -4375,10 +4437,10 @@ All changes above are only part of the development branch for the next release. * bugs.txt: Added description how to follow up a problem report. * latexbugs.tex: Added description how to follow up a problem - report. + report. * classes.dtx: Added check of @noskipsec switch in \part for - article class. + article class. 1999-01-07 Frank Mittelbach @@ -4391,7 +4453,7 @@ All changes above are only part of the development branch for the next release. 1999-01-06 Rainer Schoepf * emtextds.txt: Added to distribution. Installation procedure for - Walter Schmidt's emTeX/TDS for OS/2. + Walter Schmidt's emTeX/TDS for OS/2. * ltoutenc.dtx: Minor documentation fix (PR 2939). @@ -4411,24 +4473,24 @@ All changes above are only part of the development branch for the next release. 1999-01-05 Rainer Schoepf * fontdef.dtx: Need special protection for character - \texttt{\char62} in \cs{changes} entry, as this is the makeindex - actualchar. + \texttt{\char62} in \cs{changes} entry, as this is the makeindex + actualchar. 1998-12-28 Rainer Schoepf * doc.dtx: The case-changing trick in the definition of - \short@macro didn't work, as the category code was changed inside - the macro replacement text, not during the definition. + \short@macro didn't work, as the category code was changed inside + the macro replacement text, not during the definition. 1998-12-27 Rainer Schoepf * doc.dtx (subsection{Macros for generating index entries}): Use - \string, not \protect in argument of \special@index. + \string, not \protect in argument of \special@index. 1998-12-20 Frank Mittelbach * doc.dtx (subsection{Macros for generating index entries}): - Correctly handle second index entry for \SpecialMainEnvIndex + Correctly handle second index entry for \SpecialMainEnvIndex by using \special@index not \index (pr/2928) 1998-12-01 Frank Mittelbach @@ -4455,7 +4517,7 @@ All changes above are only part of the development branch for the next release. 1998-09-17 Frank Mittelbach * cfgguide.tex (section Configuration files for - standard packages and classes]): + standard packages and classes]): added info about ltnews.cfg (pr/2875) * ltoutenc.dtx: Explicitly set \spacefactor after \accent in @@ -4470,10 +4532,10 @@ All changes above are only part of the development branch for the next release. 1998-08-17 Rainer Schoepf * (Various source files): Replaced old form `commandname by - \cs{commandname} in changes entries. + \cs{commandname} in changes entries. * (Various source files): Replaced \cmd{\commandname} by - \cs{commandname} in changes entries. + \cs{commandname} in changes entries. * ltfssdcl.dtx: Corrected documentation glitch in changes entry. @@ -4520,7 +4582,7 @@ All changes above are only part of the development branch for the next release. Fixed wrong code in \t Added masc/fem ords defaults Swapped acutedbl and gravedbl in TS1 - Renamed macron in TS1 + Renamed macron in TS1 * pict2e.dtx: @@ -4580,8 +4642,8 @@ All changes above are only part of the development branch for the next release. 1998-05-13 Rainer Schoepf * lttab.dtx Use \setlength to set size of p-column and for - argument of tabular* environment, so that the benefits of the - calc package apply. + argument of tabular* environment, so that the benefits of the + calc package apply. 1998-05-10 Frank Mittelbach @@ -4660,8 +4722,8 @@ All changes above are only part of the development branch for the next release. 1998-03-27 Frank Mittelbach * cmfonts.fdd: added substiution for cmss/bx/sc to produce - cmr/m/sc; much better would be to have the real thing --- - anybody cares to contribute those to the ec fonts? (pr2586) + cmr/m/sc; much better would be to have the real thing --- + anybody cares to contribute those to the ec fonts? (pr2586) 1998-03-20 Frank Mittelbach @@ -4692,7 +4754,7 @@ All changes above are only part of the development branch for the next release. 1998-02-06 Frank Mittelbach * inputenc.dtx: fixed typo iso-8859-5 should have been iso-8859-9 - (pr/2748) + (pr/2748) 1998-01-31 Chris Rowley @@ -4711,16 +4773,16 @@ All changes above are only part of the development branch for the next release. anything to the stripped file (pr/2726) * ltclass.dtx: make \& locally safe in \ProvidesFile /2702 - fix up pkgindoc.sty which probably hasn't worked since - {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} + fix up pkgindoc.sty which probably hasn't worked since + {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} 1998-01-16 David Carlisle * ltoutenc.dtx: Fix \t for latex/2734. * ltclass.dtx: make \& locally safe in \ProvidesFile /2702 - fix up pkgindoc.sty which probably hasn't worked since - {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} + fix up pkgindoc.sty which probably hasn't worked since + {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} 1998-01-16 David Carlisle @@ -4792,7 +4854,7 @@ All changes above are only part of the development branch for the next release. Changed \mathdegree to \textdegree \inputencoding now works only in vmode Temporarily fixed \IeC - Merged latin1 code with ansinew/cp1252 + Merged latin1 code with ansinew/cp1252 Changed `\k{}' to `\k\ ' Added textcomp package Corrections and additions to documentation @@ -4810,7 +4872,7 @@ All changes above are only part of the development branch for the next release. * doc.dtx: Fix small documentation glitch. * ltpatch.ltx: Replace reference to ,,June'' release by ,,last'' - release. + release. 1997-12-17 David Carlisle @@ -4825,13 +4887,13 @@ All changes above are only part of the development branch for the next release. 1997-12-15 Rainer Schoepf * clsguide.tex (section{Upgrading \LaTeX~2.09 classes and - packages}): Added documentation for \if@compatibility switch - (supplied by Barbara Beeton). + packages}): Added documentation for \if@compatibility switch + (supplied by Barbara Beeton). 1997-12-11 Rainer Schoepf * usrguide.tex (subsection{\LaTeXe---The new \LaTeX~release}): - Improved the sentence about formerly separate formats. + Improved the sentence about formerly separate formats. * ltoutput.dtx: Documentation fixes. @@ -4845,11 +4907,11 @@ All changes above are only part of the development branch for the next release. * ltnews08.tex: - Revised text + Revised text * ltnews.cls: - Added definition environment + Added definition environment 1997-11-23 David Carlisle @@ -4907,23 +4969,23 @@ All changes above are only part of the development branch for the next release. 1997-10-21 Rainer Schoepf * ltfssbas.dtx: Added \makeatletter to \nfss@catcodes (and removed - it from \try@load@font@shape). + it from \try@load@font@shape). * ltdefns.dtx: Change \renew@command to use \begingroup/\endgroup - for grouping, to avoid generation of empty math atoms. + for grouping, to avoid generation of empty math atoms. 1997-10-20 Rainer Schoepf * ltfinal.dtx: Removed \aa and \AA from \@uclclist as these are - macros. + macros. * slifonts.fdd(ullasy.fd): Removed superfluous pair of braces at - end of \DeclareFontFamily command. + end of \DeclareFontFamily command. 1997-10-17 Rainer Schoepf * ltfntcmd.dtx: Moved check for vertical mode from - \DeclareTextFontCommand to \check@nocorr@. + \DeclareTextFontCommand to \check@nocorr@. 1997-10-14 David Carlisle @@ -4936,7 +4998,7 @@ All changes above are only part of the development branch for the next release. * patches.txt: --release--date--goes--here-- * Makefile: install.txt patches.txt ltpatch.ltx - --release--date--goes--here-- + --release--date--goes--here-- 1997-10-11 David Carlisle @@ -4964,13 +5026,13 @@ All changes above are only part of the development branch for the next release. 1997-10-08 Rainer Schoepf * ltlogos.dtx: Simplified macro \LaTeX: use only \check@mathfonts - to force loading of fonts suitable for the letter `A'. + to force loading of fonts suitable for the letter `A'. 1997-10-06 Rainer Schoepf * ltcounts.dtx: Replaced \@Roman by a new version that is fully - expandable, so that the correct sequence of letters is written to - files. + expandable, so that the correct sequence of letters is written to + files. 1997-09-30 Johannes Braams @@ -4990,7 +5052,7 @@ All changes above are only part of the development branch for the next release. 1997-09-09 Frank Mittelbach * ltdefns.dtx: Use \begingroup \endgroup instead of { ... } - to avoid generating math ords if used in math mode. (pr/2573) + to avoid generating math ords if used in math mode. (pr/2573) 1997-09-08 Frank Mittelbach @@ -5000,28 +5062,28 @@ All changes above are only part of the development branch for the next release. 1997-08-19 Rainer Schoepf * inputenc.dtx(latin2.def,cp852.def): Replaced \dh and \DH by \dj - and \DJ. + and \DJ. * inputenc.dtx(ansinew.def): Exchanged codes for \textendash and - \textemdash. + \textemdash. * inputenc.dtx: Enclosed all encoding definition files by - \makeatletter/\makeatother. + \makeatletter/\makeatother. 1997-08-15 Rainer Schoepf * slides.dtx: Added initialization of \leftmargin to \@listi - (obviously forgotten and never noticed before). + (obviously forgotten and never noticed before). 1997-08-05 Rainer Schoepf * ltoutenc.dtx: Corrected order of arguments in \UseTextSymbol - example (PR latex/2572). + example (PR latex/2572). 1997-07-31 Rainer Schoepf * cfgguide.tex: Put braces around argument of \sffamily, - to keep latex2html happy. + to keep latex2html happy. 1997-07-20 Frank Mittelbach @@ -5045,7 +5107,7 @@ All changes above are only part of the development branch for the next release. * slides.ins: Replaced slides.fdd by slifonts.fdd. * slides.fdd: Renamed to slifonts.fdd, there is a name clash with - slides.dtx when run through LaTeX. + slides.dtx when run through LaTeX. * truetex.txt: New version by Richard Kinch. @@ -5210,7 +5272,7 @@ All changes above are only part of the development branch for the next release. internal/2513 * latexbug.tex: Fix save stack problem, internal/2514, and - other minor improvements. + other minor improvements. 1997-06-02 David Carlisle @@ -5219,10 +5281,10 @@ All changes above are only part of the development branch for the next release. 1997-05-26 Rainer Schoepf * slides.fdd: Removed spaces in and around arguments to - \DeclareFontShape. + \DeclareFontShape. * cmfonts.fdd: Removed spaces in and around arguments to - \DeclareFontShape and \EC@family. + \DeclareFontShape and \EC@family. 1997-05-22 Rainer Schoepf @@ -5230,7 +5292,7 @@ All changes above are only part of the development branch for the next release. the logo works with non-zero values of \mathsurround. * ltfsstrc.dtx (section{Handling Options}): Replaced \\ by - \MessageBreak in Option `pausing' (suggested by Donald Arseneau). + \MessageBreak in Option `pausing' (suggested by Donald Arseneau). 1997-05-10 Chris Rowley @@ -5250,11 +5312,11 @@ All changes above are only part of the development branch for the next release. Added latin3.def Some rearrangments - Removed long lines + Removed long lines * ltspace.dtx - Made \newline robust + Made \newline robust * ltoutenc.dtx @@ -5467,9 +5529,9 @@ All changes above are only part of the development branch for the next release. * inputenc.dtx: resend patch from Sept 11 - Added ts1enc.def (but it is not unpacked) + Added ts1enc.def (but it is not unpacked) Changed copyright, underscore (\_) and registered - Added \leavevmode to compwordmark + Added \leavevmode to compwordmark Added hex index tabs (experimental) 1996-11-05 Chris Rowley @@ -5487,13 +5549,13 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx: - Use \hbox to in \dotfill + Use \hbox to in \dotfill 1996-11-04 Rainer Schoepf * lterror.dtx (autoload version): Move \@nodocument into kernel, - so that it can be \let to \relax in \begin{document}. + so that it can be \let to \relax in \begin{document}. 1996-11-01 David Carlisle @@ -5527,22 +5589,22 @@ All changes above are only part of the development branch for the next release. * ltoutenc.dtx - Removed defs of \aa \AA - Removed \@strip@args (no longer used) - Corrected documentation + Removed defs of \aa \AA + Removed \@strip@args (no longer used) + Corrected documentation * inputenc.dtx - Added cp865.def - Added \textasteriskcentered - Removed \aa \AA as internal forms - Other minor additions and corrections to .def files + Added cp865.def + Added \textasteriskcentered + Removed \aa \AA as internal forms + Other minor additions and corrections to .def files * ltplain.dtx Removed math from \dotfill - Added \aa and \AA - Updated and corrected documention + Added \aa and \AA + Updated and corrected documention 1996-10-25 Chris Rowley @@ -5560,7 +5622,7 @@ All changes above are only part of the development branch for the next release. Added local settings of flags in \@arrayparboxrestore: dangerous! - Used \@setminipage in minipages + Used \@setminipage in minipages * ltfloat.dtx: @@ -5584,14 +5646,14 @@ All changes above are only part of the development branch for the next release. * ltlists.dtx - Use \setboz\z@ to remove parindent in \@item + Use \setboz\z@ to remove parindent in \@item Set \clubpenalty correctly in \@item Do not reset \@nobreak unconditionally Added documentation * ltsect.dtx - Use \setboz\z@ to remove parindent in \@xsect + Use \setboz\z@ to remove parindent in \@xsect Added documentation 1996-10-23 David Carlisle @@ -5635,7 +5697,7 @@ All changes above are only part of the development branch for the next release. 1996-10-11 David Carlisle * ds/docstrip.dtx: Add initex support, and - auto setting of \batchfile from \jobname to the new + auto setting of \batchfile from \jobname to the new `TDS' version from Marcin. 1996-10-09 David Carlisle @@ -5695,21 +5757,21 @@ All changes above are only part of the development branch for the next release. * ltspace.dtx - Added \@xobeysp linked to \nobreakspace + Added \@xobeysp linked to \nobreakspace 1996-09-26 Rainer Schoepf * cmfonts.ins: Added guard `nowarn' to generation of OT1cmtt.fd - file, to avoid annoying substitution messages if a bold typewriter - font is selected (as, for example, in section headings). + file, to avoid annoying substitution messages if a bold typewriter + font is selected (as, for example, in section headings). * newdc.ins: Added guard `nowarn' to generation of T1cmtt.fd file, - to avoid annoying substitution messages if a bold typewriter font - is selected (as, for example, in section headings). + to avoid annoying substitution messages if a bold typewriter font + is selected (as, for example, in section headings). * cmfonts.fdd (subsubsection{Computer Modern Typewriter}), Added - silent substitutions for T1 bold extended typewriter fonts (new - version). + silent substitutions for T1 bold extended typewriter fonts (new + version). 1996-09-21 Chris Rowley @@ -5882,8 +5944,8 @@ All changes above are only part of the development branch for the next release. * clsguide.tex: - Updated for new release - General minor edits + Updated for new release + General minor edits 1996-06-13 David Carlisle @@ -5924,18 +5986,18 @@ All changes above are only part of the development branch for the next release. * ltnews05.tex: - Revised text + Revised text * ltnews.cls: - Changed fonts for lw35 option, for logical and aesthetic - reasons - Added support for T1 encoding with lw35 option - Corrected grammar in footer + Changed fonts for lw35 option, for logical and aesthetic + reasons + Added support for T1 encoding with lw35 option + Corrected grammar in footer * fntguide.tex: - Updated for new release + Updated for new release 1996-06-06 David Carlisle @@ -5954,7 +6016,7 @@ All changes above are only part of the development branch for the next release. 1996-06-04 Rainer Schoepf * ltmiscen.dtx: \verbatim@noligs@list now processed after - \dospecials (PR 2138). + \dospecials (PR 2138). 1996-06-03 Chris Rowley @@ -5983,14 +6045,14 @@ All changes above are only part of the development branch for the next release. 1996-05-23 Chris Rowley - * ltoutenc.dtx + * ltoutenc.dtx - Extra documentation + Extra documentation - * ltoutput.dtx + * ltoutput.dtx - Changed test for a text page full of floats - Tidied documentation + Changed test for a text page full of floats + Tidied documentation 1996-05-23 David Carlisle @@ -6025,23 +6087,23 @@ All changes above are only part of the development branch for the next release. 1996-05-17 Chris Rowley - * fontdef.dtx + * fontdef.dtx - Removed \@@sqrt + Removed \@@sqrt - * slides.dtx + * slides.dtx - Removed \@@sqrt + Removed \@@sqrt 1996-05-17 David Carlisle * slides.fdd: Force \hyphenchar of OT1 fonts to 45, in case - \defaulthyphenchar has changed. - Remove some spurious extra empty arguments to \DeclareFontFamily + \defaulthyphenchar has changed. + Remove some spurious extra empty arguments to \DeclareFontFamily * cmfonts.fdd: Force \hyphenchar of OT1 fonts to 45, in case - \defaulthyphenchar has changed. - Remove some spurious extra empty arguments to \DeclareFontFamily + \defaulthyphenchar has changed. + Remove some spurious extra empty arguments to \DeclareFontFamily * ltfiles.dtx: Add \write\m@ne{} to \nofiles so that \label (and other things) don't change the vertical spacing when @@ -6049,13 +6111,13 @@ All changes above are only part of the development branch for the next release. 1996-05-09 Chris Rowley - * ltfntcmd.dtx + * ltfntcmd.dtx - Made more robust to errors + Made more robust to errors - * slides.dtx + * slides.dtx - Made \include mechanism work + Made \include mechanism work 1996-05-09 David Carlisle @@ -6158,7 +6220,7 @@ All changes above are only part of the development branch for the next release. problems with combinations of \PageIndex \makeindex etc. pr/2048 * letter.dtx: - Made redefinition of \vspace robust. pr/2049 + Made redefinition of \vspace robust. pr/2049 Nevertheless, they syntax used in the pr is considered incorrect! @@ -6177,7 +6239,7 @@ All changes above are only part of the development branch for the next release. 1996-01-10 David Carlisle * ltfiles.dtx: latex/2024 ensure setting \input@path does not - change behaviour of ##1 in \IfFileExists. + change behaviour of ##1 in \IfFileExists. 1996-01-03 Frank Mittelbach @@ -6215,130 +6277,130 @@ All changes above are only part of the development branch for the next release. 1995-12-13 Chris Rowley - * copypre.txt + * copypre.txt - New version, removing long lines + New version, removing long lines - * copyins.txt + * copyins.txt - New version, removing long lines + New version, removing long lines - * copyhead.txt + * copyhead.txt - New version, removing long lines + New version, removing long lines - * bugs.txt + * bugs.txt - Additions, updates and corrections + Additions, updates and corrections - * autoload.txt + * autoload.txt - Additions, updates and corrections + Additions, updates and corrections - * texpert.txt + * texpert.txt - Additions, updates and corrections + Additions, updates and corrections - * ltnews.cls + * ltnews.cls - Removed long lines - Changed capitalisation + Removed long lines + Changed capitalisation - * cmfonts.fdd + * cmfonts.fdd - Removed long lines + Removed long lines - * slides.fdd + * slides.fdd - Removed long lines + Removed long lines - * olddc.dst + * olddc.dst - New preambles + New preambles - * newdc.dst + * newdc.dst - New preambles + New preambles - * cmextra.dst + * cmextra.dst - New preambles + New preambles - * cmfonts.dst + * cmfonts.dst - New preambles + New preambles - * latexsym.dst + * latexsym.dst - New preambles + New preambles - * autoload.dst + * autoload.dst - New preambles + New preambles - * unpack2e.ins + * unpack2e.ins - New preambles + New preambles - * slides.dst + * slides.dst - New preambles + New preambles - * legal.txt + * legal.txt - New version + New version - * readme.txt + * readme.txt - New version + New version - * ltclass.dtx + * ltclass.dtx - Documentation added + Documentation added - * fontdef.dtx + * fontdef.dtx - Documentation added + Documentation added - * latex209.dst + * latex209.dst - Smaller batches for old emtex + Smaller batches for old emtex - * modguide.tex + * modguide.tex - Additions, updates and corrections + Additions, updates and corrections - * cfgguide.tex + * cfgguide.tex - Additions, updates and corrections + Additions, updates and corrections - * clsguide.tex + * clsguide.tex - Additions, updates and corrections + Additions, updates and corrections - * fntguide.tex + * fntguide.tex - Additions, updates and corrections + Additions, updates and corrections - * ltx3info.tex + * ltx3info.tex - Additions, updates and corrections + Additions, updates and corrections - * usrguide.tex + * usrguide.tex - Additions, updates and corrections + Additions, updates and corrections - * ltxguide.cls + * ltxguide.cls - Corrected cfg loading + Corrected cfg loading - * inputenc.dtx + * inputenc.dtx - Detailed corrections + Detailed corrections - * ltdefns.dtx + * ltdefns.dtx - Added documentation + Added documentation ###################### # 1995/12/01 Release @@ -6364,7 +6426,7 @@ All changes above are only part of the development branch for the next release. 1995-12-08 Alan Jeffrey - * latex209.dtx: Switched off \@inmathwarn. + * latex209.dtx: Switched off \@inmathwarn. 1995-12-07 David Carlisle @@ -6384,9 +6446,9 @@ All changes above are only part of the development branch for the next release. 1995-12-06 Alan Jeffrey - * encguide.tex: Added examples of new \text* commands. + * encguide.tex: Added examples of new \text* commands. - * usrguide.tex: Added documentation for new \text* commands. + * usrguide.tex: Added documentation for new \text* commands. 1995-12-05 David Carlisle @@ -6402,7 +6464,7 @@ All changes above are only part of the development branch for the next release. 1995-12-05 Alan Jeffrey - * ltoutenc.dtx: Changed text of \TextSymbolUnavailable. + * ltoutenc.dtx: Changed text of \TextSymbolUnavailable. 1995-12-04 David Carlisle @@ -6418,15 +6480,15 @@ All changes above are only part of the development branch for the next release. 1995-12-04 Alan Jeffrey - * inputenc.dst: Added cp437de.def. + * inputenc.dst: Added cp437de.def. - * inputenc.dtx: Added \@tabacckludge commands to the Next encoding. - Replaced ~ by \nobreakspace. - Added a `test version' to the \ProvidesFile. - Made and text char in cp437. - Made a math char in Next. - Made and text chars in all encodings. - Added cp437de (cp437 but with ss rather than beta). + * inputenc.dtx: Added \@tabacckludge commands to the Next encoding. + Replaced ~ by \nobreakspace. + Added a `test version' to the \ProvidesFile. + Made and text char in cp437. + Made a math char in Next. + Made and text chars in all encodings. + Added cp437de (cp437 but with ss rather than beta). 1995-12-01 David Carlisle @@ -6436,10 +6498,10 @@ All changes above are only part of the development branch for the next release. 1995-12-01 Alan Jeffrey - * inputenc.dtx: Removed extraneous {} from the glyphs. + * inputenc.dtx: Removed extraneous {} from the glyphs. - * ltoutenc.dtx: Made \SS a default command rather than making the - OT1 definition the default. + * ltoutenc.dtx: Made \SS a default command rather than making the + OT1 definition the default. 1995-11-30 Johannes Braams @@ -6470,12 +6532,12 @@ All changes above are only part of the development branch for the next release. 1995-11-29 Alan Jeffrey - * ltoutenc.dtx: Added \textless, \textgreater, et al. + * ltoutenc.dtx: Added \textless, \textgreater, et al. - * inputenc.dtx: Replaced \textsterling with \pounds. - Added default error-message definitions for \textyen et al. - Added a \NeedsTeXFormat line. - Tidied up the Next encoding. + * inputenc.dtx: Replaced \textsterling with \pounds. + Added default error-message definitions for \textyen et al. + Added a \NeedsTeXFormat line. + Tidied up the Next encoding. 1995-11-28 David Carlisle @@ -6513,8 +6575,8 @@ All changes above are only part of the development branch for the next release. 1995-11-28 Alan Jeffrey - * ltoutenc.dtx: Added test for math mode to text commands. - Renamed \@changed@x@err to \TextSymbolUnavailable. + * ltoutenc.dtx: Added test for math mode to text commands. + Renamed \@changed@x@err to \TextSymbolUnavailable. 1995-11-27 David Carlisle @@ -6524,9 +6586,9 @@ All changes above are only part of the development branch for the next release. 1995-11-24 Chris Rowley - * ltspace.dtx + * ltspace.dtx - \nobreakspace added + \nobreakspace added 1995-11-22 David Carlisle @@ -6543,7 +6605,7 @@ All changes above are only part of the development branch for the next release. * ltnews04.tex: New TUG Address, \LoadClassWithOptions * doc.dtx: Make \MakeShortVerb use an \PackageInfo rather - than \tyepout. internal/1938 + than \tyepout. internal/1938 1995-11-18 David Carlisle @@ -6554,21 +6616,21 @@ All changes above are only part of the development branch for the next release. 1995-11-17 David Carlisle * docstrip.dtx: Merge in Marcin's new code restoring - \inFileName functionality. - Remove generation date/version number from generated files - Add \AddGenerationDate batchfile command to put them back. - Force whole file through ispell!! + \inFileName functionality. + Remove generation date/version number from generated files + Add \AddGenerationDate batchfile command to put them back. + Force whole file through ispell!! * ltoutenc.dtx: Use \@wrong@font@char in \UseTextSymbol. /1676 * ltfssbas.dtx: Make missing fd file \typeout a Font Info - and add \@wrong@font@char for use in \UseTextSymbol. /1676 - Clean up many \changes entries. + and add \@wrong@font@char for use in \UseTextSymbol. /1676 + Clean up many \changes entries. 1995-11-15 David Carlisle * source2e.tex: Exchange order of ltdefns and ltalloc - (Matches code change of 24th May.) + (Matches code change of 24th May.) Modify \changes def to match doc.sty 1.9u 1995-11-14 David Carlisle @@ -6577,9 +6639,9 @@ All changes above are only part of the development branch for the next release. dc fonts are installed. * ltclass.dtx: Add \LoadClassWithOptions for latex/1556 - Add \RequirePackageWithOptions to match. - Stop \@unprocessedoptions complaining about empty options - noticed whilest debugging the above change... + Add \RequirePackageWithOptions to match. + Stop \@unprocessedoptions complaining about empty options + noticed whilest debugging the above change... * inputenc.dtx: remove rogue \endinput. Wrap long lines. @@ -6602,20 +6664,20 @@ All changes above are only part of the development branch for the next release. 1995-11-07 Rainer Schoepf * ltoutenc.dtx (subsection{Definitions for the OT1 encoding}): - Changed \char32 to \@xxxii (two tokens less). Replaced octal - number 27 by decimal number 23 to protect against the quote - character being active. Added \leavevmode at start of \c, - otherwise the output routine might be invoked within the macro - (suggested by Donald Arseneau). Replaced some 0's by \z@ - (faster). + Changed \char32 to \@xxxii (two tokens less). Replaced octal + number 27 by decimal number 23 to protect against the quote + character being active. Added \leavevmode at start of \c, + otherwise the output routine might be invoked within the macro + (suggested by Donald Arseneau). Replaced some 0's by \z@ + (faster). * ltlists.dtx (\@doendpe): Enclosed \setbox0 assignment by a - group so that it leaves the contents of box $0$ intact. - Discovered by Donald Arseneau. + group so that it leaves the contents of box $0$ intact. + Discovered by Donald Arseneau. * cmfonts.fdd: Use decimal rather than octal character - specification for \hyphenchar and \skewchar so that there is - no problem with an active quote character. + specification for \hyphenchar and \skewchar so that there is + no problem with an active quote character. 1995-11-03 Rainer Schoepf @@ -6651,44 +6713,44 @@ All changes above are only part of the development branch for the next release. 1995-11-02 Chris Rowley - * classes.dtx + * classes.dtx - Made \footnote always work in frontmatter + Made \footnote always work in frontmatter 1995-11-02 David Carlisle * ltfssbas.dtx: Remove spurious space from NFSS font warning - latex/1676 + latex/1676 * ltxdoc.dtx: Add silent font substitutions. 1995-11-02 Rainer Schoepf * latex209.dtx: Added code for fleqn.sty, leqno.sty, - openbib.sty. + openbib.sty. * latex209.dst: Added generation of files fleqn.sty, leqno.sty, - openbib.sty for compatibility mode. + openbib.sty for compatibility mode. * inputenc.dtx: Changed internal name \a to \@tabacckludge to - protect against redefinition by malicicous users. Wrapped long - lines. + protect against redefinition by malicicous users. Wrapped long + lines. * ltoutenc.dtx: Changed internal name \a to \@tabacckludge to - protect against redefinition by malicicous users. + protect against redefinition by malicicous users. 1995-11-01 David Carlisle * latexbug.tex: Only list `configuration' input files. * ltfinal.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * ltfssini.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * ltdirchk.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * Makefile: Add newdc/olddc @@ -6699,7 +6761,7 @@ All changes above are only part of the development branch for the next release. * cmfonts.dst: remove dc font generation. * olddc.dst: NEW: Generate fd files for obsolete dcfonts 1.1 - and earlier. + and earlier. * newdc.dst: NEW: Generate fd files for dcfonts 1.2 @@ -6711,7 +6773,7 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: CHANGE: Add \nobreak to \@finalstrut to allow hyphenation of the last word of a p-column (and footnotes). - internal/1931 + internal/1931 * ltdirchk.dtx: more robust checking of dc fonts. @@ -6741,7 +6803,7 @@ All changes above are only part of the development branch for the next release. 1995-10-27 David Carlisle * ltpictur.dtx: Initialise \@wholewidth in autoload kernel. - General doc cleanup. + General doc cleanup. * usrguide.tex: Describe minimal.cls @@ -6753,14 +6815,14 @@ All changes above are only part of the development branch for the next release. 1995-10-25 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - Corrected bug in \end@dblfloat, made code more robust + Corrected bug in \end@dblfloat, made code more robust 1995-10-25 David Carlisle * ltmath.dtx: modify docstrip guards so - \ProvidesFile{ltmath.dtx} seen by source2e.tex. + \ProvidesFile{ltmath.dtx} seen by source2e.tex. * ltidxglo.dtx: General doc cleanup. @@ -6770,57 +6832,57 @@ All changes above are only part of the development branch for the next release. 1995-10-24 Chris Rowley - * ltfiles.dtx + * ltfiles.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltxref.dtx + * ltxref.dtx - Removed one-way switches from \endocument - Tidying. + Removed one-way switches from \endocument + Tidying. - * ltfssbas.dtx + * ltfssbas.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltbibl.dtx + * ltbibl.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltmiscen.dtx + * ltmiscen.dtx - Removed one-way switches from \endocument - Tidying. + Removed one-way switches from \endocument + Tidying. 1995-10-24 David Carlisle * ltdefns.dtx: Make \@autoload files ignore EOL. * lterror.dtx: modify autoload \@preamerr. - Add % to some lines as \@autoload files now ignore line ends. + Add % to some lines as \@autoload files now ignore line ends. 1995-10-23 Chris Rowley - * lttab.dtx + * lttab.dtx - Made poptabs more robust - Tidied up documentation + Made poptabs more robust + Tidied up documentation 1995-10-23 Rainer Schoepf * classes.dtx (subsubsection{Abstract}): Added setting of - \cs{beginparpenalty} to discourage page break before abstract - heading. + \cs{beginparpenalty} to discourage page break before abstract + heading. 1995-10-22 Rainer Schoepf * cmfonts.fdd: Added support for new (version 1.2) DC fonts and - text companion fonts in encoding TS1. + text companion fonts in encoding TS1. * inputenc.dst: Added generation of ansinew.def file. * inputenc.dtx: Added ansinew encoding (Windows 3.1 ANSI), as - contributed by Berthold K.P. Horn (bkph@ai.mit.edu). + contributed by Berthold K.P. Horn (bkph@ai.mit.edu). 1995-10-20 David Carlisle @@ -6833,19 +6895,19 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Keep autofss2 code in kernel until \begin{document}. - use \@undefined not \undefined + use \@undefined not \undefined * ltfinal.dtx: \@filelist zapped too early. 1995-10-19 Rainer Schoepf * inputenc.dtx: Replaced \' \` \= by \a' \a` \a in order to get - correct accents in a tabbing environment. + correct accents in a tabbing environment. 1995-10-18 Rainer Schoepf * ltspace.dtx (subsection{Horizontal space}): Moved \changes - from \@ to \hspace where it belongs. + from \@ to \hspace where it belongs. 1995-10-17 David Carlisle @@ -6853,7 +6915,7 @@ All changes above are only part of the development branch for the next release. \reserved@a * ltclass.dtx: Remove \ProvidesFile redefinition to ltfinal. - Reset \CurrentOption in \ProcessOptions for graphics/1873 + Reset \CurrentOption in \ProcessOptions for graphics/1873 * ltdirchk.dtx: Modify \ProvidesFile during initex to save debugging info and not waste \ver@... csnames. @@ -6873,37 +6935,37 @@ All changes above are only part of the development branch for the next release. * ltbibl.dtx: make \cite robust /1808 * ltmath.dtx: Make \sqrt robust /1808 - Use \@testopt in eqnarray's \\ /1911. + Use \@testopt in eqnarray's \\ /1911. * ltspace.dtx: Use \@testopt in \[no]{line|page}preak (/1911) * ltdefns.dtx: new \@ifstar CHANGE: require ##1 in both arguments - not ####1 in one and ##1 in the other. (internal/1910) - Use \@testopt in \newcommand and \newenvironment (/1911) + not ####1 in one and ##1 in the other. (internal/1910) + Use \@testopt in \newcommand and \newenvironment (/1911) * ltboxes.dtx: Clarify \makebox(,)[b] description. * ltthm.dtx: Allow \newtheorem after \begin{document} again. - (LaTeX Book, page 57) + (LaTeX Book, page 57) 1995-10-16 Rainer Schoepf * ltfssini.dtx: Added \relax at the end of the definition of - \normalfont to prevent it and \textnormal from eating up leading - spaces. + \normalfont to prevent it and \textnormal from eating up leading + spaces. 1995-10-11 Chris Rowley - * ltoutput.dtx + * ltoutput.dtx - New check in \clearpage. + New check in \clearpage. 1995-10-10 David Carlisle * ltfssdcl.dtx: autoload error message * ltthm.dtx: Make \newtheorem and its internals `only preamble' - to save memory. + to save memory. * ltplain.dtx: autoload tracing code @@ -6912,7 +6974,7 @@ All changes above are only part of the development branch for the next release. 1995-10-10 Rainer Schoepf * slides.dtx (subsection{The title}): In \maketitle, move \par - inside the scope of \Large, to get even line spacing. + inside the scope of \Large, to get even line spacing. 1995-10-09 David Carlisle @@ -6961,11 +7023,11 @@ All changes above are only part of the development branch for the next release. 1995-10-02 David Carlisle * ltplain.dtx: Move \newif to ltdefns.dtx. - Use \sbox in \underbar (saves tokens, and works with colour) + Use \sbox in \underbar (saves tokens, and works with colour) * ltdefns.dtx: \futurelet with \@let@token for internal/924 New implementation of \@xargdef in terms of the new - \@protected@testopt. Saves tokens and makes user defined + \@protected@testopt. Saves tokens and makes user defined commands with optional arguments robust. internal/1733 Move \newif here from ltplain. Autoload support. Add \aut@global and \@autoload. internal/1617. @@ -6973,26 +7035,26 @@ All changes above are only part of the development branch for the next release. 1995-09-27 David Carlisle * ltdirchk.dtx: Check \filename parser in ltxcheck.tex - for latex/1624 latex/1754 and graphics/1336 + for latex/1624 latex/1754 and graphics/1336 Check for dc fonts in ltxcheck.tex 1995-09-27 Rainer Schoepf * slides.dtx, slides.fdd: Globally replaced scale factor 19.91 - by 19.907 in \DeclareFontShape, as this gives better rounded - font sizes at 600dpi (suggested by Denis Roegel). + by 19.907 in \DeclareFontShape, as this gives better rounded + font sizes at 600dpi (suggested by Denis Roegel). * docstrip.dtx: Changed address of Johannes Braams. 1995-09-25 David Carlisle * latex209.dtx: Declare 2 count registers previously used - in \cline. /1723 + in \cline. /1723 1995-09-25 Rainer Schoepf * web2ctex.txt: Added some comments about using non-csh, index - style files and some other missing files. + style files and some other missing files. 1995-09-21 David Carlisle @@ -7005,8 +7067,8 @@ All changes above are only part of the development branch for the next release. * inputenc.dst: Added generation of next.def file. * inputenc.dtx: Added next encoding, as contributed by - Stefan Ried and Holger Uhr - . + Stefan Ried and Holger Uhr + . 1995-09-20 David Carlisle @@ -7015,19 +7077,19 @@ All changes above are only part of the development branch for the next release. 1995-09-20 Rainer Schoepf * cmextra.dst: Added generation of OMLccm.fd file, which had - previsouly been removed from cmfonts.dst. + previsouly been removed from cmfonts.dst. * slides.dtx: Replace \@tempa by \reserved@a. Wrap some long - lines and use \null instead of \hbox{} (by DPC). + lines and use \null instead of \hbox{} (by DPC). 1995-09-19 Rainer Schoepf * slides.fdd: Corrected names of .fd file names in argument to - \ProvidesFile commands. + \ProvidesFile commands. * ltmiscen.dtx: Moved call to \@noligs macro after call to - \verbatim@font in \verb command, just as it is already in the - verbatim environment. + \verbatim@font in \verb command, just as it is already in the + verbatim environment. 1995-09-15 David Carlisle @@ -7053,9 +7115,9 @@ All changes above are only part of the development branch for the next release. 1995-08-31 Alan Jeffrey - * inputenc.dtx: Added 0 to the beginning of every number. - Changed the definition of "AD in latin1 and latin2 to be \-. - Swapped ordfeminine and ordmasculine around in latin1. + * inputenc.dtx: Added 0 to the beginning of every number. + Changed the definition of "AD in latin1 and latin2 to be \-. + Swapped ordfeminine and ordmasculine around in latin1. 1995-08-27 Frank Mittelbach @@ -7105,15 +7167,15 @@ All changes above are only part of the development branch for the next release. 1995-08-16 Chris Rowley - * tex2.txt: + * tex2.txt: - Clearer wordings + Clearer wordings - * ltcntrl.dtx: + * ltcntrl.dtx: - Made most loop macros \long - Removed unnecessary \...noop macros - Tidied up documentation + Made most loop macros \long + Removed unnecessary \...noop macros + Tidied up documentation 1995-08-16 Frank Mittelbach @@ -7179,25 +7241,25 @@ All changes above are only part of the development branch for the next release. 1995-07-23 Chris Rowley - * clsguide.tex: + * clsguide.tex: - Added notices concerning use of `Standard LaTeX' + Added notices concerning use of `Standard LaTeX' - * cfgguide.tex: + * cfgguide.tex: - Started major expansion and rewrite + Started major expansion and rewrite - * modguide.tex: + * modguide.tex: - Rewrite adding section on modfying LaTeX + Rewrite adding section on modfying LaTeX - * legal.txt: + * legal.txt: - Further expansion and changes + Further expansion and changes - * ltxguide.cls: + * ltxguide.cls: - Changed configuration file messages + Changed configuration file messages 1995-07-20 David Carlisle @@ -7235,9 +7297,9 @@ All changes above are only part of the development branch for the next release. 1995-07-16 Chris Rowley - * ltoutput.dtx: + * ltoutput.dtx: - New version of \@outputpage + New version of \@outputpage 1995-07-14 David Carlisle @@ -7253,7 +7315,7 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Updates to documentation Use macro rather than switch to flag default font - substitutions pr/1236 + substitutions pr/1236 * ltfiles.dtx: Updates to documentation @@ -7384,67 +7446,67 @@ All changes above are only part of the development branch for the next release. 1995-06-19 David Carlisle * ltbibl.dtx: Modify \bibcite so a repeated key produces - LaTeX Warning: Label `aaa' multiply defined. - ... - LaTeX Warning: There were multiply-defined labels. - instead of - LaTeX Warning: Label(s) may have changed. - Rerun to get cross-references right. + LaTeX Warning: Label `aaa' multiply defined. + ... + LaTeX Warning: There were multiply-defined labels. + instead of + LaTeX Warning: Label(s) may have changed. + Rerun to get cross-references right. * ltxref.dtx: Modify \newlabel so \bibcite can share code. * ltclass.dtx: Stop \documentstyle re-enabling \usepackage - After it has been disabled by latex209.def (latex/1634) + After it has been disabled by latex209.def (latex/1634) 1995-06-18 Chris Rowley - * Makefile: + * Makefile: - Changed to use copypre.txt and copyhead.txt + Changed to use copypre.txt and copyhead.txt - * cfgguide.tex: + * cfgguide.tex: - Configuration stuff transferred from texpert.txt + Configuration stuff transferred from texpert.txt - * autoload.txt: + * autoload.txt: - Tidying, removed long lines + Tidying, removed long lines - * cm*.dst, docstrip.dst,latex*.dst,exscale.dst + * cm*.dst, docstrip.dst,latex*.dst,exscale.dst - New preambles + New preambles - * inputenc.dst,ltoutenc.dst,slides.dst: + * inputenc.dst,ltoutenc.dst,slides.dst: - New preambles + New preambles - * unpack2e.ins: + * unpack2e.ins: - New preambles + New preambles - * copyright.txt: + * copyright.txt: - No longer used + No longer used - * copyins.txt: + * copyins.txt: - New text + New text - * copypre.txt: + * copypre.txt: - New file + New file - * copyhead.txt: + * copyhead.txt: - New file + New file - * copydisf.txt: + * copydisf.txt: - New file + New file - * copydisg.tex: + * copydisg.tex: - New file + New file 1995-06-15 David Carlisle @@ -7455,12 +7517,12 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Minor documentation edits. * ltfsstrc.dtx: Take \ProvidesFile out of \iffalse clause - so it shows up in \listfiles in source2e.tex. - Wrap some long lines to 72. + so it shows up in \listfiles in source2e.tex. + Wrap some long lines to 72. 1995-06-15 Alan Jeffrey - * ltnews03.tex: Added pointer to autoload.txt. + * ltnews03.tex: Added pointer to autoload.txt. 1995-06-14 David Carlisle @@ -7478,125 +7540,125 @@ All changes above are only part of the development branch for the next release. 1995-06-14 Alan Jeffrey - * inputenc.dst: Fixed typo cp850 -> cp437 + * inputenc.dst: Fixed typo cp850 -> cp437 1995-06-14 Alan Jeffrey - * inputenc.dst: Fixed typo cp850 -> cp437 + * inputenc.dst: Fixed typo cp850 -> cp437 1995-06-13 David Carlisle * ltpictur.dtx: Add \ProvidesFile to autoload file. * ltfinal.dtx: Moddify method of adding patchlevel banner - Force format to be in errorstopmode, even if an installer - scrolled past an error during initex run. + Force format to be in errorstopmode, even if an installer + scrolled past an error during initex run. 1995-06-12 David Carlisle * ltvers.dtx: Add Auotoload banner - Check for old source files (older than a year). + Check for old source files (older than a year). 1995-06-11 Chris Rowley - * legal.txt: + * legal.txt: - Major changes + Major changes - * usrguide.tex: + * usrguide.tex: - Added ltx3info.tex info + Added ltx3info.tex info - * fntguide.tex: + * fntguide.tex: - Added note re using non-cmr fonts in T1 + Added note re using non-cmr fonts in T1 - * clsguide.tex: + * clsguide.tex: - Hash marks in option declarations OK - Added Case cHANGING commands + Hash marks in option declarations OK + Added Case cHANGING commands - * cfgguide.tex: + * cfgguide.tex: - Configuration stuff transferred from texpert.txt + Configuration stuff transferred from texpert.txt - * lablst.tex: + * lablst.tex: - Improved version: lists all bibitems separately - Changed internal commands + Improved version: lists all bibitems separately + Changed internal commands - * Makefile: + * Makefile: - Added modguide.tex + Added modguide.tex - * manifest.txt: + * manifest.txt: - Added ltnews03.tex and modguide.tex + Added ltnews03.tex and modguide.tex - * install.txt: + * install.txt: - File name corrected - Added ltx3info.tex info + File name corrected + Added ltx3info.tex info - * emtex.txt: + * emtex.txt: - Added info re batch file + Added info re batch file - * texpert.txt: + * texpert.txt: - Configuration details transferred to cfgguide.tex + Configuration details transferred to cfgguide.tex - * readme.txt: + * readme.txt: - Added pointers to various other info files + Added pointers to various other info files - * ltspace.dtx: + * ltspace.dtx: - Added \relax to \obeycr + Added \relax to \obeycr 1995-06-09 Alan Jeffrey - * ltoutenc.dtx: Made composites declared with DeclareTextComposite - use no-argument macros rather than one-argument macros. + * ltoutenc.dtx: Made composites declared with DeclareTextComposite + use no-argument macros rather than one-argument macros. - * ltnews03.tex: Changed modify.tex to modguide.tex, updated - figures for space savings. + * ltnews03.tex: Changed modify.tex to modguide.tex, updated + figures for space savings. 1995-06-08 Alan Jeffrey - * ltnews03.tex: New issue of LaTeX News. + * ltnews03.tex: New issue of LaTeX News. 1995-06-06 Alan Jeffrey - * ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their - argument and brace it. + * ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their + argument and brace it. 1995-06-05 Alan Jeffrey - * ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx). - Removed patch for tools/1296 (now in ltoutenc.dtx). - Removed patch for latex/1322 (now in ltoutenc.dtx). - We now have an empty patch file again! + * ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx). + Removed patch for tools/1296 (now in ltoutenc.dtx). + Removed patch for latex/1322 (now in ltoutenc.dtx). + We now have an empty patch file again! - * fontdef.dtx: Moved math commands from ltoutenc.dtx. + * fontdef.dtx: Moved math commands from ltoutenc.dtx. - * ltoutenc.dtx: Redid protection in DeclareTextCommand so that it - uses \noexpand rather than \protect. This should stop the - problems with \'\i putting the acute on a \protect rather than - on the \i. Commented out the defaults for textless and - textgreater. Allow \ProvideTextCommandDefault after - \begin{document} so it can be used in inputenc.def files. - Save some tokens in \textvisiblespace and \textunderscore. - Moved math commands to fontdef.dtx. + * ltoutenc.dtx: Redid protection in DeclareTextCommand so that it + uses \noexpand rather than \protect. This should stop the + problems with \'\i putting the acute on a \protect rather than + on the \i. Commented out the defaults for textless and + textgreater. Allow \ProvideTextCommandDefault after + \begin{document} so it can be used in inputenc.def files. + Save some tokens in \textvisiblespace and \textunderscore. + Moved math commands to fontdef.dtx. - * classes.dtx: Replaced \uppercase with \MakeUppercase + * classes.dtx: Replaced \uppercase with \MakeUppercase - * ltfinal.dtx: Added \MakeUppercase and \MakeLowercase. + * ltfinal.dtx: Added \MakeUppercase and \MakeLowercase. 1995-05-30 Alan Jeffrey - * inputenc.dtx: Made hex numbers safe against active ". Added - docstrip commands to applemac.def. + * inputenc.dtx: Made hex numbers safe against active ". Added + docstrip commands to applemac.def. 1995-05-27 Frank Mittelbach @@ -7611,12 +7673,12 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx (section{Plain \TeX}): - Made \loop long - Made \underbar use \box \tw@ + Made \loop long + Made \underbar use \box \tw@ * ltdefns.dtx (subsection{Command definitions}): - Made \@gobble commands \long + Made \@gobble commands \long 1995-05-26 Johannes Braams @@ -7661,27 +7723,27 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: - Changed float reset hooks to empty + Changed float reset hooks to empty * ltfloat.dtx: - Moved new resettings into hooks so that they can be removed in - latex209.dtx + Moved new resettings into hooks so that they can be removed in + latex209.dtx * ltspace.dtx/ltlists.dtx - Moved \endtrivlist and friends to ltlists.dtx + Moved \endtrivlist and friends to ltlists.dtx * ltfiles.dtx (section{File Handling}): - Added check for zero \topskip to \begin{document} - Added some \longs + Added check for zero \topskip to \begin{document} + Added some \longs - * ltspace.dtx + * ltspace.dtx - Made \vspace and \vspace* more efficient and more robust + Made \vspace and \vspace* more efficient and more robust - Commented out unused code + Commented out unused code 1995-05-25 Johannes Braams @@ -7700,14 +7762,14 @@ All changes above are only part of the development branch for the next release. 1995-05-24 David Carlisle * unpack2e.ins: Exchange order of ltdefns and ltalloc - as latter now needs \@gobbletwo from former. + as latter now needs \@gobbletwo from former. * usrguide.tex (subsection{Setting text susperscripts}): - \textsuperscript now access the current font (except for size + \textsuperscript now access the current font (except for size attribute) * ltfloat.dtx: redefine \textsuperscript in terms of - \@textsuperscript + \@textsuperscript * ltdefns.dtx: new \typein implementation @@ -7715,24 +7777,24 @@ All changes above are only part of the development branch for the next release. 1995-05-23 Alan Jeffrey - * inputenc.dst: Added applemac.def. + * inputenc.dst: Added applemac.def. - * inputenc.dtx: Added applemac.def. - Added test for whether definition of a text character ends in a - macro. - Corrected \mathordfeminine and \mathordmasculine. + * inputenc.dtx: Added applemac.def. + Added test for whether definition of a text character ends in a + macro. + Corrected \mathordfeminine and \mathordmasculine. - * inputenc.dst: Added applemac.def. + * inputenc.dst: Added applemac.def. 1995-05-22 David Carlisle * lttab.dtx: Add code and docstrip modules to support - autoloading of tabbing. + autoloading of tabbing. 1995-05-22 Rainer Schoepf * ltplain.dtx/ltfloat.dtx: Moved definitions of \footins and - \footnoterule from ltplain to ltfloat. + \footnoterule from ltplain to ltfloat. 1995-05-21 Frank Mittelbach @@ -7772,7 +7834,7 @@ All changes above are only part of the development branch for the next release. 1995-05-19 David Carlisle * ltpictur.dtx: Add code and docstrip modules to support - autoloading feature. + autoloading feature. 1995-05-19 Frank Mittelbach @@ -7826,7 +7888,7 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: Removed surplus { } in \@irsbox * ltlists.dtx: Start of documented version from Tobi. - Removed surplus { } and used `\thr@@' not `3 ' to save tokens. + Removed surplus { } and used `\thr@@' not `3 ' to save tokens. 1995-05-17 Frank Mittelbach @@ -7887,18 +7949,18 @@ All changes above are only part of the development branch for the next release. 1995-05-12 David Carlisle * ltclass.dtx: Use a token register in \DeclareOption(*) - So that # need not be written as ## - INCOMPATIBLE CHANGE: see latex/1557 + So that # need not be written as ## + INCOMPATIBLE CHANGE: see latex/1557 * ltpictur.dtx: Modify \picture so a missing ( in the first argument generates an error. latex/1355 - Add a few more macro environments. + Add a few more macro environments. * latex209.dtx: Restore old definition of \@footnotemark * ltfloat.dtx: Add \nobreak to allow hyphenation before a footnotemark. - Add loads of macro environments to the docs. + Add loads of macro environments to the docs. 1995-05-11 Frank Mittelbach @@ -7954,7 +8016,7 @@ All changes above are only part of the development branch for the next release. 1995-05-06 Frank Mittelbach * ltsect.dtx (paragraph{...}): - Use \quad instead of \hskip 1em in \@seccntformat. pr/1596 + Use \quad instead of \hskip 1em in \@seccntformat. pr/1596 Add \relax to prevent `plus/minus' problem with improper redefinition of \@seccntformat. pr/1596 @@ -7970,14 +8032,14 @@ All changes above are only part of the development branch for the next release. * ltsect.dtx: Surround the . in \@dottedcontextline by \hbox to typeset it in the text - font. pr/1503 + font. pr/1503 Don't reset to \rmfamily just to \normalfont in case the document font is not the roman one. pr/1578 1995-05-01 David Carlisle * ltpar.dtx: Documentation reworked by Tobias Oetiker. - (Thanks to Tobi for volunteering.) + (Thanks to Tobi for volunteering.) 1995-04-29 Frank Mittelbach @@ -7999,7 +8061,7 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: Add \hang and \textindent * ltplain.dtx: Move \hang and \textindent to latex209.dtx - Remove some commands which are (re)defined later. + Remove some commands which are (re)defined later. 1995-04-27 Frank Mittelbach @@ -8011,7 +8073,7 @@ All changes above are only part of the development branch for the next release. * ltmiscen.dtx (subsection{Environments}): Limited support for \AtBeginDocument{\begin{foo}} - \AtEndDocument{\end{foo}}. + \AtEndDocument{\end{foo}}. Be careful to get the order right if you do it more than once. pr/1121 * unpacked.txt: @@ -8020,18 +8082,18 @@ All changes above are only part of the development branch for the next release. 1995-04-25 David Carlisle * ltfiles.dtx: remove \the\every@math@size from \document - for latex/1407 + 1420 (from patch file) + for latex/1407 + 1420 (from patch file) * ltdefns.dtx: From patch file: make \@check@c \long - (latex/1346) \newenvironment argument handling /1507. + (latex/1346) \newenvironment argument handling /1507. * ifthen.dtx: Fix `driver' docstrip guard. Reported by - Martin Schr"oder. + Martin Schr"oder. 1995-04-24 David Carlisle * ltpage.dtx: Reset \emergencystretch in \fussy latex /1344 - (fom patch file). Clean up documentation slightly. + (fom patch file). Clean up documentation slightly. * ltcntrl.dtx: fix for /1317 (internal) \@for expanding its argument incorectly @@ -8040,18 +8102,18 @@ All changes above are only part of the development branch for the next release. * ltbibl.dtx: Add \mbox to \cite for latex/1239 from patch file. Make \@onlypreamble\bibcite /1388 (from patch file) - Add some macro envs to documentation. + Add some macro envs to documentation. * ltoutput.dtx: Modify docstrip guards to keep trace code out of the kernel, unless `trace' specified. - 2 more fixes from patch file - latex/1451: newline command \\ in eqnarray and output routine - %%% latex/1392: AtBeginDvi broken + 2 more fixes from patch file + latex/1451: newline command \\ in eqnarray and output routine + %%% latex/1392: AtBeginDvi broken * latex209.dtx: Add \proclaim and \ttraggedright * ltplain.dtx: Make \new... non outer: /1405 (from patch file) - Move \proclaim and \ttragedright to latex209.dtx + Move \proclaim and \ttragedright to latex209.dtx 1995-04-23 Frank Mittelbach @@ -8065,9 +8127,9 @@ All changes above are only part of the development branch for the next release. * inputenc.dtx (section{The ISO Latin-1 encoding}): \textonequarter and friends incorrectly declared as math chars. (section{Default definitions for characters}): - Default values moved to own section. + Default values moved to own section. (section{The ISO Latin-2 encoding}): - latin2 added. pr/1447. + latin2 added. pr/1447. (section{The IBM code page 850}): cp850 added. pr/1330. @@ -8093,10 +8155,10 @@ All changes above are only part of the development branch for the next release. * Makefile (cleanupsrc): set date to June 1995 * ltclass.dtx: Fix filecontents and \DeclareOption - pr's 1487 and 1498 . (moved from patch file.) + pr's 1487 and 1498 . (moved from patch file.) * ltfinal.dtx: Modify to allow ltpatch.ltx (patch level 0) - For a full release. To solve problems of initial install picking + For a full release. To solve problems of initial install picking up old patch files. 1995-04-19 Frank Mittelbach @@ -8147,7 +8209,7 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: Fixes for latex/1460 (infinite looping on 2nd \documentstyle command) and latex/1424 (\newcommand{\r}{}) - Also wrap some long lines to 72. + Also wrap some long lines to 72. 1995-03-20 David Carlisle @@ -8166,7 +8228,7 @@ All changes above are only part of the development branch for the next release. 1995-03-17 David Carlisle * latexbug.el (report-latex-bug): Support transient mark mode - Also use shell-command so that shell variables are initialised. + Also use shell-command so that shell variables are initialised. 1995-03-14 Johannes Braams @@ -8200,8 +8262,8 @@ All changes above are only part of the development branch for the next release. 1994-12-17 Alan Jeffrey - * ltnews02.tex: Edited description of AMS-LaTeX to get everything - to fit onto one page. + * ltnews02.tex: Edited description of AMS-LaTeX to get everything + to fit onto one page. 1994-12-16 Johannes Braams @@ -8215,21 +8277,21 @@ All changes above are only part of the development branch for the next release. 1994-12-15 David Carlisle * latexbug.el: (Matt Swift) Support old emacs (tested with 18.57 - in addition to 19.28) + in addition to 19.28) 1994-12-14 Chris Rowley - * ltoutenc.dtx + * ltoutenc.dtx - Corrected typo + Corrected typo - * usrguide.tex + * usrguide.tex - Removed some commands + Removed some commands - * cfgguide.tex + * cfgguide.tex - Tidying + Tidying 1994-12-14 David Carlisle @@ -8237,14 +8299,14 @@ All changes above are only part of the development branch for the next release. 1994-12-14 Alan Jeffrey - * ltoutenc.dtx: Added braces to \copyright so it works unbraced in - subscripts. - Added \ifmmode check to \@changed@cmd so that redefinitions aren't - made in math mode (which can also foul up unbraced subscripts). - Commented out \textasciicircum, - \textasciitilde, \textbackslash, \textbar, - \textgreater, \texthyphenchar, \texthyphen and - \textless to save memory. + * ltoutenc.dtx: Added braces to \copyright so it works unbraced in + subscripts. + Added \ifmmode check to \@changed@cmd so that redefinitions aren't + made in math mode (which can also foul up unbraced subscripts). + Commented out \textasciicircum, + \textasciitilde, \textbackslash, \textbar, + \textgreater, \texthyphenchar, \texthyphen and + \textless to save memory. 1994-12-13 David Carlisle @@ -8272,7 +8334,7 @@ All changes above are only part of the development branch for the next release. 1994-12-12 David Carlisle * latexbug.el: Add missing (defvar ltxbug-mail-headers - (Matt Swift: latex/1255) + (Matt Swift: latex/1255) * ltxguide.cls: Stop \small in verbatim affecting previous para. @@ -8282,15 +8344,15 @@ All changes above are only part of the development branch for the next release. 1994-12-12 Alan Jeffrey - * ltoutenc.dtx: Tidied up documentation. + * ltoutenc.dtx: Tidied up documentation. 1994-12-11 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - * cfgguide.tex + * cfgguide.tex - Major editing + Major editing 1994-12-11 Johannes Braams @@ -8317,13 +8379,13 @@ All changes above are only part of the development branch for the next release. 1994-12-10 Alan Jeffrey - * inputenc.dtx: Removed useless catcode setting of ~. - Made letters active and undefined by default, rather than illegal. - Added `beta test' message. + * inputenc.dtx: Removed useless catcode setting of ~. + Made letters active and undefined by default, rather than illegal. + Added `beta test' message. - * ltoutenc.dtx: Added documentation for the OML encoding, after - the last lot got lost by the server... - Replaced width with \@width in vrules. + * ltoutenc.dtx: Added documentation for the OML encoding, after + the last lot got lost by the server... + Replaced width with \@width in vrules. 1994-12-09 Johannes Braams @@ -8343,22 +8405,22 @@ All changes above are only part of the development branch for the next release. * usrguide.tex: \arraynewline RIP. * lttab.dtx: Make \tabularnewline work in array. - \arraynewline deleted. + \arraynewline deleted. * latexbug.el: mention public database. * latexbug.tex: Call category 0 LaTeX not base - Add >Confidential no field to all messages by default. - Add message about public database to final typeout. - Compress messages to fit on 25-line screen. + Add >Confidential no field to all messages by default. + Add message about public database to final typeout. + Compress messages to fit on 25-line screen. * usrguide.tex: mention list of packages in LaTeXBook. 1994-12-08 Alan Jeffrey - * bugs.txt: Added pointer to ltxbugs2html. + * bugs.txt: Added pointer to ltxbugs2html. - * ltoutenc.dtx: Added \null and \sh@ft to \b and \d. + * ltoutenc.dtx: Added \null and \sh@ft to \b and \d. 1994-12-07 Johannes Braams @@ -8367,15 +8429,15 @@ All changes above are only part of the development branch for the next release. 1994-12-07 David Carlisle * usrguide.tex: Document ltx3pub papers on ctan. - Other small corrections. + Other small corrections. 1994-12-07 Alan Jeffrey - * tlb1042.lvt: Rewrote test file to avoid printing out internal - details of how \ENC-cmd is implemented. + * tlb1042.lvt: Rewrote test file to avoid printing out internal + details of how \ENC-cmd is implemented. - * tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather - than a \tracingall. + * tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather + than a \tracingall. 1994-12-06 David Carlisle @@ -8393,37 +8455,37 @@ All changes above are only part of the development branch for the next release. (subsection{Macros for loading fonts}): set \nfss@catcodes locally to \relax in \try@load@fontshape so that it isn't executed several times when an .fd file is - read in. + read in. * updated various test files. 1994-12-05 David Carlisle * latexbug.tex: Add \pause so messages do not scroll off screen. - Suggested by Rosemary Bailey. + Suggested by Rosemary Bailey. * lablst.tex: Print labels verbatim, and input packages. - Fixing problems reported via c.t.t. + Fixing problems reported via c.t.t. 1994-12-05 Alan Jeffrey - * ltoutenc.dtx: Added braces round the \ooalign in \textcircled. + * ltoutenc.dtx: Added braces round the \ooalign in \textcircled. - * tlb1233.lvt: Added test file for unbraced \ooalign's. + * tlb1233.lvt: Added test file for unbraced \ooalign's. 1994-12-02 Alan Jeffrey - * fontdef.dtx: Commented out \ldots. + * fontdef.dtx: Commented out \ldots. - * lfonts.dtx: Commented out \copyright. + * lfonts.dtx: Commented out \copyright. - * tlb1214.lvt: Test file for symbols like \pounds. + * tlb1214.lvt: Test file for symbols like \pounds. - * tlb1217.lvt: Test file for \a. + * tlb1217.lvt: Test file for \a. - * ltoutenc.dtx: Fixed a bug with \a. + * ltoutenc.dtx: Fixed a bug with \a. - * cmfonts.fdd: Added font substitutions for \pounds. + * cmfonts.fdd: Added font substitutions for \pounds. 1994-12-01 Johannes Braams @@ -8448,7 +8510,7 @@ All changes above are only part of the development branch for the next release. * lthyphen.dtx: lthyphen.ltx|cfg now hyphen.ltx|cfg * texpert.txt: Document ltxcheck font checks. - lthyphen.cfg now (or soon will be) hyphen.cfg + lthyphen.cfg now (or soon will be) hyphen.cfg * ltplain.dtx: remove some {oldcomments} and other tidying up. @@ -8464,7 +8526,7 @@ All changes above are only part of the development branch for the next release. * ltfiles.dtx: Use new \@dofilelist. * ltmiscen.dtx: Add new \@dofilelist to \enddocument - Move some of the warnings in \enddocument out of \if@filesw. + Move some of the warnings in \enddocument out of \if@filesw. * Makefile (TEXTS): add latexbug.el @@ -8472,11 +8534,11 @@ All changes above are only part of the development branch for the next release. 1994-11-30 Alan Jeffrey - * fam.dtx: Set \FOO-cmd to \@current@cmd rather than \relax when - entering encoding FOO. + * fam.dtx: Set \FOO-cmd to \@current@cmd rather than \relax when + entering encoding FOO. - * ltoutenc.dtx: Made text commands expand (almost) entirely in the - mouth. + * ltoutenc.dtx: Made text commands expand (almost) entirely in the + mouth. 1994-11-28 David Carlisle @@ -8484,30 +8546,30 @@ All changes above are only part of the development branch for the next release. 1994-11-28 Alan Jeffrey - * ltdefns.dtx: Corrected \changes entries. + * ltdefns.dtx: Corrected \changes entries. - * ltfiles.dtx: Corrected \changes entries. + * ltfiles.dtx: Corrected \changes entries. - * lterror.dtx: Corrected \changes entries. + * lterror.dtx: Corrected \changes entries. - * ltxref.dtx: Corrected \changes entries. + * ltxref.dtx: Corrected \changes entries. - * ltsect.dtx: Corrected \changes entries. + * ltsect.dtx: Corrected \changes entries. - * ltidxglo.dtx: Corrected \changes entries. + * ltidxglo.dtx: Corrected \changes entries. - * lttab.dtx: Corrected \changes entries (wrong format). + * lttab.dtx: Corrected \changes entries (wrong format). - * ltoutenc.dtx: Added new definitions of \b, \c and \d. - Fixed bug with accents on commands which aren't allowed in - \csname. + * ltoutenc.dtx: Added new definitions of \b, \c and \d. + Fixed bug with accents on commands which aren't allowed in + \csname. - * inputenc.dtx: Moved a docstrip option to it's correct home. + * inputenc.dtx: Moved a docstrip option to it's correct home. - * latex209.dtx: Added hacks for space around floats. + * latex209.dtx: Added hacks for space around floats. - * tlb1184.lvt: Added check file for default accent and symbol - definitions. + * tlb1184.lvt: Added check file for default accent and symbol + definitions. 1994-11-25 David Carlisle @@ -8520,8 +8582,8 @@ All changes above are only part of the development branch for the next release. * unpack2e.dst: Correct the preamble written to generated files. * ltdefns.dtx: modify \newenvironment so that a graf environment - is not allowed (Piet van Oostrum latex/1037). Previous attemt - to do this removed... + is not allowed (Piet van Oostrum latex/1037). Previous attemt + to do this removed... 1994-11-23 David Carlisle @@ -8540,68 +8602,68 @@ All changes above are only part of the development branch for the next release. * latint.dtx: wrap long lines. * source2e.tex: Make frontmatter \pagenumbering{roman} - So can be processed with only 2 latex runs. (Ulrik Vieth) - Add lthyphen.dtx. + So can be processed with only 2 latex runs. (Ulrik Vieth) + Add lthyphen.dtx. 1994-11-22 Alan Jeffrey - * tlb0574.lvt: Added check file for empyt accents and accents in - tocs. + * tlb0574.lvt: Added check file for empyt accents and accents in + tocs. - * ltoutenc.dtx: Fixed `empty accent' bug. + * ltoutenc.dtx: Fixed `empty accent' bug. - * inputenc.dtx: Fixed typo A1 -> A0. + * inputenc.dtx: Fixed typo A1 -> A0. 1994-11-21 Alan Jeffrey - * ltoutenc.dtx: Fixed \dots so that it has no extra space in a - monowidth font. - Corrected typo in the definition of \mathunderscore. + * ltoutenc.dtx: Fixed \dots so that it has no extra space in a + monowidth font. + Corrected typo in the definition of \mathunderscore. - * inputenc.dtx: Added \textregistered. - Added "A0 (nbs) to Latin-1. + * inputenc.dtx: Added \textregistered. + Added "A0 (nbs) to Latin-1. 1994-11-20 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - * ltoutput.dtx + * ltoutput.dtx - * ltxguide.cls + * ltxguide.cls - Tidied formatting + Tidied formatting - * patches.txt + * patches.txt - Updated + Updated - * bugs.txt + * bugs.txt - Updated + Updated - * install.txt + * install.txt - Updated + Updated - * template.txt + * template.txt - Updated + Updated - * texpert.txt + * texpert.txt - Updated + Updated - * usrguide.tex + * usrguide.tex - Major update + Major update - * clsguide.tex + * clsguide.tex - Major update + Major update - * fntguide.tex + * fntguide.tex - Major update + Major update 1994-11-18 David Carlisle @@ -8614,12 +8676,12 @@ All changes above are only part of the development branch for the next release. * fam.dtx: \next renamed to \reserved@f * latint.dtx: use \expandafter instead of \next in - \DeclareMathDelimiter. + \DeclareMathDelimiter. * ltplain.dtx: Remove \pt, now defined elsewhere. * ltmath.dtx Use \expandafter trick instead of \next - in a' \phantom and \smash. Colour support to \phantom and \smash + in a' \phantom and \smash. Colour support to \phantom and \smash 1994-11-17 David Carlisle @@ -8669,9 +8731,9 @@ All changes above are only part of the development branch for the next release. 1994-11-16 Chris Rowley - * latex209.dtx + * latex209.dtx - Restored 2e logo + Restored 2e logo 1994-11-16 David Carlisle @@ -8680,7 +8742,7 @@ All changes above are only part of the development branch for the next release. 1994-11-15 David Carlisle * ifthen.dtx: Use \@unexpandable@protect and modify - \@setref to fix bug /946 (/1023) \pageref breaking tests. + \@setref to fix bug /946 (/1023) \pageref breaking tests. 1994-11-14 David Carlisle @@ -8690,21 +8752,21 @@ All changes above are only part of the development branch for the next release. 1994-11-12 Chris Rowley - * ltmiscen.dtx + * ltmiscen.dtx - Tidied \endtrivlists + Tidied \endtrivlists - * ltspace.dtx + * ltspace.dtx - Attempted to improve error messages + Attempted to improve error messages - * ltfntcmd.dtx + * ltfntcmd.dtx - Added line-break to error message + Added line-break to error message - * lablst.tex + * lablst.tex - Simpler with better layout + Simpler with better layout 1994-11-12 David Carlisle @@ -8716,11 +8778,11 @@ All changes above are only part of the development branch for the next release. 1994-11-10 Chris Rowley - * ltbibl.dtx + * ltbibl.dtx - Patched \nocite{*} + Patched \nocite{*} - * ltplain.dtx + * ltplain.dtx 1994-11-10 Johannes Braams @@ -8755,7 +8817,7 @@ All changes above are only part of the development branch for the next release. * fontdef.dtx: Add \DeclareMathSizes (from setsize.dtx). * Makefile: Generate new release date 1994/12/01 - Remove setfile.dtx from generation of ltfss.dtx + Remove setfile.dtx from generation of ltfss.dtx * ltpatch.ltx: Change to patch 1994/12/01 release. @@ -8812,81 +8874,81 @@ All changes above are only part of the development branch for the next release. Fix bug that produced extra "No math setup" message if tracefont was loaded with default options. - Patched \loop + Patched \loop 1994-11-05 Chris Rowley - * ltfloat.dtx (subsection{Floating Environments}): + * ltfloat.dtx (subsection{Floating Environments}): - Introduced \color@hbox - Changed colour resetting for footnotes (again) - Introduced a simulacrum of compatibility to old \@xfloat - Changed float setup + Introduced \color@hbox + Changed colour resetting for footnotes (again) + Introduced a simulacrum of compatibility to old \@xfloat + Changed float setup - * ltboxes.dtx (section{\LaTeX\ Box commands}): + * ltboxes.dtx (section{\LaTeX\ Box commands}): - Introduced \color@hbox - Changed colour resetting for minipage footnotes - Added to documentation + Introduced \color@hbox + Changed colour resetting for minipage footnotes + Added to documentation - * ltoutput.dtx (subsection{Floats}): + * ltoutput.dtx (subsection{Floats}): - Introduced \color@hbox - New style protect settings in shipout - Tidied shipout and added to documentation - Added begindvi stuff + Introduced \color@hbox + New style protect settings in shipout + Tidied shipout and added to documentation + Added begindvi stuff 1994-11-05 Alan Jeffrey - * ltoutenc.dtx: Added setting of \@typeset@protect to \patterns - and \hyphenation. + * ltoutenc.dtx: Added setting of \@typeset@protect to \patterns + and \hyphenation. - * ltnews02.tex: First draft. + * ltnews02.tex: First draft. 1994-11-04 Alan Jeffrey - * ltfloat.dtx: Added \protected@xdef to \footnote, \@footnotetext, - and \footnotemark. + * ltfloat.dtx: Added \protected@xdef to \footnote, \@footnotetext, + and \footnotemark. - * ltoutenc.dtx: Added \_. + * ltoutenc.dtx: Added \_. - * ltpage.dtx: Added \@unexpandable@protect to \markboth and - \markright. + * ltpage.dtx: Added \@unexpandable@protect to \markboth and + \markright. - * lttab.dtx: Added \set@typeset@protect to \@array and - \multicolumn. - Added \@unexpandable@protect to \@mkpream. + * lttab.dtx: Added \set@typeset@protect to \@array and + \multicolumn. + Added \@unexpandable@protect to \@mkpream. - * ltboxes.dtx: Added \protected@edef to \@mpfootnotetext. + * ltboxes.dtx: Added \protected@edef to \@mpfootnotetext. - * ltidxglo.dtx: Added \protected@write to \index and \glossary. - Removed \if@filesw from \makeindex and \makeglossary. + * ltidxglo.dtx: Added \protected@write to \index and \glossary. + Removed \if@filesw from \makeindex and \makeglossary. - * ltsect.dtx: Added \protected@write to \addtocontents and - \addcontentsline. - Added \protected@edef to \@sect. - Added \protected@xdef to \thanks. + * ltsect.dtx: Added \protected@write to \addtocontents and + \addcontentsline. + Added \protected@edef to \@sect. + Added \protected@xdef to \thanks. - * ltxref.dtx: Added \protected@write to \label. - Added \protected@edef to \refstepcounter. + * ltxref.dtx: Added \protected@write to \label. + Added \protected@edef to \refstepcounter. - * ltmiscen.dtx: Removed setting of \protect from \@writefile. + * ltmiscen.dtx: Removed setting of \protect from \@writefile. - * lterror.dtx: Added \set@display@protect to messages. + * lterror.dtx: Added \set@display@protect to messages. - * ltfiles.dtx: Added \protected@write and a new definition of - \nofiles. + * ltfiles.dtx: Added \protected@write and a new definition of + \nofiles. - * ltdefns.dtx: Added \x@protect and a new mechanism for protecting - short commands. - Added commands for safely performing edefs. - Added \set@display@protect to \typeout + * ltdefns.dtx: Added \x@protect and a new mechanism for protecting + short commands. + Added commands for safely performing edefs. + Added \set@display@protect to \typeout 1994-11-03 David Carlisle * ltdirchk.dtx: Check that latex.ltx is used with an initex with - no format preloaded. (VMS initex defaults to loading - plain.fmt) + no format preloaded. (VMS initex defaults to loading + plain.fmt) * ltdefns.dtx: rename \long@def to \l@ngrel@x @@ -8902,7 +8964,7 @@ All changes above are only part of the development branch for the next release. 1994-11-02 Alan Jeffrey - * ltoutenc.dtx: Wrapped long lines. + * ltoutenc.dtx: Wrapped long lines. 1994-10-31 David Carlisle @@ -8910,63 +8972,63 @@ All changes above are only part of the development branch for the next release. 1994-10-31 Alan Jeffrey - * Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx. + * Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx. - * fontdef.dtx: Added OMLenc.def. + * fontdef.dtx: Added OMLenc.def. - * unpack2e.ins: Added inputenc.ins. + * unpack2e.ins: Added inputenc.ins. - * unpacked.txt: Added inputenc.sty, font encoding and input - encoding files. + * unpacked.txt: Added inputenc.sty, font encoding and input + encoding files. - * fntguide.tex: Added documentation on the new text declaration - commands. + * fntguide.tex: Added documentation on the new text declaration + commands. - * usrguide.tex: Added documentation on the new text commands. + * usrguide.tex: Added documentation on the new text commands. 1994-10-30 Chris Rowley - * ltfloat.dtx (subsection{Floating Environments}): + * ltfloat.dtx (subsection{Floating Environments}): - In float handling: - major changes to parameter parsing, setting of local - variables, etc; - two-column and one-column cases merged; space hacks moved; - colour support improved and corrected, including extra boxes. - In marginpars: - colour support improved and corrected, including extra boxes. - In footnotes: - colour support improved. + In float handling: + major changes to parameter parsing, setting of local + variables, etc; + two-column and one-column cases merged; space hacks moved; + colour support improved and corrected, including extra boxes. + In marginpars: + colour support improved and corrected, including extra boxes. + In footnotes: + colour support improved. - * ltoutput.dtx (subsection{Floats}): + * ltoutput.dtx (subsection{Floats}): - Small changes to documentation - Added colour support to \@topnewpage - Added colour support for footnotes to \@makecol - Added warning to \@fpsadddefault + Small changes to documentation + Added colour support to \@topnewpage + Added colour support for footnotes to \@makecol + Added warning to \@fpsadddefault - * ltdefns.dtx (subsection{Internal defining commands}): + * ltdefns.dtx (subsection{Internal defining commands}): - Added \@onelevel@sanitize + Added \@onelevel@sanitize 1994-10-30 Alan Jeffrey - * cmfonts.dst: Added OMScmnr and OMLcmr. + * cmfonts.dst: Added OMScmnr and OMLcmr. - * cmfonts.fdd: Added OMScmr and OMLcmr. + * cmfonts.fdd: Added OMScmr and OMLcmr. - * ltxguide.cls: Added \NEWdescription, \NEWfeature and the - optional argument to desc. + * ltxguide.cls: Added \NEWdescription, \NEWfeature and the + optional argument to desc. - * ltoutenc.dst: Added OMLenc.def. + * ltoutenc.dst: Added OMLenc.def. - * ltoutenc.dtx: added encoding-specific commands from ltmath. - Added OML encoding. - Added \textcircled and removed \textregistered. - Added \DeclareTextCompositeCommand. - Added \t. + * ltoutenc.dtx: added encoding-specific commands from ltmath. + Added OML encoding. + Added \textcircled and removed \textregistered. + Added \DeclareTextCompositeCommand. + Added \t. - * ltmath.dtx: Removed encoding-specific commands to ltoutenc. + * ltmath.dtx: Removed encoding-specific commands to ltoutenc. 1994-10-29 Johannes Braams @@ -8988,17 +9050,17 @@ All changes above are only part of the development branch for the next release. 1994-10-29 Alan Jeffrey - * fontsmpl.dtx: Added tests for \copyright, \dots and - \textregistered. + * fontsmpl.dtx: Added tests for \copyright, \dots and + \textregistered. - * ltmath.dtx: Added \mathellipsis, \mathparagraph, etc. - Removed all of the oldcomments and generally tidied up. - Added \DeclareMathOperator. + * ltmath.dtx: Added \mathellipsis, \mathparagraph, etc. + Removed all of the oldcomments and generally tidied up. + Added \DeclareMathOperator. - * ltoutenc.dtx: Added copyright and textregistered. - Renamed the text versions of \P, \S, etc. to \textparagraph, - \textsection, etc. - Added the definitions of \dots etc. which work in math and text. + * ltoutenc.dtx: Added copyright and textregistered. + Renamed the text versions of \P, \S, etc. to \textparagraph, + \textsection, etc. + Added the definitions of \dots etc. which work in math and text. 1994-10-28 Frank Mittelbach @@ -9007,17 +9069,17 @@ All changes above are only part of the development branch for the next release. 1994-10-28 Alan Jeffrey - * unpack2e.ins: Added OMSenc.def. + * unpack2e.ins: Added OMSenc.def. - * fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx. + * fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx. - * asajtest.ins: An installation file for asajtest.dtx. + * asajtest.ins: An installation file for asajtest.dtx. - * asajtest.tex: A test file for ltoutenc.dtx. This should become - part of the test suite eventually. + * asajtest.tex: A test file for ltoutenc.dtx. This should become + part of the test suite eventually. - * asajtest.dtx: This is a scratch version of ltoutenc.dtx. - Rewrote the enc.def files to use the new default settings. + * asajtest.dtx: This is a scratch version of ltoutenc.dtx. + Rewrote the enc.def files to use the new default settings. 1994-10-27 David Carlisle @@ -9025,11 +9087,11 @@ All changes above are only part of the development branch for the next release. 1994-10-27 Alan Jeffrey - * ltoutenc.dtx: Removed loading of enc.def files. + * ltoutenc.dtx: Removed loading of enc.def files. - * fontdef.dtx: Added OMSenc.def. + * fontdef.dtx: Added OMSenc.def. - * ltoutenc.dst: Added OMSenc.def. + * ltoutenc.dst: Added OMSenc.def. 1994-10-26 David Carlisle @@ -9038,22 +9100,22 @@ All changes above are only part of the development branch for the next release. 1994-10-25 David Carlisle * ltdefns.dtx: Add documentation of star form of \newcommand. - Remove all `oldcomments' environments. - Add lots of `macro' environments. + Remove all `oldcomments' environments. + Add lots of `macro' environments. * ltboxes.dtx: missing % in \@isavepicbox (was in ltpatch.ltx) 1994-10-25 Alan Jeffrey - * ltoutenc.dtx: Added default encodings. - Added \ProvideTextCommand and \ProvideTextCommandDefault. - Added the OMS encoding. + * ltoutenc.dtx: Added default encodings. + Added \ProvideTextCommand and \ProvideTextCommandDefault. + Added the OMS encoding. 1994-10-24 Chris Rowley * ltmath.dtx: - Removed a TAB + Removed a TAB 1994-10-24 David Carlisle @@ -9064,8 +9126,8 @@ All changes above are only part of the development branch for the next release. * ltmath.dtx: - Added \normalcolor to \@eqnnum - Removed braces from \ensuremath + Added \normalcolor to \@eqnnum + Removed braces from \ensuremath 1994-10-20 David Carlisle @@ -9078,11 +9140,11 @@ All changes above are only part of the development branch for the next release. 1994-10-20 Alan Jeffrey - * inputenc.dtx: Split characters into text-only and math-only. - Reded some of the \providecommand's in latin1.def. + * inputenc.dtx: Split characters into text-only and math-only. + Reded some of the \providecommand's in latin1.def. - * latex209.dtx: Corrected a typo---\mark{}{} should have been - \mark{{}{}}. + * latex209.dtx: Corrected a typo---\mark{}{} should have been + \mark{{}{}}. 1994-10-19 Frank Mittelbach @@ -9093,8 +9155,8 @@ All changes above are only part of the development branch for the next release. 1994-10-18 David Carlisle * ltdefns.dtx: Add *-forms to define non-long variants of - commands. - Add extra check so \newenvironment{graf} generates an error. + commands. + Add extra check so \newenvironment{graf} generates an error. * ltfiles.dtx: move \listfiles and \@addtofilelist here. @@ -9102,29 +9164,29 @@ All changes above are only part of the development branch for the next release. 1994-10-17 Alan Jeffrey - * latex209.dtx: Added empty initial mark. - New method of switching off 2e commands. - Allow \newcommand on 2e commands. + * latex209.dtx: Added empty initial mark. + New method of switching off 2e commands. + Allow \newcommand on 2e commands. 1994-10-16 Chris Rowley * ltsect.dtx: - Added \normalcolor to page-numbers in toc + Added \normalcolor to page-numbers in toc * ltfntcmd.dtx: - Tidying, and typos fixed in documentation - Added check for empty text - Removed space from \nfss@text - Renamed \check@nocorr to \text@command: - to improve error messages + Tidying, and typos fixed in documentation + Added check for empty text + Removed space from \nfss@text + Renamed \check@nocorr to \text@command: + to improve error messages * ltboxes.dtx (section{\LaTeX\ Box commands}): Added \long to \fbox, \mbox, \sbox (from ltpatch) \leavevmode corrected for frame boxes (from ltpatch) - \@parboxto macro added to \@iiiparbox, + \@parboxto macro added to \@iiiparbox, to remove misuse of \@empty 1994-10-16 David Carlisle @@ -9154,7 +9216,7 @@ All changes above are only part of the development branch for the next release. 1994-10-14 David Carlisle * latexbug.tex: Add latexbug.cfg system, so that personal - details do not need to be entered every time. + details do not need to be entered every time. 1994-10-14 Frank Mittelbach @@ -9197,16 +9259,16 @@ All changes above are only part of the development branch for the next release. 1994-10-11 David Carlisle * ltdirchk.dtx: Redo ltxcheck: more friendly messages, check - for TeX3.14, and missing fonts. - Add automatic detection of TeX3.14 (previously in ltpatch.ltx) + for TeX3.14, and missing fonts. + Add automatic detection of TeX3.14 (previously in ltpatch.ltx) * latexbug.tex: Modify to prompt for synopsis information. 1994-10-07 Alan Jeffrey - * pastex.txt: Installation guide for PasTeX on the Amiga. + * pastex.txt: Installation guide for PasTeX on the Amiga. - * ltoutenc.dtx: Moved ogonek accent. + * ltoutenc.dtx: Moved ogonek accent. 1994-09-26 Frank Mittelbach @@ -9236,10 +9298,10 @@ All changes above are only part of the development branch for the next release. 1994-09-23 Alan Jeffrey - * latex209.dtx: Added spaces to \@halfmag and friends. + * latex209.dtx: Added spaces to \@halfmag and friends. - * ltxguide.cls: Replaced \PassOptionsToPackage{article} by - \PassOptionsToClass{article}. + * ltxguide.cls: Replaced \PassOptionsToPackage{article} by + \PassOptionsToClass{article}. 1994-09-21 David Carlisle @@ -9261,17 +9323,17 @@ All changes above are only part of the development branch for the next release. 1994-09-04 Alan Jeffrey - * inputenc.dtx: Added \cs{DeclareInputComposite} and the - \cs{ProvidesCommand}s to the encoding files. - Removed the definition of the accent slots in Latin-1. + * inputenc.dtx: Added \cs{DeclareInputComposite} and the + \cs{ProvidesCommand}s to the encoding files. + Removed the definition of the accent slots in Latin-1. 1994-08-31 Alan Jeffrey - * oztex.txt: Checked in revised version from Andrew. + * oztex.txt: Checked in revised version from Andrew. 1994-08-30 Alan Jeffrey - * yandytex.txt: Checked in revised version from Berthold. + * yandytex.txt: Checked in revised version from Berthold. 1994-08-26 Johannes Braams @@ -9285,8 +9347,8 @@ All changes above are only part of the development branch for the next release. 1994-08-24 Alan Jeffrey - * tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt, - tlb0830.lvt: Checked in. + * tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt, + tlb0830.lvt: Checked in. 1994-08-09 David Carlisle @@ -9304,11 +9366,11 @@ All changes above are only part of the development branch for the next release. 1994-07-27 Alan Jeffrey - * ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass. + * ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass. 1994-07-25 Alan Jeffrey - * microtex.txt: Removed extraneous \dump. + * microtex.txt: Removed extraneous \dump. 1994-07-18 David Carlisle @@ -9317,13 +9379,13 @@ All changes above are only part of the development branch for the next release. 1994-07-18 Alan Jeffrey - * microtex.txt: Added installation guide for MicroTeX. + * microtex.txt: Added installation guide for MicroTeX. 1994-07-14 Alan Jeffrey - * inputenc.dtx: Replaced \Dh by \DH and \Th by \TH. - Added \ensuremath to the math commands. - Added \inputencoding. + * inputenc.dtx: Replaced \Dh by \DH and \Th by \TH. + Added \ensuremath to the math commands. + Added \inputencoding. 1994-07-13 Johannes Braams @@ -9355,7 +9417,7 @@ All changes above are only part of the development branch for the next release. 1994-07-13 Alan Jeffrey - * fontsmpl.dtx: Added an \upshape. + * fontsmpl.dtx: Added an \upshape. 1994-07-11 Johannes Braams @@ -9388,9 +9450,9 @@ All changes above are only part of the development branch for the next release. * ltpatch.ltx: Added patches for: - \mathit in text mode - \loop could do one iteration too much in certain situations - T1 breaks german 2.4a (this is a german.sty problem actually) + \mathit in text mode + \loop could do one iteration too much in certain situations + T1 breaks german 2.4a (this is a german.sty problem actually) * patches.txt: Added descritions of further patch level 3 patches. @@ -9398,33 +9460,33 @@ All changes above are only part of the development branch for the next release. 1994-06-30 Chris Rowley - * fntguide.tex + * fntguide.tex Warning about enc.def commands added Stuff on font definition files and encoding definition files changed - removed, for consistency, use throughout - Small edits + removed, for consistency, use throughout + Small edits - * clsguide.tex + * clsguide.tex Michael's amendments added 1994-06-26 Chris Rowley - * usrguide.tex + * usrguide.tex Minor edits - * clsguide.tex + * clsguide.tex Added stuff Changed usage of <> Reordered update stuff Added Summary sheet - Removed draft status + Removed draft status - * ltxguide.cls + * ltxguide.cls 1994-06-23 Johannes Braams @@ -9447,7 +9509,7 @@ All changes above are only part of the development branch for the next release. \test..{} problem Changed usage of <> - Changed definition of verbatim + Changed definition of verbatim 1994-06-22 Chris Rowley @@ -9456,17 +9518,17 @@ All changes above are only part of the development branch for the next release. Removed space from \DeclareTextCommand Improved error messages from \DeclareTextCommand - * usrguide.tex + * usrguide.tex Changed usage of <> - * clsguide.tex + * clsguide.tex Added stuff Changed usage of <> Rationalised encoding stuff - * fntguide.tex + * fntguide.tex Rationalised usage of cdp, ENC, encoding Changed usage of <> @@ -9484,18 +9546,18 @@ All changes above are only part of the development branch for the next release. * usrguide.tex - Added stuff on project, money etc. + Added stuff on project, money etc. * fntguide.tex - Corrcted largesymbols stuff. + Corrcted largesymbols stuff. - * clsguide.tex + * clsguide.tex Major revision and additons. - Spell checked. - Removed \typeouts. - Removed overfull boxes. + Spell checked. + Removed \typeouts. + Removed overfull boxes. * ltfntcmd.dtx: @@ -9515,15 +9577,15 @@ All changes above are only part of the development branch for the next release. * template.txt - Changed 2e to new. + Changed 2e to new. * fntguide.tex - Tidying. + Tidying. - * directex.txt + * directex.txt - Corrected layout. + Corrected layout. 1994-06-12 Rainer Schoepf @@ -9531,7 +9593,7 @@ All changes above are only part of the development branch for the next release. distrib/unpacked. * ltpatch.dtx: Don't set catcodes of upper 128 characters in - TeX2. + TeX2. * manifest.txt: Added directex.txt. @@ -9547,42 +9609,42 @@ All changes above are only part of the development branch for the next release. Removed these typeouts: \typeout{CONTENTS OF THE TOOLS BUNDLE: needs checking} \typeout{Marion said: Perhaps the different uses of - `newcommand and `providecommand can be shown a bit clearer} + `newcommand and `providecommand can be shown a bit clearer} \typeout{List of stuff in mfnfss, psnfss, babel not done} * fntguide.tex - Editorial changes. - Removed duplicated text. - Removed unwanted blank lines. + Editorial changes. + Removed duplicated text. + Removed unwanted blank lines. * emtex.txt - Added section on memory problems. + Added section on memory problems. - * directex.txt + * directex.txt - New file added. + New file added. - * install.txt + * install.txt - Added new file to list. + Added new file to list. - * readme.txt + * readme.txt - Editorial changes. - Added patches.txt, etc. + Editorial changes. + Added patches.txt, etc. * patches.txt - Editorial changes. - Removed references to lists. + Editorial changes. + Removed references to lists. Documented lack of lists. * ltfntcmd.dtx - Corrected documentation, title etc. - Corrected dates in changes entries. + Corrected documentation, title etc. + Corrected dates in changes entries. 1994-06-11 Frank Mittelbach @@ -9637,13 +9699,13 @@ All changes above are only part of the development branch for the next release. 1994-06-06 Rainer Schoepf * Makefile.dist: Changed mv to cp, added installation of *.ist - files, added target `clean'. + files, added target `clean'. * manifest.txt: Changed name of distributed Makefile from - Makefile to Makefile.unx. + Makefile to Makefile.unx. * Makefile: Changed name of distributed Makefile from Makefile - to Makefile.unx. + to Makefile.unx. 1994-06-03 Chris Rowley @@ -9712,7 +9774,7 @@ All changes above are only part of the development branch for the next release. 1994-06-01 Alan Jeffrey - * ltnews01.tex: Corrected grammar. + * ltnews01.tex: Corrected grammar. 1994-05-31 Chris Rowley @@ -9742,15 +9804,15 @@ All changes above are only part of the development branch for the next release. 1994-05-31 Alan Jeffrey - * latex209.dtx: Added SLiTeX logo again. + * latex209.dtx: Added SLiTeX logo again. - * ltnews01.tex: Finished off. + * ltnews01.tex: Finished off. - * ltnews.cls: Added downloaded PS fonts options. - Removed angle brackets from <...> since these were the last - remaining bitmaps! - Added variants of the LaTeX logo. - Added the ltnews.cfg file. + * ltnews.cls: Added downloaded PS fonts options. + Removed angle brackets from <...> since these were the last + remaining bitmaps! + Added variants of the LaTeX logo. + Added the ltnews.cfg file. 1994-05-30 Johannes Braams @@ -9770,8 +9832,8 @@ All changes above are only part of the development branch for the next release. eufrak from main distribution to extra package directory.. * manifest.txt: Moved pandora, oldgerm, amsfonts, euscript, - eufrak from main distribution to extra package directory. - Removed features.tex from distribution. + eufrak from main distribution to extra package directory. + Removed features.tex from distribution. 1994-05-30 Frank Mittelbach @@ -9780,21 +9842,21 @@ All changes above are only part of the development branch for the next release. 1994-05-30 Alan Jeffrey - * usrguide.tex: Removed the description of mfnfss and tools - packages. - Removed sections that were commented out. - Removed typeouts. - Wrapped long lines. - Rewrote to remove overfull hboxes. - Moved the stuff on \newmathalphabet to the section on LaTeX - errors. - Rewrote the stuff on latex209.cfg, and replaced - \PassOptionsToClass (which requires you to list all the - known classes) with \ds@oldlfont. - Added the `LaTeX2e command in LaTeX 2.09 document' error. - Added the SLiTeX logo to the list of unsupported commands. - Added the full list of \text..., \...family, \...series, \...shape - and \math... commands. + * usrguide.tex: Removed the description of mfnfss and tools + packages. + Removed sections that were commented out. + Removed typeouts. + Wrapped long lines. + Rewrote to remove overfull hboxes. + Moved the stuff on \newmathalphabet to the section on LaTeX + errors. + Rewrote the stuff on latex209.cfg, and replaced + \PassOptionsToClass (which requires you to list all the + known classes) with \ds@oldlfont. + Added the `LaTeX2e command in LaTeX 2.09 document' error. + Added the SLiTeX logo to the list of unsupported commands. + Added the full list of \text..., \...family, \...series, \...shape + and \math... commands. 1994-05-29 Johannes Braams @@ -9823,40 +9885,40 @@ All changes above are only part of the development branch for the next release. 1994-05-29 Alan Jeffrey - * ltxguide.cls: Added italic correction to <...>. - Added \sourcecode. - - * fntguide.tex: Corrected typos spotted by FMi. - Added the `math selection commands' section. - Replaced the notion of math font attributes with a description - closer to that in the Companion. - Moved stuff on declaring encodings into its own section - Moved stuff on font installation into its own section. - Moved stuff on initialization into its own section. - Moved stuff on naming conventions into its own section. - Moved DeclareFixedFont into text font selection. - Added text to the introduction. - Moved all of the enc.def file commands into one subsection. - Moved everything that's left without a home into the `miscellania' - section. - Generally tidied up. + * ltxguide.cls: Added italic correction to <...>. + Added \sourcecode. + + * fntguide.tex: Corrected typos spotted by FMi. + Added the `math selection commands' section. + Replaced the notion of math font attributes with a description + closer to that in the Companion. + Moved stuff on declaring encodings into its own section + Moved stuff on font installation into its own section. + Moved stuff on initialization into its own section. + Moved stuff on naming conventions into its own section. + Moved DeclareFixedFont into text font selection. + Added text to the introduction. + Moved all of the enc.def file commands into one subsection. + Moved everything that's left without a home into the `miscellania' + section. + Generally tidied up. 1994-05-28 Alan Jeffrey - * ltxguide.cls: Made << and >> produce < and > inside verbatim. - Added ltxguide.cfg. - - * fntguide.tex: Created file out of features.tex. - Redid document structure to fit with usrguide and clsguide. - Removed stuff on old style digits. - Moved text font stuff before math font stuff. - Removed `utilities' section. - Removed the author font commands (covered by usrguide). - Added description of the text font attributes. - Redid the description of the \f@... commands. - Redid the description of the \...default commands. - Added the section on the \DeclareTextWidget commands. - Added the section on math attributes. + * ltxguide.cls: Made << and >> produce < and > inside verbatim. + Added ltxguide.cfg. + + * fntguide.tex: Created file out of features.tex. + Redid document structure to fit with usrguide and clsguide. + Removed stuff on old style digits. + Moved text font stuff before math font stuff. + Removed `utilities' section. + Removed the author font commands (covered by usrguide). + Added description of the text font attributes. + Redid the description of the \f@... commands. + Redid the description of the \...default commands. + Added the section on the \DeclareTextWidget commands. + Added the section on math attributes. 1994-05-27 Johannes Braams @@ -9888,17 +9950,17 @@ All changes above are only part of the development branch for the next release. * tlb0438.tlg: Line number change in exscale package. * Makefile: Renamed unpack2e.ins to unpack.ins and latex2e.ltx - to latex.ltx, renamed format file to latex.fmt. Added test - tlb0483. + to latex.ltx, renamed format file to latex.fmt. Added test + tlb0483. * manifest.txt: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx, rearranged a few lines. + latex2e.ltx to latex.ltx, rearranged a few lines. * unpack2e.ins: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx. + latex2e.ltx to latex.ltx. * unpacked.txt: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx. + latex2e.ltx to latex.ltx. * tracefnt.dtx: Changed copyright line. @@ -9929,15 +9991,15 @@ All changes above are only part of the development branch for the next release. 1994-05-27 Alan Jeffrey - * ltnews01.tex: Corrected filenames of usrguie and clsguide. - Removed ltnews.cls from filecontents. + * ltnews01.tex: Corrected filenames of usrguie and clsguide. + Removed ltnews.cls from filecontents. - * ltnews.cls: Checked this in. Added angle brackets to <...>. - Added AMS and SliTeX logos. + * ltnews.cls: Checked this in. Added angle brackets to <...>. + Added AMS and SliTeX logos. - * latex209.dtx: Added SliTeX logo. + * latex209.dtx: Added SliTeX logo. - * ltxguide.cls: Added SliTeX logo. + * ltxguide.cls: Added SliTeX logo. 1994-05-26 Johannes Braams @@ -9987,7 +10049,7 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx: Add silent substitution for bold tt. * ltdirchk.dtx: Fix bug in Mac parser. typo " should have been : - (reported by Andrew Trevorrow) + (reported by Andrew Trevorrow) * ltbibl.dtx: Add initial documentation section. @@ -10096,12 +10158,12 @@ All changes above are only part of the development branch for the next release. * manifest.txt: Added changes.txt. * ltsect.dtx (\@dottedtocline): Put braces around argument 4 - (the actual toc entry) to avoid font (and possibly other) - changes leaking out to the leaders. + (the actual toc entry) to avoid font (and possibly other) + changes leaking out to the leaders. * vlatex01.tlg: Updated for extra lines around warning - messages, removed trailing space in error help messages. - Change in strut for footnotes causes blank line to disappear. + messages, removed trailing space in error help messages. + Change in strut for footnotes causes blank line to disappear. * tnfss7.tlg: Update for new \protect handling, updated for new values of \sfcode and correct \hbar accent. @@ -10134,12 +10196,12 @@ All changes above are only part of the development branch for the next release. 1994-05-25 Alan Jeffrey - * clsguide.tex: Added introduction. - Added section on command naming. - Added section on docstrip. - Added details of option processing. - Added example of DeclareRobustCommand. - Checked the document in with the server. + * clsguide.tex: Added introduction. + Added section on command naming. + Added section on docstrip. + Added details of option processing. + Added example of DeclareRobustCommand. + Checked the document in with the server. 1994-05-24 Chris Rowley @@ -10197,19 +10259,19 @@ All changes above are only part of the development branch for the next release. 1994-05-24 Alan Jeffrey - * ltxguide.tex: Checked in document class. + * ltxguide.tex: Checked in document class. - * clsguide.tex: Added sections on 2e font commands, defining \rm - etc., and obsolete commands. - Added stuff about \normalsize, \textheight and \textwidth being the - only mandatory commands. - Implemented Frank's suggestions for additions to the `loading other - files' section (which is now a subsection of `upgrading'). - Added stuff on why primitive \input is a bad idea. - Added stuff on boxes and colour. - Moved general style stuff to overview section rather than 2.09 - section. - Added newsletter example. + * clsguide.tex: Added sections on 2e font commands, defining \rm + etc., and obsolete commands. + Added stuff about \normalsize, \textheight and \textwidth being the + only mandatory commands. + Implemented Frank's suggestions for additions to the `loading other + files' section (which is now a subsection of `upgrading'). + Added stuff on why primitive \input is a bad idea. + Added stuff on boxes and colour. + Moved general style stuff to overview section rather than 2.09 + section. + Added newsletter example. 1994-05-23 David Carlisle @@ -10347,10 +10409,10 @@ All changes above are only part of the development branch for the next release. 1994-05-23 Alan Jeffrey - * clsguide.tex: Redid document structure to be more like - usrguide. - Added section on class/package structure. - Restructured the commands list. + * clsguide.tex: Redid document structure to be more like + usrguide. + Added section on class/package structure. + Restructured the commands list. 1994-05-22 Frank Mittelbach @@ -10407,27 +10469,27 @@ All changes above are only part of the development branch for the next release. 1994-05-22 Alan Jeffrey - * usrguide.tex: Rewrote description of the new argument to - \newcommand. - Added section on classes and packages, on package options, and on - standard classes and packages. - Added some examples. - Added filecontents* and paragraph on what files can be sent. - Added section on latexsym in `old commands'. - Rewrote some stuff on 2.09 documents. - Added section on \frontmatter, \mainmatter and \backmatter. - Wrote `problems' section, including new error messages, stuff on - \tenrm and friends, old versions of files, and submitting a bug - report. - Added overview. - - * lterror.dtx: Replaced braces with begingroup, to stop mathords - from sneaking into math mode. - Replaced \@generic@message and \@generic@error by \GenericError, - \GenericWarning and \GenericInfo. - Made \GenericError, \GenericWarning and \GenericInfor robust. - Replaced \\ and ~ by \MessageBreak and \space. - Replaced \string by \protect in some messages. + * usrguide.tex: Rewrote description of the new argument to + \newcommand. + Added section on classes and packages, on package options, and on + standard classes and packages. + Added some examples. + Added filecontents* and paragraph on what files can be sent. + Added section on latexsym in `old commands'. + Rewrote some stuff on 2.09 documents. + Added section on \frontmatter, \mainmatter and \backmatter. + Wrote `problems' section, including new error messages, stuff on + \tenrm and friends, old versions of files, and submitting a bug + report. + Added overview. + + * lterror.dtx: Replaced braces with begingroup, to stop mathords + from sneaking into math mode. + Replaced \@generic@message and \@generic@error by \GenericError, + \GenericWarning and \GenericInfo. + Made \GenericError, \GenericWarning and \GenericInfor robust. + Replaced \\ and ~ by \MessageBreak and \space. + Replaced \string by \protect in some messages. 1994-05-21 David Carlisle @@ -10479,20 +10541,20 @@ All changes above are only part of the development branch for the next release. 1994-05-21 Alan Jeffrey - * ltnews01.tex: Wrote 1st draft of LaTeX News #1. + * ltnews01.tex: Wrote 1st draft of LaTeX News #1. - * lterror.dtx: Made \@generic@message robust. + * lterror.dtx: Made \@generic@message robust. 1994-05-20 Rainer Schoepf * vtl2e06.tlg: Update for new \protect handling, change in - format of error messages, change in glue for framed boxes. + format of error messages, change in glue for framed boxes. * vlatex06.tlg: Update for new \protect handling, change in - format of error messages, change in glue for framed boxes. + format of error messages, change in glue for framed boxes. * ltpage.dtx (\marboth, \markright): Changed setting for - \protect. + \protect. * tl2e7.tlg: Update for new \protect handling. @@ -10531,7 +10593,7 @@ All changes above are only part of the development branch for the next release. * ltmiscen.dtx (\@writefile): Added correct setting of \protect. * ltfloat.dtx (\@xfloat): Restore @nobreak switch inside float - to default value false. + to default value false. * ltoutput.dtx (\@outputpage): Added setting of \protect during \shipout. @@ -10573,19 +10635,19 @@ All changes above are only part of the development branch for the next release. 1994-05-20 Alan Jeffrey - * lterror.dtx: Fixed a bug with \@inmatherr. + * lterror.dtx: Fixed a bug with \@inmatherr. - * ltfinal.dtx: Corrected checksum. + * ltfinal.dtx: Corrected checksum. - * lterror.dtx: Added \@latex@info@no@line. - Added missing full stops. + * lterror.dtx: Added \@latex@info@no@line. + Added missing full stops. - * ltdefns.dtx: Renamed @checkcommand to CheckCommand. + * ltdefns.dtx: Renamed @checkcommand to CheckCommand. - * latex209.dst: Added t1enc.sty. + * latex209.dst: Added t1enc.sty. - * latex209.dtx: Changed \@finalstrut. - Added t1enc.sty. + * latex209.dtx: Changed \@finalstrut. + Added t1enc.sty. 1994-05-19 David Carlisle @@ -10683,8 +10745,8 @@ All changes above are only part of the development branch for the next release. reappear. * tltc001.tlg: Change in test2e setup causes box printout to - reappear, strut in footnotes back to old version for - compatibility mode. + reappear, strut in footnotes back to old version for + compatibility mode. 1994-05-18 Rainer Schoepf @@ -10713,18 +10775,18 @@ All changes above are only part of the development branch for the next release. 1994-05-18 Alan Jeffrey - * latex209.dtx: Added \@finalstrut. + * latex209.dtx: Added \@finalstrut. - * ltlogos.dtx: Added the TeX logo. - Made the LaTeX2e logo use the text font 2 rather than the math - font 2. + * ltlogos.dtx: Added the TeX logo. + Made the LaTeX2e logo use the text font 2 rather than the math + font 2. - * ltoutenc.dtx: Fixed a typo with fontenc.sty... it's - \encodingdefault, not \defaultencoding! + * ltoutenc.dtx: Fixed a typo with fontenc.sty... it's + \encodingdefault, not \defaultencoding! - * ltfinal.dtx: Corrected the lccode for d-bar. + * ltfinal.dtx: Corrected the lccode for d-bar. - * ltoutenc.dtx: Made \.i produce i. + * ltoutenc.dtx: Made \.i produce i. 1994-05-17 David Carlisle @@ -10790,19 +10852,19 @@ All changes above are only part of the development branch for the next release. 1994-05-17 Alan Jeffrey - * lterror.dtx: Moved error commands from ltdefns.dtx. + * lterror.dtx: Moved error commands from ltdefns.dtx. - * ltdefns.dtx: Added section on \protect. Moved error commands to - lterror.dtx. + * ltdefns.dtx: Added section on \protect. Moved error commands to + lterror.dtx. - * ltoutenc.dtx: Removed braces from \$ since they're now in - nfss@text. + * ltoutenc.dtx: Removed braces from \$ since they're now in + nfss@text. - * latex209.dtx: Fixed a bug with \ds@newlfont. - Removed extra spaces from the missing file error. - Commented out bezier with \iffalse...\fi rather than %% to avoid - bezier turning up in every file. - Corrected some documentation. + * latex209.dtx: Fixed a bug with \ds@newlfont. + Removed extra spaces from the missing file error. + Commented out bezier with \iffalse...\fi rather than %% to avoid + bezier turning up in every file. + Corrected some documentation. 1994-05-16 David Carlisle @@ -10810,7 +10872,7 @@ All changes above are only part of the development branch for the next release. and add extra braces so a_\ensuremath{foo} works. * ltoutput.dtx: Add \color@begingroup to protect \normalcolor. - move \normalcolor out of the inner box. + move \normalcolor out of the inner box. 1994-05-16 Rainer Schoepf @@ -10852,33 +10914,33 @@ All changes above are only part of the development branch for the next release. 1994-05-16 Alan Jeffrey - * ltcntrl.dtx: Split file from ltinit.dtx. + * ltcntrl.dtx: Split file from ltinit.dtx. - * ltcounts.dtx: Split file from ltinit.dtx. + * ltcounts.dtx: Split file from ltinit.dtx. - * ltdefns.dtx: Split file from ltinit.dtx. + * ltdefns.dtx: Split file from ltinit.dtx. - * lterror.dtx: Split file from ltinit.dtx. + * lterror.dtx: Split file from ltinit.dtx. - * ltlogos.dtx: Split file from ltinit.dtx. + * ltlogos.dtx: Split file from ltinit.dtx. - * ltpar.dtx: Split file from ltinit.dtx. + * ltpar.dtx: Split file from ltinit.dtx. - * ltspace.dtx: Split file from ltinit.dtx. + * ltspace.dtx: Split file from ltinit.dtx. - * ltoutenc.dtx: Removed \P, since it's not in the T1 encoding. - Added \r and \k accents. - Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj. + * ltoutenc.dtx: Removed \P, since it's not in the T1 encoding. + Added \r and \k accents. + Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj. - * latex209.dtx: Fixed a bug with \mediumseries. + * latex209.dtx: Fixed a bug with \mediumseries. - * ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case - encoding files. - Fixed a bug with \pounds. + * ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case + encoding files. + Fixed a bug with \pounds. - * latex209.dtx: Fixed a bug with the margid option. + * latex209.dtx: Fixed a bug with the margid option. - * ltfinal.dtx: Removed ot1enc.sty. + * ltfinal.dtx: Removed ot1enc.sty. 1994-05-15 Frank Mittelbach @@ -10891,7 +10953,7 @@ All changes above are only part of the development branch for the next release. 1994-05-15 Alan Jeffrey - * latex209.dtx: Added the nomargid and margid options. + * latex209.dtx: Added the nomargid and margid options. 1994-05-14 David Carlisle @@ -10922,7 +10984,7 @@ All changes above are only part of the development branch for the next release. code. * tracefnt.dtx (section{Macros common to \texttt{fam.tex} and - \texttt{tracefnt.sty}}): Added \enc@update to selectfont. + \texttt{tracefnt.sty}}): Added \enc@update to selectfont. * fam.dtx (section{Macros for setting up the tables}): Initialise \@cmd in \DeclareFontEncoding. @@ -10934,25 +10996,25 @@ All changes above are only part of the development branch for the next release. 1994-05-14 Alan Jeffrey - * ltoutenc.dtx: Renamed \ENC@cmd to \ENC-cmd, to avoid collisions - with commands like \U@cmd. + * ltoutenc.dtx: Renamed \ENC@cmd to \ENC-cmd, to avoid collisions + with commands like \U@cmd. - * ltoutenc.dst: Updated the dst file to match ltoutenc.dtx. + * ltoutenc.dst: Updated the dst file to match ltoutenc.dtx. - * latex209.dtx: Redid the oldlfont and newlfont options to set the - \@no@font@optfalse flag. + * latex209.dtx: Redid the oldlfont and newlfont options to set the + \@no@font@optfalse flag. - * fontsmpl.dtx: Split font sample document and package out of - ltoutenc. + * fontsmpl.dtx: Split font sample document and package out of + ltoutenc. - * ltoutenc.dtx: Stopped commands declared with DeclareTextWidget - from going into an infinite loop if f@encoding isn't the current - encoding. - Added fontenc package. - Made ot1enc.def and t1enc.def files rather than packages. + * ltoutenc.dtx: Stopped commands declared with DeclareTextWidget + from going into an infinite loop if f@encoding isn't the current + encoding. + Added fontenc package. + Made ot1enc.def and t1enc.def files rather than packages. - * latex209.dtx: Changed how 2e commands are switched off. - Removed the date from the announcement of 2.09 mode. + * latex209.dtx: Changed how 2e commands are switched off. + Removed the date from the announcement of 2.09 mode. 1994-05-13 David Carlisle @@ -10972,10 +11034,10 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: New accent handling in parboxrestore. * newlfont.dtx: \DeclareProtectedCommand now - \DeclareRobustCommand + \DeclareRobustCommand * oldlfont.dtx: \DeclareProtectedCommand now - \DeclareRobustCommand + \DeclareRobustCommand * ltpictur.dtx: Removed unnecessary braces from \@ifnextchar and \@ifstar constructions. @@ -11042,35 +11104,35 @@ All changes above are only part of the development branch for the next release. 1994-05-13 Alan Jeffrey - * ltinit.dtx: Added \@backslashchar. - Improved coding of \@ifdefinable. + * ltinit.dtx: Added \@backslashchar. + Improved coding of \@ifdefinable. - * testdist.dtx: Improved documentation. + * testdist.dtx: Improved documentation. - * emtex.l2e: Created this file. + * emtex.l2e: Created this file. - * ltfinal.dtx: Loaded package ot1enc, and defined \@acci and - friends. + * ltfinal.dtx: Loaded package ot1enc, and defined \@acci and + friends. - * ltinit.dtx: Added logging to DeclareProtectedCommand. + * ltinit.dtx: Added logging to DeclareProtectedCommand. - * ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx. - After all these months It's now a real bit of kernel! :-) + * ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx. + After all these months It's now a real bit of kernel! :-) - * accents.dtx: Replaces \space by ` ' in csname. + * accents.dtx: Replaces \space by ` ' in csname. - * ltinit.dtx: Replaced \space by ` ' in \csname + * ltinit.dtx: Replaced \space by ` ' in \csname - * accents.dtx: Added \{, \} and \$. + * accents.dtx: Added \{, \} and \$. - * ltinit.dtx: Renamed DeclareProtectedCommand to - DeclareRobustCommand. - Moved DeclareRobustCommand after @gobble. - Removed @if@short@command. - Removed \{ and \}. + * ltinit.dtx: Renamed DeclareProtectedCommand to + DeclareRobustCommand. + Moved DeclareRobustCommand after @gobble. + Removed @if@short@command. + Removed \{ and \}. - * accents.dtx: Redid all the kernel commands. Made t1.def and - ot1.def into t1enc.sty and ot1enc.sty. + * accents.dtx: Redid all the kernel commands. Made t1.def and + ot1.def into t1enc.sty and ot1enc.sty. 1994-05-12 Braams J.L. @@ -11153,7 +11215,7 @@ All changes above are only part of the development branch for the next release. 1994-05-12 Alan Jeffrey - * ltinit.dtx: Fixed a bug with DeclareProtectedCommand. + * ltinit.dtx: Fixed a bug with DeclareProtectedCommand. 1994-05-11 Braams J.L. @@ -11172,18 +11234,18 @@ All changes above are only part of the development branch for the next release. 1994-05-11 Alan Jeffrey - * ltinit.dtx: Moved the logos to after \DeclareProtectedCommand. - Defined them using \DeclareProtectedCommand. - Made the SLiTeX logo use the TeX logo. - Made \, and \hspace use \DeclareProtectedCommand. + * ltinit.dtx: Moved the logos to after \DeclareProtectedCommand. + Defined them using \DeclareProtectedCommand. + Made the SLiTeX logo use the TeX logo. + Made \, and \hspace use \DeclareProtectedCommand. - * ltfinal.dtx: Added %%% ltfinal.dtx line. + * ltfinal.dtx: Added %%% ltfinal.dtx line. - * ltinit.dtx: Added %%% ltinit.dtx line. + * ltinit.dtx: Added %%% ltinit.dtx line. - * latex209.dst: Added dummy bezier.sty. + * latex209.dst: Added dummy bezier.sty. - * latex209.dtx: Added dummy bezier.sty. + * latex209.dtx: Added dummy bezier.sty. 1994-05-10 Rainer Schoepf @@ -11192,10 +11254,10 @@ All changes above are only part of the development branch for the next release. 1994-05-10 Alan Jeffrey - * ltinit.dtx: Added documentation sent by DPC. - Moved \makeatletter and \maketother into ltinit. - Added extra ^^Js to \@latexerr. - Removed a couple of spurious braces. + * ltinit.dtx: Added documentation sent by DPC. + Moved \makeatletter and \maketother into ltinit. + Added extra ^^Js to \@latexerr. + Removed a couple of spurious braces. 1994-05-09 Rainer Schoepf @@ -11254,9 +11316,9 @@ All changes above are only part of the development branch for the next release. 1994-05-08 Alan Jeffrey - * somedefs.dtx: Produced v0.01. + * somedefs.dtx: Produced v0.01. - * rawfonts.dtx: Produced v0.01, using somedefs.dtx. + * rawfonts.dtx: Produced v0.01, using somedefs.dtx. 1994-05-07 Frank Mittelbach @@ -11306,7 +11368,7 @@ All changes above are only part of the development branch for the next release. 1994-05-05 Alan Jeffrey - * ltfinal.dtx: Added empty \errhelp. + * ltfinal.dtx: Added empty \errhelp. 1994-05-04 David Carlisle @@ -11358,7 +11420,7 @@ All changes above are only part of the development branch for the next release. 1994-05-03 Alan Jeffrey - * ltfinal.dtx: Set the catcode of ^^J to other. + * ltfinal.dtx: Set the catcode of ^^J to other. Removed \@undefinedfonterror. @@ -11374,16 +11436,16 @@ All changes above are only part of the development branch for the next release. 1994-05-02 Alan Jeffrey - * latex209.dtx: Redid the method of switching off 2e commands. + * latex209.dtx: Redid the method of switching off 2e commands. - * ltfinal.dtx: Set all the catcodes before dumping. Made 127 - illegal. + * ltfinal.dtx: Set all the catcodes before dumping. Made 127 + illegal. - * install.l2e: Added yandytex.l2e + * install.l2e: Added yandytex.l2e - * accents.dtx: Rewrote almost everything from scratch. + * accents.dtx: Rewrote almost everything from scratch. - * yandytex.l2e: Installed a file from Berthold + * yandytex.l2e: Installed a file from Berthold Corrected \@fontswitch. @@ -11391,9 +11453,9 @@ All changes above are only part of the development branch for the next release. * ltfloat.dtx (subsection{Floating Environments}): - Added \@largefloatcheck. + Added \@largefloatcheck. - Removed unnecessary braces from arguments of \@ifnextchar. + Removed unnecessary braces from arguments of \@ifnextchar. 1994-05-01 Braams J.L. @@ -11418,7 +11480,7 @@ All changes above are only part of the development branch for the next release. 1994-04-30 Chris Rowley - * ltinit.dtx: + * ltinit.dtx: Added latexinfo commands. @@ -11431,11 +11493,11 @@ All changes above are only part of the development branch for the next release. Changed to, eg, v1.0l. - * ltoutput.dtx: + * ltoutput.dtx: - Rogue space removed. + Rogue space removed. - Cut-off points for adding \@emptycol changed. + Cut-off points for adding \@emptycol changed. Empty column action added: \@emptycol. @@ -11601,10 +11663,10 @@ All changes above are only part of the development branch for the next release. 1994-04-21 Alan Jeffrey - * install.l2e: Corrected the wording of the bug report. + * install.l2e: Corrected the wording of the bug report. - * ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx. - This now includes setting the catcodes of 128--255 to `illegal'. + * ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx. + This now includes setting the catcodes of 128--255 to `illegal'. 1994-04-20 David Carlisle @@ -11630,7 +11692,7 @@ All changes above are only part of the development branch for the next release. 1994-04-20 Alan Jeffrey - * latex209.dtx: Redefined \verbatim@noligs@list. + * latex209.dtx: Redefined \verbatim@noligs@list. 1994-04-19 David Carlisle @@ -11663,7 +11725,7 @@ All changes above are only part of the development branch for the next release. \no@alphabet@help removed. * tracefnt.dtx: - Changed line breaks and wording in some messages. + Changed line breaks and wording in some messages. Removed surplus "." from some warning messages. All warning/error messages changed to start "LaTeX Font Warning" etc. Continuation lines are changed to "(Font)". @@ -11674,15 +11736,15 @@ All changes above are only part of the development branch for the next release. 1994-04-18 Alan Jeffrey - * web2ctex.l2e: Changed name from unixtex.l2e. Changed the - example shell script to look for a LATEX209INPUTS environment - variable. + * web2ctex.l2e: Changed name from unixtex.l2e. Changed the + example shell script to look for a LATEX209INPUTS environment + variable. - * install.l2e: Changed name of unixtex.l2e to - web2ctex.l2e. + * install.l2e: Changed name of unixtex.l2e to + web2ctex.l2e. - * latint.dtx: Changed \font@warning to \font@log for redefining - math alphabets and symbol fonts. + * latint.dtx: Changed \font@warning to \font@log for redefining + math alphabets and symbol fonts. 1994-04-17 Frank Mittelbach @@ -11737,10 +11799,10 @@ All changes above are only part of the development branch for the next release. 1994-04-14 Alan Jeffrey - * latexbug.tex: Changed the prompt for `a list of files' to a - prompt for a single filename. Made latexbug look to see if it - could find the file, and if it can, it includes the file and the - logfile in the latexbug.msg. + * latexbug.tex: Changed the prompt for `a list of files' to a + prompt for a single filename. Made latexbug look to see if it + could find the file, and if it can, it includes the file and the + logfile in the latexbug.msg. 1994-04-12 David Carlisle @@ -11764,7 +11826,7 @@ All changes above are only part of the development branch for the next release. 1994-04-12 Alan Jeffrey - * oztex.l2e: Added warning that lines are > 80 chars + * oztex.l2e: Added warning that lines are > 80 chars 1994-04-11 Braams J.L. @@ -11796,18 +11858,18 @@ All changes above are only part of the development branch for the next release. 1994-04-11 Alan Jeffrey - * fam.dtx: Added `defaultscriptratio and - `defaultscriptscriptratio. + * fam.dtx: Added `defaultscriptratio and + `defaultscriptscriptratio. - * latex209.dtx: Switched off `enlargethispage and the `!' float - option. + * latex209.dtx: Switched off `enlargethispage and the `!' float + option. 1994-04-10 Alan Jeffrey - * install.l2e: Split the installation guide into install.l2e, - texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files. + * install.l2e: Split the installation guide into install.l2e, + texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files. - * template.l2e: Created a template for system.l2e files. + * template.l2e: Created a template for system.l2e files. 1994-04-09 Frank Mittelbach @@ -11824,15 +11886,15 @@ All changes above are only part of the development branch for the next release. 1994-04-05 Alan Jeffrey - * latex209.dtx: Switched off `lrbox, `width, `height and `depth in - 2.09 mode. + * latex209.dtx: Switched off `lrbox, `width, `height and `depth in + 2.09 mode. - Removed optional arguments to `parbox, `minipage and `newcommand. + Removed optional arguments to `parbox, `minipage and `newcommand. - Made `ProvidesPackage and `ProvidesClass produce log entries - rather than warnings. + Made `ProvidesPackage and `ProvidesClass produce log entries + rather than warnings. - Removed `filedate. + Removed `filedate. 1994-03-31 David Carlisle @@ -12039,13 +12101,13 @@ All changes above are only part of the development branch for the next release. Corrected unpacking for ltxdoc.cls (change of docstrip module). * classes.dtx - (subsubsection{The dimension of text}): + (subsubsection{The dimension of text}): Use same default values for native mode as in old styles. (section{Identification}): Added file versions to the \Provides... commands - (subsection{Footnotes}): + (subsection{Footnotes}): Use \@makefnmark rather than its expansion in the definition of \@makefntext. @@ -12082,7 +12144,7 @@ All changes above are only part of the development branch for the next release. 1994-03-12 Frank Mittelbach * classes.dtx - (section{Identification}): + (section{Identification}): Removed \typeout statements since this is now handled by \Provide... @@ -12361,7 +12423,7 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx: Added driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. Set counter StandardModuleDepth to 1, since all ltx documentation needs that setting anyway. @@ -12432,7 +12494,7 @@ All changes above are only part of the development branch for the next release. * oldgerm.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. Removed extra pair of braces after \DeclareFontFamily which has only three arguments not four. @@ -12446,7 +12508,7 @@ All changes above are only part of the development branch for the next release. * varioref.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. 1994-02-27 Frank Mittelbach @@ -12460,994 +12522,994 @@ All changes above are only part of the development branch for the next release. * eufrak.dtx: Changed driver code slightly. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * euscript.dtx: Changed driver code slightly. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * exscale.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * nfssfont.dtx: Added to the distribution. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * docstrip.dtx (section{Producing the documentation}): Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * oldlfont.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * latexsym.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * newlfont.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * pandora.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * preload.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * lhyphen.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * fontdef.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * fontcmds.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. 1994-02-24 Frank Mittelbach - * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in - TeX2 (initialised in 2e format) + * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in + TeX2 (initialised in 2e format) - * ltdirchk.dtx: 0.2j "General" Remove need for drv file + * ltdirchk.dtx: 0.2j "General" Remove need for drv file * fam.dtx (subsection{Macros for loading fonts}): - Removed catcode settings from \try@load@fontshape and + Removed catcode settings from \try@load@fontshape and \DeclareFontShape and placed them into a separate macro called \nfss@catcodes so that it is easier to maintain special requirements for packages that make certain characters active. 1994-02-10 Alan Jeffrey - * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to - \@documentclasshook. ASAJ. + * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to + \@documentclasshook. ASAJ. - * ltclass.dtx: 0.2z \@documentclasshook Changed the name from - \@compatibility to \@documentclasshook, and added the check - for whether \@normalsize has been defined. ASAJ. + * ltclass.dtx: 0.2z \@documentclasshook Changed the name from + \@compatibility to \@documentclasshook, and added the check + for whether \@normalsize has been defined. ASAJ. 1994-02-07 Alan Jeffrey - * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the - first class to start (not the first to finish) + * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the + first class to start (not the first to finish) 1994-02-03 N.N. - * ltinit.dtx: LaTeX2e "General" correct mistakes in the - documentation + * ltinit.dtx: LaTeX2e "General" correct mistakes in the + documentation 1994-02-02 N.N. - * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and - options check if the file was loaded. + * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and + options check if the file was loaded. 1994-02-01 David Carlisle - * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer - error message + * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer + error message - * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer - error message + * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer + error message 1994-01-31 N.N. - * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of - \normalsizeinternally + * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of + \normalsizeinternally - * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if - necessary + * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if + necessary - * ltclass.dtx: 0.2w \g@addto@macro Use toks register to avoid - `hash' problems + * ltclass.dtx: 0.2w \g@addto@macro Use toks register to avoid + `hash' problems - * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined + * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined 1994-01-29 N.N. - * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if - no \ProcessOptions\ appears + * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if + no \ProcessOptions\ appears - * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added. + * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added. 1994-01-28 N.N. - * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current - file date. + * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current + file date. 1994-01-27 N.N. - * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm - fonts + * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm + fonts 1994-01-25 David Carlisle - * ltplain.dtx: LaTeX2e \bordermatrix Removed \p@renwd. + * ltplain.dtx: LaTeX2e \bordermatrix Removed \p@renwd. - * ltdirchk.dtx: 0.2i "General" Protect against looping on - \@@input and \@@end + * ltdirchk.dtx: 0.2i "General" Protect against looping on + \@@input and \@@end 1994-01-24 David Carlisle - * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is - undefined. + * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is + undefined. - * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux - has been found + * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux + has been found 1994-01-21 David Carlisle - * ltmiscen.dtx: v0.9s \verbatim@font Removed unnecessary category - code hackery. + * ltmiscen.dtx: v0.9s \verbatim@font Removed unnecessary category + code hackery. - * ltherest.dtx: LaTeX2e \@xfloat Added missing percent - characters. + * ltherest.dtx: LaTeX2e \@xfloat Added missing percent + characters. - * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save - memory + * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save + memory - * ltdirchk.dtx: 0.2g \filename@parse Minor changes, and add Mac - version (:) + * ltdirchk.dtx: 0.2g \filename@parse Minor changes, and add Mac + version (:) - * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise - docstrip module + * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise + docstrip module - * ltclass.dtx: 0.2u \documentstyle compatibility file now - latex209.def. + * ltclass.dtx: 0.2u \documentstyle compatibility file now + latex209.def. 1994-01-20 David Carlisle - * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed + * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed - * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new - file removed + * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new + file removed - * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck + * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck 1994-01-19 David Carlisle - * ltdirchk.dtx: 0.2e \strip@prefix name changed from - \strip@meaning, to match NFSS + * ltdirchk.dtx: 0.2e \strip@prefix name changed from + \strip@meaning, to match NFSS - * ltdirchk.dtx: 0.2e \input@path No longer check that an empty - group is in the path + * ltdirchk.dtx: 0.2e \input@path No longer check that an empty + group is in the path - * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test + * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test 1994-01-18 N.N. - * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode + * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode - * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include - files are listed. + * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include + files are listed. - * ltfiles.dtx: v0.9p \include Use \@input@ so include files are - listed. + * ltfiles.dtx: v0.9p \include Use \@input@ so include files are + listed. - * ltfiles.dtx: v0.9p \InputIfFileExists New Definition + * ltfiles.dtx: v0.9p \InputIfFileExists New Definition - * ltfiles.dtx: v0.9p \IfFileExists New Definition + * ltfiles.dtx: v0.9p \IfFileExists New Definition - * ltfiles.dtx: v0.9p \@input@ Macro added + * ltfiles.dtx: v0.9p \@input@ Macro added - * ltfiles.dtx: v0.9p \@input do not use a different definition - for \input@path + * ltfiles.dtx: v0.9p \@input do not use a different definition + for \input@path - * ltfiles.dtx: v0.9p \@iffileonpath Macro added + * ltfiles.dtx: v0.9p \@iffileonpath Macro added - * ltfiles.dtx: v0.9p \@break@loop Macro added + * ltfiles.dtx: v0.9p \@break@loop Macro added - * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension + * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension 1994-01-17 N.N. - * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if - needed, and lines up columns + * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if + needed, and lines up columns - * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72 + * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72 - * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble - commands + * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble + commands - * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter - stack usage + * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter + stack usage - * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter - stack usage + * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter + stack usage 1994-01-15 N.N. - * ltfiles.dtx: v0.9o \document move `@preamblecmds after document - hook + * ltfiles.dtx: v0.9o \document move `@preamblecmds after document + hook 1994-01-14 David Carlisle - * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output - stream + * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output + stream 1993-12-20 N.N. - * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef, - for array.sty + * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef, + for array.sty - * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed - @oldfilewarning + * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed + @oldfilewarning 1993-12-19 Alan Jeffrey - * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with - selfmade birthday presents + * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with + selfmade birthday presents - * ltclass.dtx: 0.2r \endfilecontents Different message when - ignoring a file + * ltclass.dtx: 0.2r \endfilecontents Different message when + ignoring a file - * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a - TEMPORARY version. + * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a + TEMPORARY version. - * fontcmds.dtx: v3.0b "General" Some more tidying done. + * fontcmds.dtx: v3.0b "General" Some more tidying done. - * fontcmds.dtx: v3.0b "General" Other tidying + * fontcmds.dtx: v3.0b "General" Other tidying - * fontcmds.dtx: v3.0b "General" @pdef comand added + * fontcmds.dtx: v3.0b "General" @pdef comand added - * fontcmds.dtx: v3.0b \@protecteddef Command added + * fontcmds.dtx: v3.0b \@protecteddef Command added - * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied + * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied - * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied + * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied - * fontcmds.dtx: 3.0b "General" Wording changes by CAR. + * fontcmds.dtx: 3.0b "General" Wording changes by CAR. - * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an - error if the command already exists, and added - \@renewfontswitch. ASAJ. + * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an + error if the command already exists, and added + \@renewfontswitch. ASAJ. - * fontcmds.dtx: 3.0b "General" Added by ASAJ. + * fontcmds.dtx: 3.0b "General" Added by ASAJ. 1993-12-17 N.N. - * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a - document command + * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a + document command - * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small - added + * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small + added - * ltoutput.dtx: v1.0j \@startpagehook Hook removed + * ltoutput.dtx: v1.0j \@startpagehook Hook removed - * ltoutput.dtx: v1.0j \@opcol Hook removed + * ltoutput.dtx: v1.0j \@opcol Hook removed - * ltoutput.dtx: 1.0j \@topnewpage Page room test added + * ltoutput.dtx: 1.0j \@topnewpage Page room test added - * ltoutput.dtx: 1.0j \@specialoutput Page room test added + * ltoutput.dtx: 1.0j \@specialoutput Page room test added - * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added + * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added - * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin - document, since it doesn't work. + * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin + document, since it doesn't work. - * ltclass.dtx: 0.2q \documentstyle Match Alan's new code. + * ltclass.dtx: 0.2q \documentstyle Match Alan's new code. - * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook + * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook - * ltclass.dtx: 0.2q \@documentclasshook Macro added + * ltclass.dtx: 0.2q \@documentclasshook Macro added - * ltmiscen.dtx: v0.9i \literal Macro added + * ltmiscen.dtx: v0.9i \literal Macro added 1993-12-16 N.N. - * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC + * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC - * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-) + * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-) - * ltherest.dtx: LaTeX2e \mark Init \mark at begin document + * ltherest.dtx: LaTeX2e \mark Init \mark at begin document 1993-12-15 N.N. - * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings + * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings - * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \minipage extra space removed. + * ltboxes.dtx: 0.1d \minipage extra space removed. - * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s' 1993-12-14 N.N. - * ltoutput.dtx: v1.0i "General" Section added to declare all - parameters + * ltoutput.dtx: v1.0i "General" Section added to declare all + parameters 1993-12-13 David Carlisle - * ltlists.dtx: LaTeX2e Initialised \@itemlabel + * ltlists.dtx: LaTeX2e Initialised \@itemlabel - * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of - \item + * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of + \item - * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs + * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs - * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs + * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs - * ltdirchk.dtx: 0.2a \strip@prefix modified, name changed from - \stripmeaning + * ltdirchk.dtx: 0.2a \strip@prefix modified, name changed from + \stripmeaning - * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting - for current directory syntax + * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting + for current directory syntax - * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not - check openin path + * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not + check openin path - * ltclass.dtx: 0.2o \usepackage Fixed error handling + * ltclass.dtx: 0.2o \usepackage Fixed error handling - * ltclass.dtx: 0.2o \documentstyle compatibility file now - latex209.sty. + * ltclass.dtx: 0.2o \documentstyle compatibility file now + latex209.sty. - * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\ - (now in latex.tex) + * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\ + (now in latex.tex) 1993-12-12 N.N. - * ltoutput.dtx: v1.0h \@tracemessage Commands changed + * ltoutput.dtx: v1.0h \@tracemessage Commands changed - * ltoutput.dtx: v1.0h \@testfp defs changed to lets + * ltoutput.dtx: v1.0h \@testfp defs changed to lets - * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets + * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets - * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets + * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets - * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal + * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal - * ltoutput.dtx: v1.0h \@makecol defs changed to lets + * ltoutput.dtx: v1.0h \@makecol defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@cflt name changed + * ltoutput.dtx: v1.0h \@cflt name changed - * ltoutput.dtx: v1.0h \@ccflb defs changed to lets + * ltoutput.dtx: v1.0h \@ccflb defs changed to lets - * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved + * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved 1993-12-11 N.N. - * ltmiscen.dtx: v0.9g \ref Macro reimplemented + * ltmiscen.dtx: v0.9g \ref Macro reimplemented - * ltmiscen.dtx: v0.9g \pageref Macro reimplemented + * ltmiscen.dtx: v0.9g \pageref Macro reimplemented - * ltmiscen.dtx: v0.9g \frac Added group around first arg + * ltmiscen.dtx: v0.9g \frac Added group around first arg - * ltmiscen.dtx: v0.9g \@setref Macro added + * ltmiscen.dtx: v0.9g \@setref Macro added - * ltherest.dtx: LaTeX2e \@title Added default + * ltherest.dtx: LaTeX2e \@title Added default - * ltherest.dtx: LaTeX2e \@author Added default + * ltherest.dtx: LaTeX2e \@author Added default - * fontcmds.dtx: v3.0a \textup Macros changed + * fontcmds.dtx: v3.0a \textup Macros changed - * fontcmds.dtx: v3.0a \sw@slant Macro changed + * fontcmds.dtx: v3.0a \sw@slant Macro changed - * fontcmds.dtx: v3.0a \maybe@ic@ Macro and name changed + * fontcmds.dtx: v3.0a \maybe@ic@ Macro and name changed - * fontcmds.dtx: v3.0a \maybe@ic Macro name changed + * fontcmds.dtx: v3.0a \maybe@ic Macro name changed - * fontcmds.dtx: v3.0a \fix@penalty Macro added + * fontcmds.dtx: v3.0a \fix@penalty Macro added - * fontcmds.dtx: v3.0a \emph Macro changed + * fontcmds.dtx: v3.0a \emph Macro changed - * fontcmds.dtx: v3.0a "General" newfontswitch command corrected - and changed + * fontcmds.dtx: v3.0a "General" newfontswitch command corrected + and changed - * fontcmds.dtx: v3.0a "General" newcommands replaced by defs + * fontcmds.dtx: v3.0a "General" newcommands replaced by defs - * fontcmds.dtx: v3.0a "General" italic correction now put in - front of penalty before glue + * fontcmds.dtx: v3.0a "General" italic correction now put in + front of penalty before glue - * fontcmds.dtx: v3.0a "General" Complete reworking of all text - commands, using just one creator function + * fontcmds.dtx: v3.0a "General" Complete reworking of all text + commands, using just one creator function - * fontcmds.dtx: v3.0a \@newtextcmd Macro changed + * fontcmds.dtx: v3.0a \@newtextcmd Macro changed 1993-12-09 N.N. - * ltmiscen.dtx: v0.9e \enddocument Hook added + * ltmiscen.dtx: v0.9e \enddocument Hook added - * ltfiles.dtx: v0.9e \document Hook added + * ltfiles.dtx: v0.9e \document Hook added - * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file. + * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file. - * ltboxes.dtx: 0.1c \@irsbox fix another typo + * ltboxes.dtx: 0.1c \@irsbox fix another typo 1993-12-08 N.N. - * ltlists.dtx: LaTeX2e \@item use \sboxto support colour + * ltlists.dtx: LaTeX2e \@item use \sboxto support colour - * ltinit.dtx: LaTeX2e \@vbsphack Command added + * ltinit.dtx: LaTeX2e \@vbsphack Command added - * ltinit.dtx: LaTeX2e \@esphack Command reimplemented + * ltinit.dtx: LaTeX2e \@esphack Command reimplemented - * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late - birthday present for Chris + * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late + birthday present for Chris - * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner - group + * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner + group - * ltboxes.dtx: 0.1b \@irsbox fix typo + * ltboxes.dtx: 0.1b \@irsbox fix typo - * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group - in \@begin@tempboxa + * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group + in \@begin@tempboxa - * ltboxes.dtx: 0.1b \@begin@tempboxa Extra braces for color - support (braces removed from other macros) + * ltboxes.dtx: 0.1b \@begin@tempboxa Extra braces for color + support (braces removed from other macros) - * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to - classes.dtx: + * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to + classes.dtx: 1993-12-07 N.N. - * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption + * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption - * ltclass.dtx: 0.2l \ProvidesFile Macro added + * ltclass.dtx: 0.2l \ProvidesFile Macro added 1993-12-06 N.N. - * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug - fixed + * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug + fixed - * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to - rescue writes + * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to + rescue writes - * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption + * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption 1993-12-05 N.N. - * ltoutput.dtx: v1.0f \output Command changed + * ltoutput.dtx: v1.0f \output Command changed - * ltoutput.dtx: v1.0f @\getfpsbit Command added + * ltoutput.dtx: v1.0f @\getfpsbit Command added - * ltoutput.dtx: v1.0f @\boxfpsbit Command added + * ltoutput.dtx: v1.0f @\boxfpsbit Command added - * ltoutput.dtx: v1.0f \@topnewpage Commands changed + * ltoutput.dtx: v1.0f \@topnewpage Commands changed - * ltoutput.dtx: v1.0f \@textfloatsheight Commands added + * ltoutput.dtx: v1.0f \@textfloatsheight Commands added - * ltoutput.dtx: v1.0f \@testfp Command changed + * ltoutput.dtx: v1.0f \@testfp Command changed - * ltoutput.dtx: v1.0f \@testfp Command added + * ltoutput.dtx: v1.0f \@testfp Command added - * ltoutput.dtx: v1.0f \@startpagehook Hook added + * ltoutput.dtx: v1.0f \@startpagehook Hook added - * ltoutput.dtx: v1.0f \@startdblcolumn Command changed + * ltoutput.dtx: v1.0f \@startdblcolumn Command changed - * ltoutput.dtx: v1.0f \@startcolumn Command changed + * ltoutput.dtx: v1.0f \@startcolumn Command changed - * ltoutput.dtx: v1.0f \@shipoutsetup Command added + * ltoutput.dtx: v1.0f \@shipoutsetup Command added - * ltoutput.dtx: v1.0f \@setfpsbit Command added + * ltoutput.dtx: v1.0f \@setfpsbit Command added - * ltoutput.dtx: v1.0f \@setfloattypecounts Command added + * ltoutput.dtx: v1.0f \@setfloattypecounts Command added - * ltoutput.dtx: v1.0f \@resethfps Command added + * ltoutput.dtx: v1.0f \@resethfps Command added - * ltoutput.dtx: v1.0f \@outputpage Command changed + * ltoutput.dtx: v1.0f \@outputpage Command changed - * ltoutput.dtx: v1.0f \@opcol Hook added + * ltoutput.dtx: v1.0f \@opcol Hook added - * ltoutput.dtx: v1.0f \@opcol Command changed + * ltoutput.dtx: v1.0f \@opcol Command changed - * ltoutput.dtx: v1.0f \@fpsadddefault Command added + * ltoutput.dtx: v1.0f \@fpsadddefault Command added - * ltoutput.dtx: v1.0f \@flupdates Command added + * ltoutput.dtx: v1.0f \@flupdates Command added - * ltoutput.dtx: v1.0f \@flstop Commands added + * ltoutput.dtx: v1.0f \@flstop Commands added - * ltoutput.dtx: v1.0f \@flsettextmin Command added + * ltoutput.dtx: v1.0f \@flsettextmin Command added - * ltoutput.dtx: v1.0f \@flsetnum Command added + * ltoutput.dtx: v1.0f \@flsetnum Command added - * ltoutput.dtx: v1.0f \@flcheckspace Command added + * ltoutput.dtx: v1.0f \@flcheckspace Command added - * ltoutput.dtx: v1.0f \@addtotoporbot Command changed + * ltoutput.dtx: v1.0f \@addtotoporbot Command changed - * ltoutput.dtx: v1.0f \@addtonextcol Command changed + * ltoutput.dtx: v1.0f \@addtonextcol Command changed - * ltoutput.dtx: v1.0f \@addtodblcol Command changed + * ltoutput.dtx: v1.0f \@addtodblcol Command changed - * ltoutput.dtx: v1.0f \@addtocurcol Command changed + * ltoutput.dtx: v1.0f \@addtocurcol Command changed - * ltoutput.dtx: v1.0f \@addtobot Command changed + * ltoutput.dtx: v1.0f \@addtobot Command changed - * ltherest.dtx: LaTeX2e \@xfloat Command changed + * ltherest.dtx: LaTeX2e \@xfloat Command changed - * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed + * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed 1993-12-04 N.N. - * ltfiles.dtx: v0.9b \input Macro reimplemented + * ltfiles.dtx: v0.9b \input Macro reimplemented - * ltfiles.dtx: v0.9b \InputIfFileExists Macro added + * ltfiles.dtx: v0.9b \InputIfFileExists Macro added - * ltfiles.dtx: v0.9b \IfFileExists Macro added + * ltfiles.dtx: v0.9b \IfFileExists Macro added - * ltfiles.dtx: v0.9b \@input Macro reimplemented + * ltfiles.dtx: v0.9b \@input Macro reimplemented - * ltfiles.dtx: v0.9b \@iinput Macro reimplemented + * ltfiles.dtx: v0.9b \@iinput Macro reimplemented 1993-12-03 N.N. - * ltinit.dtx: v0.9b \@latexerr Set \c@errorcontextlines to -1 + * ltinit.dtx: v0.9b \@latexerr Set \c@errorcontextlines to -1 - * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands - declared. + * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands + declared. - * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass + * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass - * ltclass.dtx: 0.2i \@cls@pkg Name changed to avoid clash with - output routine. + * ltclass.dtx: 0.2i \@cls@pkg Name changed to avoid clash with + output routine. - * ltboxes.dtx: 0.1a \set@color macro added + * ltboxes.dtx: 0.1a \set@color macro added - * ltboxes.dtx: 0.1a \set@color color support + * ltboxes.dtx: 0.1a \set@color color support - * ltboxes.dtx: 0.1a \sbox extra group + * ltboxes.dtx: 0.1a \sbox extra group - * ltboxes.dtx: 0.1a \sbox color support + * ltboxes.dtx: 0.1a \sbox color support - * ltboxes.dtx: 0.1a \raisebox redefined to support \height + * ltboxes.dtx: 0.1a \raisebox redefined to support \height - * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional - arguments + * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional + arguments - * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to - \@ifdefinable + * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to + \@ifdefinable - * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional - arguments + * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional + arguments - * ltboxes.dtx: 0.1a \mbox extra group + * ltboxes.dtx: 0.1a \mbox extra group - * ltboxes.dtx: 0.1a \makebox modified + * ltboxes.dtx: 0.1a \makebox modified - * ltboxes.dtx: 0.1a \lrbox macro added + * ltboxes.dtx: 0.1a \lrbox macro added - * ltboxes.dtx: 0.1a \lrbox color support + * ltboxes.dtx: 0.1a \lrbox color support - * ltboxes.dtx: 0.1a \fbox extra group + * ltboxes.dtx: 0.1a \fbox extra group - * ltboxes.dtx: 0.1a \endlrbox macro added + * ltboxes.dtx: 0.1a \endlrbox macro added - * ltboxes.dtx: 0.1a \bm@b macros added + * ltboxes.dtx: 0.1a \bm@b macros added - * ltboxes.dtx: 0.1a \@savebox default c not x + * ltboxes.dtx: 0.1a \@savebox default c not x - * ltboxes.dtx: 0.1a \@makepicbox macro modified + * ltboxes.dtx: 0.1a \@makepicbox macro modified - * ltboxes.dtx: 0.1a \@makebox default changed from x to c + * ltboxes.dtx: 0.1a \@makebox default changed from x to c - * ltboxes.dtx: 0.1a \@isavepicbox extra group + * ltboxes.dtx: 0.1a \@isavepicbox extra group - * ltboxes.dtx: 0.1a \@isavebox extra group + * ltboxes.dtx: 0.1a \@isavebox extra group - * ltboxes.dtx: 0.1a \@isavebox color support + * ltboxes.dtx: 0.1a \@isavebox color support - * ltboxes.dtx: 0.1a \@irsbox redefined to support \height + * ltboxes.dtx: 0.1a \@irsbox redefined to support \height - * ltboxes.dtx: 0.1a \@imakebox macro modified + * ltboxes.dtx: 0.1a \@imakebox macro modified - * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height + * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height - * ltboxes.dtx: 0.1a \@end@tempboxa macro added + * ltboxes.dtx: 0.1a \@end@tempboxa macro added - * ltboxes.dtx: 0.1a \@begin@tempboxa macro added + * ltboxes.dtx: 0.1a \@begin@tempboxa macro added - * ltboxes.dtx: 0.1a \@argrsbox macro removed + * ltboxes.dtx: 0.1a \@argrsbox macro removed 1993-12-01 N.N. - * ltoutput.dtx: v1.0e \@reinserts Command added + * ltoutput.dtx: v1.0e \@reinserts Command added 1993-11-30 N.N. - * ltoutput.dtx: v1.0c \@tracemessage Commands added + * ltoutput.dtx: v1.0c \@tracemessage Commands added - * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {} + * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {} 1993-11-29 N.N. - * ltplain.dtx: ??? "General" All accents in decimals; suggested - by Paul Taylor + * ltplain.dtx: ??? "General" All accents in decimals; suggested + by Paul Taylor - * ltoutput.dtx: v1.0b \@makespecialcolbox Command added + * ltoutput.dtx: v1.0b \@makespecialcolbox Command added - * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added + * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added 1993-11-28 N.N. - * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a - write stream (always use 15) + * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a + write stream (always use 15) - * ltclass.dtx: 0.2h "General" Primitive filenames now terminated - by space not \relax. + * ltclass.dtx: 0.2h "General" Primitive filenames now terminated + by space not \relax. - * ltclass.dtx: 0.2h "General" Directory syntax checing moved to - dircheck.dtx: + * ltclass.dtx: 0.2h "General" Directory syntax checing moved to + dircheck.dtx: - * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel - removed. + * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel + removed. - * ltclass.dtx: 0.2h \@twoclasseserror Macro added + * ltclass.dtx: 0.2h \@twoclasseserror Macro added - * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from - dircheck + * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from + dircheck 1993-11-24 N.N. - * ltinit.dtx: LaTeX2e \P@LaTeX Macro changed + * ltinit.dtx: LaTeX2e \P@LaTeX Macro changed - * fontcmds.dtx: v2.1a \test@next Macro added + * fontcmds.dtx: v2.1a \test@next Macro added - * fontcmds.dtx: v2.1a \maybe@ic@ Use \test@next + * fontcmds.dtx: v2.1a \maybe@ic@ Use \test@next 1993-11-23 N.N. - * ltoutput.dtx: v0.1c \enlargethispage* Commands added + * ltoutput.dtx: v0.1c \enlargethispage* Commands added - * ltoutput.dtx: v0.1c \@specialoutput Command changed + * ltoutput.dtx: v0.1c \@specialoutput Command changed - * ltoutput.dtx: v0.1c \@makecol Command changed + * ltoutput.dtx: v0.1c \@makecol Command changed - * ltoutput.dtx: v0.1c \@kludgeins Insert added + * ltoutput.dtx: v0.1c \@kludgeins Insert added - * ltoutput.dtx: v0.1c \@enlargepage Command added + * ltoutput.dtx: v0.1c \@enlargepage Command added - * ltoutput.dtx: v0.1a \paperwidth Register added + * ltoutput.dtx: v0.1a \paperwidth Register added - * ltoutput.dtx: v0.1a \paperheight Register added + * ltoutput.dtx: v0.1a \paperheight Register added - * ltinit.dtx: LaTeX2e \two@digits Macro added + * ltinit.dtx: LaTeX2e \two@digits Macro added - * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if + appropriate - * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed + * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed - * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token + * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token - * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed + * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed - * ltinit.dtx: LaTeX2e \@xargdef Macro added + * ltinit.dtx: LaTeX2e \@xargdef Macro added - * ltinit.dtx: LaTeX2e \@newenv Macro interface changed + * ltinit.dtx: LaTeX2e \@newenv Macro interface changed - * ltinit.dtx: LaTeX2e \@newcommand Macro added + * ltinit.dtx: LaTeX2e \@newcommand Macro added - * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a - trailing \fi + * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a + trailing \fi - * ltclass.dtx: 0.2g "General" Warnings and errors now directly - coded. + * ltclass.dtx: 0.2g "General" Warnings and errors now directly + coded. - * ltclass.dtx: 0.2g "General" Various macros now moved to - latex.tex. + * ltclass.dtx: 0.2g "General" Various macros now moved to + latex.tex. - * ltclass.dtx: 0.2g \@use@ption Name changed from \@executeoption + * ltclass.dtx: 0.2g \@use@ption Name changed from \@executeoption 1993-11-22 N.N. - * ltinit.dtx: LaTeX2e \providecommand Macro added + * ltinit.dtx: LaTeX2e \providecommand Macro added - * ltinit.dtx: LaTeX2e \c@errorcontextlines Macro added + * ltinit.dtx: LaTeX2e \c@errorcontextlines Macro added - * ltinit.dtx: LaTeX2e \LaTeXe Macro added + * ltinit.dtx: LaTeX2e \LaTeXe Macro added - * ltinit.dtx: LaTeX2e \@plus Macro added + * ltinit.dtx: LaTeX2e \@plus Macro added - * ltinit.dtx: LaTeX2e \@minus Macro added + * ltinit.dtx: LaTeX2e \@minus Macro added - * ltinit.dtx: LaTeX2e \@checkcommand Macro added + * ltinit.dtx: LaTeX2e \@checkcommand Macro added - * ltherest.dtx: LaTeX2e \settoheight Macro added + * ltherest.dtx: LaTeX2e \settoheight Macro added - * ltherest.dtx: LaTeX2e \settodepth Macro added + * ltherest.dtx: LaTeX2e \settodepth Macro added - * ltherest.dtx: LaTeX2e \@settopoint Macro added + * ltherest.dtx: LaTeX2e \@settopoint Macro added - * ltherest.dtx: LaTeX2e \@settodim Macro added + * ltherest.dtx: LaTeX2e \@settodim Macro added - * ltclass.dtx: 0.2f \listfiles Removed checking for - \@unknownversion + * ltclass.dtx: 0.2f \listfiles Removed checking for + \@unknownversion - * ltclass.dtx: 0.2f \@unknownversion Macro removed + * ltclass.dtx: 0.2f \@unknownversion Macro removed - * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never - produces a runaway argument. + * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never + produces a runaway argument. - * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version - [] not [\@unknownversion] + * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version + [] not [\@unknownversion] - * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not - [\@unknownversion] + * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not + [\@unknownversion] 1993-11-21 N.N. - * ltmiscen.dtx: v0.9a \verbatim@font Macro added + * ltmiscen.dtx: v0.9a \verbatim@font Macro added - * ltmiscen.dtx: v0.9a \verb use \verbatim@font instead of \tt + * ltmiscen.dtx: v0.9a \verb use \verbatim@font instead of \tt 1993-11-21 N.N. - * ltmiscen.dtx: v0.9a \@verbatim use \verbatim@font instead of - \tt + * ltmiscen.dtx: v0.9a \@verbatim use \verbatim@font instead of + \tt - * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if + appropriate - * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on - \@er@ext + * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on + \@er@ext 1993-11-18 N.N. - * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff. + * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff. - * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not - \@\pldots + * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not + \@\pldots - * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa + * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa 1993-11-17 N.N. - * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith@pti@ns - added. + * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith@pti@ns + added. - * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from - \NeedsFormat + * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from + \NeedsFormat - * ltclass.dtx: 0.2c \DeclareOption* Error checking added + * ltclass.dtx: 0.2c \DeclareOption* Error checking added - * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption + * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption - * ltclass.dtx: 0.2c \@twoloadclasserror Macro added + * ltclass.dtx: 0.2c \@twoloadclasserror Macro added - * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two - \LoadClass commands. + * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two + \LoadClass commands. - * ltclass.dtx: 0.2c \@badrequireerror Macro added + * ltclass.dtx: 0.2c \@badrequireerror Macro added - * ltclass.dtx: 0.2c \@@fileswith@pti@ns Macro added + * ltclass.dtx: 0.2c \@@fileswith@pti@ns Macro added 1993-11-15 N.N. - * ltclass.dtx: 0.2b \documentstyle Modified to match - \ProcessOption* + * ltclass.dtx: 0.2b \documentstyle Modified to match + \ProcessOption* - * ltclass.dtx: 0.2b \ProcessOptions* Star form added. + * ltclass.dtx: 0.2b \ProcessOptions* Star form added. 1993-11-14 N.N. - * ltclass.dtx: 0.2a \g@addto@macro Made global + * ltclass.dtx: 0.2a \g@addto@macro Made global - * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage - \@unusedoptionlist stuff. + * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage + \@unusedoptionlist stuff. - * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global - option list inside class files. + * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global + option list inside class files. - * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option' - code. + * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option' + code. - * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for - alternative syntax for other formats. + * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for + alternative syntax for other formats. - * ltclass.dtx: 0.2a \AtEndDocument Included extension in the - generated macro name for package and class hooks. + * ltclass.dtx: 0.2a \AtEndDocument Included extension in the + generated macro name for package and class hooks. - * ltclass.dtx: 0.2a \@reset@ptions macro added + * ltclass.dtx: 0.2a \@reset@ptions macro added - * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of - \default@ds, \ds@ and \@declaredoptions here, from the end of - \ProcessOptions. + * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of + \default@ds, \ds@ and \@declaredoptions here, from the end of + \ProcessOptions. - * ltclass.dtx: 0.2a \@currext Name changed from \@currextension + * ltclass.dtx: 0.2a \@currext Name changed from \@currextension 1993-11-03 Rainer Schoepf - * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to - \ialignto initialize \tabskip and \everycr + * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to + \ialignto initialize \tabskip and \everycr 1993-09-08 N.N. - * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of - undefined references. + * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of + undefined references. 1993-09-07 N.N. - * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that - it detects a missing second delimiter. + * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that + it detects a missing second delimiter. 1993-09-03 N.N. - * ltmiscen.dtx: LaTeX2.09 \verbatim@nolig@list Replaced \@noligs - by extensible list + * ltmiscen.dtx: LaTeX2.09 \verbatim@nolig@list Replaced \@noligs + by extensible list 1993-08-05 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that - \protectworks correctly in expansion of \the + * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that + \protectworks correctly in expansion of \the 1993-08-03 N.N. - * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of - \global to redefinition of \@setckpt. + * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of + \global to redefinition of \@setckpt. 1993-05-05 N.N. - * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds + * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds 1992-11-26 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to - \def\protect{\noexpand\protect\noexpand} + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to + \def\protect{\noexpand\protect\noexpand} - * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection - for \edef + * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection + for \edef - * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection - for \edef + * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection + for \edef 1992-08-25 Frank Mittelbach - * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting - of \@svsec by call to \@seccntformat + * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting + of \@svsec by call to \@seccntformat 1992-08-24 N.N. - * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work - correctly in math mode + * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work + correctly in math mode - * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument - can be `='. + * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument + can be `='. 1992-08-19 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to - complain about undefined counter + * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to + complain about undefined counter 1992-03-18 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \end@float (RmS) changed \@esphack to - \@Esphack + * ltherest.dtx: LaTeX2.09 \end@float (RmS) changed \@esphack to + \@Esphack - * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added - \global\@ignorefalse + * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added + \global\@ignorefalse 1992-01-10 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of - theorem environment + * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of + theorem environment 1991-11-22 Rainer Schoepf - * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to - \makelabelto \unhbox\@tempboxa. Avoids problems with side - effects in \makelabeland is more efficient. + * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to + \makelabelto \unhbox\@tempboxa. Avoids problems with side + effects in \makelabeland is more efficient. - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added - \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and - \@xfootnotetext + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added + \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and + \@xfootnotetext 1991-11-06 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \end@float (RmS) added warning message - perhaps we should use an error message + * ltherest.dtx: LaTeX2.09 \end@float (RmS) added warning message + perhaps we should use an error message 1991-11-04 Rainer Schoepf - * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default - definition for \makelabel, to produce an error message. + * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default + definition for \makelabel, to produce an error message. 1991-11-01 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added - \let\protect\noexpandin \footnote, \footnotemark, and - \footnotetext, since \xdef is used + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added + \let\protect\noexpandin \footnote, \footnotemark, and + \footnotetext, since \xdef is used 1991-10-17 Rainer Schoepf - * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See - FMi's array.doc) + * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See + FMi's array.doc) 1991-09-29 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset@font + * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset@font - * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added - \reset@font for page number + * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added + \reset@font for page number - * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added - \reset@font + * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added + \reset@font 1991-08-26 N.N. - * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added + * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added 1991-08-14 Rainer Schoepf - * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces - around entry for NFSS + * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces + around entry for NFSS - * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces - around entry for NFSS + * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces + around entry for NFSS - * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item - to make it work with NFSS + * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item + to make it work with NFSS 1991-07-24 N.N. - * ltmiscen.dtx: LaTeX2.09 \@verbatim Added - \penalty\interlinepenalty to definition of \par so that - \samepage works + * ltmiscen.dtx: LaTeX2.09 \@verbatim Added + \penalty\interlinepenalty to definition of \par so that + \samepage works diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf index 8744196266..7a69e40f0d 100644 Binary files a/macros/latex-dev/base/classes.pdf and b/macros/latex-dev/base/classes.pdf differ diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf index bcdb0c99bd..0385ff7c86 100644 Binary files a/macros/latex-dev/base/clsguide.pdf and b/macros/latex-dev/base/clsguide.pdf differ diff --git a/macros/latex-dev/base/clsguide.tex b/macros/latex-dev/base/clsguide.tex index 6f4d1cf027..0ed5e60817 100644 --- a/macros/latex-dev/base/clsguide.tex +++ b/macros/latex-dev/base/clsguide.tex @@ -35,7 +35,12 @@ \title{\LaTeXe~for class and package writers} \author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\ - All rights reserved} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{clsguide.tex} for full details.}% +} \date{15 February 2006} diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf index 3802d6b12a..928b09bd48 100644 Binary files a/macros/latex-dev/base/cmfonts.pdf and b/macros/latex-dev/base/cmfonts.pdf differ diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf index 5057e54a02..7157148a52 100644 Binary files a/macros/latex-dev/base/cyrguide.pdf and b/macros/latex-dev/base/cyrguide.pdf differ diff --git a/macros/latex-dev/base/cyrguide.tex b/macros/latex-dev/base/cyrguide.tex index 3b16687f39..7304a586e4 100644 --- a/macros/latex-dev/base/cyrguide.tex +++ b/macros/latex-dev/base/cyrguide.tex @@ -33,7 +33,12 @@ \title{Cyrillic languages support in \LaTeX} \author{\copyright~Copyright 1998--1999,\\ Vladimir Volovich, - Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.} + Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{cyrguide.tex} for full details.}% +} \date{12 March 1999} diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf index 2f8a0c8df2..7fd9fd58aa 100644 Binary files a/macros/latex-dev/base/doc-code.pdf and b/macros/latex-dev/base/doc-code.pdf differ diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf index aba11266ef..d6977bd556 100644 Binary files a/macros/latex-dev/base/doc.pdf and b/macros/latex-dev/base/doc.pdf differ diff --git a/macros/latex-dev/base/docstrip.dtx b/macros/latex-dev/base/docstrip.dtx index 22c1f69aa0..de20073c48 100644 --- a/macros/latex-dev/base/docstrip.dtx +++ b/macros/latex-dev/base/docstrip.dtx @@ -29,9 +29,9 @@ \catcode`\{=1 \catcode`\}=2 \def\filename{docstrip.dtx} -\def\fileversion{v2.6a} -\def\filedate{2020-11-23} -\def\docdate {2020-11-23} +\def\fileversion{v2.6b} +\def\filedate{2022-09-03} +\def\docdate {2022-09-03} %% % %\iffalse @@ -42,7 +42,7 @@ %% Frank Mittelbach %% Copyright (C) 1995 Marcin Woli\'nski %% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski -%% Copyright (C) 1998-2021 LaTeX Project and the above authors. +%% Copyright (C) 1998-2022 LaTeX Project and the above authors. %% All rights are reserved. %% % @@ -2537,12 +2537,16 @@ Z % |\plusOption| is called. This macro is very similar to % |\doOption|, the only difference being that displayed % message now contains `\texttt{+}'. +% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from +% \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} % \begin{macrocode} \def\plusOption+#1>#2\endLine{% \maybeMsg{<+#1 . >}% \Evaluate{#1}% \def\do##1##2##3{% - \if1\Expr{##2}\StreamPut##1{#2}\fi + \if1\Expr{##2}% + \def\inLine{#2}\replaceModuleInLine + \StreamPut##1{\inLine}\fi }% \activefiles } @@ -2553,12 +2557,16 @@ Z % When a `\texttt{-}' is found as a guard modifier, % |\minusOption| is called. This macro is very similar to % |\plusOption|, the difference is that condition is negated. +% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from +% \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} % \begin{macrocode} \def\minusOption-#1>#2\endLine{% \maybeMsg{<-#1 . >}% \Evaluate{#1}% \def\do##1##2##3{% - \if1\Expr{##2}\else \StreamPut##1{#2}\fi + \if1\Expr{##2}\else + \def\inLine{#2}\replaceModuleInLine + \StreamPut##1{\inLine}\fi }% \activefiles } diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf index 612a48bd44..9ec37ba5f9 100644 Binary files a/macros/latex-dev/base/docstrip.pdf and b/macros/latex-dev/base/docstrip.pdf differ diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf index becc70520b..98832bbcfc 100644 Binary files a/macros/latex-dev/base/encguide.pdf and b/macros/latex-dev/base/encguide.pdf differ diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf index b380e777d0..f4ce14e8d9 100644 Binary files a/macros/latex-dev/base/exscale.pdf and b/macros/latex-dev/base/exscale.pdf differ diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf index cc88987966..0337544f01 100644 Binary files a/macros/latex-dev/base/fix-cm.pdf and b/macros/latex-dev/base/fix-cm.pdf differ diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf index a2b0345845..784debd628 100644 Binary files a/macros/latex-dev/base/fntguide.pdf and b/macros/latex-dev/base/fntguide.pdf differ diff --git a/macros/latex-dev/base/fntguide.tex b/macros/latex-dev/base/fntguide.tex index 62d3538304..65467339f1 100644 --- a/macros/latex-dev/base/fntguide.tex +++ b/macros/latex-dev/base/fntguide.tex @@ -42,12 +42,17 @@ \title{\LaTeXe{} font selection} -\author{\copyright~Copyright 1995--2021, \LaTeX\ Project +\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\thanks{Thanks to Arash Esbati for documenting the newer NFSS features of 2020}\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{fntguide.tex} for full details.}% +} -\date{December 2021} +\date{August 2022} \begin{document} @@ -1431,6 +1436,20 @@ Example: \DeclareFontEncoding{OT1}{}{} \end{verbatim} +\NEWfeature{2021/06/01} +Fonts in encoding \texttt{TS1} are usually not implementing the full encoding but only a subset. +This subset should be declared with a |\DeclareEncodingSubset| +declaration: + +\begin{decl} + |\DeclareEncodingSubset| \arg{encoding} + \arg{font family} + \arg{subset number} +\end{decl} +This should even be done if the font is implementing the full +\texttt{TS1} encoding; see page~\pageref{page:declareencodingsubset} for +further details. + Some author commands need to change their definition depending on which encoding is currently in use. For example, in the |OT1| encoding, the letter `\AE' is in slot |"1D|, whereas in the |T1| encoding it is in @@ -2048,7 +2067,7 @@ glyphs from the math fonts instead of the current text font (this means they always keep the same shape and do not nicely blend in with the text font). -\newpage +%\newpage The following tables show the macros available. The next commands are `constructed' accents and are built via \TeX{} macros: @@ -2234,7 +2253,8 @@ question arises: ``Which glyphs of the |TS1| encoding are implemented by which font?'' \NEWfeature{2021/06/01} -Fonts can be ordered in sub-encodings with the |\DeclareEncodingSubset| +Fonts\label{page:declareencodingsubset} +can be ordered in sub-encodings with the |\DeclareEncodingSubset| macro: \begin{decl} |\DeclareEncodingSubset| \arg{encoding} @@ -2577,7 +2597,14 @@ is the same as writing If only some are needed then one can define them individually but in many cases all four are wanted, hence the shortcut. - +Maintainers of font bundles that include \texttt{TS1} encoded font files +should add an appropriate declaration into the corresponding +\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the +default subencoding is assumed, which is probably disabling too many +glyphs that are actually available in the font.\footnote{The \LaTeX{} + format contains declarations for many font families already, but this + is really the wrong place for the declarations. Thus for new fonts + they should be placed into the corresponding \texttt{.fd} file.} \section{If you need to know more \ldots} diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf index 81a23d161e..d737597a7f 100644 Binary files a/macros/latex-dev/base/graphpap.pdf and b/macros/latex-dev/base/graphpap.pdf differ diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf index e1c5d222ec..d01f901ebd 100644 Binary files a/macros/latex-dev/base/ifthen.pdf and b/macros/latex-dev/base/ifthen.pdf differ diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf index 4445df126a..2810415e32 100644 Binary files a/macros/latex-dev/base/inputenc.pdf and b/macros/latex-dev/base/inputenc.pdf differ diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf index f6c1e635a7..9d43e51ca6 100644 Binary files a/macros/latex-dev/base/lamport-manual.pdf and b/macros/latex-dev/base/lamport-manual.pdf differ diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf index 2cad49e144..48609a519f 100644 Binary files a/macros/latex-dev/base/latexrelease.pdf and b/macros/latex-dev/base/latexrelease.pdf differ diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf index 5af483ac78..d224c50148 100644 Binary files a/macros/latex-dev/base/latexsym.pdf and b/macros/latex-dev/base/latexsym.pdf differ diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf index 43e435c3ae..fb1cdf8ab3 100644 Binary files a/macros/latex-dev/base/lb2.pdf and b/macros/latex-dev/base/lb2.pdf differ diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf index 7c1dcd5581..91f4b7da0b 100644 Binary files a/macros/latex-dev/base/letter.pdf and b/macros/latex-dev/base/letter.pdf differ diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf index 9560b062fd..060cbdec9f 100644 Binary files a/macros/latex-dev/base/lgc2.pdf and b/macros/latex-dev/base/lgc2.pdf differ diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf index 94c82b58bb..7e069bfc09 100644 Binary files a/macros/latex-dev/base/lppl.pdf and b/macros/latex-dev/base/lppl.pdf differ diff --git a/macros/latex-dev/base/ltboxes.dtx b/macros/latex-dev/base/ltboxes.dtx index 43db541b98..b82f5bdb8e 100644 --- a/macros/latex-dev/base/ltboxes.dtx +++ b/macros/latex-dev/base/ltboxes.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltboxes.dtx} - [2022/01/31 v1.4c LaTeX Kernel (Box Commands)] + [2022/09/07 v1.4d LaTeX Kernel (Box Commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltboxes.dtx} @@ -1004,6 +1004,16 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\if@in@minipage@env} +% +% \changes{v1.4d}{2022/09/07} +% {Check for nested minipages and warn (gh/168)} +% \begin{macrocode} +\newif\if@in@minipage@env +% \end{macrocode} +% \end{macro} +% +% % \begin{macro}{\minipage} % \changes{v0.1a}{1993/12/03} % {Redefined to support extra optional arguments} @@ -1060,6 +1070,28 @@ \color@begingroup \hsize\@tempdima \textwidth\hsize \columnwidth\hsize +% \end{macrocode} +% We check for nested minipages inside the box so that there is +% always a group resetting the switch even if the code does not use +% \cs{begin} to start the minipage. +% \changes{v1.4d}{2022/09/07} +% {Check for nested minipages and warn (gh/168)} +% \begin{macrocode} + \if@in@minipage@env +% \end{macrocode} +% We only issue a warning if the outer minipage contained footnotes +% because that is the problematical case. +% \begin{macrocode} + \ifvoid\@mpfootins\else + \@latex@warning{Nested minipage: + footnotes may be misplaced}% + \fi + \else + \@in@minipage@envtrue + \fi +% \end{macrocode} +% +% \begin{macrocode} \@parboxrestore \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ \let\@footnotetext\@mpfootnotetext diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx index 59aa5bf475..14d6756f5c 100644 --- a/macros/latex-dev/base/ltcmd.dtx +++ b/macros/latex-dev/base/ltcmd.dtx @@ -34,8 +34,8 @@ %%% From File: ltcmd.dtx % % \begin{macrocode} -\def\ltcmdversion{v1.0l} -\def\ltcmddate{2022-03-18} +\def\ltcmdversion{v1.1a} +\def\ltcmddate{2022-08-16} % \end{macrocode} % %<*driver> @@ -247,6 +247,15 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l_@@_suppress_strip_bool} +% \changes{v1.1a}{2022/08/10}{New switch} +% Used to indicate that an a pair of braces should not be stripped from +% an optional argument. +% \begin{macrocode} +\bool_new:N \l_@@_suppress_strip_bool +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\l_@@_m_args_int} % The number of \texttt{m} arguments: if this is the same as the total % number of arguments, then a short-cut can be taken in the creation of @@ -315,6 +324,19 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop} +% \begin{macro}{\@@_if_recursion_tail_stop_do:Nn} +% \begin{macro}{\@@_use_i_delimit_by_q_recursion_stop:nw} +% Quarks and functions for internal processing. +% \begin{macrocode} +\quark_new:N \q_@@_recursion_tail +\quark_new:N \q_@@_recursion_stop +\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{variable} +% % \begin{variable}{\l_@@_tmp_prop, \l_@@_tmpa_tl, \l_@@_tmpb_tl} % \begin{macro}{\@@_tmp:w} % Scratch space. @@ -874,7 +896,7 @@ % \item Check that each argument has the correct number of data items % associated with it, and that where a single character is required, % one has actually been supplied. -% \item Check that processors and the markers~|+| and~|!| are followed +% \item Check that processors and the markers~|+|, |!| and~|=| are followed % by an argument for which they make sense, and are not redundant. % \item Check the absence of forbidden types for expandable commands, % namely \texttt{G}/\texttt{v} always, and \texttt{l}/\texttt{u} @@ -918,6 +940,7 @@ \bool_set_true:N \l_@@_grab_expandably_bool \bool_set_false:N \l_@@_obey_spaces_bool \bool_set_false:N \l_@@_long_bool + \bool_set_false:N \l_@@_suppress_strip_bool \bool_set_false:N \l_@@_some_obey_spaces_bool \bool_set_false:N \l_@@_some_long_bool \bool_set_false:N \l_@@_some_short_bool @@ -1020,7 +1043,11 @@ % \@@_normalize_type_>:w, % \@@_normalize_type_+:w, % \@@_normalize_type_!:w, +% \@@_normalize_type_=:w % } +% \changes{v1.1a}{2022/08/10}{Refactor to use common auxiliary} +% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier} +% \begin{macro}{\@@_normalize_type_aux:NnNn} % Check that these prefixes have arguments, namely that the next token % is not \cs{q_recursion_tail}, and remember to leave it after the % looping macro. Processors are forbidden in expandable commands. @@ -1044,33 +1071,52 @@ } \cs_new_protected:cpn { @@_normalize_type_+:w } #1 { - \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } - \bool_if:NT \l_@@_long_bool + \@@_normalize_type_aux:NnNn + {#1} + \l_@@_long_bool + { \bool_set_true:N \l_@@_long_bool } + } +\cs_new_protected:cpn { @@_normalize_type_!:w } #1 + { + \@@_normalize_type_aux:NnNn ! {#1} + \l_@@_obey_spaces_bool { - \msg_error:nnxx { cmd } { two-markers } - { \@@_environment_or_command: } { + } - \@@_bad_def:wn + \bool_set_true:N \l_@@_obey_spaces_bool + \bool_set_true:N \l_@@_some_obey_spaces_bool } - \bool_set_true:N \l_@@_long_bool - \int_decr:N \l_@@_current_arg_int - \@@_normalize_arg_spec_loop:n {#1} } -\cs_new_protected:cpn { @@_normalize_type_!:w } #1 +\cs_new_protected:cpn { @@_normalize_type_=:w } #1#2 + { + \@@_normalize_type_aux:NnNn = {#2} + \l_@@_suppress_strip_bool + { + \bool_if:NT \l_@@_expandable_bool + { + \msg_error:nnxx { cmd } { keyval-in-expandable } + { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} } + \@@_bad_def:wn + } + \bool_set_true:N \l_@@_suppress_strip_bool + \bool_set_false:N \l_@@_grab_expandably_bool + \tl_put_right:Nx \l_@@_arg_spec_tl + { = { \tl_trim_spaces:n {#1} } } + } + } +\cs_new_protected:Npn \@@_normalize_type_aux:NnNn #1#2#3#4 { - \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } - \bool_if:NT \l_@@_obey_spaces_bool + \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn } + \bool_if:NT #3 { \msg_error:nnxx { cmd } { two-markers } - { \@@_environment_or_command: } { ! } + { \@@_environment_or_command: } { #1 } \@@_bad_def:wn } - \bool_set_true:N \l_@@_obey_spaces_bool - \bool_set_true:N \l_@@_some_obey_spaces_bool + #4 \int_decr:N \l_@@_current_arg_int - \@@_normalize_arg_spec_loop:n {#1} + \@@_normalize_arg_spec_loop:n {#2} } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro} % { @@ -1224,12 +1270,12 @@ % \end{macro} % % \begin{macro}{\@@_allowed_token_check:N} -% Some tokens are now allowed as delimiters for some argument types, +% Some tokens are not allowed as delimiters for some argument types, % notably implicit begin/end-group tokens (|\bgroup|/|\egroup|). % The major problem with these tokens is that for |\peek_...| functions, -% a literal~|{|$_1$. is virtually indistinguishable from a |\bgroup| or +% a literal~|{|$_1$ is virtually indistinguishable from a |\bgroup| or % other token which was |\let| to a~|{|$_1$, and the same goes -% for~|}|$_2$. All other tokens can be easily distingushed from their +% for~|}|$_2$. All other tokens can be easily distinguished from their % implicit counterparts by grabbing them and looking at the string % length (see \cs{@@_token_if_cs:NTF}), but for begin/end group tokens % that is not possible without the risk of mistakenly grabbing the @@ -1324,13 +1370,13 @@ % \begin{macro}{\@@_add_arg_spec:n, \@@_add_arg_spec_mandatory:n} % When adding an argument to the argument specification, set the % \texttt{some_long} or \texttt{some_short} booleans as appropriate -% and clear the booleans keeping track of |+| and |!| markers. +% and clear the booleans keeping track of |+|, |!| and |=| markers. % Before that, test for a short argument following some long % arguments: this is forbidden for expandable commands and prevents % grabbing arguments expandably. % % For mandatory arguments do some more work, in particular complain if -% they were preceeded by~|!|. +% they were preceded by~|!|. % \begin{macrocode} \cs_new_protected:Npn \@@_add_arg_spec:n #1 { @@ -1387,6 +1433,7 @@ \int_zero:N \l_@@_current_arg_int \bool_set_false:N \l_@@_long_bool \bool_set_false:N \l_@@_obey_spaces_bool + \bool_set_false:N \l_@@_suppress_strip_bool \int_zero:N \l_@@_m_args_int \bool_set_false:N \l_@@_defaults_bool \tl_clear:N \l_@@_defaults_tl @@ -1484,6 +1531,23 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_add_type_=:} +% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier} +% A mix of the ideas from above: set a flag and add a processor. +% \begin{macrocode} +\cs_new_protected:cpn { @@_add_type_=:w } #1 + { + \@@_flush_m_args: + \bool_set_true:N \l_@@_prefixed_bool + \bool_set_true:N \l_@@_suppress_strip_bool + \bool_set_true:N \l_@@_process_some_bool + \tl_put_left:Nn \l_@@_process_one_tl + { { \@@_arg_to_keyvalue:nn {#1} } } + \@@_prepare_signature_bypass:N + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_add_type_b:w} % \begin{macrocode} \cs_new_protected:Npn \@@_add_type_b:w @@ -1677,11 +1741,16 @@ @@_grab_ #1 \bool_if:NT \l_@@_long_bool { _long } \bool_if:NT \l_@@_obey_spaces_bool { _obey_spaces } + \bool_lazy_and:nnT + { \l_@@_suppress_strip_bool } + { \str_if_eq_p:nn {#1} { D } } + { _no_strip } :w } } \bool_set_false:N \l_@@_long_bool \bool_set_false:N \l_@@_obey_spaces_bool + \bool_set_false:N \l_@@_suppress_strip_bool \tl_put_right:Nx \l_@@_process_all_tl { { @@ -2488,7 +2557,7 @@ \quark_if_nil:nF {#1} { \tl_const:cn { c_@@_show_type_#1_tl } {#2} \@@_tmp:w } } -\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 \q_nil \q_nil +\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 =7 \q_nil \q_nil % \end{macrocode} % % \begin{macro}{ @@ -2615,6 +2684,7 @@ % \@@_grab_b_aux:NNw, % \@@_grab_b_end:Nw % } +% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation} % This uses the well-tested code of \texttt{D}-type arguments, % skipping the peeking step because the \texttt{b}-type argument is % always present, and adding a cleanup stage at the end by hijacking @@ -2640,7 +2710,7 @@ { \@@_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n } \cs_new_protected:Npn \@@_grab_b_aux:NNw #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnN \begin \end {#3} #1 + \@@_grab_D_aux:NNnNN \begin \end {#3} #1 \use_ii:nn \tl_put_left:Nn \l_@@_signature_tl { \@@_grab_b_end:Nw #2 } \tl_set_eq:NN \l_@@_saved_args_tl \l_@@_args_tl \tl_clear:N \l_@@_args_tl @@ -2660,37 +2730,69 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_grab_D:w} -% \begin{macro}{\@@_grab_D_long:w} -% \begin{macro}{\@@_grab_D_obey_spaces:w} -% \begin{macro}{\@@_grab_D_long_obey_spaces:w} +% \begin{macro} +% { +% \@@_grab_D:w , +% \@@_grab_D_long:w , +% \@@_grab_D_obey_spaces:w , +% \@@_grab_D_long_obey_spaces:w , +% \@@_grab_D_no_strip:w , +% \@@_grab_D_long_no_strip:w , +% \@@_grab_D_obey_spaces_no_strip:w , +% \@@_grab_D_long_obey_spaces_no_strip:w +% } +% \changes{v1.1a}{2022/08/10}{Add support for skipping brace stripping} % The generic delimited argument grabber. The auxiliary function does % a peek test before calling \cs{@@_grab_D_call:Nw}, so that the % optional nature of the argument works as expected. % \begin{macrocode} \cs_new_protected:Npn \@@_grab_D:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn - \@@_peek_nonspace_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_nonspace_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_long:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn - \@@_peek_nonspace_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_nonspace_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_obey_spaces:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn - \@@_peek_meaning_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_meaning_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_long_obey_spaces:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn - \@@_peek_meaning_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_meaning_remove:NTF \use_ii:nn + } +\cs_new_protected:Npn \@@_grab_D_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_nonspace_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_long_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_nonspace_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_obey_spaces_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_meaning_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_long_obey_spaces_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_meaning_remove:NTF \use_none:n } % \end{macrocode} +% \begin{macro}{\@@_grab_D_aux:NNnNNN} % \begin{macro}{\@@_grab_D_aux:NNnNN} -% \begin{macro}{\@@_grab_D_aux:NNnN} % This is a bit complicated. The idea is that, in order to check for % nested optional argument tokens (\texttt{[[...]]} and so on) the % argument needs to be grabbed without removing any braces at all. If @@ -2699,9 +2801,9 @@ % prevents loss of braces, and there is then a test to see if there are % nested delimiters to handle. % \begin{macrocode} -\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5 +\cs_new_protected:Npn \@@_grab_D_aux:NNnNNN #1#2#3#4#5#6 { - \@@_grab_D_aux:NNnN #1#2 {#3} #4 + \@@_grab_D_aux:NNnNN #1#2 {#3} #4 #6 #5 #1 { \@@_grab_D_call:Nw #1 } { \@@_add_arg:o \c_novalue_tl } @@ -2712,9 +2814,10 @@ % extra factors to allow for: the argument might be entirely empty, and % spaces at the start and end of the input must be retained around a brace % group. Also notice that a \emph{blank} argument might still contain -% spaces. +% spaces. To allow for suppression of brace stripping, the business end +% is passed here as |#5|. % \begin{macrocode} -\cs_new_protected:Npn \@@_grab_D_aux:NNnN #1#2#3#4 +\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5 { \tl_set:Nn \l_@@_signature_tl {#3} \exp_after:wN #4 \l_@@_fn_tl ##1 #2 @@ -2728,7 +2831,7 @@ \str_if_eq:eeTF { \exp_not:o { \use_none:n ##1 } } { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } } - { \@@_add_arg:o { \use_ii:nn ##1 } } + { \@@_add_arg:o { #5 ##1 } } { \@@_add_arg:o { \use_none:n ##1 } } } } @@ -2738,9 +2841,6 @@ % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} % % \begin{macro}{\@@_grab_D_nested:NNnN} % \begin{macro}{\@@_grab_D_nested:w} @@ -3039,6 +3139,7 @@ % % \begin{macro}{\@@_grab_R:w, \@@_grab_R_long:w} % \begin{macro}{\@@_grab_R_aux:NNnN} +% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation} % The grabber for \texttt{R}-type arguments is basically the same as % that for \texttt{D}-type ones, but always skips spaces (as it is mandatory) % and has a hard-coded error message. @@ -3049,7 +3150,7 @@ { \@@_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn } \cs_new_protected:Npn \@@_grab_R_aux:NNnN #1#2#3#4 { - \@@_grab_D_aux:NNnN #1 #2 {#3} #4 + \@@_grab_D_aux:NNnNN #1 #2 {#3} #4 \use_ii:nn \@@_peek_nonspace_remove:NTF #1 { \@@_grab_D_call:Nw #1 } { @@ -3873,6 +3974,190 @@ % \end{macrocode} % \end{macro} % +% \subsection{Conversion to key--value form} +% +% This is implemented as a process but with no public interfaces, +% hence is treated separately from the others: it's a feature of +% \pkg{ltcmd} which just happens to use the same mechanism as a processor. +% +% \begin{macro}{\@@_arg_to_keyvalue:nn} +% \changes{v1.1a}{2022/08/10}{New internal arg-to-keyval processor} +% \begin{macro}{\@@_arg_to_keyvalue_braces:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxi:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxii:Nnnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxiii:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxiv:Nnnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxv:nn} +% \begin{macro}{\@@_arg_to_keyvalue_loop:w} +% \begin{macro}{\@@_arg_to_keyvalue_loop_group:n} +% \begin{macro}{\@@_arg_to_keyvalue_loop_space:w} +% \begin{macro}{\@@_arg_to_keyvalue_loop_N_type:N} +% \begin{macro}{\@@_arg_to_keyvalue_math:w} +% \begin{macro}{\@@_arg_to_keyvalue_math_N_type:N} +% \begin{macro}{\@@_arg_to_keyvalue_math_group:n} +% \begin{macro}{\@@_arg_to_keyvalue_math_space:w} +% \begin{macro}{\@@_arg_to_keyvalue_set_default:nn} +% \begin{macro}{\@@_arg_to_keyvalue_set_keyvalue:nn} +% \begin{macro}[EXP]{\@@_split_N_head_apply:Nn} +% \begin{macro}[EXP]{\@@_split_N_head_apply_aux:NNw} +% If the entire argument is braced, we treat as free text and return as +% the value for the text key. Alternatively, if the start of the input is +% |=,| then it is forced to be key--value. To avoid needing to worry about +% catcodes for this, and to allow spaces around the |=|, we use a +% series of steps rather than a delimited argument. +% \begin{macrocode} +\cs_new_protected:Npn \@@_arg_to_keyvalue:nn #1#2 + { + \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_braces:nnn + {#1} {#2} + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_braces:nnn #1#2#3 + { + \tl_if_head_is_group:nT {#1} + { + \tl_if_blank:oT { \use_none:n #1 } + { + \tl_set:Nx \ProcessedArgument { #2 = { \exp_not:n #1 } } + \use_none:nnnn + } + } + \@@_arg_to_keyvalue_auxi:nnn {#1} {#2} {#3} + } +\cs_new:Npn \@@_arg_to_keyvalue_auxi:nnn #1 + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxii:Nnnn {#1} } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxii:Nnnn #1#2 + { + \str_if_eq:eeTF { \exp_not:n {#1} } { = } + { \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_auxiii:nnn } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxiii:nnn #1 + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxiv:Nnnn {#1} } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxiv:Nnnn #1#2 + { + \str_if_eq:eeTF { \exp_not:n {#1} } { , } + { \tl_set:Nn \ProcessedArgument {#2} \use_none:nn } + { \@@_arg_to_keyvalue_auxv:nn } + } +% \end{macrocode} +% The two clear-cut cases have been eliminated, and we therefore have to deal +% with a search for |=| signs. We need an \enquote{action} loop here +% so we do not get mislead by for example |{=}|. As the code here is for +% very much predictable types of input, we hard-code what constitutes +% math mode opening and closing. At the very beginning, the default +% key (|#1|) and the argument as given by the user (|#2|) are placed +% right after the \cs{q_@@_recursion_stop}, so that when the recursion +% ends, the macros \cs{@@_arg_to_keyvalue_set_default:nn} or +% \cs{@@_arg_to_keyvalue_set_keyvalue:nn} can be used to grab these +% two items and set the \cs{ProcessedArgument} accordingly. +% \begin{macrocode} +\cs_new_protected:Npn \@@_arg_to_keyvalue_auxv:nn #1#2 + { + \@@_arg_to_keyvalue_loop:w #2 + \q_@@_recursion_tail \q_@@_recursion_stop {#1} {#2} + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop:w #1 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_arg_to_keyvalue_loop_N_type:N } + { + \tl_if_head_is_group:nTF {#1} + { \@@_arg_to_keyvalue_loop_group:n } + { \@@_arg_to_keyvalue_loop_space:w } + } + #1 \q_@@_recursion_stop + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_group:n #1 + { \@@_arg_to_keyvalue_loop:w } +\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_loop_space:w } ~ + { \@@_arg_to_keyvalue_loop:w } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_N_type:N #1 + { + \@@_if_recursion_tail_stop_do:Nn #1 + { \@@_arg_to_keyvalue_set_default:nn } + \str_if_eq:nnTF {#1} { = } + { + \@@_use_i_delimit_by_q_recursion_stop:nw + { \@@_arg_to_keyvalue_set_keyvalue:nn } + } + { + \bool_lazy_or:nnTF + { \token_if_math_toggle_p:N #1 } + { \str_if_eq_p:nn {#1} { \( } } + { \@@_arg_to_keyvalue_math:w } + { \@@_arg_to_keyvalue_loop:w } + } + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math:w #1 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_arg_to_keyvalue_math_N_type:N } + { + \tl_if_head_is_group:nTF {#1} + { \@@_arg_to_keyvalue_math_group:n } + { \@@_arg_to_keyvalue_math_space:w } + } + #1 \q_@@_recursion_stop + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math_N_type:N #1 + { + \@@_if_recursion_tail_stop_do:Nn #1 + { \@@_arg_to_keyvalue_set_default:nn } + \bool_lazy_or:nnTF + { \token_if_math_toggle_p:N #1 } + { \str_if_eq_p:nn {#1} { \) } } + { \@@_arg_to_keyvalue_loop:w } + { \@@_arg_to_keyvalue_math:w } + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math_group:n #1 + { \@@_arg_to_keyvalue_math:w } +\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_math_space:w } ~ + { \@@_arg_to_keyvalue_math:w } +\cs_new_protected:Npn \@@_arg_to_keyvalue_set_default:nn #1#2 + { \tl_set:Nn \ProcessedArgument { #1 = {#2} } } +\cs_new_protected:Npn \@@_arg_to_keyvalue_set_keyvalue:nn #1#2 + { \tl_set:Nn \ProcessedArgument {#2} } +% \end{macrocode} +% A utility to allow us to grab the first \texttt{N}-type token without +% risking brace stripping the rest of the input. +% \begin{macrocode} +\cs_new:Npn \@@_split_N_head_apply:Nn #1#2 + { \exp:w \if_false: { \fi: \@@_split_N_head_apply_aux:NNw #1#2 } } +\cs_new:Npn \@@_split_N_head_apply_aux:NNw #1#2 + { + \exp_after:wN \exp_end: + \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi: + } + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsection{Access to the argument specification} % % \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n} @@ -4372,6 +4657,13 @@ This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones. \c_@@_ignore_def_tl } +\msg_new:nnnn { cmd } { keyval-in-expandable } + { Invalid~argument~prefix~'='~in~command~'#1'. } + { + The~argument~specification~for~'#1'~contains~a~key--value~marker~'={#2}'.~ + This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones. + \c_@@_ignore_def_tl + } \msg_new:nnnn { cmd } { too-many-args } { Too~many~arguments~for~#1. } { diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf index 56416966d6..a01a26c272 100644 Binary files a/macros/latex-dev/base/ltcmdhooks-code.pdf and b/macros/latex-dev/base/ltcmdhooks-code.pdf differ diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf index 40b7f4ecb5..87d2d0245b 100644 Binary files a/macros/latex-dev/base/ltcmdhooks-doc.pdf and b/macros/latex-dev/base/ltcmdhooks-doc.pdf differ diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf index 7b59fe3a02..2956089442 100644 Binary files a/macros/latex-dev/base/ltfilehook-code.pdf and b/macros/latex-dev/base/ltfilehook-code.pdf differ diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf index 8a60d59829..804b62bd6b 100644 Binary files a/macros/latex-dev/base/ltfilehook-doc.pdf and b/macros/latex-dev/base/ltfilehook-doc.pdf differ diff --git a/macros/latex-dev/base/ltfilehook.dtx b/macros/latex-dev/base/ltfilehook.dtx index 8b5e982591..c8503de891 100644 --- a/macros/latex-dev/base/ltfilehook.dtx +++ b/macros/latex-dev/base/ltfilehook.dtx @@ -31,8 +31,8 @@ %%% From File: ltfilehook.dtx % % \begin{macrocode} -\providecommand\ltfilehookversion{v1.0m} -\providecommand\ltfilehookdate{2022/04/01} +\providecommand\ltfilehookversion{v1.0n} +\providecommand\ltfilehookdate{2022/08/18} % \end{macrocode} % %<*driver> @@ -1513,10 +1513,25 @@ \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}} % \end{macrocode} % +% \changes{v1.0n}{2022/08/18}{Inhibit checking the loaded version when +% package is load-disabled, and write to the .log (gh/888)} +% Here we check if a control sequence named +% \cs[no-index]{@pkg-disable@\meta{name}.sty} is defined, and if so +% don't use the package loading code |#2|, but use the replacement +% code stored in that control sequence, write something to the log, +% and then prevent \cs{@onefilewithoptions} from sanity-checking the +% requested package date (the \tn{expandafter} here triggers one in +% \cs{@onefilewithoptions} that ends a conditional there, and the +% \tn{@gobbletwo} removes the date checking code from the input +% stream). % \begin{macrocode} \def\@disable@packageload@do#1#2{% - \@ifundefined{@pkg-disable@#1}{#2}% - {\@nameuse{@pkg-disable@#1}}} + \@ifundefined{@pkg-disable@#1}% + {#2}% + {\@nameuse{@pkg-disable@#1}% + \@latex@info{Package '#1' has been disabled.% + \MessageBreak Load request ignored}% + \expandafter\@gobbletwo}} % \end{macrocode} % % \cs{reenable@package@load} undefines diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx index fafd0c6912..69ea7bc942 100644 --- a/macros/latex-dev/base/ltfinal.dtx +++ b/macros/latex-dev/base/ltfinal.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltfinal.dtx} - [2022/07/05 v2.2w LaTeX Kernel (Final Settings)] + [2022/08/29 v2.2w LaTeX Kernel (Final Settings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfinal.dtx} @@ -1103,7 +1103,7 @@ % In order to get round this, we redefine |\MakeUppercase| and % |\MakeLowercase| to grab their argument and brace it. % -% Earlier versions needed to procsss |\@uclclist| in an |\edef| +% Earlier versions needed to process |\@uclclist| in an |\edef| % to handle legacy input encodings, but recent (2022) expl3 versions % handle non-UTF8 text natively so we simply call the |\text_...case:n| % functions. diff --git a/macros/latex-dev/base/ltfssdcl.dtx b/macros/latex-dev/base/ltfssdcl.dtx index dd9f12f802..49041605e9 100644 --- a/macros/latex-dev/base/ltfssdcl.dtx +++ b/macros/latex-dev/base/ltfssdcl.dtx @@ -36,7 +36,7 @@ % % \ProvidesFile{ltfssdcl.dtx} - [2022/07/04 v3.0z LaTeX Kernel (NFSS Declarative Interface)] + [2022/09/20 v3.1b LaTeX Kernel (NFSS Declarative Interface)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -457,7 +457,7 @@ % % % -% \begin{macro}{\c@localalphabets} +% \begin{macro}{\c@localmathalphabets} % \changes{v3.0x}{2021/09/26}{Counter added for (gh/676)} % To avoid hitting the ``no more math fams available'' limit of 16, we % keep a defined number of math alphabets flexible/local. If we have to @@ -577,118 +577,6 @@ } % \end{macrocode} % -% -% -% \begin{macro}{\freeze@math@version} -% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} -% This command stores the current state of the math version and sets -% things up to return to it after each formula from now on. We use -% L3 programming layer code to set it up. -% \begin{macrocode} -\ExplSyntaxOn -\cs_new_protected:Npn\freeze@math@version #1 { -% \end{macrocode} -% Save the current \cs{mv@\meta{version}} code and the number of -% allocated mathgroups inside. -% \begin{macrocode} - \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ - #1.\MessageBreak - Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ - (local:~ \int_use:N\c@localmathalphabets) } - \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } - \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } -% \end{macrocode} -% Doing the reset the first time, we wait until we are out of -% math mode, so we use some recursive \cs{group_insert_after:N} for this -% before we execute \cs{mv@\meta{version}@reset}. -% \begin{macrocode} - \group_insert_after:N \__nfss_init_mv_freeze:N - \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: -% \end{macrocode} -% The \cs{check@mathfonts} is called at the very beginning of each -% math formula, so it is a good way to hook in the resetting. -% Again that has to happen after the formula has ended, but we know -% because of the place where \cs{check@mathfonts} is used -% that a single \cs{aftergoup} is sufficient. -% \begin{macrocode} - \tl_gput_right:No \check@mathfonts - { - \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: - } -% \end{macrocode} -% Here is the definition of \cs{mv@\meta{version}@reset}. If there -% has been no new math alphabet allocation, doing a reset would -% just cause a lot of unnecessary processing, so we do a quick -% check upfront for this. -% \begin{macrocode} - \cs_gset:cpn{mv@#1@reset} - { - \int_compare:nNnTF { \int_use:c{c@mv@#1} } > - { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } - { - \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} -% \end{macrocode} -% If the undo is necessary, we restore the \cs{mv@\meta{version}} code. -% \begin{macrocode} - \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } - \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } -% \end{macrocode} -% But we also should undo changes to the math alphabet -% definitions. We therefore run this code with a modified -% definition for \cs{getanddefine@fonts} because there is no need -% to do anything to the symbol fonts that are permanently allocated. -% \begin{macrocode} - \group_begin: - \cs_set_eq:NN \getanddefine@fonts \use_none:nn - \use:c {mv@#1} - \group_end: - } - { -% \end{macrocode} -% If there was no change, we report that in the log (but this -% branch could go completely). -% \begin{macrocode} - \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} - } -% \end{macrocode} -% If this is executed after a math display, we may have to arrange -% for ignoring spaces, because they are now hidden if -% the tokens from above intervene. This is signaled by the 2e -% switch \texttt{@ignore} which is set in \cs{frozen@everymath} and -% \cs{frozen@everydisplay}. -% -% This is all 2e code so we use that syntax. -% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)} -% \begin{macrocode} - \if@ignore \ignorespaces \fi - } -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\__nfss_init_mv_freeze:N} -% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} -% To do the initial freeze in a safe place, we check if we are in -% math mode and if so try again after the group has ended by pushing -% the command and its single token argument with two -% \cs{group_insert_after:N}s after the current group. If we are no longer in -% math mode we bypass the -% conditional and so the next token is our argument -% which is then finally executed. -% \begin{macrocode} -\cs_new_protected:Npn \__nfss_init_mv_freeze:N #1 {% - \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N - \group_insert_after:N } #1 -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macrocode} -\ExplSyntaxOff -% \end{macrocode} -% % \begin{macrocode} % %\EndIncludeInRelease @@ -786,7 +674,132 @@ %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} -% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\freeze@math@version} +% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} +% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)} +% This command stores the current state of the math version and sets +% things up to return to it after each formula from now on. We use +% L3 programming layer code to set it up. +% \begin{macrocode} +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\freeze@math@version}{freeze math version}% +\ExplSyntaxOn +\cs_new_protected:Npn\freeze@math@version #1 { +% \end{macrocode} +% Save the current \cs{mv@\meta{version}} code and the number of +% allocated mathgroups inside. +% \begin{macrocode} + \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ + #1.\MessageBreak + Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ + (local:~ \int_use:N\c@localmathalphabets) } + \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } + \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } +% \end{macrocode} +% Here is the definition of \cs{mv@\meta{version}@reset}. If there +% has been no new math alphabet allocation, doing a reset would +% just cause a lot of unnecessary processing, so we do a quick +% check upfront for this. +% \begin{macrocode} + \cs_gset:cpn{mv@#1@reset} + { + \int_compare:nNnTF { \int_use:c{c@mv@#1} } > + { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } + { + \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} +% \end{macrocode} +% If the undo is necessary, we restore the \cs{mv@\meta{version}} code. +% \begin{macrocode} + \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } + \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } +% \end{macrocode} +% But we also should undo changes to the math alphabet +% definitions. We therefore run this code with a modified +% definition for \cs{getanddefine@fonts} because there is no need +% to do anything to the symbol fonts that are permanently allocated. +% \begin{macrocode} + \group_begin: + \cs_set_eq:NN \getanddefine@fonts \use_none:nn + \use:c {mv@#1} + \group_end: + } + { +% \end{macrocode} +% If there was no change, we report that in the log (but this +% branch could go completely). +% \begin{macrocode} + \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} + } +% \end{macrocode} +% If this is executed after a math display, we may have to arrange +% for ignoring spaces, because they are now hidden if +% the tokens from above intervene. This is signaled by the 2e +% switch \texttt{@ignore} which is set in \cs{frozen@everymath} and +% \cs{frozen@everydisplay}. +% +% This is all 2e code so we use that syntax. +% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)} +% \begin{macrocode} + \if@ignore \ignorespaces \fi + } +} +\ExplSyntaxOff +% +%\EndIncludeInRelease +%\IncludeInRelease{2021/11/15} +% {\freeze@math@version}{freeze math version}% +% +%\ExplSyntaxOn +%\cs_set_protected:Npn\freeze@math@version #1 { +% \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ +% #1.\MessageBreak +% Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ +% (local:~ \int_use:N\c@localmathalphabets) } +% \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } +% \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } +% \group_insert_after:N \__nfss_init_mv_freeze:N +% \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: +% \tl_gput_right:No \check@mathfonts +% { +% \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: +% } +% \cs_gset:cpn{mv@#1@reset} +% { +% \int_compare:nNnTF { \int_use:c{c@mv@#1} } > +% { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } +% { +% \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} +% \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } +% \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } +% \group_begin: +% \cs_set_eq:NN \getanddefine@fonts \use_none:nn +% \use:c {mv@#1} +% \group_end: +% } +% { +% \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} +% } +% \if@ignore \ignorespaces \fi +% } +%} +%\cs_set_protected:Npn \__nfss_init_mv_freeze:N #1 {% +% \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N +% \group_insert_after:N } #1 +%} +%\ExplSyntaxOff +% +%\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% % % \begin{macro}{\process@table} % \begin{macrocode} @@ -868,7 +881,7 @@ % \begin{macrocode} % %<*2ekernel|latexrelease> -%\IncludeInRelease{2021/11/15}% +%\IncludeInRelease{2022/11/01}% % {\DeclareMathVersion}{local alphabets}% \def\DeclareMathVersion#1{% % \end{macrocode} @@ -881,6 +894,21 @@ % \begin{macrocode} \@namedef{g__nfss_frozen_mv_#1_tl}{}% % \end{macrocode} +% We also extend \cs{check@mathfonts} to call a version reset (once +% frozen) after a formula has finished. +% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)} +% \begin{macrocode} + \expandafter\ifx\csname mv@#1\endcsname \relax + \expandafter \g@addto@macro \expandafter \check@mathfonts + \expandafter {\expandafter \aftergroup \csname mv@#1@reset\endcsname}% +% \end{macrocode} +% Initially this macro does nothing. It is, however, important that +% it doesn't stop any \cs{ignorespaces}, so we make it expandable +% and not \cs{relax}. +% \begin{macrocode} + \@namedef{mv@#1@reset}{}% + \fi +% \end{macrocode} % % \begin{macrocode} \expandafter\new@mathversion\csname mv@#1\endcsname} @@ -890,6 +918,12 @@ % \end{macrocode} % % \begin{macrocode} +%\IncludeInRelease{2021/11/15}% +% {\DeclareMathVersion}{local alphabets}% +%\def\DeclareMathVersion#1{% +% \@namedef{g__nfss_frozen_mv_#1_tl}{}% +% \expandafter\new@mathversion\csname mv@#1\endcsname} +%\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\DeclareMathVersion}{local alphabets}% %\def\DeclareMathVersion#1{% @@ -963,8 +997,24 @@ % \end{macro} % % \begin{macro}{\DeclareSymbolFont} +% First drop any surplus \texttt{m} from the series argument then +% do what has been done since 1994. +% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)} % \begin{macrocode} -\def\DeclareSymbolFont#1#2#3#4#5{% +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\DeclareSymbolFont}{maybe drop m}% +\def\DeclareSymbolFont #1#2#3#4#5{% + \def\reserved@a{\DeclareSymbolFont@m@dropped{#1}{#2}{#3}}% + \edef\reserved@b{#4}% + \series@maybe@drop@one@m\reserved@b\reserved@b + \expandafter\reserved@a\expandafter{\reserved@b}{#5}% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\DeclareSymbolFont@m@dropped #1#2#3#4#5{% \@tempswafalse \edef\reserved@b{#2}% \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% @@ -1018,6 +1068,16 @@ \fi } \@onlypreamble\DeclareSymbolFont +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\DeclareSymbolFont}{maybe drop m}% +% +%\let\DeclareSymbolFont\DeclareSymbolFont@m@dropped +%\let\DeclareSymbolFont@m@dropped\@undefined +% +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % @@ -1054,8 +1114,24 @@ % \end{macro} % % \begin{macro}{\SetSymbolFont} +% First drop any surplus \texttt{m} from the series argument then +% do what has been done since 1994. +% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)} % \begin{macrocode} -\def\SetSymbolFont#1#2#3#4#5#6{% +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\SetSymbolFont}{maybe drop m}% +\def\SetSymbolFont #1#2#3#4#5#6{% + \def\reserved@a{\SetSymbolFont@m@dropped{#1}{#2}{#3}{#4}}% + \edef\reserved@b{#5}% + \series@maybe@drop@one@m\reserved@b\reserved@b + \expandafter\reserved@a\expandafter{\reserved@b}{#6}% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\SetSymbolFont@m@dropped#1#2#3#4#5#6{% \@tempswafalse \edef\reserved@b{#3}% \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% @@ -1070,6 +1146,16 @@ \fi } \@onlypreamble\SetSymbolFont +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\SetSymbolFont}{maybe drop m}% +% +%\let\SetSymbolFont\SetSymbolFont@m@dropped +%\let\SetSymbolFont@m@dropped\@undefined +% +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf index 0c0c9f29a4..88c2bc642e 100644 Binary files a/macros/latex-dev/base/lthooks-code.pdf and b/macros/latex-dev/base/lthooks-code.pdf differ diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf index 094e4f76c7..151c4c286b 100644 Binary files a/macros/latex-dev/base/lthooks-doc.pdf and b/macros/latex-dev/base/lthooks-doc.pdf differ diff --git a/macros/latex-dev/base/ltkeys.dtx b/macros/latex-dev/base/ltkeys.dtx index df671d4259..88f9315f8a 100644 --- a/macros/latex-dev/base/ltkeys.dtx +++ b/macros/latex-dev/base/ltkeys.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltkeys.dtx} - [2022/07/05 v1.0i LaTeX Kernel (Kevyal options)] + [2022/08/21 v1.0k LaTeX Kernel (Keyval options)] % \iffalse \documentclass{l3doc} \GetFileInfo{ltkeys.dtx} @@ -251,11 +251,15 @@ \@@_option_end: \@@_options_loaded:n {#1} } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \begin{macrocode} \msg_new:nnnn { keys } { option-unknown } { Unknown~option~'#1'~for~package~#2. } { LaTeX~has~been~asked~to~set~an~option~called~'#1'~ - but~the~#2~package~has~not~created~an~option~with~this~name. + but~the~package~"\msg_module_name:n {#2}"~has~not~created~an~option~with~this~name. } % \end{macrocode} % \end{macro} @@ -498,13 +502,29 @@ } { \msg_error:nnnn { keys } { load-only } {#1} {#2} } } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \begin{macrocode} \msg_new:nnn { keys } { load-option-ignored } - { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". } + { + Package~"\msg_module_name:n {#1}"~has~already~been~loaded:~ + ignoring~load-time~option~"#2". + } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \changes{v1.0k}{2022/08/21} +% {Correct error message} +% \begin{macrocode} \msg_new:nnnn { keys } { load-only } - { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". } + { + Key~"#2"~may~only~be~used~during~loading~of~package~ + "\msg_module_name:n {#1}". + } { LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~ - in~the~optional~argument~when~loading~package~"#1". + in~the~optional~argument~when~loading~package~"\msg_module_name:n{#1}". } % \end{macrocode} % \end{macro} diff --git a/macros/latex-dev/base/ltluatex.dtx b/macros/latex-dev/base/ltluatex.dtx index 18623fd677..ab81c3620a 100644 --- a/macros/latex-dev/base/ltluatex.dtx +++ b/macros/latex-dev/base/ltluatex.dtx @@ -28,7 +28,7 @@ \ProvidesFile{ltluatex.dtx} % %<*tex> -[2021/12/27 v1.1x +[2022/08/13 v1.1y % % LuaTeX support for plain TeX (core) %<*tex> @@ -1398,9 +1398,7 @@ local callbacktypes = callbacktypes or { ligaturing = simple, kerning = simple, insert_local_par = simple, - pre_mlist_to_hlist_filter = list, - mlist_to_hlist = exclusive, - post_mlist_to_hlist_filter = reverselist, +% mlist_to_hlist = exclusive, new_graf = exclusive, % \end{macrocode} % Section 8.5: information reporting callbacks. @@ -1461,6 +1459,30 @@ local callbacktypes = callbacktypes or { luatexbase.callbacktypes=callbacktypes % \end{macrocode} % +% \changes{v1.1y}{2022/08/13}{shared\_callbacks added} +% Sometimes multiple callbacks correspond to a single underlying engine level callback. +% Then the engine level callback should be registered as long as at least one of these +% callbacks is in use. This is implemented though a shared table which counts how many +% of the involved callbacks are currently in use. The enging level callback is registered +% iff this count is not 0. +% +% We add |mlist_to_hlist| directly to the list to demonstrate this, but the handler gets +% added later when it is actually defined. +% +% All callbacks in this list are treated as user defined callbacks. +% +% \begin{macrocode} +local shared_callbacks = { + mlist_to_hlist = { + callback = "mlist_to_hlist", + count = 0, + handler = nil, + }, +} +shared_callbacks.pre_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist +shared_callbacks.post_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist +% \end{macrocode} +% % \begin{macro}{callback.register} % \changes{v1.0a}{2015/09/24}{Function modified} % Save the original function for registering callbacks and prevent the @@ -1639,11 +1661,7 @@ local defaults = { % If a default function is not required, it may be declared as |false|. % First we need a list of user callbacks. % \begin{macrocode} -local user_callbacks_defaults = { - pre_mlist_to_hlist_filter = list_handler_default, - mlist_to_hlist = node.mlist_to_hlist, - post_mlist_to_hlist_filter = list_handler_default, -} +local user_callbacks_defaults = {} % \end{macrocode} % % \begin{macro}{create_callback} @@ -1738,9 +1756,19 @@ local function add_to_callback(name, func, description) l = { } callbacklist[name] = l % \end{macrocode} +% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} +% Handle count for shared engine callbacks. +% \begin{macrocode} + local shared = shared_callbacks[name] + if shared then + shared.count = shared.count + 1 + if shared.count == 1 then + callback_register(shared.callback, shared.handler) + end +% \end{macrocode} % If it is not a user defined callback use the primitive callback register. % \begin{macrocode} - if user_callbacks_defaults[name] == nil then + elseif user_callbacks_defaults[name] == nil then callback_register(name, handlers[callbacktypes[name]](name)) end end @@ -1778,6 +1806,7 @@ luatexbase.add_to_callback = add_to_callback % \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)} % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)} % \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks} +% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} % Remove a function from a callback. First check arguments. % \begin{macrocode} local function remove_from_callback(name, description) @@ -1823,7 +1852,13 @@ local function remove_from_callback(name, description) ) if #l == 0 then callbacklist[name] = nil - if user_callbacks_defaults[name] == nil then + local shared = shared_callbacks[name] + if shared then + shared.count = shared.count - 1 + if shared.count == 0 then + callback_register(shared.callback, nil) + end + elseif user_callbacks_defaults[name] == nil then callback_register(name, nil) end end @@ -1917,10 +1952,14 @@ luatexbase.uninstall = uninstall % \end{macro} % \begin{macro}{mlist_to_hlist} % \changes{v1.1l}{2020/02/02}{|pre/post_mlist_to_hlist| added} +% \changes{v1.1y}{2022/08/13}{Use shared\_callback system for pre/post/mlist_to_hlist} % To emulate these callbacks, the ``real'' |mlist_to_hlist| is replaced by a % wrapper calling the wrappers before and after. % \begin{macrocode} -callback_register("mlist_to_hlist", function(head, display_type, need_penalties) +create_callback('pre_mlist_to_hlist_filter', 'list') +create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist) +create_callback('post_mlist_to_hlist_filter', 'list') +function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties) local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties) if current == false then flush_list(head) @@ -1933,7 +1972,7 @@ callback_register("mlist_to_hlist", function(head, display_type, need_penalties) return nil end return post -end) +end % \end{macrocode} % \end{macro} % \endgroup diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf index bae6dabc74..6c5f3e375b 100644 Binary files a/macros/latex-dev/base/ltluatex.pdf and b/macros/latex-dev/base/ltluatex.pdf differ diff --git a/macros/latex-dev/base/ltmarks-code.pdf b/macros/latex-dev/base/ltmarks-code.pdf index 7fd6df326f..77dcb07b25 100644 Binary files a/macros/latex-dev/base/ltmarks-code.pdf and b/macros/latex-dev/base/ltmarks-code.pdf differ diff --git a/macros/latex-dev/base/ltmarks-doc.pdf b/macros/latex-dev/base/ltmarks-doc.pdf index bebd49d906..e57a5bbc75 100644 Binary files a/macros/latex-dev/base/ltmarks-doc.pdf and b/macros/latex-dev/base/ltmarks-doc.pdf differ diff --git a/macros/latex-dev/base/ltmath.dtx b/macros/latex-dev/base/ltmath.dtx index 1bd979f7de..60394460f5 100644 --- a/macros/latex-dev/base/ltmath.dtx +++ b/macros/latex-dev/base/ltmath.dtx @@ -38,7 +38,7 @@ %<*driver> % \fi \ProvidesFile{ltmath.dtx} - [2022/05/08 v1.2l LaTeX Kernel (Math Setup)] + [2022/09/07 v1.2m LaTeX Kernel (Math Setup)] % \iffalse % % @@ -370,9 +370,39 @@ % \begin{macrocode} \def\makesm@sh#1{% \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finsm@sh} +% \end{macrocode} +% +% \begin{macrocode} +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\mathsm@sh}{Guard against reboxing}% \def\mathsm@sh#1#2{% - \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} + \setbox\z@\hbox{$\m@th#1{#2}$}% +% \end{macrocode} +% The empty brace groups in front of the smashed box (which is +% placed by \cs{finsm@sh}) ensures that a \cs{smash} in math is not +% just producing a single box with its dimensions altered, but a +% box plus this second ord atom. The reason is that \TeX{} sometimes reboxes a +% box if its the only thing in a place like the denominator of a +% fraction. This would then undo the smashing and the additional +% ord atom prevents that. Two ord atoms in a row do not alter the +% horizontal spacing in a formula so this is otherwise transparent. +% \changes{v1.2m}{2022/09/03}{Guard against reboxing in fractions (gh/517)} +% \begin{macrocode} + {}\finsm@sh} % \end{macrocode} +% \begin{macrocode} +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\mathsm@sh}{Guard against reboxing}% +%\def\mathsm@sh#1#2{% +% \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} +%\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% % \changes{v1.2b}{2018/09/24}{Start LR-mode if necessary (git/49)} % \begin{macrocode} % diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf index 7546e0aed8..2a94513721 100644 Binary files a/macros/latex-dev/base/ltnews.pdf and b/macros/latex-dev/base/ltnews.pdf differ diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf index 3aec482def..8dcc676577 100644 Binary files a/macros/latex-dev/base/ltnews01.pdf and b/macros/latex-dev/base/ltnews01.pdf differ diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf index e9bfcc62b0..06ec628848 100644 Binary files a/macros/latex-dev/base/ltnews02.pdf and b/macros/latex-dev/base/ltnews02.pdf differ diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf index aa3494706f..d79869c107 100644 Binary files a/macros/latex-dev/base/ltnews03.pdf and b/macros/latex-dev/base/ltnews03.pdf differ diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf index a3983345e6..408e9fe942 100644 Binary files a/macros/latex-dev/base/ltnews04.pdf and b/macros/latex-dev/base/ltnews04.pdf differ diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf index 9d896763b8..85dd03bbe3 100644 Binary files a/macros/latex-dev/base/ltnews05.pdf and b/macros/latex-dev/base/ltnews05.pdf differ diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf index 92f3e0ef3f..56b64f624d 100644 Binary files a/macros/latex-dev/base/ltnews06.pdf and b/macros/latex-dev/base/ltnews06.pdf differ diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf index b130226049..4b964b32da 100644 Binary files a/macros/latex-dev/base/ltnews07.pdf and b/macros/latex-dev/base/ltnews07.pdf differ diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf index 84e87f2af8..75c6b0f9ca 100644 Binary files a/macros/latex-dev/base/ltnews08.pdf and b/macros/latex-dev/base/ltnews08.pdf differ diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf index 372f6eae3e..4de2a8541e 100644 Binary files a/macros/latex-dev/base/ltnews09.pdf and b/macros/latex-dev/base/ltnews09.pdf differ diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf index 2759d890b6..45d74b33a0 100644 Binary files a/macros/latex-dev/base/ltnews10.pdf and b/macros/latex-dev/base/ltnews10.pdf differ diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf index ef59d439fa..8a23382d32 100644 Binary files a/macros/latex-dev/base/ltnews11.pdf and b/macros/latex-dev/base/ltnews11.pdf differ diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf index e4c78b5eb0..dc2e7713df 100644 Binary files a/macros/latex-dev/base/ltnews12.pdf and b/macros/latex-dev/base/ltnews12.pdf differ diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf index 373e26adae..0601a775a7 100644 Binary files a/macros/latex-dev/base/ltnews13.pdf and b/macros/latex-dev/base/ltnews13.pdf differ diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf index 622e0bf074..b5757c7fab 100644 Binary files a/macros/latex-dev/base/ltnews14.pdf and b/macros/latex-dev/base/ltnews14.pdf differ diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf index 007ac69cf3..72b9e5858a 100644 Binary files a/macros/latex-dev/base/ltnews15.pdf and b/macros/latex-dev/base/ltnews15.pdf differ diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf index 7dc3976ba0..86df687d2f 100644 Binary files a/macros/latex-dev/base/ltnews16.pdf and b/macros/latex-dev/base/ltnews16.pdf differ diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf index 2dbc414d6f..71afff14a1 100644 Binary files a/macros/latex-dev/base/ltnews17.pdf and b/macros/latex-dev/base/ltnews17.pdf differ diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf index 40756259d4..18036c2afc 100644 Binary files a/macros/latex-dev/base/ltnews18.pdf and b/macros/latex-dev/base/ltnews18.pdf differ diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf index fc49ae3311..46f8a55e17 100644 Binary files a/macros/latex-dev/base/ltnews19.pdf and b/macros/latex-dev/base/ltnews19.pdf differ diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf index d9c123003a..a6ad55fa8d 100644 Binary files a/macros/latex-dev/base/ltnews20.pdf and b/macros/latex-dev/base/ltnews20.pdf differ diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf index fde160c811..b571a97560 100644 Binary files a/macros/latex-dev/base/ltnews21.pdf and b/macros/latex-dev/base/ltnews21.pdf differ diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf index e7e19e4480..17704aab46 100644 Binary files a/macros/latex-dev/base/ltnews22.pdf and b/macros/latex-dev/base/ltnews22.pdf differ diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf index 28ecc021b3..301b414a82 100644 Binary files a/macros/latex-dev/base/ltnews23.pdf and b/macros/latex-dev/base/ltnews23.pdf differ diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf index 4498ad50c1..7f75b085a9 100644 Binary files a/macros/latex-dev/base/ltnews24.pdf and b/macros/latex-dev/base/ltnews24.pdf differ diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf index 57b8a9b29f..105f319373 100644 Binary files a/macros/latex-dev/base/ltnews25.pdf and b/macros/latex-dev/base/ltnews25.pdf differ diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf index 0db59d5095..25924bd89e 100644 Binary files a/macros/latex-dev/base/ltnews26.pdf and b/macros/latex-dev/base/ltnews26.pdf differ diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf index bde51913b1..3e55d0ca17 100644 Binary files a/macros/latex-dev/base/ltnews27.pdf and b/macros/latex-dev/base/ltnews27.pdf differ diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf index a47920f8e0..7c89f1b6d5 100644 Binary files a/macros/latex-dev/base/ltnews28.pdf and b/macros/latex-dev/base/ltnews28.pdf differ diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf index 1696257c15..86e5464566 100644 Binary files a/macros/latex-dev/base/ltnews29.pdf and b/macros/latex-dev/base/ltnews29.pdf differ diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf index aed2058cef..cd2a1f7dd4 100644 Binary files a/macros/latex-dev/base/ltnews30.pdf and b/macros/latex-dev/base/ltnews30.pdf differ diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf index fd4d604bde..40458d5948 100644 Binary files a/macros/latex-dev/base/ltnews31.pdf and b/macros/latex-dev/base/ltnews31.pdf differ diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf index e4d4b6254c..8ad63d92ca 100644 Binary files a/macros/latex-dev/base/ltnews32.pdf and b/macros/latex-dev/base/ltnews32.pdf differ diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf index 8557cfc783..ac27d49883 100644 Binary files a/macros/latex-dev/base/ltnews33.pdf and b/macros/latex-dev/base/ltnews33.pdf differ diff --git a/macros/latex-dev/base/ltnews34.pdf b/macros/latex-dev/base/ltnews34.pdf index 9232aadfe9..ceef597c19 100644 Binary files a/macros/latex-dev/base/ltnews34.pdf and b/macros/latex-dev/base/ltnews34.pdf differ diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf index 67b75a4d50..1226f431cb 100644 Binary files a/macros/latex-dev/base/ltnews35.pdf and b/macros/latex-dev/base/ltnews35.pdf differ diff --git a/macros/latex-dev/base/ltnews35.tex b/macros/latex-dev/base/ltnews35.tex index a035e4d5c7..0230ef6e58 100644 --- a/macros/latex-dev/base/ltnews35.tex +++ b/macros/latex-dev/base/ltnews35.tex @@ -443,10 +443,6 @@ selects a true or false code branch. As usual, the variants branch leads to some action. Further details and examples are given in \file{usrguide3.pdf}. -This test can also be useful if you set up key/value options and want -to test if a key was specified without giving a value, vs.\ -specifying \enquote{\textit{key}\texttt{ = ,}}. - \subsection{Better allocator for Lua command ids} diff --git a/macros/latex-dev/base/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf index dc8c3d21ed..24a0b791fe 100644 Binary files a/macros/latex-dev/base/ltnews36.pdf and b/macros/latex-dev/base/ltnews36.pdf differ diff --git a/macros/latex-dev/base/ltnews36.tex b/macros/latex-dev/base/ltnews36.tex index df72bc1d64..55de98628c 100644 --- a/macros/latex-dev/base/ltnews36.tex +++ b/macros/latex-dev/base/ltnews36.tex @@ -143,8 +143,72 @@ \section{Introduction} +\emph{to be written} + + +\subsection{Auto-detecting key--value arguments} + +To allow extension of the core \LaTeX{} syntax, \pkg{ltcmd} now supports +a \texttt{={...}} modifier when grabbing arguments. This modifier instructs +\LaTeX{} that the argument should be passed to the underlying code as +a set of keyvals. If the argument does not \enquote{look like} a set +of keyvals, it will be converted into a single key--value pair, with +the argument to \texttt{=} specifying the name of that key. For +example, the \cs{caption} command could be defined as +\begin{verbatim} + \DeclareDocumentCommand\caption + {s ={short-text}+O{#3} +m} + {...} +\end{verbatim} +which would mean that if the optional argument does \emph{not} +contain keyval data, it will be converted to a single keyval +pair with the key name \texttt{short-text}. + +Arguments which begin with \texttt{=,} are always interpreted as +keyvals even if they do not contain further \texttt{=} signs. +Any \texttt{=} signs enclosed within \verb|$...$| or \verb|\(...\)|, +i.e.~in inline math mode, are ignored, meaning that +only \texttt{=} outside of math mode will generally cause +interpretation as keyval material. + +In case the argument contains a \enquote{textual} \texttt{=} sign that +is mistaken as key/value indicator you can hide it using a brace +group as you would do in other places, e.g., +\begin{verbatim} +\caption[{Use of = signs}] + {Use of = signs in optional arguments} +\end{verbatim} +However, because a \texttt{=} sign in math mode are already ignored, this +should seldom be necessary. + +\subsection{Encoding subsets for \texttt{TS1} encoded fonts} + +The text companion encoding \texttt{TS1} is unfortunately not very +faithfully supported in fonts that are not close cousins to the +Computer Modern fonts. It was therefore necessary to provide the +notion of \enquote{sub-encodings} on a per font basis. These +sub-encodings are declared for a font family with the help of a +\cs{DeclareEncodingSubset} declaration, see \cite{36:fntguide} for +details. + +Maintainers of font bundles that include \texttt{TS1} encoded font +files should add an appropriate declaration into the corresponding +\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the +default subencoding is assumed, which is probably disabling too many +glyphs that are actually available in the font.\footnote{The \LaTeX{} + format contains declarations for many font families already. This + was done in 2020 to quickstart the use of the symbols in the kernel, + but it is really the wrong place for such declarations. Thus, for + new fonts the declarations should be placed into the corresponding + \texttt{.fd} files.} +% +\githubissue{905} + + + \section{New or improved commands} + \section{Code improvements} \subsection{Support for slanted small caps in the EC-fonts } @@ -168,22 +232,161 @@ will give the expected result: {\fontfamily{cmr} \subsection{EC sans serif at small sizes} + The EC (T1 encoded Computer Modern) sans serif fonts have errors at -small sizes. (The medium weight is bolder and wider than the bold -extended) The default \texttt{.fd} file has been adjusted to use a -scaled 8pt font. +small sizes: the medium weight is bolder and wider than the bold +extended. This makes them unusable at these small sizes. The default +\texttt{.fd} file has therefore been adjusted to use a scaled down 8pt +font instead. % \githubissue{879} +\subsection{Detect nested \texttt{minipage} environments} + +Nesting of \texttt{minipage} environments is only partially supported +in \LaTeX{} and can lead to incorrect output, such as overfull boxes +or footnotes appearing in the wrong place; +see~\cite[p.~106]{36:Lamport}. However, until now there was no warning +if that happpened. This has been changed and the environment now +warns if you nest it in another \texttt{minipage} environment that +already contains footnotes. +% +\githubissue{168} + + + +\subsection{\LuaTeX\ callback efficiency improvement} + +The mechanism for providing the +\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has +been improved to make it more reusable and to avoid overhead if these +callbacks are not used. +% +\githubissue{830} + + + +\subsection{Improve \pkg{l3docstrip} integration into \pkg{docstrip}} + +In 2020 we merged \pkg{l3docstrip.tex} into \pkg{docstrip.tex} to +support the \texttt{\%\string<@@=\meta{module}\string>} syntax of +\pkg{expl3}; see~\cite{36:ltnews32}. However, this support was +incomplete, because it didn't cover \pkg{docstrip} lines of the form +\texttt{\%<+...>} or \texttt{\%<-...>}. This was never noticed until +now, because usually \texttt{\%<*...>} blocks are used. Now all lines +in a \texttt{.dtx} file are subject to the \texttt{@@} replacement +approach. +% +\githubissue{903} + + + +\subsection{Improve font series handling with incorrect \texttt{.fd} files} + +By convention, the font series value is supposed to contain no +\texttt{m}, unless you refer to the \enquote{medium} series (which is +represented by a single \texttt{m}). For example, one should write +\texttt{c} for \enquote{medium weight, condensed width} and not +\texttt{mc}. This was one of the many space-conserving methods +necessary in the early days of \LaTeXe. + +Some older \texttt{.fd} files +do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in +their declarations. As a result, some font selection scheme +functionality was not working when confronted with such \texttt{.fd} +files. We have therefore augmented \cs{DeclareSymbolFont} and +\cs{SetSymbolFont} to strip their series argument from any surplus +\texttt{m} so that they do not unnecessarily trigger font +substitutions. Regardless of this support such +\texttt{.fd} files should get fixed by their maintainers. +% +\githubissue{918} + + + \section{Bug fixes} +\subsection{Prevent \TeX{} from loosing a \cs{smash}} + +When \TeX{} is typesetting a fraction, it will rebox the material in +either numerator or the denumerator depending on which is wider. If +the repackaged part consists of a single box, that box gets new +dimensions and if it was built using a \cs{smash} that effect vanishes +(because a smash is nothing other than zeroing some box dimension, +which now got undone). For example, in the line +\begin{verbatim} +\frac{1}{2} = \frac{1}{\smash{2^X}} + \neq \frac{100}{\smash{2^X}} +\end{verbatim} +the $2$ in the denominators was not always at the same vertical position, because +the second \cs{smash} was ignored due to reboxing: +\[ +\makeatletter +\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} % old definition +\makeatother +\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq +\frac{100}{\smash{2^X}} +\] +The differences are subtle but noticeable. This is now corrected and the \cs{smash} is always +honored. Thus now you get this output: +\[ +\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq +\frac{100}{\smash{2^X}} +\] +% +\githubissue{517} + + +\subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}} + +The code for keeping a number of math alphabetcs local (introduced in +2021; see~\cite{36:ltnews34}) used \cs{aftergroup} to do some cleanup actions after a +formula had finished. Unfortunately, \cs{aftergroup} can't be used +inside the arguments of the \cs{mathchoice} primitive and as a result one +got low-level errors if the freezing happened in such a place. The +implementation was therefore revised to avoid the \cs{aftergroup} +approach altogether. +% +\githubissue{921} + + + \section{Changes to packages in the \pkg{amsmath} category} + \section{Changes to packages in the \pkg{graphics} category} +\subsection{Fix a \cs{mathcolor} bug} + +The \cs{mathcolor} command intorduced in \cite{36:ltnews35} needs to +scan for following sub and superscripts, but if it did so at the end +of an alignment cell, e.g., in a \texttt{array} environment, the +\texttt{\&} was evaluated too early causing some internal errors. This +is now properly guarded for. +% +\githubissue{901} + + + \section{Changes to packages in the \pkg{tools} category} +\subsection{\pkg{array}: Correctly identify single-line m-cells} + +Cells in m-columns that only contain a single line are supposed to +behave like single-line p-cells and align at the same baseline. To +test for the condition, \pkg{array} used to compare the height of the cell to +the height of the strut used for the table rows. However, the height of that +strut depends on the setting of \cs{arraystretch} and if you made this +negative (or very large) the test came out wrong. Therefore, we now +test against the height of a normal strut to ensure that single-line +cells are correctly identified as such (unless their content is truly very +tall, in which case aligning is pointless anyway). +% +\githubissue{766} + \medskip @@ -199,22 +402,30 @@ scaled 8pt font. % \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ % \url{https://latex-project.org/help/documentation/} -%\bibitem{36:ltnews31} \LaTeX{} Project Team: -% \emph{\LaTeXe{} news 31}.\\ -% \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf} +\bibitem{36:Lamport} +Leslie Lamport. +\newblock {\LaTeX}: {A} Document Preparation System: User's Guide and Reference + Manual. +\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994. +\newblock ISBN 0-201-52983-1. +\newblock Reprinted with corrections in 1996. -%\bibitem{36:ltnews32} \LaTeX{} Project Team: -% \emph{\LaTeXe{} news 32}.\\ -% \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf} +\bibitem{36:ltnews32} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 32}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf} -%\bibitem{36:ltnews33} \LaTeX{} Project Team: -% \emph{\LaTeXe{} news 33}.\\ -% \url{https://latex-project.org/news/latex2e-news/ltnews33.pdf} +\bibitem{36:ltnews34} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 34}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf} + +\bibitem{36:ltnews35} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 35}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf} + +\bibitem{36:fntguide} \LaTeX{} Project Team: + \emph{\LaTeXe{} font selection}.\\ + \url{https://latex-project.org/help/documentation/} -%\bibitem{36:ltnews34} \LaTeX{} Project Team: -% \emph{\LaTeXe{} news 34}.\\ -% \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf} -% %\bibitem{36:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team: % \emph{The \texttt{\upshape ltfilehook} documentation}.\\ % Run \texttt{texdoc} \texttt{ltfilehook-doc} to view. diff --git a/macros/latex-dev/base/ltoutput.dtx b/macros/latex-dev/base/ltoutput.dtx index c2cb8f66b3..1cbc7ab0b1 100644 --- a/macros/latex-dev/base/ltoutput.dtx +++ b/macros/latex-dev/base/ltoutput.dtx @@ -37,7 +37,7 @@ %<*driver> % \fi \ProvidesFile{ltoutput.dtx} - [2022/04/03 v1.4i LaTeX Kernel (Output Routine)] + [2022/08/20 v1.4j LaTeX Kernel (Output Routine)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltoutput.dtx} @@ -829,6 +829,17 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \begin{macro}{\stockheight} +% \changes{v1.4j}{2022/08/20}{Register added} +% \begin{macro}{\stockwidth} +% \changes{v1.4j}{2022/08/20}{Register added} +% New |\stock|\ldots\ registers. +% \begin{macrocode} +\newdimen\stockheight +\newdimen\stockwidth +% \end{macrocode} +% \end{macro} +% \end{macro} % % \begin{macro}{\if@insert} % \begin{macro}{\if@fcolmade} diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf index d58f89f994..4fa9f79b83 100644 Binary files a/macros/latex-dev/base/ltpara-code.pdf and b/macros/latex-dev/base/ltpara-code.pdf differ diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf index eff75892bc..d55cb69019 100644 Binary files a/macros/latex-dev/base/ltpara-doc.pdf and b/macros/latex-dev/base/ltpara-doc.pdf differ diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf index 4c88747682..1e7c996884 100644 Binary files a/macros/latex-dev/base/ltshipout-code.pdf and b/macros/latex-dev/base/ltshipout-code.pdf differ diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf index 76578851f9..b9cfbf5e67 100644 Binary files a/macros/latex-dev/base/ltshipout-doc.pdf and b/macros/latex-dev/base/ltshipout-doc.pdf differ diff --git a/macros/latex-dev/base/ltshipout.dtx b/macros/latex-dev/base/ltshipout.dtx index 83fab820a9..ae29c1acad 100644 --- a/macros/latex-dev/base/ltshipout.dtx +++ b/macros/latex-dev/base/ltshipout.dtx @@ -33,7 +33,7 @@ % % \begin{macrocode} \providecommand\ltshipoutversion{v1.0m} -\providecommand\ltshipoutdate{2022/05/08} +\providecommand\ltshipoutdate{2022/08/26} % \end{macrocode} % %<*driver> @@ -330,7 +330,7 @@ % \begin{syntax} % \cs{AtBeginDvi} \Arg{code} % \end{syntax} - % \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the +% \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the % \hook{shipout/firstpage} hook. This is not really a good name % as it is not just supporting \texttt{.dvi} but also \texttt{.pdf} % output or \texttt{.xdv}. diff --git a/macros/latex-dev/base/lttextcomp.dtx b/macros/latex-dev/base/lttextcomp.dtx index de6b221b6c..8f5ec0d200 100644 --- a/macros/latex-dev/base/lttextcomp.dtx +++ b/macros/latex-dev/base/lttextcomp.dtx @@ -37,7 +37,7 @@ % % \ProvidesFile{lttextcomp.dtx} - [2021/12/09 v1.0f LaTeX Kernel (text companion symbols)] + [2022/08/07 v1.0g LaTeX Kernel (text companion symbols)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -226,7 +226,13 @@ \@ifundefined{#1:#2}% {\@font@info{Setting #2 sub-encoding to #1/#3}}% {\@font@info{Changing #2 sub-encoding to #1/#3}}% - \@namedef{#1:#2}{#3}} +% \end{macrocode} +% This declaration should be usable in \texttt{.fd} files and +% therefore has to make its definition globally, because such files +% can get loaded in random places. +% \changes{v1.0g}{2022/08/07}{Make global declaration (gh/905)} +% \begin{macrocode} + \global\@namedef{#1:#2}{#3}} % \end{macrocode} % % Any reason to allow those in the middle of documents? diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx index 024d107840..429ee4d8d1 100644 --- a/macros/latex-dev/base/ltvers.dtx +++ b/macros/latex-dev/base/ltvers.dtx @@ -112,10 +112,10 @@ % %\edef\latexreleaseversion %<*2ekernel|latexrelease> - {2022-06-01} + {2022-11-01} % %<*2ekernel> -\def\patch@level{-1} +\def\patch@level{-2} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf index 753b3308a2..b09d2b874e 100644 Binary files a/macros/latex-dev/base/ltx3info.pdf and b/macros/latex-dev/base/ltx3info.pdf differ diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf index 3be77146eb..c094004aea 100644 Binary files a/macros/latex-dev/base/ltxdoc.pdf and b/macros/latex-dev/base/ltxdoc.pdf differ diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf index 552a8675cf..79d65d507b 100644 Binary files a/macros/latex-dev/base/makeindx.pdf and b/macros/latex-dev/base/makeindx.pdf differ diff --git a/macros/latex-dev/base/manifest.txt b/macros/latex-dev/base/manifest.txt index daebefee06..d63945fa0e 100644 --- a/macros/latex-dev/base/manifest.txt +++ b/macros/latex-dev/base/manifest.txt @@ -33,8 +33,8 @@ % encguide.tex -- Guide to font encodings. % fntguide.tex -- Guide to font selection. % modguide.tex -- Guide to modifying and distributing LaTeX. -% usrguide.tex -- User guide for this release. -% usrguide3.tex -- User guide for expl3-based methods. +% usrguide.tex -- User guide for the 2020s onward. +% usrguide-historic.tex -- User guide for move from LaTeX2.09 to LaTeX2e. % % ltnews01.tex -- What was new in the release dated 1994/06. % ltnews02.tex -- What was new in the release dated 1994/12. diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf index 5898f65989..ab7f6c6c68 100644 Binary files a/macros/latex-dev/base/modguide.pdf and b/macros/latex-dev/base/modguide.pdf differ diff --git a/macros/latex-dev/base/modguide.tex b/macros/latex-dev/base/modguide.tex index b0651da0a5..3474d8a5fc 100644 --- a/macros/latex-dev/base/modguide.tex +++ b/macros/latex-dev/base/modguide.tex @@ -41,7 +41,12 @@ \title{Modifying \LaTeX} \author{\copyright~Copyright 1995, \LaTeX\ Project Team.\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + texttt{modguide.tex} for full details.}% +} \date{12 December 1995} diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf index 97fa122ce9..57f0853abe 100644 Binary files a/macros/latex-dev/base/nfssfont.pdf and b/macros/latex-dev/base/nfssfont.pdf differ diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf index eeeed89124..e29b28e895 100644 Binary files a/macros/latex-dev/base/proc.pdf and b/macros/latex-dev/base/proc.pdf differ diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf index f89b9f64ff..a3efc155d2 100644 Binary files a/macros/latex-dev/base/slides.pdf and b/macros/latex-dev/base/slides.pdf differ diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf index 5a92ec1246..c8992d4024 100644 Binary files a/macros/latex-dev/base/slifonts.pdf and b/macros/latex-dev/base/slifonts.pdf differ diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf index b6bca6034f..4006bc5fd9 100644 Binary files a/macros/latex-dev/base/source2e.pdf and b/macros/latex-dev/base/source2e.pdf differ diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf index 5a2d5eae9b..140e61e512 100644 Binary files a/macros/latex-dev/base/syntonly.pdf and b/macros/latex-dev/base/syntonly.pdf differ diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf index d3630181bd..acc7b86da5 100644 Binary files a/macros/latex-dev/base/tlc2.pdf and b/macros/latex-dev/base/tlc2.pdf differ diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf index 513aadc918..41383d94a5 100644 Binary files a/macros/latex-dev/base/tulm.pdf and b/macros/latex-dev/base/tulm.pdf differ diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf new file mode 100644 index 0000000000..9b2ee642c7 Binary files /dev/null and b/macros/latex-dev/base/usrguide-historic.pdf differ diff --git a/macros/latex-dev/base/usrguide-historic.tex b/macros/latex-dev/base/usrguide-historic.tex new file mode 100644 index 0000000000..ce35aaa77c --- /dev/null +++ b/macros/latex-dev/base/usrguide-historic.tex @@ -0,0 +1,1832 @@ +% \iffalse meta-comment +% +% Copyright (C) 1993-2022 +% The LaTeX Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% Filename: usrguide-historic.tex + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +\documentclass{ltxguide}[2001/05/28] + +\title{\LaTeX\ for authors --- historic version} + +\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\\ + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{usrguide.tex} for full details.}% +} + +\date{30 August 2022} + + +\begin{document} + +\maketitle + +\tableofcontents + +\section{Introduction} + +Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document +Preparation System. + +This document describes how to take advantage of the new features of +\LaTeX, and how to process your old \LaTeX{} documents with +\LaTeXe. However, this document is only a brief introduction to the +new facilities and is intended for authors who are already familiar +with the old version of \LaTeX{}. It is \emph{not} a reference manual +for \LaTeXe{} nor is it a complete introduction to \LaTeX. + +It is somewhat of an historical document now, since \LaTeXe{} came into +existence in 1994. + +\subsection[\LaTeXe---The new \LaTeX~release] + {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)} + +The previous version of \LaTeX{} was known as \LaTeX~2.09. Over the +years many extensions have been developed for \LaTeX. This is, of +course, a sure sign of its continuing popularity but it has had one +unfortunate result: incompatible \LaTeX{} formats came into use at +different sites. This included `standard \LaTeX~2.09', \LaTeX{} built +with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX, +and so on. Thus, to process documents from various places, a site +maintainer was forced to keep multiple versions of the \LaTeX{} +program. In addition, when looking at a source file it was not always +clear for which format the document was written. + +To put an end to this unsatisfactory situation, \LaTeXe{} has been +produced; it brings all such extensions back under a single format and +thus prevents the proliferation of mutually incompatible dialects of +\LaTeX~2.09. With \LaTeXe{} the `new font selection scheme' is +standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{} +format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply +extensions, which may be loaded by documents using the same base format. + +The introduction of a new release also made it possible to add a small +number of often-requested features and to make the task of writing +packages and classes simpler. + +\subsection{\LaTeX3---The long-term future of \LaTeX} +\label{Sec:ltx3} + +\LaTeXe{} is the consolidation step in a comprehensive +reimplementation of the \LaTeX{} system. The next major release of +\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the +document designers' and package writers' interface to \LaTeX. + +\LaTeX3 is a long-term research project but, until it is completed, +the project team are committed to the active maintenance of \LaTeXe{}. +Thus the experience gained from the production and maintenance of +\LaTeXe{} will be a major influence on the design of \LaTeX3. +A brief description of the project can be found in the document +|ltx3info.tex|. + +If you would like to support the project then you are welcome to send +donations to the \LaTeX\ Project Fund; this has been set up to help +the research team by financing various expenses associated with this +voluntary work of maintaining the current \LaTeX{} and developing +\LaTeX\ further. + +The fund is administered by The \TeX{} Users Group and by various +local user groups. Information about making donations and joining +these groups is available from: +\begin{quote}\small\label{addrs} + \texttt{http://www.tug.org/lugs.html} +\end{quote} + +The \LaTeX3{} project has its home page +on the World Wide Web at: +\begin{verbatim} + http://www.latex-project.org/ +\end{verbatim} +This page describes \LaTeX{} and the \LaTeX3 project, and contains +pointers to other \LaTeX{} resources, such as the user guides, the +\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database. + +Older articles covering aspects of the \LaTeX3 project are also +available for anonymous ftp from the Comprehensive \TeX{} Archive, in +the directory: +\begin{verbatim} + ctan:info/ltx3pub +\end{verbatim} +The file |ltx3pub.bib| in that directory contains an abstract of each +of the files. + +\subsection{Overview} + +This document contains an overview of the new structure and features +of \LaTeX. It is \emph{not} a self-contained document, as it contains +only the features of \LaTeX{} which have changed since version 2.09. +You should read this document in conjunction with an introduction to +\LaTeX{}. + +\begin{description} + +\item[Section~\ref{Sec:class+packages}] + contains an overview of the new structure of + \LaTeX{} documents. It describes how classes and packages work and + how class and package options can be used. It lists the standard + packages and classes which come with \LaTeX. + +\item[Section~\ref{Sec:commands}] describes the new commands available + to authors in \LaTeXe. + +\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{} + documents with \LaTeXe. + +\item[Section~\ref{Sec:problems}] contains advice on dealing with + problems you may encounter in running \LaTeXe. + It lists some error messages which are new in \LaTeXe{} and + it describes some of the more common problems and how to cure them, + or where to find further information. + +\end{description} + +\subsection{Further information} + +For a general introduction to \LaTeX, including the new features of +\LaTeXe, you should read \emph{\LaTeXbook} +by Leslie Lamport~\cite{A-W:LLa94}. + +A more detailed description of the new features of \LaTeX, including an +overview of more than 200 packages and nearly 1000 ready to run examples, is +to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and +Michel Goossens~\cite{A-W:MG2004}. + +Packages and programs for producing and manipulating graphics are +discussed at length in \emph{\LaTeXGcomp} by Michel Goossens, +Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}. + +Solutions for publishing with \LaTeX{} on the World Wide Web are given +in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian +Rahtz~\cite{A-W:GR99}. + +For more information about the many new \LaTeX{} packages you should +read the package documentation, which should be available from the +same source as your copy of \LaTeX. + +There are a number of documentation files which accompany every copy +of \LaTeX. A copy of \emph{\LaTeX{} News} will come out with each +six-monthly release of \LaTeX; it will be found in the files +|ltnews*.tex|. The class- and package-writer's guide \emph{\clsguide} +describes the new \LaTeX{} features for writers of document classes +and packages; it is in |clsguide.tex|. The guide \emph{\fntguide} +describes the \LaTeX{} font selection scheme for class- and +package-writers; it is in |fntguide.tex|. Support for Cyrillic languages +in \LaTeX{} is described in \emph{\cyrguide}. + +The documented source code (from the files used to produce the kernel +format via |latex.ltx|) is now available as +\emph{The \LaTeXe\ Sources}. ] +This very large document also includes an index of +\LaTeX{} commands. It can be typeset from the \LaTeX{} file +|source2e.tex| in the |base| directory, using the source files and +the class file |ltxdoc.cls| from this directory. + +For more information about \TeX{} and \LaTeX{}, please contact your +local \TeX{} Users Group, or the international \TeX{} Users Group (see +page \pageref{addrs}). + + +\section{Classes and packages} +\label{Sec:class+packages} + +This section describes the new structure of \LaTeX{} documents and the +new types of file: \emph{classes} and \emph{packages}. + +\subsection{What are classes and packages?} + +The main difference between \LaTeX~2.09 and \LaTeXe{} is in the +commands before |\begin{document}|. + +In \LaTeX~2.09, documents had \emph{styles}, +such as \textsf{article} or \textsf{book}, and \emph{options}, +such as \textsf{twoside} or \textsf{epsfig}. +These were indicated by the |\documentstyle| command: +\begin{quote} + |\documentstyle|\oarg{options}\arg{style} +\end{quote} +For example, to specify a two-sided article with encapsulated +PostScript figures, you said: +\begin{verbatim} + \documentstyle[twoside,epsfig]{article} +\end{verbatim} +However, there were two different types of document style option: +\emph{built-in options} such as |twoside|; and \emph{packages} such as +|epsfig.sty|. These were very different, since any \LaTeX{} document +style could use the \textsf{epsfig} package but only document styles +which declared the \textsf{twoside} option could use that option. + +To avoid this confusion, \LaTeXe{} differentiates between built-in +options and packages. These are given by the new |\documentclass| and +|\usepackage| commands: +\begin{quote} + |\documentclass|\oarg{options}\arg{class} \\ + |\usepackage|\oarg{options}\arg{packages} +\end{quote} +For example, to specify a two-sided article with encapsulated +PostScript figures, you now write: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage{epsfig} +\end{verbatim} +You can load more than one package with a single |\usepackage| +command; for example, rather than writing: +\begin{verbatim} + \usepackage{epsfig} + \usepackage{multicol} +\end{verbatim} +you can specify: +\begin{verbatim} + \usepackage{epsfig,multicol} +\end{verbatim} +Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle| +command. This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09 +compatibility mode}, which is described in Section~\ref{Sec:209}. + +You should not, however, use the |\documentstyle| command for new +documents because this compatibility mode is very slow and the new +features of \LaTeXe{} are not available in this mode. + +To help differentiate between classes and packages, document classes +now end with |.cls| rather than |.sty|. Packages still end with +|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe. + +\subsection{Class and package options} + +In \LaTeX~2.09, only document styles could have options such as +|twoside| or |draft|. In \LaTeXe{}, both classes and packages are +allowed to have options. For example, to specify a two-sided article +with graphics using the |dvips| driver, you write: + +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics} +\end{verbatim} +It is possible for packages to share common options. For example, +you could, in addition, load the \textsf{color} package by specifying: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics} + \usepackage[dvips]{color} +\end{verbatim} +But because |\usepackage| allows more than one package to be listed, +this can be shortened to: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics,color} +\end{verbatim} +In addition, packages will also use each option given to +the |\documentclass| command (if they know what to do with it), so you +could also write: +\begin{verbatim} + \documentclass[twoside,dvips]{article} + \usepackage{graphics,color} +\end{verbatim} +Class and package options are covered in more detail in +\emph{\LaTeXcomp} and in \emph{\clsguide}. + +\subsection{Standard classes} + +The following classes are distributed with \LaTeX: +\begin{description} + +\item[article] The |article| class described in \emph{\LaTeXbook}. +\item[book] The |book| class described in \emph{\LaTeXbook}. +\item[report] The |report| class described in \emph{\LaTeXbook}. +\item[letter] The |letter| class described in \emph{\LaTeXbook}. +\item[slides] The |slides| class described in \emph{\LaTeXbook}, + formerly \SLiTeX. +\item[proc] A document class for proceedings, based on |article|. + Formerly the |proc| package. +\item[ltxdoc] The document class for documenting the \LaTeX{} + program, based on |article|. +\item[ltxguide] The document class for \emph{\usrguide} and + \emph{\clsguide}, based on |article|. The document you are reading + now uses the |ltxguide| class. The layout for this class is likely + to change in future releases of \LaTeX. +\item[ltnews] The document class for the \emph{\LaTeX{} News} + information sheet, based on |article|. The layout for this class + is likely to change in future releases of \LaTeX. +\item[minimal] +\NEWfeature{1995/12/01} + This class is the bare minimum (3 lines) that is needed in a + \LaTeX\ class file. It just sets the text width and height, and + defines |\normalsize|. It is principally intended for debugging + and testing \LaTeX\ code in situations where you do not need to + load a `full' class such as |article|. If, however, you are + designing a completely new class that is aimed for documents with + structure radically different from the structure supplied by the + article class, then it may make sense to use this as a base and add + to it code implementing the required structure, rather than + starting from |article| and modifying the code there. +\end{description} + +\subsection{Standard packages} +\label{Sec:st-pack} + +The following packages are distributed with \LaTeX: +\begin{description} +\item[alltt] +\NEWfeature{1994/12/01} + This package provides the |alltt| environment, which is like + the |verbatim| environment except that |\|, |{|, and |}| + have their usual meanings. It is described in |alltt.dtx| and + \emph{\LaTeXbook}. +\item[doc] This is the basic package for typesetting the documentation + of \LaTeX{} programs. It is described in |doc.dtx| and in + \emph{\LaTeXcomp}. +\item[exscale] This provides scaled versions of the math extension + font. It is described in |exscale.dtx| and \emph{\LaTeXcomp}. + \item[fontenc] This is used to specify which font encoding \LaTeX{} + should use. It is described in |ltoutenc.dtx|. +\item[graphpap] +\NEWfeature{1994/12/01} + This package defines the |\graphpaper| command; this + can be used in a |picture| environment. +\item[ifthen] Provides commands of the form `if\dots then do\dots + otherwise do\dots'. + It is described in |ifthen.dtx| and \emph{\LaTeXcomp}. +\item[inputenc] +\NEWfeature{1994/12/01} + This is used to specify which input encoding \LaTeX{} should use. + It is described in |inputenc.dtx|. +\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by + default. To access it, you should use the |latexsym| package. It + is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also + Section~\ref{Sec:problems}. + \item[makeidx] This provides commands for producing indexes. It is + described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}. + \item[newlfont] This is used to emulate the font commands of + \LaTeX~2.09 with the New Font Selection Scheme. It is described in + \emph{\LaTeXcomp}. + \item[oldlfont] This is used to emulate the font commands of + \LaTeX~2.09. It is described in \emph{\LaTeXcomp}. + \item[showidx] + This causes the argument of each |\index| command to + be printed on the page where it occurs. + It is described in \emph{\LaTeXbook}. + \item[syntonly] This is used to process a document without + typesetting it. It is described in |syntonly.dtx| and in + \emph{\LaTeXcomp}. + \item[tracefnt] This allows you to control how much information about + \LaTeX's font loading is displayed. It is described in + \emph{\LaTeXcomp}. +\end{description} + +\subsection{Related software} + +\NEWdescription{1998/12/01} +The following software should be available from the same distributor +as your copy of \LaTeXe. You should obtain at least the +\textsf{graphics} and \textsf{tools} collections in order to have all +the files described in \emph{\LaTeXbook}. The |amsmath| package (part +of \textsf{amslatex} and formerly known as |amstex|) +and \textsf{babel} are also mentioned in the list +of `standard packages' in section C.5.2 of that book. +\begin{description} +\item[amslatex] Advanced mathematical typesetting from the American + Mathematical Society. This includes the |amsmath| package; it + provides many commands for typesetting mathematical formulas of + higher complexity. It is produced and supported by the American + Mathematical Society and it is described in \emph{\LaTeXcomp}. +\item[babel] This package and related files support typesetting in + many languages. It is described in \emph{\LaTeXcomp}. +\item[cyrillic] +\NEWfeature{1998/12/01} + Everything you need (except the fonts themselves) for + typesetting with Cyrillic fonts. +\item[graphics] This includes the |graphics| package which + provides support for the inclusion and transformation of graphics, + including files produced by other software. Also included, is the + |color| package which provides support for typesetting in colour. + Both these packages are described in \emph{\LaTeXbook}. +\item[psnfss] Everything you need (except the fonts themselves) for + typesetting with a large range of Type~1 (PostScript) fonts. +\item[tools] Miscellaneous packages written by the \LaTeX3 + project team. +\end{description} +These packages come with documentation and each of them is also +described in at least one of the books \emph{\LaTeXcomp} and +\emph{\LaTeXbook}. + +\subsubsection{Tools} + +This collection of packages includes, at least, the following (some +files may have slightly different names on certain systems): + +\begin{description} +\item[array] + Extended versions of the environments |array|, |tabular| + and |tabular*|, with many extra features. +\item[calc] +\NEWfeature{1996/12/01} + Enables the use of certain algebraic notation when specifying + values for lengths and counters. +\item[dcolumn] + Alignment on `decimal points' in tabular entries. Requires the + |array| package. +\item[delarray] + Adds `large delimiters' around arrays. Requires |array|. +\item[hhline] + Finer control over horizontal rules in tables. Requires |array|. +\item[longtable] + Multi-page tables. (Does not require |array|, but it uses the + extended features if both are loaded.) +\item[tabularx] + Defines a |tabularx| environment that is similar to |tabular*| + but it modifies the column widths, rather than the inter-column + space, to achieve the desired table width. +\item[afterpage] + Place text after the current page. +\item[bm] + Access bold math symbols. +\item[enumerate] + Extended version of the |enumerate| environment. +\item[fontsmpl] + Package and test file for producing `font samples'. +\item[ftnright] + Place all footnotes in the right-hand column in two-column mode. +\item[indentfirst] + Indent the first paragraph of sections, etc. +\item[layout] + Show the page layout defined by the current document class. +\item[multicol] + Typeset text in columns, with the length of the columns + `balanced'. +\item[rawfonts] + Preload fonts using the old internal font names of \LaTeX~2.09. + See Section~\ref{Sec:oldinternals}. +\item[somedefs] + Selective handling of package options. (Used by the rawfonts + package.) +\item[showkeys] + Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful + whilst drafting. +\item[theorem] + Flexible declaration of `theorem-like' environments. +\item[varioref] + `Smart' handling of page references. +\item[verbatim] + Flexible extension of the verbatim environment. +\item[xr] + Cross reference other `external' documents. +\item[xspace] + `Smart space' command that helps you to avoid the common mistake + of missing spaces after command names. +\end{description} + + +\section{Commands} +\label{Sec:commands} + +This section describes the new commands available in \LaTeXe. +They are covered in more detail in \emph{\LaTeXbook} and in +\emph{\LaTeXcomp}. + +\subsection{Preamble commands} +\label{Sec:pre} + +The changes to the preamble commands are intentionally designed to make +\LaTeXe{} documents look clearly different from old documents. The +commands should be used only before |\begin{document}|. + +\begin{decl} +|\documentclass| \oarg{option-list} \arg{class-name} + \oarg{release-date} +\end{decl} + +This command replaces the +\LaTeX~2.09 command |\documentstyle|. + +There must be exactly one |\documentclass| command in a document; and +it should normally come before any other command. (There are some +exceptions, e.g., you can have |filecontents| environments before it +or |\RequirePackage| but these should be only used in special +scenarios as discussed elsewhere.) + +The \m{option-list} is a list of options, each of which may modify the +formatting of elements which are defined in the \m{class-name} file, +as well as those in all following |\usepackage| commands (see +below). + +The optional argument \m{release-date} can be used to specify the +earliest desired release date of the class file; it should contain a +date in the format \textsc{yyyy/mm/dd}. If a version of the class +older than this date is found, a warning is issued. + +For example, to specify a two-column article, using a version of +|article.cls| released after June 1994, you specify: +\begin{verbatim} + \documentclass[twocolumn]{article}[1994/06/01] +\end{verbatim} + +\begin{decl} +|\documentstyle| \oarg{option-list} \arg{class-name} +\end{decl} + +This command is still supported for compatibility with old files. It +is essentially the same as |\documentclass| except that it invokes +\emph{\LaTeX~2.09 compatibility mode}. It also causes any options in +the \m{option-list} that are not processed by the class file to be +loaded as packages after the class has been loaded. See +Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility +mode. + +\begin{decl} +|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date} +\end{decl} + +Any number of |\usepackage| commands is allowed. Each package file +(as denoted by \m{package-name}) defines new elements (or modifies +those defined in the class file loaded by the \m{class-name} argument +of the |\documentclass| command). A package file thus extends the +range of documents which can be processed. + +The \m{option-list} argument can contain a list of options, each of +which can modify the formatting of elements which are defined in this +\m{package-name} file. + +As above, \m{release-date} can contain the earliest desired release +date of the package file in the format \textsc{yyyy/mm/dd}; if an +older version of the package is found, a warning is issued. + +For example, to load the |graphics| package for the |dvips| driver, +using a version of |graphics.sty| released after June 1994, you write: +\begin{verbatim} + \usepackage[dvips]{graphics}[1994/06/01] +\end{verbatim} +Each package is loaded only once. If the same package is requested +more than once, nothing happens in the second or following attempt +unless the package has been requested with options that were not given +in the original |\usepackage|. If such extra options are specified +then an error message is produced. See Section~\ref{Sec:problems} how +to resolve this problem. + +As well as processing the options given in the \m{option-list} of the +|\usepackage| command, each package processes the +\m{option-list} of the |\documentclass| command as well. This +means that any option which should be processed by every package (to +be precise, by every package that specifies an action for it) can be +specified just once, in the |\documentclass| command, rather than +being repeated for each package that needs it. + +\begin{decl} +|\listfiles| +\end{decl} + +If this command is placed in the preamble then a list of the files +read in (as a result of processing the document) will be displayed +on the terminal (and in the log file) at the end of the run. Where +possible, a short description will also be produced. + +\NEWdescription{1995/12/01} +\emph{Warning}: this command will list only files which were read +using \LaTeX{} commands such as |\input|\arg{file} or +|\include|\arg{file}. If the file was read using the primitive \TeX{} +syntax |\input |\emph{file} (without |{ }| braces around the file name) +then it will not be listed; failure to use the \LaTeX{} form with the +braces can cause more severe problems, possibly leading to overwriting +important files, so \textbf{always put in the braces}. + + +\begin{decl} +|\setcounter{errorcontextlines}| \arg{num} +\end{decl} + +\TeX~3 introduced a new primitive |\errorcontextlines| which controls +the format of error messages. \LaTeXe\ provides an interface to this +through the standard |\setcounter| command. As most \LaTeX\ users do +not want to see the internal definitions of \LaTeX\ commands each time +they make an error, \LaTeXe{} sets this to $-1$ by default. + + +\subsection{Environments to write out support files} + +\NEWfeature{2019} +% +Until the \LaTeX\ release in 2019 the |filecontents| environment was +restricted to a place before the |\documentclass| command. These days +it can be used anywhere, though we still think that in most cases it is +best to only use it a the top of your document or in the preamble. + +\begin{decl} +|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\ + \m{file-contents} \\ +|\end{filecontents}| +\end{decl} + +The |filecontents| environment is intended for bundling within a +single document file the contents of packages, options, or other +files. When the document file is run through \LaTeXe{} the body of +this environment is written verbatim (preceded by a comment line) to a +file whose name is given as the environment's only argument. However, +if that file already exists then nothing happens except for an +information message. + +These days most UTF-8 text characters can be used in a +|filecontents| envi\-ronment---they will be written unchanged to the +output file. However, tabs and form feeds produce a warning, +explaining that they are turned into spaces or blank lines, +respectively. + +By default the environment does not overwrite an existing file and it +even refuses to write out the data if there exists a file that is +anywhere in the path that \TeX\ searches when inputting files. With +the option |nosearch| you can ask it to look only into the current +directory and with the option |overwrite| (or |force|) you can request +it to write the file regardless. It will, however, never write to +|\jobname.tex| to avoid overwriting itself. + +The |filecontents| environment is used for including \LaTeX{} files. +For other plain text files (such as Encapsulated PostScript files), +you should use the |filecontents*| environment which does not add a +comment line. + + + + +\subsection{Document structure} + +The |book| document class introduces new commands to indicate +document structure. +\begin{decl} +|\frontmatter| \\ |\mainmatter| \\ |\backmatter| +\end{decl} +These commands indicate the beginning of the front matter (title page, +table of contents and prefaces), main matter (main text) and back +matter (bibliography, indexes and colophon). + +\subsection{Definitions} + +In \LaTeX, commands can have both mandatory and optional arguments, +for example in: +\begin{verbatim} + \documentclass[11pt]{article} +\end{verbatim} +the |11pt| argument is optional, whereas the |article| class name is +mandatory. + +In \LaTeX~2.09 users could define commands with arguments, but these +had to be mandatory arguments. With \LaTeXe, users can now define +commands and environments which also have one optional argument. + +\begin{decl} +|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{decl} + +These commands have a new, second, optional argument; this is used for +defining commands which themselves take one optional argument. This +new argument is best introduced by means of a simple (and hence not +very practical) example: +\begin{verbatim} + \newcommand{\example}[2][YYY]{Mandatory arg: #2; + Optional arg: #1.} +\end{verbatim} +This defines |\example| to be a command with two arguments, referred +to as |#1| and |#2| in the \arg{definition}---nothing new so far. But +by adding a second optional argument to this |\newcommand| (the +|[YYY]|) the first argument (|#1|) of the newly defined command +|\example| is made optional with its default value being |YYY|. + +Thus the usage of |\example| is either: +\begin{verbatim} + \example{BBB} +\end{verbatim} +which prints: +\begin{quote} + Mandatory arg: BBB; + Optional arg: YYY. +\end{quote} +or: +\begin{verbatim} + \example[XXX]{AAA} +\end{verbatim} +which prints: +\begin{quote} + Mandatory arg: AAA; + Optional arg: XXX. +\end{quote} + +The default value of the optional argument is \texttt{YYY}. +This value is specified as the \oarg{default} argument of the +|\newcommand| that created |\example|. + +As another more useful example, the definition: +\begin{verbatim} + \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace} +\end{verbatim} +means that the input |$\seq{a}$| produces +the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$, +whereas the input |$\seq[k]{x}$| produces the formula +$\lbrace x_{0},\ldots,\,x_{k} \rbrace$. + +In summary, the command: +\begin{quote} + |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{quote} +defines \m{cmd} to be a command with \m{num} arguments, the first of +which is optional and has default value \m{default}. + +Note that there can only be one optional argument but, as before, +there can be up to nine arguments in total. + +\begin{decl} +|\newenvironment| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\newenvironment*| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\renewenvironment| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\renewenvironment*| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} +\end{decl} + +\LaTeXe\ also supports the creation of environments that have one +optional argument. Thus the syntax of these two commands has +been extended in the same way as that of |\newcommand|. + +\begin{decl} +|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{decl} + +This takes the same arguments as |\newcommand|. If \m{cmd} is already +defined then the existing definition is kept; but if it is currently +undefined then the effect of |\providecommand| is to define \m{cmd} +just as if |\newcommand| had been used. + +\NEWfeature{1994/12/01} + All the above five `defining commands' now have \texttt{*}-forms that + are usually the better form to use when defining commands with + arguments, unless any of these arguments is intended to contain + whole paragraphs of text. Moreover, if you ever do find yourself + needing to use the non-star form then you should ask whether + that argument would not better be treated as the contents of a + suitably defined environment. + +\NEWfeature{1995/12/01} + The commands produced by the above five `defining commands' are + now robust. + +\subsection{Boxes} + +These next three commands for making LR-boxes all existed in +\LaTeX~2.09. They have been enhanced in two ways. + +\begin{decl} +|\makebox| \oarg{width} \oarg{pos} \arg{text} \\ +|\framebox| \oarg{width} \oarg{pos} \arg{text} \\ +|\savebox| \arg{cmd} \oarg{width} \oarg{pos} \arg{text} +\end{decl} + +One small but far-reaching change for \LaTeXe\ is that, within the +\m{width} argument only, four special lengths can be used. These are +all dimensions of the box that would be produced by using simply +|\mbox|\arg{text}: +\begin{itemize} +\item [] |\height|\quad its height above the baseline; +\item [] |\depth|\quad its depth below the baseline; +\item [] |\totalheight|\quad the sum of |\height| and |\depth|; +\item [] |\width|\quad its width. +\end{itemize} +Thus, to put `hello' in the centre of a box of twice its natural +width, you would use: +\begin{verbatim} + \makebox[2\width]{hello} +\end{verbatim} +Or you could put \textit{f} into a square box, like +this: + \framebox{\makebox[\totalheight]{\itshape f\/}} +\begin{verbatim} + \framebox{\makebox[\totalheight]{\itshape f\/}} +\end{verbatim} +Note that it is the total width of the framed box, including the +frame, which is set to |\totalheight|. + +The other change is a new possibility for \m{pos}: |s| has been added +to |l| and |r|. If \m{pos} is |s| then the text is stretched the full +length of the box, making use of any `rubber lengths' (including any +inter-word spaces) in the contents of the box. If no such `rubber +length' is present, an `underfull box' will probably be produced. + +\begin{decl} +|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width} + \arg{text} \\ +|\begin{minipage}| + \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\ +\m{text}\\ +|\end{minipage}| +\end{decl} + +As for the box commands above, |\height|, |\width|, etc.~may be used +in the \oarg{height} argument to denote the natural dimensions of the +box. + +The \m{inner-pos} argument is new in \LaTeXe. It is the vertical +equivalent to the \m{pos} argument for |\makebox|, etc, determining +the position of \m{text} within the box. The \m{inner-pos} may be any +one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or +`stretched' alignment respectively. When the \m{inner-pos} argument +is not specified, \LaTeX\ gives it same value as \m{pos} (this could be +the latter's default value). + + +\begin{decl} +|\begin{lrbox}| \arg{cmd}\\ +\m{text}\\ +|\end{lrbox}| +\end{decl} + +This is an environment which does not directly print anything. +Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus +it is like |\sbox| \arg{cmd} \arg{text}, except that any white space +before or after the contents \m{text} is ignored. + +This is very useful as it enables both the |\verb| command and the +\texttt{verbatim} environment to be used within \m{text}. + +It also makes it possible to define, for example, a `framed box' +environment. This is done by first using this environment to save +some text in a bin \m{cmd} and then calling +|\fbox{\usebox{|\m{cmd}|}}|. + +The following example defines an environment, called |fmpage|, that is +a framed version of |minipage|. +\begin{verbatim} + \newsavebox{\fmbox} + \newenvironment{fmpage}[1] + {\begin{lrbox}{\fmbox}\begin{minipage}{#1}} + {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}} +\end{verbatim} + + +\subsection{Measuring things} + +The first of these next commands was in \LaTeX~2.09. The two new +commands are the obvious analogues. + +\begin{decl} +|\settowidth| \arg{length-cmd} \arg{lr text} \\ +|\settoheight| \arg{length-cmd} \arg{lr text} \\ +|\settodepth| \arg{length-cmd} \arg{lr text} +\end{decl} + +\subsection{Line endings} + +\NEWdescription{1994/12/01} +The command |\\|, which is used to indicate a line-end in various +places, is now a robust command when used within arguments such as +section titles. + +Also, because it is often necessary to distinguish which type of line +is to be ended, we have introduced the following new command; it +has the same argument syntax as that of |\\|. +\begin{decl}[1994/12/01] +|\tabularnewline| \oarg{vertical-space} +\end{decl} +One example of its use is when the text in the last +column of a |tabular| environment is set with |\raggedright|; then +|\tabularnewline| can be used to indicate the end of a row of the +|tabular|, whilst |\\| will indicate the end of a line of text in a +paragraph within the column. This command can be used in the |array| +environment as well as |tabular|, and also the extended versions of +these environments offered by the \textsf{array} and \textsf{longtable} +packages in the tools collection. + +\subsection{Controlling page breaks} + +Sometimes it is necessary, for a final version of a document, to +`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a +variety of commands for this situation: |\clearpage|, |\pagebreak| +etc. \LaTeXe\ provides, in addition, commands which can produce +longer pages as well as shorter ones. + + +\begin{decl} +|\enlargethispage| \arg{size} \\ +|\enlargethispage*| \arg{size} +\end{decl} + +These commands increase the height of a page (from its normal value of +|\textheight|) by the specified amount \m{size}, a rigid length. This +change affects \emph{only} the current page. + +This can be used, for example, to allow an extra line to be fitted +onto the page or, with a negative length, to produce a page +shorter than normal. + +The star form also shrinks any vertical white space on the page as +much as possible, so as to fit the maximum amount of text on the +page. + +\NEWdescription{1995/12/01} +These commands do not change the position of the footer text; thus, if +a page is lengthened too far, the main text may overprint the footer. + +\subsection{Floats} + +There is a new command, |\suppressfloats|, and a new `float +specifier'. These will enable people to gain better +control of \LaTeX's float placement algorithm. + +\begin{decl} +|\suppressfloats| \oarg{placement} +\end{decl} + +This command stops any further floating environments from being placed +on the current page. With an optional argument, which should be either +|t| or |b| (not both), this restriction applies only to putting +further floats at the top or at the bottom. Any floats which would +normally be placed on this page are placed on the next page instead. + +\begin{decl} +The extra float location specifier: \ \texttt{!} +\end{decl} + +This can be used, along with at least one of \texttt{h}, \texttt{t}, +\texttt{b} and \texttt{p}, in the location optional argument of a +float. + +If a \texttt{!} is present then, just for this particular float, +whenever it is processed by the float mechanism the following are +ignored: +\begin{itemize} +\item all restrictions on the number of floats which can appear; +\item all explicit restrictions on the amount of space on a text page +which may be occupied by floats or must be occupied by text. +\end{itemize} +The mechanism will, however, still attempt to ensure that pages are +not overfull and that floats of the same type are printed in the +correct order. + +Note that its presence has no effect on the production of float pages. + +A \texttt{!} specifier overrides the effect of any |\suppressfloats| +command for this particular float. + +\subsection{Font changing: text} + +The font selection scheme used in \LaTeXe{} differs a lot from that +used in \LaTeX~2.09. In this section, we give a brief description of +the new commands. A more detailed description with examples is given +in \emph{\LaTeXcomp}, and the interface for class- and package-writers +is described in \emph{\fntguide}. + +\begin{decl} +|\normalfont|\\ +|\rmfamily|\\ +|\sffamily|\\ +|\ttfamily|\\ +|\mdseries|\\ +|\bfseries|\\ +|\upshape|\\ +|\itshape|\\ +|\slshape|\\ +|\scshape| +\end{decl} + +These are font commands whose use is the same as the commands |\rm|, +|\bf|, etc. The difference is that each command changes just one +attribute of the font (the attribute changed is part of the name). +One result of this is that, for example, |\bfseries\itshape| produces +both a change of series and a change of shape, to give a bold italic +font. + +\begin{decl} +|\textnormal|\arg{text}\\ +|\textrm|\arg{text}\\ +|\textsf|\arg{text}\\ +|\texttt|\arg{text}\\ +|\textmd|\arg{text}\\ +|\textbf|\arg{text}\\ +|\textup|\arg{text}\\ +|\textit|\arg{text}\\ +|\textsl|\arg{text}\\ +|\textsc|\arg{text}\\ +|\emph|\arg{text} +\end{decl} + +These are one-argument commands; they take as an argument the +text which is to be typeset in the particular font. They also +automatically insert italic corrections where appropriate; if you do +not like the result, you can add an italic correction with |\/| or +remove it with |\nocorr|. The |\nocorr| should always be the first or +last thing within the \arg{text} argument. + +\subsection{Font changing: math} + +Most of the fonts used within math mode do not need to be explicitly +invoked; but to use letters from a range of fonts, the following +class of commands is provided. + +\begin{decl} +|\mathrm| \arg{letters}\\ +|\mathnormal| \arg{letters}\\ +|\mathcal| \arg{letters}\\ +|\mathbf| \arg{letters}\\ +|\mathsf| \arg{letters}\\ +|\mathtt| \arg{letters}\\ +|\mathit| \arg{letters} +\end{decl} + +These are also one-argument commands which take as an argument the +letters which are to be typeset in the particular font. The argument +is processed in math mode so spaces within it will be ignored. Only +letters, digits and accents have their font changed, for example +|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$. + +\subsection{Ensuring math mode} + +\begin{decl} +|\ensuremath| \arg{math commands} +\end{decl} + +In \LaTeX~2.09, if you wanted a command to work both in math mode and +in text mode, the suggested method was to define something like: +\begin{verbatim} + \newcommand{\Gp}{\mbox{$G_p$}} +\end{verbatim} +Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for +instance) subscripts or a fraction. + +In \LaTeXe{} you can define it thus: +\begin{verbatim} + \newcommand{\Gp}{\ensuremath{G_p}} +\end{verbatim} +Now |\Gp| will work correctly in all contexts. + +This is because the |\ensuremath| does nothing, producing simply +|G_p|, when |\Gp| is used within math mode; but it ensures that math +mode is entered (and exited) as required when |\Gp| is used in text +mode. + + +\subsection{Setting text superscripts} + +\begin{decl} +|\textsuperscript| \arg{text} +\end{decl} + +\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as +footnote markers were produced by internally entering math mode and +typesetting the number as a math superscript. This normally looked +fine since the digits in math fonts are the same as those in text +fonts when Computer Modern fonts are used. But when a different +document font (such as Times) is selected, the results look rather +strange. For this reason the command |\textsuperscript| has been +introduced which typesets its argument in the current text font, in a +superscript position and in the correct size. + +\subsection{Text commands: all encodings} + +\NEWdescription{1994/12/01} + One of the main differences between \LaTeXe{} and \LaTeX~2.09 is + that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}. + (A font encoding is the sequence of characters in the font---for + example a Cyrillic font would have a different encoding from a Greek + font.) + + The two major font encodings that are used for Latin languages such + as English or German are |OT1| (Donald Knuth's 7-bit encoding, which + has been used during most of \TeX's lifetime) and |T1| (the new + 8-bit `Cork' encoding). + + \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has + support for both |OT1| and |T1| built-in. The next section will + cover the new commands which are available if you have |T1|-encoded + fonts. This section describes new commands which are available in + all encodings. + + Most of these commands provide characters which were available in + \LaTeX~2.09 already. For example |\textemdash| gives an `em dash', + which was available in \LaTeX~2.09 by typing |---|. However, some + fonts (for example a Greek font) may not have the |---| ligature, + but you will still be able to access an em dash by typing + |\textemdash|. + +\begin{decl}[1994/12/01] + |\r{}| +\end{decl} + This command gives a `ring' accent, for example `\r{o}' can be typed + |\r{o}|. + +\begin{decl}[1994/12/01] + |\SS| +\end{decl} + This command produces a German `SS', that is a capital `\ss'. This + letter can hyphenate differently from `SS', so is needed for entering + all-caps German. + +\begin{decl}[1994/12/01] + |\textcircled{}| +\end{decl} + This command is used to build `circled characters' such as + |\copyright|. For example |\textcircled{a}| produces + \textcircled{a}. + +\begin{decl}[1994/12/01] + |\textcompwordmark| +\end{decl} + This command is used to separate letters which would normally + ligature. For example `f\textcompwordmark i' is produced with + |f\textcompwordmark i|. Note that the `f' and `i' have not + ligatured to produce `fi'. This is rarely useful in English + (`shelf\textcompwordmark ful' is a rare example of where it might be + used) but is used in languages such as German. + +\begin{decl}[1994/12/01] + |\textvisiblespace| +\end{decl} + This command produces a `visible space' character + `\textvisiblespace'. This is sometimes used in computer listings, + for example `type \textsf{hello\textvisiblespace world}'. + +\begin{decl}[1994/12/01] + |\textemdash| + |\textendash| + |\textexclamdown| + |\textquestiondown| \\ + |\textquotedblleft| + |\textquotedblright| + |\textquoteleft| + |\textquoteright| +\end{decl} + These commands produce characters which would otherwise be + accessed via ligatures: + \begin{center} + \begin{tabular}{ccl} + \emph{ligature} & \emph{character} & \emph{command} \\ + |---| & --- & |\textemdash| \\ + |--| & -- & |\textendash| \\ + |!`| & !` & |\textexclamdown| \\ + |?`| & ?` & |\textquestiondown| \\ + |``| & `` & |\textquotedblleft| \\ + |''| & '' & |\textquotedblright| \\ + |`| & ` & |\textquoteleft| \\ + |'| & ' & |\textquoteright| + \end{tabular} + \end{center} + The reason for making these characters directly accessible is so + that they will work in encodings which do not have these characters. + +\begin{decl}[1994/12/01] + |\textbullet| + |\textperiodcentered| +\end{decl} + These commands allow access to characters which were previously only + available in math mode: + \begin{center} + \begin{tabular}{lcl} + \emph{math command} & \emph{character} & \emph{text command} \\ + |\bullet| & $\bullet$ & |\textbullet| \\ + |\cdot| & $\cdot$ & |\textperiodcentered| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textbackslash| + |\textbar| + |\textless| + |\textgreater| +\end{decl} + These commands allow access to ASCII characters which were + only available in verbatim or math mode: + \begin{center} + \begin{tabular}{lcl} + \emph{math command} & \emph{character} & \emph{text command} \\ + |\backslash| & $\backslash$ & |\textbackslash| \\ + |\mid| & $\mid$ & |\textbar| \\ + |<<| & $<$ & |\textless| \\ + |>>| & $>$ & |\textgreater| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textasciicircum| + |\textasciitilde| +\end{decl} + These commands allow access to ASCII characters which were + previously only available in verbatim: + \begin{center} + \begin{tabular}{cl} + \emph{verbatim} & \emph{text command} \\ + |^| & |\textasciicircum| \\ + |~| & |\textasciitilde| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textregistered| + |\texttrademark| +\end{decl} + These commands provide the `registered trademark' (R) and + `trademark' (TM) symbols. + +\subsection{Text commands: the T1 encoding} + +\NEWdescription{1994/12/01} + The |OT1| font encoding is fine for typesetting in English, but has + problems when typesetting other languages. The |T1| encoding solves + some of these problems, by providing extra characters (such as `eth' + and `thorn'), and it allows words containing accented letters to be + hyphenated (as long as you have a package like |babel| which allows + for non-American hyphenation). + + This section describes the commands you can use if you have the |T1| + fonts. To use them, you need to get the `ec fonts', or the + |T1|-encoded PostScript fonts, as used by \textsf{psnfss}. + All these fonts are + available by anonymous ftp in the Comprehensive \TeX{} Archive, and + are also available on the CD-ROMs \emph{4all \TeX} and + \emph{\TeX{} Live} (both available from the \TeX{} Users Group). + + You can then select the |T1| fonts by saying: +\begin{verbatim} + \usepackage[T1]{fontenc} +\end{verbatim} + This will allow you to use the commands in this section. + + \emph{Note:} Since this document must be processable on any site + running an up-to-date \LaTeX, it does not contain any characters + that are present only in |T1|-encoded fonts. This means that this + document cannot show you what these glyphs look like! If you want + to see them then run \LaTeX{} on the document |fontsmpl| and + respond `|cmr|' when it prompts you for a family name. + +\begin{decl}[1994/12/01] + |\k{}| +\end{decl} + This command produces an `ogonek' accent. + +\begin{decl}[1994/12/01] + |\DH| + |\DJ| + |\NG| + |\TH| + |\dh| + |\dj| + |\ng| + |\th| +\end{decl} + These commands produce characters `eth', `dbar', `eng', and `thorn'. + +\begin{decl}[1994/12/01] + |\guillemotleft| + |\guillemotright| + |\guilsinglleft| + |\guilsinglright| \\ + |\quotedblbase| + |\quotesinglbase| + |\textquotedbl| +\end{decl} + % A local hack (could be improved): + \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$} + These commands produce various sorts of quotation mark. + Rough representations of them are: + \fauxguillemet\ll a\fauxguillemet\gg{} + \fauxguillemet + ,\kern -0.1em,\kern 0.05em a\kern -0.05em`` + ,\kern 0.05em a\kern -0.05em` and |"|a|"|. + +\NEWdescription{2001/06/01} + There are therefore some extra short-form ligatures available for + use in documents that will only be used with |T1|-encoded fonts. + + The guillemets |\guillemotleft| and |\guillemotright|% + \footnote{We apologise once again for maintaining Adobe's + enormous solipsism~(sic) of confusing a diving bird with + punctuation marks!} + can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase| + by typing |,,|\,. + + Also, unlike the unexpected results with + |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and + \textgreater{}. + + Note also that the single character |"| will no longer produce '' + but rather |\textquotedbl|. + +\subsection{Logos} + +\begin{decl} +|\LaTeX|\\ +|\LaTeXe| +\end{decl} + +|\LaTeX| (producing `\LaTeX') is still the `main' logo command, +but if you need to refer to the new features, you can write +|\LaTeXe| (producing `\LaTeXe'). + +\subsection{Picture commands} + +\begin{decl} + |\qbezier[](,)(,)(,)| \\ + | \bezier{}(,)(,)(,)| +\end{decl} +The |\qbezier| command can be used in |picture| mode to draw a +quadratic Bezier curve from position |(,)| to |(,)| with +control point |(,)|. The optional argument \m{N} gives the +number of points on the curve. + +For example, the diagram: +\begin{center} + \begin{picture}(50,50) + \thicklines + \qbezier(0,0)(0,50)(50,50) + \qbezier[20](0,0)(50,0)(50,50) + \thinlines + \put(0,0){\line(1,1){50}} + \end{picture} +\end{center} +is drawn with: +\begin{verbatim} + \begin{picture}(50,50) + \thicklines + \qbezier(0,0)(0,50)(50,50) + \qbezier[20](0,0)(50,0)(50,50) + \thinlines + \put(0,0){\line(1,1){50}} + \end{picture} +\end{verbatim} +The |\bezier| command is the same, except that the argument \m{N} is not +optional. It is provided for compatibility with the \LaTeX~2.09 +|bezier| document style option. + +\subsection{Old commands} + +\begin{decl} +|\samepage| +\end{decl} + +The |\samepage| command still exists but is no longer being +maintained. +This is because it only ever worked erratically; it does not +guarantee that there will be no page-breaks within its scope; and +it can cause footnotes and marginals to be wrongly placed. + +We recommend using |\enlargethispage| in conjunction with page-break +commands such as |\newpage| and |\pagebreak| to help control page +breaks. + +\begin{decl} + |\SLiTeX| +\end{decl} +Since \SLiTeX{} no longer exists, the logo is no longer defined in the +\LaTeX{} kernel. A suitable replacement is |\textsc{Sli\TeX}|. The +\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode. + +\begin{decl} +|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\ +|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd| +\end{decl} + +These symbols are contained in the \LaTeX{} symbol font, which was +automatically loaded by \LaTeX~2.09. However, \TeX{} has room for +only sixteen math font families; thus many users discovered that they +ran out. Because of this, \LaTeX{} does not load the \LaTeX{} symbol +font unless you use the \textsf{latexsym} package. + +These symbols are also made available, using different fonts, by the +\textsf{amsfonts} package, which also defines a large number of other +symbols. It is supplied by the American Mathematical Society. + +The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09 +compatibility mode. + +\section{\LaTeX~2.09 documents} +\label{Sec:209} + +\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering +\emph{\LaTeX~2.09 compatibility mode}. Nothing has changed, you run +\LaTeX{} in the same way you always did, and you will get much the +same results. + +The reason for the `almost' is that some \LaTeX~2.09 packages made use +of low-level unsupported features of \LaTeX. If you discover such a +package, you should find out if it has been updated to work with +\LaTeXe. Most packages will still work with \LaTeXe---the easiest way +to find out whether a package still works is to try it! + +\LaTeX~2.09 compatibility mode is a comprehensive emulation of +\LaTeX~2.09, but at the cost of time. Documents can run up to 50\% +slower in compatibility mode than they did under \LaTeX~2.09. +In addition, many of the new features of \LaTeXe{} are not available in +\LaTeX~2.09 compatibility mode. + +\subsection{Warning} + +\NEWdescription{1995/12/01} +This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow +you to process 2.09 documents, i.e.~documents that were written (we +hope, a long time ago) for a very old system and therefore could be +processed by using a genuine antique \LaTeX~2.09 system. + +This mode is therefore \emph{not} intended to provide access to the +enhanced features of \LaTeXe{}. Thus it must not be used to process +new documents which masquerade as 2.09 documents (i.e.~they begin with +|\documentstyle|) but which could not be processed using that genuine +antique \LaTeX~2.09 system because they contain some new, +\LaTeXe{}-only, commands or environments. + +To prevent such misuse of the system, and the consequent trouble it +causes when such misleadingly encoded documents are distributed, the +\emph{\LaTeX~2.09 compatibility mode} turns off most of these new +features and commands. Any attempt to use them will give you an error +message and, moreover, many of them simply will not work, whilst +others will produce unpredictable results. +So don't bother sending us any bug reports about such occurrences since +they are intentional. + + +\subsection{Font selection problems} +\label{Sec:fsprob} + +When using compatibility mode, it is possible that you will find +problems with font-changing commands in some old documents. These +problems are of two types: + +\begin{itemize} +\item producing error messages; +\item not producing the font changes you expected. +\end{itemize} + +In case of error messages it is possible that the document (or an old +style file used therein) contains references to old internal commands +which are no longer defined, see Section~\ref{Sec:oldinternals} for +more information if this is the case. + +\NEWdescription{1995/12/01} +One example of the unexpected is if you use one of the new style of +math-mode font changing command as follows: +\begin{verbatim} +$ \mathbf{xy} A $ +\end{verbatim} +You may well find that this behaves as if you had put: +\begin{verbatim} +$ \bf {xy} A $ +\end{verbatim} +everything including the $A$ coming out bold. + +\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation, +which resulted in documents producing different results on different +\LaTeX{} installations. \LaTeXe{} no longer allows so much +customization but, for compatibility with old documents, the local +configuration file |latex209.cfg| is loaded every time \LaTeXe{} +enters \LaTeX~2.09 compatibility mode. + +For example, if your site was customized to use the New Font +Selection Scheme (\NFSS) with the |oldlfont| option, then you can +make \LaTeXe{} emulate this by creating a |latex209.cfg| file +containing the commands: +\begin{verbatim} +\ExecuteOptions{oldlfont}\RequirePackage{oldlfont} +\end{verbatim} +Similarly, to emulate \NFSS{} with the |newlfont| option, you can +create a |latex209.cfg| file containing: +\begin{verbatim} +\ExecuteOptions{newlfont}\RequirePackage{newlfont} +\end{verbatim} + + +\subsection{Native mode} +\label{Sec:native} + +To run an old document faster, and use the new features of +\LaTeXe, you should try using \emph{\LaTeXe{} native mode}. +This is done by replacing the command: +\begin{quote} + |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class} +\end{quote} +with: +\begin{quote} + |\documentclass|\oarg{options}\arg{class} \\ + |\usepackage{latexsym,|\m{packages}|}| +\end{quote} +However, some documents which can be processed in \LaTeX~2.09 +compatibility mode may not work in native mode. Some \LaTeX~2.09 +packages will only work with \LaTeXe{} in 2.09 compatibility mode. +Some documents will cause errors because of \LaTeXe's improved error +detection abilities. + +But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native +mode with the above change. Again, the easiest way to find out +whether your documents can be processed in native mode is to try it! + + +\section{Local modifications} +\label{sec:loc} + +\NEWdescription{1995/12/01} +There are two common types of local modifications that can be done +very simply. Do not forget that documents produced using such +modifications will not be usable at other places (such documents are +called `non-portable'). + +One type of modification is the use of personal commands for commonly +used symbols or constructions. These should be put into a package +file (for example, one called \texttt{mymacros.sty}) and loaded by +putting |\usepackage{mymacros}| in the document preamble. + +Another type is a local document class that is very similar to one of +the standard classes but contains some straightforward modifications +such as extra environments, different values for some parameters, etc. +These should be put into a class file; here we shall describe a simple +method of constructing such a file using, as an example, a class +called \textsf{larticle} that is very similar to the \textsf{article} +class. + +\NEWfeature{1995/12/01} +The class file called \texttt{larticle.cls} should (after the +preliminary identification commands) start as follows: +\begin{verbatim} + \LoadClassWithOptions{article} +\end{verbatim} +This command should be followed by whatever additions and changes you +wish to make to the results of reading in the file +\texttt{article.sty}. + +The effect of using the above |\LoadClassWithOptions| command is to +load the standard class file \textsf{article} with whatever options +are asked for by the document. Thus a document using your +\textsf{larticle} class can specify any option that could be specified +when using the standard \textsf{article} class; for example: +\begin{verbatim} + \documentclass[a4paper,twocolumn,dvips]{larticle} +\end{verbatim} + + +\section{Problems} +\label{Sec:problems} + +This section describes some of the things which may go wrong when +using \LaTeXe, and what you can do about it. + +\subsection{New error messages} + +\LaTeXe{} has a number of new error messages. +Please also note that many error messages now produce further helpful +information if you press |h| in response to the error prompt. + +\begin{decl} +|Option clash for package |\m{package}|.| +\end{decl} +The named package has been loaded twice with different options. If +you enter |h| you will be told what the options were, for example, if +your document contained: +\begin{verbatim} + \usepackage[foo]{fred} + \usepackage[baz]{fred} +\end{verbatim} +then you will get the error message: +\begin{verbatim} + Option clash for package fred. +\end{verbatim} +and typing |h| at the |?| prompt will give you: +\begin{verbatim} + The package fred has already been loaded with options: + [foo] + There has now been an attempt to load it with options: + [baz] + Adding the line: + \usepackage[foo,baz]{fred} + to your document may fix this. + Try typing <> to proceed. +\end{verbatim} +The cure is, as suggested, to load the package with both sets of +options. Note that since \LaTeX{} packages can call other packages, +it is possible to get a package option clash without explicitly +requesting the same package twice. + +\begin{decl} + |Command |\m{command}| not provided in base NFSS.| +\end{decl} +The \m{command} is not provided by default in \LaTeXe. This error is +generated by using one of the commands: +\begin{verbatim} + \mho \Join \Box \Diamond \leadsto + \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd +\end{verbatim} +which are now part of the \textsf{latexsym} package. +The cure is to add: +\begin{verbatim} + \usepackage{latexsym} +\end{verbatim} +in the preamble of your document. + +\begin{decl} + |LaTeX2e command in LaTeX 2.09 document.| +\end{decl} +The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09 +document. The cure is to replace the command by a \LaTeX~2.09 +command, or to run document in native mode, as described in +Section~\ref{Sec:native}. + +\begin{decl} + |NFSS release 1 command \newmathalphabet found.| +\end{decl} +The command |\newmathalphabet| was used by the New Font Selection +Scheme Release 1 but it has now been replaced by +|\DeclareMathAlphabet|, the use of which is described in +\emph{\fntguide}. + +The best cure is to update the package which contained the +|\newmathalphabet| command. Find out if there is a new release of +the package, or (if you wrote the package yourself) consult +\emph{\fntguide} for the new syntax of font commands. + +If there is no updated version of the package then you can cure this +error by using the \textsf{newlfont} or \textsf{oldlfont} package, +which tells \LaTeX{} which version of |\newmathalphabet| should be +emulated. + +You should use \textsf{oldlfont} if the document selects math fonts with +syntax such as this: +\begin{quote} + |{\cal A}|, etc. +\end{quote} +Use \textsf{newlfont} if the document's syntax is like this: +\begin{quote} + |\cal{A}|, etc. +\end{quote} + + +\begin{decl} + |Text for \verb command ended by end of line.| +\end{decl} +The |\verb| command has been begun but not ended on that line. This +usually means that you have forgotten to put in the end-character of +the |\verb| command. + +\begin{decl} + |Illegal use of \verb command.| +\end{decl} +The |\verb| command has been used inside the argument of another +command. This has never been allowed in \LaTeX{}---often producing +incorrect output without any warning---and so \LaTeXe{} produces +an error message. + +\subsection{Old internal commands} +\label{Sec:oldinternals} + +A number of \LaTeX~2.09 internal commands have been removed, since +their functionality is now provided in a different way. See +\emph{\clsguide} for more details of the new, supported interface for +class and package writers. + +\begin{decl} + |\tenrm| |\elvrm| |\twlrm| \dots\\ + |\tenbf| |\elvbf| |\twlbf| \dots\\ + |\tensf| |\elvsf| |\twlsf| \dots\\ + $\vdots$ +\end{decl} +These commands provided access to the seventy fonts preloaded by +\LaTeX~2.09. In contrast, \LaTeXe{} normally preloads at most +fourteen fonts, which saves a lot of font memory; but a consequence is +that any \LaTeX{} file which used the above commands to directly +access fonts will no longer work. + +Their use will usually produce an error message such as: +\begin{verbatim} + ! Undefined control sequence. + l.5 \tenrm +\end{verbatim} +The cure for this is to update the document to use the new +font-changing commands provided by \LaTeXe; these are described in +\emph{\fntguide}. + +If this is not possible then, as a last resort, you can +use the \textsf{rawfonts} package, which loads the +seventy \LaTeX~2.09 fonts and provides direct access to them using the +old commands. This takes both time and memory. If you do not +wish to load all seventy fonts, you can select some of them by using the +|only| option to \textsf{rawfonts}. For example, to load only |tenrm| +and |tenbf| you write: +\begin{verbatim} + \usepackage[only,tenrm,tenbf]{rawfonts} +\end{verbatim} + +The \textsf{rawfonts} package is distributed as part of the \LaTeX{} +tools software, see Section~\ref{Sec:st-pack}. + +\subsection{Old files} + +One of the more common mistakes in running \LaTeX{} is to read in old +versions of packages instead of the new versions. If you get an +incomprehensible error message from a standard package, make sure you +are loading the most recent version of the package. You can find out +which version of the package has been loaded by looking in the log +file for a line like: +\begin{verbatim} + Package: fred 1994/06/01 v0.01 Fred's package. +\end{verbatim} +You can use the \m{release-date} options to |\documentclass| and +|\usepackage| to make sure that you are getting a suitably recent copy +of the document class or package. This is useful when sending a +document to another site, which may have out-of-date software. + +\subsection{Where to go for more help} + +If you can't find the answer for your problem here, try looking in +\emph{\LaTeXbook} or \emph{\LaTeXcomp}. If you have a problem with +installing \LaTeX, look in the installation guide files which come with +the distribution. + +If this doesn't help, contact your local \LaTeX{} guru or local +\LaTeX{} mailing list. + +If you think you've discovered a bug then please report it! First, +you should find out if the problem is with a third-party package or +class. If the problem is caused by a package or class other than +those listed in Section~\ref{Sec:class+packages} then please report +the problem to the author of the package or class, not to the \LaTeX3 +project team. + +If the bug really is with core \LaTeX{} then you should create a +\emph{short}, \emph{self-contained} document which exhibits the +problem. You should run a \emph{recent} (less than a year old) +version of \LaTeX{} on the file and then run \LaTeX{} on +|latexbug.tex|. This will create an error report which you should +send, together with the sample document and log file, to the +\LaTeX{} bugs address which can be found in the file +|latexbug.tex| or |bugs.txt|. + + +\section{Enjoy!} +\label{Sec:enjoy} + +We certainly hope you will enjoy using the new standard \LaTeX{} but, +if this is not possible, we hope that you will enjoy success and +fulfillment as a result of the documents which it will help you to +create. + +If you find that the contribution of \LaTeX{} to your life is such +that you would like to support the work of the project team, then +please read Section~\ref{Sec:ltx3} and discover practical ways to do +this. + +\begin{thebibliography}{1} + +\bibitem{A-W:GRM97} +Michel Goossens, Sebastian Rahtz and Frank Mittelbach. +\newblock {\em The {\LaTeX} Graphics Companion}. +\newblock Addison-Wesley, Reading, Massachusetts, 1997. + + +\bibitem{A-W:GR99} +Michel Goossens and Sebastian Rahtz. +\newblock {\em The {\LaTeX} Web Companion}. +\newblock Addison-Wesley, Reading, Massachusetts, 1999. + + +\bibitem{A-W:DEK91} +Donald~E. Knuth. +\newblock {\em The \TeX book}. +\newblock Addison-Wesley, Reading, Massachusetts, 1986. +\newblock Revised to cover \TeX3, 1991. + + +\bibitem{A-W:LLa94} +Leslie Lamport. +\newblock {\em {\LaTeX:} A Document Preparation System}. +\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994. + +\bibitem{A-W:MG2004} +Frank Mittelbach and Michel Goossens. +\newblock {\em The {\LaTeX} Companion second edition}. +\newblock With Johannes Braams, David Carlisle, and Chris Rowley. +\newblock Addison-Wesley, Reading, Massachusetts, 2004. + + +\end{thebibliography} + +\end{document} diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf index f2a32eb6ea..2f2069018a 100644 Binary files a/macros/latex-dev/base/usrguide.pdf and b/macros/latex-dev/base/usrguide.pdf differ diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex index dfdf9443e6..8069403665 100644 --- a/macros/latex-dev/base/usrguide.tex +++ b/macros/latex-dev/base/usrguide.tex @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 1993-2022 +% Copyright (C) 2020-2022 % The LaTeX Project and any individual authors listed elsewhere % in this file. % @@ -28,18 +28,44 @@ % \fi % Filename: usrguide.tex -\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\documentclass{ltxguide} -\documentclass{ltxguide}[2001/05/28] +\usepackage[T1]{fontenc} % needed for \textbackslash in tt +\usepackage{csquotes} -\title{\LaTeXe~for authors} +\title{\LaTeX\ for authors --- current version} +\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\ + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{usrguide3.tex} for full details.}% +} -\author{\copyright~Copyright 1995--2020, \LaTeX\ Project Team.\\ - All rights reserved.} +\date{2022-07-05} -\date{25 May 2020} +\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}} +\NewDocumentCommand\marg{m}{\arg{#1}} +\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}} +\NewDocumentCommand\pkg{m}{\textsf{#1}} +\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi} +% Fix a 'feature' +\makeatletter +\renewcommand \verbatim@font {\normalfont \ttfamily} +\makeatother +% for fpeval documentation + +\providecommand\fpop[1]{\mathop{\texttt{#1}}} +\providecommand\fpbin[1]{\mathbin{\texttt{#1}}} +\providecommand\fprel[1]{\mathrel{\texttt{#1}}} +\providecommand\nan{\texttt{NaN}} + +\ExplSyntaxOn +\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } +\ExplSyntaxOff + \begin{document} \maketitle @@ -48,1780 +74,1126 @@ \section{Introduction} -Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document -Preparation System. - -This document describes how to take advantage of the new features of -\LaTeX, and how to process your old \LaTeX{} documents with -\LaTeXe. However, this document is only a brief introduction to the -new facilities and is intended for authors who are already familiar -with the old version of \LaTeX{}. It is \emph{not} a reference manual -for \LaTeXe{} nor is it a complete introduction to \LaTeX. - -It is somewhat of an historical document now, since \LaTeXe{} came into -existence in 1994. - -\subsection[\LaTeXe---The new \LaTeX~release] - {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)} - -The previous version of \LaTeX{} was known as \LaTeX~2.09. Over the -years many extensions have been developed for \LaTeX. This is, of -course, a sure sign of its continuing popularity but it has had one -unfortunate result: incompatible \LaTeX{} formats came into use at -different sites. This included `standard \LaTeX~2.09', \LaTeX{} built -with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX, -and so on. Thus, to process documents from various places, a site -maintainer was forced to keep multiple versions of the \LaTeX{} -program. In addition, when looking at a source file it was not always -clear for which format the document was written. - -To put an end to this unsatisfactory situation, \LaTeXe{} has been -produced; it brings all such extensions back under a single format and -thus prevents the proliferation of mutually incompatible dialects of -\LaTeX~2.09. With \LaTeXe{} the `new font selection scheme' is -standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{} -format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply -extensions, which may be loaded by documents using the same base format. - -The introduction of a new release also made it possible to add a small -number of often-requested features and to make the task of writing -packages and classes simpler. - -\subsection{\LaTeX3---The long-term future of \LaTeX} -\label{Sec:ltx3} - -\LaTeXe{} is the consolidation step in a comprehensive -reimplementation of the \LaTeX{} system. The next major release of -\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the -document designers' and package writers' interface to \LaTeX. - -\LaTeX3 is a long-term research project but, until it is completed, -the project team are committed to the active maintenance of \LaTeXe{}. -Thus the experience gained from the production and maintenance of -\LaTeXe{} will be a major influence on the design of \LaTeX3. -A brief description of the project can be found in the document -|ltx3info.tex|. - -If you would like to support the project then you are welcome to send -donations to the \LaTeX\ Project Fund; this has been set up to help -the research team by financing various expenses associated with this -voluntary work of maintaining the current \LaTeX{} and developing -\LaTeX\ further. - -The fund is administered by The \TeX{} Users Group and by various -local user groups. Information about making donations and joining -these groups is available from: -\begin{quote}\small\label{addrs} - \texttt{http://www.tug.org/lugs.html} -\end{quote} +\LaTeXe{} was released in 1994 and added a number of then-new concepts to +\LaTeX{}. These are described in \texttt{usrguide-old}, which has largely remained +unchanged. Since then, the \LaTeX{} team have worked on a number of ideas, +firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of +tools for document authors which build on that language. Here, we describe +\emph{stable} and \emph{widely-usable} concepts that have resulted from that +work. These `new' ideas have been transferred from development packages +into the \LaTeXe{} kernel. As such, they are now available to \emph{all} +\LaTeX{} users and have the \emph{same stability} as any other part of the +kernel. The fact that `behind the scenes' they are built on \pkg{expl3} +is useful for the development team, but is not directly important to users. -The \LaTeX3{} project has its home page -on the World Wide Web at: -\begin{verbatim} - http://www.latex-project.org/ -\end{verbatim} -This page describes \LaTeX{} and the \LaTeX3 project, and contains -pointers to other \LaTeX{} resources, such as the user guides, the -\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database. - -Older articles covering aspects of the \LaTeX3 project are also -available for anonymous ftp from the Comprehensive \TeX{} Archive, in -the directory: -\begin{verbatim} - ctan:info/ltx3pub -\end{verbatim} -The file |ltx3pub.bib| in that directory contains an abstract of each -of the files. +\section{Creating document commands and environments} \subsection{Overview} -This document contains an overview of the new structure and features -of \LaTeX. It is \emph{not} a self-contained document, as it contains -only the features of \LaTeX{} which have changed since version 2.09. -You should read this document in conjunction with an introduction to -\LaTeX{}. - -\begin{description} - -\item[Section~\ref{Sec:class+packages}] - contains an overview of the new structure of - \LaTeX{} documents. It describes how classes and packages work and - how class and package options can be used. It lists the standard - packages and classes which come with \LaTeX. - -\item[Section~\ref{Sec:commands}] describes the new commands available - to authors in \LaTeXe. - -\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{} - documents with \LaTeXe. - -\item[Section~\ref{Sec:problems}] contains advice on dealing with - problems you may encounter in running \LaTeXe. - It lists some error messages which are new in \LaTeXe{} and - it describes some of the more common problems and how to cure them, - or where to find further information. - -\end{description} - -\subsection{Further information} - -For a general introduction to \LaTeX, including the new features of -\LaTeXe, you should read \emph{\LaTeXbook} -by Leslie Lamport~\cite{A-W:LLa94}. - -A more detailed description of the new features of \LaTeX, including an -overview of more than 200 packages and nearly 1000 ready to run examples, is -to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and -Michel Goossens~\cite{A-W:MG2004}. - -Packages and programs for producing and manipulating graphics are -discussed at length in \emph{\LaTeXGcomp} by Michel Goossens, -Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}. - -Solutions for publishing with \LaTeX{} on the World Wide Web are given -in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian -Rahtz~\cite{A-W:GR99}. - -For more information about the many new \LaTeX{} packages you should -read the package documentation, which should be available from the -same source as your copy of \LaTeX. +Creating document commands and environments using the \LaTeX3 toolset is based +around the idea that a common set of descriptions can be used to cover almost +all argument types used in real documents. Thus parsing is reduced to a simple +description of which arguments a command takes: this description provides the +`glue' between the document syntax and the implementation of the +command. + +First, we will describe the argument types, then move on to explain how these +can be used to create both document commands and environments. Various more +specialized features are then described, which allow an even richer application +of a simple interface set up. + +The details here are intended to help users create document commands in +general. More technical detail, suitable for \TeX{} programmers, is included +in \texttt{interface3}. + +\subsection{Describing argument types} + +In order to allow each argument to be defined independently, the parser does +not simply need to know the number of arguments for a function, but also the +nature of each one. This is done by constructing an \emph{argument +specification}, which defines the number of arguments, the type of each +argument and any additional information needed for the parser to read the user +input and properly pass it through to internal functions. + +The basic form of the argument specifier is a list of letters, where each +letter defines a type of argument. As will be described below, some of the +types need additional information, such as default values. The argument types +can be divided into two, those which define arguments that are mandatory +(potentially raising an error if not found) and those which define optional +arguments. The mandatory types +\begin{itemize} + \item[\texttt{m}] A standard mandatory argument, which can either be a single token + alone or multiple tokens surrounded by curly braces |{}|. Regardless of the + input, the argument will be passed to the internal code without the outer + braces. This is the type specifier for a normal \TeX{} argument. + \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a + `required' delimited argument, where the delimiters are + \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is + missing, the default marker |-NoValue-| will be inserted after a suitable + error. + \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default}, + this is a `required' delimited argument as for~\texttt{r}, + but it has a user-definable recovery \meta{default} instead of + |-NoValue-|. + \item[\texttt{v}] Reads an argument `verbatim', between the following + character and its next occurrence, in a way similar to the argument + of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument + is read between two identical characters, which cannot be any of |%|, |\|, + |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed + between braces, |{| and |}|. A command with a verbatim argument will + produce an error when it appears within an argument of another function. + \item[\texttt{b}] Only suitable in the argument specification of an + environment, it denotes the body of the environment, between + |\begin|\marg{environment} and |\end|\marg{environment}. See + Section~\ref{sec:cmd:body} for details. +\end{itemize} +The types which define optional arguments are: +\begin{itemize} + \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square + brackets, which will supply the special |-NoValue-| marker if not given + (as described later). + \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional + argument which is delimited by \meta{token1} and \meta{token2}. As with + \texttt{o}, if no value is given the special marker |-NoValue-| is + returned. + \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns + \meta{default} if no value is given. + \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is + as for \texttt{d}, but returns \meta{default} if no value is given. + Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are + short-cuts to an appropriated-constructed \texttt{D} type argument. + \item[\texttt{s}] An optional star, which will result in a value + \cs{BooleanTrue} if a star is present and \cs{BooleanFalse} + otherwise (as described later). + \item[\texttt{t}] An optional \meta{token}, which will result in a value + \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse} + otherwise. Given as \texttt{t}\meta{token}. + \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional + \emph{embellishments}, each of which requires a \emph{value}. + If an embellishment is not present, |-NoValue-| is returned. Each + embellishment gives one argument, ordered as for the list of + \meta{tokens} in the argument specification. All \meta{tokens} + must be distinct. + \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults} + if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See + Section~\ref{sec:cmd:embellishment} for more details. +\end{itemize} -There are a number of documentation files which accompany every copy -of \LaTeX. A copy of \emph{\LaTeX{} News} will come out with each -six-monthly release of \LaTeX; it will be found in the files -|ltnews*.tex|. The class- and package-writer's guide \emph{\clsguide} -describes the new \LaTeX{} features for writers of document classes -and packages; it is in |clsguide.tex|. The guide \emph{\fntguide} -describes the \LaTeX{} font selection scheme for class- and -package-writers; it is in |fntguide.tex|. Support for Cyrillic languages -in \LaTeX{} is described in \emph{\cyrguide}. +\subsection{Modifying argument descriptions} -The documented source code (from the files used to produce the kernel -format via |latex.ltx|) is now available as -\emph{The \LaTeXe\ Sources}. ] -This very large document also includes an index of -\LaTeX{} commands. It can be typeset from the \LaTeX{} file -|source2e.tex| in the |base| directory, using the source files and -the class file |ltxdoc.cls| from this directory. +In addition to the argument \emph{types} discussed above, the argument +description also gives special meaning to three other characters. -For more information about \TeX{} and \LaTeX{}, please contact your -local \TeX{} Users Group, or the international \TeX{} Users Group (see -page \pageref{addrs}). +First, \texttt{+} is used to make an argument long (to accept paragraph +tokens). In contrast to \cs{newcommand}, this applies on an +argument-by-argument basis. So modifying the example to `|s o o +m O{default}|' +means that the mandatory argument is now \cs{long}, whereas the optional +arguments are not. +Secondly, \texttt{!} is used to control whether spaces are allowed before +optional arguments. There are some subtleties to this, as \TeX{} itself +has some restrictions on where spaces can be `detected': more detail +is given in Section~\ref{sec:cmd:opt-space}. -\section{Classes and packages} -\label{Sec:class+packages} +Thirdly, \texttt{=} is used to declare that the following argument should +be interpreted as a series of keyvals. See Section~\ref{sec:cmd:keyval} +for more details. -This section describes the new structure of \LaTeX{} documents and the -new types of file: \emph{classes} and \emph{packages}. +Finally, the character \texttt{>} is used to declare so-called +`argument processors', which can be used to modify the contents of an +argument before it is passed to the macro definition. The use of argument +processors is a somewhat advanced topic, (or at least a less commonly used +feature) and is covered in Section~\ref{sec:cmd:processors}. -\subsection{What are classes and packages?} +\subsection{Creating document commands and environments} -The main difference between \LaTeX~2.09 and \LaTeXe{} is in the -commands before |\begin{document}|. +\begin{decl} + |\NewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\RenewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} +\end{decl} +This family of commands are used to create a \meta{cmd}. The argument +specification for the function is given by \meta{arg spec}, and the command +uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found +by the parser. -In \LaTeX~2.09, documents had \emph{styles}, -such as \textsf{article} or \textsf{book}, and \emph{options}, -such as \textsf{twoside} or \textsf{epsfig}. -These were indicated by the |\documentstyle| command: -\begin{quote} - |\documentstyle|\oarg{options}\arg{style} -\end{quote} -For example, to specify a two-sided article with encapsulated -PostScript figures, you said: +An example: \begin{verbatim} - \documentstyle[twoside,epsfig]{article} +\NewDocumentCommand\chapter{s o m} + {% + \IfBooleanTF{#1}% + {\typesetstarchapter{#3}}% + {\typesetnormalchapter{#2}{#3}}% + } \end{verbatim} -However, there were two different types of document style option: -\emph{built-in options} such as |twoside|; and \emph{packages} such as -|epsfig.sty|. These were very different, since any \LaTeX{} document -style could use the \textsf{epsfig} package but only document styles -which declared the \textsf{twoside} option could use that option. - -To avoid this confusion, \LaTeXe{} differentiates between built-in -options and packages. These are given by the new |\documentclass| and -|\usepackage| commands: -\begin{quote} - |\documentclass|\oarg{options}\arg{class} \\ - |\usepackage|\oarg{options}\arg{packages} -\end{quote} -For example, to specify a two-sided article with encapsulated -PostScript figures, you now write: +would be a way to define a \cs{chapter} command which would essentially behave +like the current \LaTeXe{} command (except that it would accept an optional +argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter} +could test its first argument for being |-NoValue-| to see if an optional +argument was present. (See Section~\ref{sec:cmd:special} for details of +\cs{IfBooleanTF} and testing for |-NoValue-|.) + +The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...} +and \cs{Declare...} versions is the behavior if \meta{cmd} is already +defined. +\begin{itemize} + \item \cs{NewDocumentCommand} will issue an error if \meta{cmd} + has already been defined. + \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd} + has not previously been defined. + \item \cs{ProvideDocumentCommand} creates a new definition for + \meta{function} only if one has not already been given. + \item \cs{DeclareDocumentCommand} will always create the new + definition, irrespective of any existing \meta{cmd} with the + same name. This should be used sparingly. +\end{itemize} + +If the \meta{cmd} can't be provided as a single token but needs +\enquote{constructing}, you can use \cs{ExpandArgs} as explained in +Section~\ref{sec:preconstructing-csnames} which also gives an example +in which this is needed. + +\begin{decl} + |\NewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\RenewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} +\end{decl} +These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but +create environments (\cs{begin}\arg{env} \ldots{} +\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code} +may access the arguments as defined by \meta{arg spec}. The arguments will be +given following \cs{begin}\arg{env}. + +\subsection{Optional arguments} +\label{sec:cmd:opt} + +In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional +arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for +example, following \begin{verbatim} - \documentclass[twoside]{article} - \usepackage{epsfig} +\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'} +\NewDocumentCommand\baz{o}{#1-#1} \end{verbatim} -You can load more than one package with a single |\usepackage| -command; for example, rather than writing: +using the command as \begin{verbatim} - \usepackage{epsfig} - \usepackage{multicol} +\foo[\baz[stuff]]{more stuff} \end{verbatim} -you can specify: +will print +\begin{quote} +I grabbed `stuff-stuff' and `more stuff' +\end{quote} +This is particularly useful when placing a command with an optional argument +\emph{inside} the optional argument of a second command. + +When an optional argument is followed by a mandatory argument with the same +delimiter, the parser issues a warning because the optional argument could not +be omitted by the user, thus becoming in effect mandatory. This can apply to +\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t}, +\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or +\texttt{R}-type required arguments. + +The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be +the result of grabbing another argument. Thus for example \begin{verbatim} - \usepackage{epsfig,multicol} +\NewDocumentCommand\foo{O{#2} m} \end{verbatim} -Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle| -command. This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09 -compatibility mode}, which is described in Section~\ref{Sec:209}. +would use the mandatory argument as the default for the leading optional +one. -You should not, however, use the |\documentstyle| command for new -documents because this compatibility mode is very slow and the new -features of \LaTeXe{} are not available in this mode. - -To help differentiate between classes and packages, document classes -now end with |.cls| rather than |.sty|. Packages still end with -|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe. - -\subsection{Class and package options} - -In \LaTeX~2.09, only document styles could have options such as -|twoside| or |draft|. In \LaTeXe{}, both classes and packages are -allowed to have options. For example, to specify a two-sided article -with graphics using the |dvips| driver, you write: +\subsection{Spacing and optional arguments} +\label{sec:cmd:opt-space} +\TeX{} will find the first argument after a function name irrespective of any +intervening spaces. This is true for both mandatory and optional arguments. So +|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when +collecting arguments up to the last mandatory argument to be collected (as it +must exist). So after \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics} +\NewDocumentCommand\foo{m o m}{ ... } \end{verbatim} -It is possible for packages to share common options. For example, -you could, in addition, load the \textsf{color} package by specifying: +the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}| +will both be parsed in the same way. + +The behavior of optional arguments \emph{after} any mandatory arguments is +selectable. The standard settings will allow spaces here, and thus with \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics} - \usepackage[dvips]{color} +\NewDocumentCommand\foobar{m o}{ ... } \end{verbatim} -But because |\usepackage| allows more than one package to be listed, -this can be shortened to: +both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an +optional argument. This can be changed by giving the modified |!| in the +argument specification: \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics,color} +\NewDocumentCommand\foobar{m !o}{ ... } \end{verbatim} -In addition, packages will also use each option given to -the |\documentclass| command (if they know what to do with it), so you -could also write: +where \verb*|\foobar{arg1} [arg2]| will not find an optional argument. + +There is one subtlety here due to the difference in handling by \TeX{} of +`control symbols', where the command name is made up of a single +character, such as `\texttt{\textbackslash\textbackslash}'. +Spaces are not ignored by \TeX{} here, +and thus it is possible to require an optional argument directly follow such a +command. The most common example is the use of \texttt{\textbackslash\textbackslash} +in \pkg{amsmath} environments, which in the terms here would be defined as \begin{verbatim} - \documentclass[twoside,dvips]{article} - \usepackage{graphics,color} +\NewDocumentCommand\\{!s !o}{ ... } \end{verbatim} -Class and package options are covered in more detail in -\emph{\LaTeXcomp} and in \emph{\clsguide}. - -\subsection{Standard classes} - -The following classes are distributed with \LaTeX: -\begin{description} - -\item[article] The |article| class described in \emph{\LaTeXbook}. -\item[book] The |book| class described in \emph{\LaTeXbook}. -\item[report] The |report| class described in \emph{\LaTeXbook}. -\item[letter] The |letter| class described in \emph{\LaTeXbook}. -\item[slides] The |slides| class described in \emph{\LaTeXbook}, - formerly \SLiTeX. -\item[proc] A document class for proceedings, based on |article|. - Formerly the |proc| package. -\item[ltxdoc] The document class for documenting the \LaTeX{} - program, based on |article|. -\item[ltxguide] The document class for \emph{\usrguide} and - \emph{\clsguide}, based on |article|. The document you are reading - now uses the |ltxguide| class. The layout for this class is likely - to change in future releases of \LaTeX. -\item[ltnews] The document class for the \emph{\LaTeX{} News} - information sheet, based on |article|. The layout for this class - is likely to change in future releases of \LaTeX. -\item[minimal] -\NEWfeature{1995/12/01} - This class is the bare minimum (3 lines) that is needed in a - \LaTeX\ class file. It just sets the text width and height, and - defines |\normalsize|. It is principally intended for debugging - and testing \LaTeX\ code in situations where you do not need to - load a `full' class such as |article|. If, however, you are - designing a completely new class that is aimed for documents with - structure radically different from the structure supplied by the - article class, then it may make sense to use this as a base and add - to it code implementing the required structure, rather than - starting from |article| and modifying the code there. -\end{description} - -\subsection{Standard packages} -\label{Sec:st-pack} - -The following packages are distributed with \LaTeX: -\begin{description} -\item[alltt] -\NEWfeature{1994/12/01} - This package provides the |alltt| environment, which is like - the |verbatim| environment except that |\|, |{|, and |}| - have their usual meanings. It is described in |alltt.dtx| and - \emph{\LaTeXbook}. -\item[doc] This is the basic package for typesetting the documentation - of \LaTeX{} programs. It is described in |doc.dtx| and in - \emph{\LaTeXcomp}. -\item[exscale] This provides scaled versions of the math extension - font. It is described in |exscale.dtx| and \emph{\LaTeXcomp}. - \item[fontenc] This is used to specify which font encoding \LaTeX{} - should use. It is described in |ltoutenc.dtx|. -\item[graphpap] -\NEWfeature{1994/12/01} - This package defines the |\graphpaper| command; this - can be used in a |picture| environment. -\item[ifthen] Provides commands of the form `if\dots then do\dots - otherwise do\dots'. - It is described in |ifthen.dtx| and \emph{\LaTeXcomp}. -\item[inputenc] -\NEWfeature{1994/12/01} - This is used to specify which input encoding \LaTeX{} should use. - It is described in |inputenc.dtx|. -\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by - default. To access it, you should use the |latexsym| package. It - is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also - Section~\ref{Sec:problems}. - \item[makeidx] This provides commands for producing indexes. It is - described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}. - \item[newlfont] This is used to emulate the font commands of - \LaTeX~2.09 with the New Font Selection Scheme. It is described in - \emph{\LaTeXcomp}. - \item[oldlfont] This is used to emulate the font commands of - \LaTeX~2.09. It is described in \emph{\LaTeXcomp}. - \item[showidx] - This causes the argument of each |\index| command to - be printed on the page where it occurs. - It is described in \emph{\LaTeXbook}. - \item[syntonly] This is used to process a document without - typesetting it. It is described in |syntonly.dtx| and in - \emph{\LaTeXcomp}. - \item[tracefnt] This allows you to control how much information about - \LaTeX's font loading is displayed. It is described in - \emph{\LaTeXcomp}. -\end{description} - -\subsection{Related software} - -\NEWdescription{1998/12/01} -The following software should be available from the same distributor -as your copy of \LaTeXe. You should obtain at least the -\textsf{graphics} and \textsf{tools} collections in order to have all -the files described in \emph{\LaTeXbook}. The |amsmath| package (part -of \textsf{amslatex} and formerly known as |amstex|) -and \textsf{babel} are also mentioned in the list -of `standard packages' in section C.5.2 of that book. -\begin{description} -\item[amslatex] Advanced mathematical typesetting from the American - Mathematical Society. This includes the |amsmath| package; it - provides many commands for typesetting mathematical formulas of - higher complexity. It is produced and supported by the American - Mathematical Society and it is described in \emph{\LaTeXcomp}. -\item[babel] This package and related files support typesetting in - many languages. It is described in \emph{\LaTeXcomp}. -\item[cyrillic] -\NEWfeature{1998/12/01} - Everything you need (except the fonts themselves) for - typesetting with Cyrillic fonts. -\item[graphics] This includes the |graphics| package which - provides support for the inclusion and transformation of graphics, - including files produced by other software. Also included, is the - |color| package which provides support for typesetting in colour. - Both these packages are described in \emph{\LaTeXbook}. -\item[psnfss] Everything you need (except the fonts themselves) for - typesetting with a large range of Type~1 (PostScript) fonts. -\item[tools] Miscellaneous packages written by the \LaTeX3 - project team. -\end{description} -These packages come with documentation and each of them is also -described in at least one of the books \emph{\LaTeXcomp} and -\emph{\LaTeXbook}. - -\subsubsection{Tools} - -This collection of packages includes, at least, the following (some -files may have slightly different names on certain systems): - -\begin{description} -\item[array] - Extended versions of the environments |array|, |tabular| - and |tabular*|, with many extra features. -\item[calc] -\NEWfeature{1996/12/01} - Enables the use of certain algebraic notation when specifying - values for lengths and counters. -\item[dcolumn] - Alignment on `decimal points' in tabular entries. Requires the - |array| package. -\item[delarray] - Adds `large delimiters' around arrays. Requires |array|. -\item[hhline] - Finer control over horizontal rules in tables. Requires |array|. -\item[longtable] - Multi-page tables. (Does not require |array|, but it uses the - extended features if both are loaded.) -\item[tabularx] - Defines a |tabularx| environment that is similar to |tabular*| - but it modifies the column widths, rather than the inter-column - space, to achieve the desired table width. -\item[afterpage] - Place text after the current page. -\item[bm] - Access bold math symbols. -\item[enumerate] - Extended version of the |enumerate| environment. -\item[fontsmpl] - Package and test file for producing `font samples'. -\item[ftnright] - Place all footnotes in the right-hand column in two-column mode. -\item[indentfirst] - Indent the first paragraph of sections, etc. -\item[layout] - Show the page layout defined by the current document class. -\item[multicol] - Typeset text in columns, with the length of the columns - `balanced'. -\item[rawfonts] - Preload fonts using the old internal font names of \LaTeX~2.09. - See Section~\ref{Sec:oldinternals}. -\item[somedefs] - Selective handling of package options. (Used by the rawfonts - package.) -\item[showkeys] - Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful - whilst drafting. -\item[theorem] - Flexible declaration of `theorem-like' environments. -\item[varioref] - `Smart' handling of page references. -\item[verbatim] - Flexible extension of the verbatim environment. -\item[xr] - Cross reference other `external' documents. -\item[xspace] - `Smart space' command that helps you to avoid the common mistake - of missing spaces after command names. -\end{description} - - -\section{Commands} -\label{Sec:commands} - -This section describes the new commands available in \LaTeXe. -They are covered in more detail in \emph{\LaTeXbook} and in -\emph{\LaTeXcomp}. - -\subsection{Preamble commands} -\label{Sec:pre} - -The changes to the preamble commands are intentionally designed to make -\LaTeXe{} documents look clearly different from old documents. The -commands should be used only before |\begin{document}|. -\begin{decl} -|\documentclass| \oarg{option-list} \arg{class-name} - \oarg{release-date} -\end{decl} - -This command replaces the -\LaTeX~2.09 command |\documentstyle|. - -There must be exactly one |\documentclass| command in a document; and -it should normally come before any other command. (There are some -exceptions, e.g., you can have |filecontents| environments before it -or |\RequirePackage| but these should be only used in special -scenarios as discussed elsewhere.) +\subsection{`Embellishments'} +\label{sec:cmd:embellishment} -The \m{option-list} is a list of options, each of which may modify the -formatting of elements which are defined in the \m{class-name} file, -as well as those in all following |\usepackage| commands (see -below). - -The optional argument \m{release-date} can be used to specify the -earliest desired release date of the class file; it should contain a -date in the format \textsc{yyyy/mm/dd}. If a version of the class -older than this date is found, a warning is issued. - -For example, to specify a two-column article, using a version of -|article.cls| released after June 1994, you specify: +The \texttt{E}-type argument allows one default value per test token. This is +achieved by giving a list of defaults for each entry in the list, for example: \begin{verbatim} - \documentclass[twocolumn]{article}[1994/06/01] +E{^_}{{UP}{DOWN}} \end{verbatim} +If the list of default values is \emph{shorter} than the list of test tokens, +the special |-NoValue-| marker will be returned (as for the \texttt{e}-type +argument). Thus for example +\begin{verbatim} +E{^_}{{UP}} +\end{verbatim} +has default \texttt{UP} for the |^| test character, but will return the +|-NoValue-| marker as a default for |_|. This allows mixing of explicit +defaults with testing for missing values. -\begin{decl} -|\documentstyle| \oarg{option-list} \arg{class-name} -\end{decl} - -This command is still supported for compatibility with old files. It -is essentially the same as |\documentclass| except that it invokes -\emph{\LaTeX~2.09 compatibility mode}. It also causes any options in -the \m{option-list} that are not processed by the class file to be -loaded as packages after the class has been loaded. See -Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility -mode. - -\begin{decl} -|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date} -\end{decl} -Any number of |\usepackage| commands is allowed. Each package file -(as denoted by \m{package-name}) defines new elements (or modifies -those defined in the class file loaded by the \m{class-name} argument -of the |\documentclass| command). A package file thus extends the -range of documents which can be processed. +\subsection{Testing special values} +\label{sec:cmd:special} -The \m{option-list} argument can contain a list of options, each of -which can modify the formatting of elements which are defined in this -\m{package-name} file. +Optional arguments make use of dedicated variables to return information about +the nature of the argument received. -As above, \m{release-date} can contain the earliest desired release -date of the package file in the format \textsc{yyyy/mm/dd}; if an -older version of the package is found, a warning is issued. -For example, to load the |graphics| package for the |dvips| driver, -using a version of |graphics.sty| released after June 1994, you write: -\begin{verbatim} - \usepackage[dvips]{graphics}[1994/06/01] -\end{verbatim} -Each package is loaded only once. If the same package is requested -more than once, nothing happens in the second or following attempt -unless the package has been requested with options that were not given -in the original |\usepackage|. If such extra options are specified -then an error message is produced. See Section~\ref{Sec:problems} how -to resolve this problem. - -As well as processing the options given in the \m{option-list} of the -|\usepackage| command, each package processes the -\m{option-list} of the |\documentclass| command as well. This -means that any option which should be processed by every package (to -be precise, by every package that specifies an action for it) can be -specified just once, in the |\documentclass| command, rather than -being repeated for each package that needs it. \begin{decl} -|\listfiles| + |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfNoValueT| \arg{arg} \arg{true code} \\ + |\IfNoValueF| \arg{arg} \arg{false code} \end{decl} +The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|, +|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example +\begin{verbatim} +\NewDocumentCommand\foo{o m} + {% + \IfNoValueTF {#1}% + {\DoSomethingJustWithMandatoryArgument{#2}}% + {\DoSomethingWithBothArguments{#1}{#2}}% + } +\end{verbatim} +will use a different internal function if the optional argument +is given than if it is not present. -If this command is placed in the preamble then a list of the files -read in (as a result of processing the document) will be displayed -on the terminal (and in the log file) at the end of the run. Where -possible, a short description will also be produced. +Note that three tests are available, depending on which outcome +branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and +\cs{IfNoValueF}. -\NEWdescription{1995/12/01} -\emph{Warning}: this command will list only files which were read -using \LaTeX{} commands such as |\input|\arg{file} or -|\include|\arg{file}. If the file was read using the primitive \TeX{} -syntax |\input |\emph{file} (without |{ }| braces around the file name) -then it will not be listed; failure to use the \LaTeX{} form with the -braces can cause more severe problems, possibly leading to overwriting -important files, so \textbf{always put in the braces}. +As the \cs{IfNoValue(TF)} tests are expandable, it is possible to +test these values later, for example at the point of typesetting or +in an expansion context. +It is important to note that |-NoValue-| is constructed such that it +will \emph{not} match the simple text input |-NoValue-|, i.e.~that +\begin{verbatim} +\IfNoValueTF{-NoValue-} +\end{verbatim} +will be logically \texttt{false}. +When two optional arguments follow each other (a syntax we typically +discourage), it can make sense to allow users of the command to +specify only the second argument by providing an empty first +argument. +\NEWdescription{2022/06/01} +Rather than testing separately for emptiness and for +|-NoValue-| it is then best to use the argument type~|O| with an +empty default value, and then test for emptiness using the +conditional \cs{IfBlankTF} (described below) instead. \begin{decl} -|\setcounter{errorcontextlines}| \arg{num} + |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfValueT| \arg{arg} \arg{true code} \\ + |\IfValueF| \arg{arg} \arg{false code} \end{decl} +The reverse form of the \cs{IfNoValue(TF)} tests are also available +as \cs{IfValue(TF)}. The context will determine which logical +form makes the most sense for a given code scenario. -\TeX~3 introduced a new primitive |\errorcontextlines| which controls -the format of error messages. \LaTeXe\ provides an interface to this -through the standard |\setcounter| command. As most \LaTeX\ users do -not want to see the internal definitions of \LaTeX\ commands each time -they make an error, \LaTeXe{} sets this to $-1$ by default. -\subsection{Environments to write out support files} -\NEWfeature{2019} -% -Until the \LaTeX\ release in 2019 the |filecontents| environment was -restricted to a place before the |\documentclass| command. These days -it can be used anywhere, though we still think that in most cases it is -best to only use it a the top of your document or in the preamble. -\begin{decl} -|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\ - \m{file-contents} \\ -|\end{filecontents}| +\begin{decl}[2022/06/01] + |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfBlankT| \arg{arg} \arg{true code} \\ + |\IfBlankF| \arg{arg} \arg{false code} \end{decl} -The |filecontents| environment is intended for bundling within a -single document file the contents of packages, options, or other -files. When the document file is run through \LaTeXe{} the body of -this environment is written verbatim (preceded by a comment line) to a -file whose name is given as the environment's only argument. However, -if that file already exists then nothing happens except for an -information message. -These days most UTF-8 text characters can be used in a -|filecontents| envi\-ronment---they will be written unchanged to the -output file. However, tabs and form feeds produce a warning, -explaining that they are turned into spaces or blank lines, -respectively. - -By default the environment does not overwrite an existing file and it -even refuses to write out the data if there exists a file that is -anywhere in the path that \TeX\ searches when inputting files. With -the option |nosearch| you can ask it to look only into the current -directory and with the option |overwrite| (or |force|) you can request -it to write the file regardless. It will, however, never write to -|\jobname.tex| to avoid overwriting itself. +The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not +been used at all (and it returns the special \texttt{-NoValue-} +marker), but not if it has been given an empty value. In contrast +\cs{IfBlankTF} returns true if its argument is either truly empty or +only contains one or more normal blanks. +For example +\begin{verbatim} +\NewDocumentCommand\foo{m!o}{\par #1: + \IfNoValueTF{#2} + {No optional}% + {% + \IfBlankTF{#2} + {Blanks in or empty}% + {Real content in}% + }% + \space argument!} +\foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] +\end{verbatim} +results +in the following output: +\begin{quote} + \NewDocumentCommand\foo{m!o}{\par #1: + \IfNoValueTF{#2}{No optional}% + {\IfBlankTF{#2}{Blanks in or empty}% + {Real content in}}% + \space argument!} + \foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] +\end{quote} -The |filecontents| environment is used for including \LaTeX{} files. -For other plain text files (such as Encapsulated PostScript files), -you should use the |filecontents*| environment which does not add a -comment line. +Note that the \cs{space} in (4) is considered real content---because it is +a command and not a \enquote{space} character---even though it results +in producing a space. You can also observe in (5) the effect of the +\texttt{!} specifier, preventing the last \cs{foo} +from interpreting \texttt{[x]} as its optional argument. -\subsection{Document structure} +\begin{decl} + |\BooleanFalse| \\ + |\BooleanTrue| +\end{decl} +The \texttt{true} and \texttt{false} flags set when searching for +an optional character (using \texttt{s} or \texttt{t\meta{char}}) have +names which are accessible outside of code blocks. -The |book| document class introduces new commands to indicate -document structure. \begin{decl} -|\frontmatter| \\ |\mainmatter| \\ |\backmatter| + |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfBooleanT| \arg{arg} \arg{true code} \\ + |\IfBooleanF| \arg{arg} \arg{false code} \end{decl} -These commands indicate the beginning of the front matter (title page, -table of contents and prefaces), main matter (main text) and back -matter (bibliography, indexes and colophon). +Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is +\cs{BooleanTrue} or \cs{BooleanFalse}. For example +\begin{verbatim} +\NewDocumentCommand\foo{sm} + {% + \IfBooleanTF {#1}% + {\DoSomethingWithStar{#2}}% + {\DoSomethingWithoutStar{#2}}% + } +\end{verbatim} +checks for a star as the first argument, then chooses the action to +take based on this information. + +\subsection{Auto-converting to key--value format} +\label{sec:cmd:keyval} + +Some document commands have a long history of accepting a `free text' optional +argument, for example \cs{caption} and the sectioning commands \cs{section}, +etc. Introducing more sophisticated (keyval) options to these commands +therefore needs a method to interpret the optional argument \emph{either} as +free text \emph{or} as a series of keyvals. This needs to take place +during argument grabbing as there is a need for careful treatment of +braces to obtain the correct result. + +The \texttt{=} modifier is available to allow \pkg{ltcmd} to correctly +implement this process. The modifier guarantees that the argument will be +passed to further code as a series of keyvals. To do that, the \texttt{=} +should be followed by an argument containing the default key name. This is used +as the key in a key--value pair \emph{if} the `raw' argument does \emph{not} +have the correct form to be interpreted as a set of keyvals. + +Taking \cs{caption} as an example, with the demonstration implementation +\begin{verbatim} +\DeclareDocumentCommand + \caption + {s ={short-text} +O{#3} +m} + {% + \showtokens{Grabbed arguments:^^J(#2)^^Jand^^J(#3)}% + } +\end{verbatim} +the default key name is \texttt{short-text}. When the command \cs{caption} is +then used, if the optional argument is free text such as +\begin{verbatim} +\caption[Some short text]{A much longer and more detailed text for + demonstration purposes} +\end{verbatim} +then the output will be +\begin{verbatim} +Grabbed arguments: +(short-text={Some short text}) +and +(A much longer and more detailed text for demonstration purposes) +\end{verbatim} +On the other hand, if the caption is given with a keyval-form argument +\begin{verbatim} +\caption[label = cap:demo]% + {A much longer and more detailed text for demonstration purposes} +\end{verbatim} +then this will be respected +\begin{verbatim} +Grabbed arguments: +(label = cap:demo) +and +(A much longer and more detailed text for demonstration purposes) +\end{verbatim} -\subsection{Definitions} +Interpretation as keyval form is determined by the presence of \texttt{=} +characters within the argument. Those in inline math mode (enclosed within +\verb|$...$| or \verb|\(...\)|) are ignored. An argument can be forced to be +read as keyvals by including an empty entry at the start +\begin{verbatim} +\caption[=,This is now a keyval]% +% ... +\caption[This is not $=$ keyval]% +\end{verbatim} -In \LaTeX, commands can have both mandatory and optional arguments, -for example in: +This empty entry is \emph{not} passed to the underlying code, so will not lead +to issues with keyval parsers that do not allow an empty key name. Any text-mode +\texttt{=} signs will need to be braced to avoid being misinterpreted: this +is likely most conveniently handled by bracing the entire argument \begin{verbatim} - \documentclass[11pt]{article} +\caption[{Not = to a keyval!}]% +\end{verbatim} +which will be passed correctly as +\begin{verbatim} +Grabbed arguments: +(short-text = {Not = to a keyval!}) \end{verbatim} -the |11pt| argument is optional, whereas the |article| class name is -mandatory. -In \LaTeX~2.09 users could define commands with arguments, but these -had to be mandatory arguments. With \LaTeXe, users can now define -commands and environments which also have one optional argument. +\subsection{Argument processors} +\label{sec:cmd:processors} -\begin{decl} -|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} -\end{decl} +Argument processor are applied to an argument \emph{after} it has been grabbed +by the underlying system but before it is passed to \meta{code}. An argument +processor can therefore be used to regularize input at an early stage, allowing +the internal functions to be completely independent of input form. Processors +are applied to user input and to default values for optional arguments, but +\emph{not} to the special |-NoValue-| marker. -These commands have a new, second, optional argument; this is used for -defining commands which themselves take one optional argument. This -new argument is best introduced by means of a simple (and hence not -very practical) example: +Each argument processor is specified by the syntax \texttt{>}\marg{processor} +in the argument specification. Processors are applied from right to left, so +that \begin{verbatim} - \newcommand{\example}[2][YYY]{Mandatory arg: #2; - Optional arg: #1.} +>{\ProcessorB} >{\ProcessorA} m \end{verbatim} -This defines |\example| to be a command with two arguments, referred -to as |#1| and |#2| in the \arg{definition}---nothing new so far. But -by adding a second optional argument to this |\newcommand| (the -|[YYY]|) the first argument (|#1|) of the newly defined command -|\example| is made optional with its default value being |YYY|. +would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed +by the \texttt{m} argument. -Thus the usage of |\example| is either: +\begin{decl} + |\SplitArgument| \arg{number} \arg{token(s)} +\end{decl} +This processor splits the argument given at each occurrence of the +\meta{tokens} up to a maximum of \meta{number} tokens (thus +dividing the input into $\text{\meta{number}} + 1$ parts). +An error is given if too many \meta{tokens} are present in the +input. The processed input is placed inside +$\text{\meta{number}} + 1$ sets of braces for further use. +If there are fewer than \arg{number} of \arg{tokens} in the argument +then |-NoValue-| markers are added at the end of the processed +argument. \begin{verbatim} - \example{BBB} +\NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m} + {\InternalFunctionOfThreeArguments#1} \end{verbatim} -which prints: -\begin{quote} - Mandatory arg: BBB; - Optional arg: YYY. -\end{quote} -or: +If only a single character \meta{token} is used for the split, any +category code $13$ (active) character matching the \meta{token} will +be replaced before the split takes place. +Spaces are trimmed at each end of each item parsed. + +The \texttt{E} argument type is somewhat special, because with a single +\texttt{E} in the command declaration you may end up with several +arguments in a command (one formal argument per embellishment token). +Therefore, when an argument processor is applied to an \texttt{E}-type +argument, all the arguments pass through that processor before being fed +to the \meta{code}. For example, this command \begin{verbatim} - \example[XXX]{AAA} +\NewDocumentCommand \foo { >{\TrimSpaces} e{_^} } + { [#1](#2) } \end{verbatim} -which prints: -\begin{quote} - Mandatory arg: AAA; - Optional arg: XXX. -\end{quote} - -The default value of the optional argument is \texttt{YYY}. -This value is specified as the \oarg{default} argument of the -|\newcommand| that created |\example|. +applies \cs{TrimSpaces} to both arguments. -As another more useful example, the definition: +\begin{decl} + |\SplitList| \arg{token(s)} +\end{decl} +This processor splits the argument given at each occurrence of the +\meta{token(s)} where the number of items is not fixed. Each item is +then wrapped in braces within |#1|. The result is that the +processed argument can be further processed using a mapping function +(see below). \begin{verbatim} - \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace} +\NewDocumentCommand \foo {>{\SplitList{;}} m} + {\MappingFunction#1} \end{verbatim} -means that the input |$\seq{a}$| produces -the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$, -whereas the input |$\seq[k]{x}$| produces the formula -$\lbrace x_{0},\ldots,\,x_{k} \rbrace$. - -In summary, the command: -\begin{quote} - |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} -\end{quote} -defines \m{cmd} to be a command with \m{num} arguments, the first of -which is optional and has default value \m{default}. - -Note that there can only be one optional argument but, as before, -there can be up to nine arguments in total. +If only a single character \meta{token} is used for the split, any +category code $13$ (active) character matching the \meta{token} will +be replaced before the split takes place. +Spaces are trimmed at each end of each item parsed. \begin{decl} -|\newenvironment| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\newenvironment*| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\renewenvironment| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\renewenvironment*| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} + |\ProcessList| \arg{list} \arg{function} \end{decl} - -\LaTeXe\ also supports the creation of environments that have one -optional argument. Thus the syntax of these two commands has -been extended in the same way as that of |\newcommand|. +To support \cs{SplitList}, the function \cs{ProcessList} is available +to apply a \meta{function} to every entry in a \meta{list}. The +\meta{function} should absorb one argument: the list entry. For example +\begin{verbatim} +\NewDocumentCommand \foo {>{\SplitList{;}} m} + {\ProcessList{#1}{\SomeDocumentCommand}} +\end{verbatim} \begin{decl} -|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} + |\ReverseBoolean| \end{decl} - -This takes the same arguments as |\newcommand|. If \m{cmd} is already -defined then the existing definition is kept; but if it is currently -undefined then the effect of |\providecommand| is to define \m{cmd} -just as if |\newcommand| had been used. - -\NEWfeature{1994/12/01} - All the above five `defining commands' now have \texttt{*}-forms that - are usually the better form to use when defining commands with - arguments, unless any of these arguments is intended to contain - whole paragraphs of text. Moreover, if you ever do find yourself - needing to use the non-star form then you should ask whether - that argument would not better be treated as the contents of a - suitably defined environment. - -\NEWfeature{1995/12/01} - The commands produced by the above five `defining commands' are - now robust. - -\subsection{Boxes} - -These next three commands for making LR-boxes all existed in -\LaTeX~2.09. They have been enhanced in two ways. +This processor reverses the logic of \cs{BooleanTrue} and +\cs{BooleanFalse}, so that the example from earlier would become +\begin{verbatim} +\NewDocumentCommand\foo{>{\ReverseBoolean} s m} + {% + \IfBooleanTF#1% + {\DoSomethingWithoutStar{#2}}% + {\DoSomethingWithStar{#2}}% + } +\end{verbatim} \begin{decl} -|\makebox| \oarg{width} \oarg{pos} \arg{text} \\ -|\framebox| \oarg{width} \oarg{pos} \arg{text} \\ -|\savebox| \arg{cmd} \oarg{width} \oarg{pos} \arg{text} + |\TrimSpaces| \end{decl} - -One small but far-reaching change for \LaTeXe\ is that, within the -\m{width} argument only, four special lengths can be used. These are -all dimensions of the box that would be produced by using simply -|\mbox|\arg{text}: -\begin{itemize} -\item [] |\height|\quad its height above the baseline; -\item [] |\depth|\quad its depth below the baseline; -\item [] |\totalheight|\quad the sum of |\height| and |\depth|; -\item [] |\width|\quad its width. -\end{itemize} -Thus, to put `hello' in the centre of a box of twice its natural -width, you would use: +Removes any leading and trailing spaces (tokens with character code~$32$ +and category code~$10$) for the ends of the argument. Thus for example +declaring a function \begin{verbatim} - \makebox[2\width]{hello} +\NewDocumentCommand\foo {>{\TrimSpaces} m} + {\showtokens{#1}} \end{verbatim} -Or you could put \textit{f} into a square box, like -this: - \framebox{\makebox[\totalheight]{\itshape f\/}} +and using it in a document as +\begin{flushleft} + \verb= =\verb*=\foo{ hello world }= +\end{flushleft} +will show `\verb*=hello world=' at the terminal, with the space at each +end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of +the input in cases where these have been included such that the standard +\TeX{} conversion of multiple spaces to a single space does not apply. + +\subsection{Body of an environment} +\label{sec:cmd:body} + +While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment} +are typically used in cases where the code implementing the \meta{environment} +does not need to access the contents of the environment (its `body'), +it is sometimes useful to have the body as a standard argument. + +This is achieved by ending the argument specification with~\texttt{b}, which is +a dedicated argument type for this situation. For instance \begin{verbatim} - \framebox{\makebox[\totalheight]{\itshape f\/}} +\NewDocumentEnvironment{twice} {O{\ttfamily} +b} + {#2#1#2} {} +\begin{twice}[\itshape] + Hello world! +\end{twice} \end{verbatim} -Note that it is the total width of the framed box, including the -frame, which is set to |\totalheight|. +typesets `Hello world!{\itshape Hello world!}'. -The other change is a new possibility for \m{pos}: |s| has been added -to |l| and |r|. If \m{pos} is |s| then the text is stretched the full -length of the box, making use of any `rubber lengths' (including any -inter-word spaces) in the contents of the box. If no such `rubber -length' is present, an `underfull box' will probably be produced. +The prefix |+| is used to allow multiple paragraphs in the environment's body. +Argument processors can also be applied to \texttt{b}~arguments. By default, +spaces are trimmed at both ends of the body: in the example there would +otherwise be spaces coming from the ends the lines after |[\itshape]| and +|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming. -\begin{decl} -|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width} - \arg{text} \\ -|\begin{minipage}| - \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\ -\m{text}\\ -|\end{minipage}| -\end{decl} +When \texttt{b} is used in the argument specification, the last +argument of the environment declaration (e.g., +\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to +insert at |\end|\marg{environment}, is redundant since one can simply +put that code at the end of the \meta{start code}. Nevertheless this +(empty) \meta{end code} must be provided. -As for the box commands above, |\height|, |\width|, etc.~may be used -in the \oarg{height} argument to denote the natural dimensions of the -box. +Environments that use this feature can be nested. -The \m{inner-pos} argument is new in \LaTeXe. It is the vertical -equivalent to the \m{pos} argument for |\makebox|, etc, determining -the position of \m{text} within the box. The \m{inner-pos} may be any -one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or -`stretched' alignment respectively. When the \m{inner-pos} argument -is not specified, \LaTeX\ gives it same value as \m{pos} (this could be -the latter's default value). +\subsection{Fully-expandable document commands} +Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally +created so that they do not expand unexpectedly. This is done using engine +features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There +are \emph{very rare} occasion when it may be useful to create functions using a +expansion-only grabber. This imposes a number of restrictions on the +nature of the arguments accepted by a function, and the code it implements. +This facility should only be used when \emph{absolutely necessary}. \begin{decl} -|\begin{lrbox}| \arg{cmd}\\ -\m{text}\\ -|\end{lrbox}| + |\NewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\RenewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \end{decl} +This family of commands is used to create a document-level \meta{function}, +which will grab its arguments in a fully-expandable manner. The +argument specification for the function is given by \meta{arg spec}, +and the function will execute \meta{code}. In general, \meta{code} will +also be fully expandable, although it is possible that this will +not be the case (for example, a function for use in a table might +expand so that \cs{omit} is the first non-expandable non-space token). + +Parsing arguments by pure expansion imposes a number of restrictions on +both the type of arguments that can be read and the error checking +available: +\begin{itemize} + \item The last argument (if any are present) must be one of the + mandatory types \texttt{m}, \texttt{r} or \texttt{R}. + \item The `verbatim' argument type \texttt{v} is not available. + \item Argument processors (using \texttt{>}) are not available. + \item It is not possible to differentiate between, for example + |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be + interpreted as the start of an optional argument. As a + result, checking for optional arguments is less robust than + in the standard version. +\end{itemize} -This is an environment which does not directly print anything. -Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus -it is like |\sbox| \arg{cmd} \arg{text}, except that any white space -before or after the contents \m{text} is ignored. - -This is very useful as it enables both the |\verb| command and the -\texttt{verbatim} environment to be used within \m{text}. - -It also makes it possible to define, for example, a `framed box' -environment. This is done by first using this environment to save -some text in a bin \m{cmd} and then calling -|\fbox{\usebox{|\m{cmd}|}}|. - -The following example defines an environment, called |fmpage|, that is -a framed version of |minipage|. +\subsection{Details about argument delimiters} + +In normal (non-expandable) commands, the delimited types look for the +initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...| +functions) looking for the delimiter token. The token has to have the +same meaning and `shape' of the token defined as delimiter. +There are three possible cases of delimiters: character tokens, control +sequence tokens, and active character tokens. For all practical purposes +of this description, active character tokens will behave exactly as +control sequence tokens. + +\subsubsection{Character tokens} + +A character token is characterized by its character code, and its meaning +is the category code~(|\catcode|). When a command is defined, the meaning +of the character token is fixed into the definition of the command and +cannot change. A command will correctly see an argument delimiter if +the open delimiter has the same character and category codes as at the +time of the definition. For example in: \begin{verbatim} - \newsavebox{\fmbox} - \newenvironment{fmpage}[1] - {\begin{lrbox}{\fmbox}\begin{minipage}{#1}} - {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}} +\NewDocumentCommand { \foobar } { D<>{default} } {(#1)} +\foobar \par +\char_set_catcode_letter:N < +\foobar \end{verbatim} +the output would be: +\begin{verbatim} +(hello) +(default) +\end{verbatim} +as the open-delimiter |<| changed in meaning between the two calls to +|\foobar|, so the second one doesn't see the |<| as a valid delimiter. +Commands assume that if a valid open-delimiter was found, a matching +close-delimiter will also be there. If it is not (either by being +omitted or by changing in meaning), a low-level \TeX{} error is raised +and the command call is aborted. + +\subsubsection{Control sequence tokens} + +A control sequence (or control character) token is characterized by is +its name, and its meaning is its definition. +A token cannot have two different meanings at the same time. +When a control sequence is defined as delimiter in a command, +it will be detected as delimiter whenever the control sequence name +is found in the document regardless of its current definition. +For example in: +\begin{verbatim} +\cs_set:Npn \x { abc } +\NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)} +\foobar \x hello\y \par +\cs_set:Npn \x { def } +\foobar \x hello\y +\end{verbatim} +the output would be: +\begin{verbatim} +(hello) +(hello) +\end{verbatim} +with both calls to the command seeing the delimiter |\x|. - -\subsection{Measuring things} - -The first of these next commands was in \LaTeX~2.09. The two new -commands are the obvious analogues. +\subsection{Creating new argument processors} \begin{decl} -|\settowidth| \arg{length-cmd} \arg{lr text} \\ -|\settoheight| \arg{length-cmd} \arg{lr text} \\ -|\settodepth| \arg{length-cmd} \arg{lr text} + |\ProcessedArgument| \end{decl} +Argument processors allow manipulation of a grabbed argument before it is +passed to the underlying code. New processor implementations may be created +as functions which take one trailing argument, and which leave their result in +the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is +defined as +\begin{verbatim} +\ExplSyntaxOn +\cs_new_protected:Npn \ReverseBoolean #1 + { + \bool_if:NTF #1 + { \tl_set:Nn \ProcessedArgument { \c_false_bool } } + { \tl_set:Nn \ProcessedArgument { \c_true_bool } } + } +\ExplSyntaxOff +\end{verbatim} +[As an aside: the code is written in \pkg{expl3}, so we don't have to + worry about spaces creeping into the definition.] -\subsection{Line endings} +\subsection{Access to the argument specification} -\NEWdescription{1994/12/01} -The command |\\|, which is used to indicate a line-end in various -places, is now a robust command when used within arguments such as -section titles. +The argument specifications for document commands and environments are +available for examination and use. -Also, because it is often necessary to distinguish which type of line -is to be ended, we have introduced the following new command; it -has the same argument syntax as that of |\\|. -\begin{decl}[1994/12/01] -|\tabularnewline| \oarg{vertical-space} +\begin{decl} + |\GetDocumentCommandArgSpec| \arg{function} \\ + |\GetDocumentEnvironmentArgSpec| \arg{environment} \end{decl} -One example of its use is when the text in the last -column of a |tabular| environment is set with |\raggedright|; then -|\tabularnewline| can be used to indicate the end of a row of the -|tabular|, whilst |\\| will indicate the end of a line of text in a -paragraph within the column. This command can be used in the |array| -environment as well as |tabular|, and also the extended versions of -these environments offered by the \textsf{array} and \textsf{longtable} -packages in the tools collection. - -\subsection{Controlling page breaks} - -Sometimes it is necessary, for a final version of a document, to -`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a -variety of commands for this situation: |\clearpage|, |\pagebreak| -etc. \LaTeXe\ provides, in addition, commands which can produce -longer pages as well as shorter ones. - +These functions transfer the current argument specification for the +requested \meta{function} or \meta{environment} into the token list +variable \cs{ArgumentSpecification}. If the \meta{function} or +\meta{environment} has no known argument specification then an error +is issued. The assignment to \cs{ArgumentSpecification} is local to +the current \TeX{} group. \begin{decl} -|\enlargethispage| \arg{size} \\ -|\enlargethispage*| \arg{size} + |\ShowDocumentCommandArgSpec| \arg{function} \\ + |\ShowDocumentEnvironmentArgSpec| \arg{environment} \end{decl} +These functions show the current argument specification for the +requested \meta{function} or \meta{environment} at the terminal. If +the \meta{function} or \meta{environment} has no known argument +specification then an error is issued. -These commands increase the height of a page (from its normal value of -|\textheight|) by the specified amount \m{size}, a rigid length. This -change affects \emph{only} the current page. -This can be used, for example, to allow an extra line to be fitted -onto the page or, with a negative length, to produce a page -shorter than normal. -The star form also shrinks any vertical white space on the page as -much as possible, so as to fit the maximum amount of text on the -page. +\section{Copying and showing (robust) commands} -\NEWdescription{1995/12/01} -These commands do not change the position of the footer text; thus, if -a page is lengthened too far, the main text may overprint the footer. +If you want to (slightly) alter an existing command you may want to +save the current definition under a new name and then use that in a +new definition. If the existing command is robust, then the old trick of +using the low-level \cs{let} for this doesn't work, because it only +copies the top-level definition, but not the part that actually does +the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{} +now offers some high-level declarations for this instead. -\subsection{Floats} - -There is a new command, |\suppressfloats|, and a new `float -specifier'. These will enable people to gain better -control of \LaTeX's float placement algorithm. +However, please note that it is usually better to make use of +available hooks (e.g., the generic command or environment hooks), +instead of copying the current definition and thereby freezing it; see +the hook management documentation \texttt{lthooks-doc.pdf} for +details. \begin{decl} -|\suppressfloats| \oarg{placement} + |\NewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ + |\RenewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ + |\DeclareCommandCopy| \arg{cmd} \arg{existing-cmd} \end{decl} -This command stops any further floating environments from being placed -on the current page. With an optional argument, which should be either -|t| or |b| (not both), this restriction applies only to putting -further floats at the top or at the bottom. Any floats which would -normally be placed on this page are placed on the next page instead. - -\begin{decl} -The extra float location specifier: \ \texttt{!} -\end{decl} - -This can be used, along with at least one of \texttt{h}, \texttt{t}, -\texttt{b} and \texttt{p}, in the location optional argument of a -float. - -If a \texttt{!} is present then, just for this particular float, -whenever it is processed by the float mechanism the following are -ignored: -\begin{itemize} -\item all restrictions on the number of floats which can appear; -\item all explicit restrictions on the amount of space on a text page -which may be occupied by floats or must be occupied by text. -\end{itemize} -The mechanism will, however, still attempt to ensure that pages are -not overfull and that floats of the same type are printed in the -correct order. +This copies the definition of \meta{existing-cmd} to \meta{cmd}. After +this \meta{existing-cmd} can be redefined and \meta{cmd} +still works! This allows you to then provide a new definition for +\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old +definition). For example, after +\begin{verbatim} +\NewCommandCopy\LaTeXorig\LaTeX +\RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}} +\end{verbatim} +all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue +(assuming you have a color package loaded). -Note that its presence has no effect on the production of float pages. +The differences between \cs{New...} and \cs{Renew...} are as +elsewhere: i.e., you get an error depending on whether or not +\meta{cmd} already exists, or in case of \cs{Declare...} it is copied +regardless. Note that there is no \cs{Provide...} declaration, because +that would be of limited value. -A \texttt{!} specifier overrides the effect of any |\suppressfloats| -command for this particular float. -\subsection{Font changing: text} +If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single +token but need \enquote{constructing}, you can use \cs{ExpandArgs} +as explained in +Section~\ref{sec:preconstructing-csnames}. -The font selection scheme used in \LaTeXe{} differs a lot from that -used in \LaTeX~2.09. In this section, we give a brief description of -the new commands. A more detailed description with examples is given -in \emph{\LaTeXcomp}, and the interface for class- and package-writers -is described in \emph{\fntguide}. -\begin{decl} -|\normalfont|\\ -|\rmfamily|\\ -|\sffamily|\\ -|\ttfamily|\\ -|\mdseries|\\ -|\bfseries|\\ -|\upshape|\\ -|\itshape|\\ -|\slshape|\\ -|\scshape| -\end{decl} -These are font commands whose use is the same as the commands |\rm|, -|\bf|, etc. The difference is that each command changes just one -attribute of the font (the attribute changed is part of the name). -One result of this is that, for example, |\bfseries\itshape| produces -both a change of series and a change of shape, to give a bold italic -font. \begin{decl} -|\textnormal|\arg{text}\\ -|\textrm|\arg{text}\\ -|\textsf|\arg{text}\\ -|\texttt|\arg{text}\\ -|\textmd|\arg{text}\\ -|\textbf|\arg{text}\\ -|\textup|\arg{text}\\ -|\textit|\arg{text}\\ -|\textsl|\arg{text}\\ -|\textsc|\arg{text}\\ -|\emph|\arg{text} + |\ShowCommand| \arg{cmd} \end{decl} -These are one-argument commands; they take as an argument the -text which is to be typeset in the particular font. They also -automatically insert italic corrections where appropriate; if you do -not like the result, you can add an italic correction with |\/| or -remove it with |\nocorr|. The |\nocorr| should always be the first or -last thing within the \arg{text} argument. - -\subsection{Font changing: math} - -Most of the fonts used within math mode do not need to be explicitly -invoked; but to use letters from a range of fonts, the following -class of commands is provided. +This displays the meaning of the \meta{cmd} on the terminal and then +stops (just like the primitive \cs{show}). The difference is that it +correctly shows the meaning of more complex commands, e.g., in case of +robust commands it displays not only the top-level definition but +also the actual payload code and in case of commands declared with +\cs{NewDocumentCommand}, etc.\ it also gives you detailed information +about the argument signature. -\begin{decl} -|\mathrm| \arg{letters}\\ -|\mathnormal| \arg{letters}\\ -|\mathcal| \arg{letters}\\ -|\mathbf| \arg{letters}\\ -|\mathsf| \arg{letters}\\ -|\mathtt| \arg{letters}\\ -|\mathit| \arg{letters} -\end{decl} -These are also one-argument commands which take as an argument the -letters which are to be typeset in the particular font. The argument -is processed in math mode so spaces within it will be ignored. Only -letters, digits and accents have their font changed, for example -|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$. +\section[Preconstructing command names \\ (or otherwise expanding arguments)] + {Preconstructing command names (or otherwise expanding arguments)} +\label{sec:preconstructing-csnames} -\subsection{Ensuring math mode} +When declaring new commands with \cs{NewDocumentCommand} or +\cs{NewCommandCopy} or similar, it is sometimes necessary to +``construct'' the csname. As a general mechanism the L3 programming +layer has \cs{exp_args:N...} for this, but there is no mechanism for +it if \cs{ExplSyntaxOn} is not active (and mixing programming and user +interface level commands is not a good approach anyhow). We therefore +offer a mechanism to access this ability using CamelCase naming. \begin{decl} -|\ensuremath| \arg{math commands} + |\UseName| \arg{string} \\ + |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots \end{decl} -In \LaTeX~2.09, if you wanted a command to work both in math mode and -in text mode, the suggested method was to define something like: +\cs{UseName} turns the \meta{string} directly into a csname and +then executes it: this is equivalent to the long-standing +\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming +equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which +describes how to expand the \meta{arguments}, carries out these +operations then executes the \meta{cmd}. The \meta{spec} uses +the descriptions offered by the L3 programming layer, and the +relevant \cs{exp_args:N...} function must exist. Common cases will +have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below. + +As an example, the following declaration provides a method to generate +copyedit commands: \begin{verbatim} - \newcommand{\Gp}{\mbox{$G_p$}} +\NewDocumentCommand\newcopyedit{mO{red}} + {% + \newcounter{todo#1}% + \ExpandArgs{c}\NewDocumentCommand{#1}{s m}% + {% + \stepcounter{todo#1}% + \IfBooleanTF {##1}% + {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}% + {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}% + }% + } \end{verbatim} -Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for -instance) subscripts or a fraction. +Given that declaration you can then write +\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note} +and the corresponding counter for you. -In \LaTeXe{} you can define it thus: +A second example is to copy a command by string name using +\cs{NewCommandCopy}: here we might need to construct both command +names. \begin{verbatim} - \newcommand{\Gp}{\ensuremath{G_p}} +\NewDocumentCommand\savebyname{m} + {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}} \end{verbatim} -Now |\Gp| will work correctly in all contexts. - -This is because the |\ensuremath| does nothing, producing simply -|G_p|, when |\Gp| is used within math mode; but it ensures that math -mode is entered (and exited) as required when |\Gp| is used in text -mode. - - -\subsection{Setting text superscripts} -\begin{decl} -|\textsuperscript| \arg{text} -\end{decl} - -\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as -footnote markers were produced by internally entering math mode and -typesetting the number as a math superscript. This normally looked -fine since the digits in math fonts are the same as those in text -fonts when Computer Modern fonts are used. But when a different -document font (such as Times) is selected, the results look rather -strange. For this reason the command |\textsuperscript| has been -introduced which typesets its argument in the current text font, in a -superscript position and in the correct size. - -\subsection{Text commands: all encodings} - -\NEWdescription{1994/12/01} - One of the main differences between \LaTeXe{} and \LaTeX~2.09 is - that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}. - (A font encoding is the sequence of characters in the font---for - example a Cyrillic font would have a different encoding from a Greek - font.) - - The two major font encodings that are used for Latin languages such - as English or German are |OT1| (Donald Knuth's 7-bit encoding, which - has been used during most of \TeX's lifetime) and |T1| (the new - 8-bit `Cork' encoding). - - \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has - support for both |OT1| and |T1| built-in. The next section will - cover the new commands which are available if you have |T1|-encoded - fonts. This section describes new commands which are available in - all encodings. - - Most of these commands provide characters which were available in - \LaTeX~2.09 already. For example |\textemdash| gives an `em dash', - which was available in \LaTeX~2.09 by typing |---|. However, some - fonts (for example a Greek font) may not have the |---| ligature, - but you will still be able to access an em dash by typing - |\textemdash|. - -\begin{decl}[1994/12/01] - |\r{}| -\end{decl} - This command gives a `ring' accent, for example `\r{o}' can be typed - |\r{o}|. - -\begin{decl}[1994/12/01] - |\SS| -\end{decl} - This command produces a German `SS', that is a capital `\ss'. This - letter can hyphenate differently from `SS', so is needed for entering - all-caps German. - -\begin{decl}[1994/12/01] - |\textcircled{}| -\end{decl} - This command is used to build `circled characters' such as - |\copyright|. For example |\textcircled{a}| produces - \textcircled{a}. - -\begin{decl}[1994/12/01] - |\textcompwordmark| -\end{decl} - This command is used to separate letters which would normally - ligature. For example `f\textcompwordmark i' is produced with - |f\textcompwordmark i|. Note that the `f' and `i' have not - ligatured to produce `fi'. This is rarely useful in English - (`shelf\textcompwordmark ful' is a rare example of where it might be - used) but is used in languages such as German. - -\begin{decl}[1994/12/01] - |\textvisiblespace| -\end{decl} - This command produces a `visible space' character - `\textvisiblespace'. This is sometimes used in computer listings, - for example `type \textsf{hello\textvisiblespace world}'. - -\begin{decl}[1994/12/01] - |\textemdash| - |\textendash| - |\textexclamdown| - |\textquestiondown| \\ - |\textquotedblleft| - |\textquotedblright| - |\textquoteleft| - |\textquoteright| -\end{decl} - These commands produce characters which would otherwise be - accessed via ligatures: - \begin{center} - \begin{tabular}{ccl} - \emph{ligature} & \emph{character} & \emph{command} \\ - |---| & --- & |\textemdash| \\ - |--| & -- & |\textendash| \\ - |!`| & !` & |\textexclamdown| \\ - |?`| & ?` & |\textquestiondown| \\ - |``| & `` & |\textquotedblleft| \\ - |''| & '' & |\textquotedblright| \\ - |`| & ` & |\textquoteleft| \\ - |'| & ' & |\textquoteright| - \end{tabular} - \end{center} - The reason for making these characters directly accessible is so - that they will work in encodings which do not have these characters. - -\begin{decl}[1994/12/01] - |\textbullet| - |\textperiodcentered| -\end{decl} - These commands allow access to characters which were previously only - available in math mode: - \begin{center} - \begin{tabular}{lcl} - \emph{math command} & \emph{character} & \emph{text command} \\ - |\bullet| & $\bullet$ & |\textbullet| \\ - |\cdot| & $\cdot$ & |\textperiodcentered| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textbackslash| - |\textbar| - |\textless| - |\textgreater| -\end{decl} - These commands allow access to ASCII characters which were - only available in verbatim or math mode: - \begin{center} - \begin{tabular}{lcl} - \emph{math command} & \emph{character} & \emph{text command} \\ - |\backslash| & $\backslash$ & |\textbackslash| \\ - |\mid| & $\mid$ & |\textbar| \\ - |<<| & $<$ & |\textless| \\ - |>>| & $>$ & |\textgreater| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textasciicircum| - |\textasciitilde| -\end{decl} - These commands allow access to ASCII characters which were - previously only available in verbatim: - \begin{center} - \begin{tabular}{cl} - \emph{verbatim} & \emph{text command} \\ - |^| & |\textasciicircum| \\ - |~| & |\textasciitilde| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textregistered| - |\texttrademark| -\end{decl} - These commands provide the `registered trademark' (R) and - `trademark' (TM) symbols. - -\subsection{Text commands: the T1 encoding} - -\NEWdescription{1994/12/01} - The |OT1| font encoding is fine for typesetting in English, but has - problems when typesetting other languages. The |T1| encoding solves - some of these problems, by providing extra characters (such as `eth' - and `thorn'), and it allows words containing accented letters to be - hyphenated (as long as you have a package like |babel| which allows - for non-American hyphenation). - - This section describes the commands you can use if you have the |T1| - fonts. To use them, you need to get the `ec fonts', or the - |T1|-encoded PostScript fonts, as used by \textsf{psnfss}. - All these fonts are - available by anonymous ftp in the Comprehensive \TeX{} Archive, and - are also available on the CD-ROMs \emph{4all \TeX} and - \emph{\TeX{} Live} (both available from the \TeX{} Users Group). - - You can then select the |T1| fonts by saying: +In the \meta{spec} each \texttt{c} stands for one argument that is +turned into a `\texttt{c}'ommand. An \texttt{n} represents a +`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for +a `\texttt{N}'ormal argument which is also left unchanged, but one +consisting only of a single token (and usually unbraced). Thus, to +construct a command from a string only for the second argument of +\cs{NewCommandCopy} you would write \begin{verbatim} - \usepackage[T1]{fontenc} +\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c@section} \end{verbatim} - This will allow you to use the commands in this section. +There are several other single letters supported in the L3 programming +layer that \emph{could} be used in the \meta{spec} to manipulate +arguments in other ways. If you are interested, take a look at the +\enquote{Argument expansion} section in the L3 programming layer +documentation in \texttt{interface3.pdf}. - \emph{Note:} Since this document must be processable on any site - running an up-to-date \LaTeX, it does not contain any characters - that are present only in |T1|-encoded fonts. This means that this - document cannot show you what these glyphs look like! If you want - to see them then run \LaTeX{} on the document |fontsmpl| and - respond `|cmr|' when it prompts you for a family name. -\begin{decl}[1994/12/01] - |\k{}| -\end{decl} - This command produces an `ogonek' accent. - -\begin{decl}[1994/12/01] - |\DH| - |\DJ| - |\NG| - |\TH| - |\dh| - |\dj| - |\ng| - |\th| -\end{decl} - These commands produce characters `eth', `dbar', `eng', and `thorn'. - -\begin{decl}[1994/12/01] - |\guillemotleft| - |\guillemotright| - |\guilsinglleft| - |\guilsinglright| \\ - |\quotedblbase| - |\quotesinglbase| - |\textquotedbl| -\end{decl} - % A local hack (could be improved): - \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$} - These commands produce various sorts of quotation mark. - Rough representations of them are: - \fauxguillemet\ll a\fauxguillemet\gg{} - \fauxguillemet - ,\kern -0.1em,\kern 0.05em a\kern -0.05em`` - ,\kern 0.05em a\kern -0.05em` and |"|a|"|. - -\NEWdescription{2001/06/01} - There are therefore some extra short-form ligatures available for - use in documents that will only be used with |T1|-encoded fonts. - - The guillemets |\guillemotleft| and |\guillemotright|% - \footnote{We apologise once again for maintaining Adobe's - enormous solipsism~(sic) of confusing a diving bird with - punctuation marks!} - can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase| - by typing |,,|\,. - - Also, unlike the unexpected results with - |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and - \textgreater{}. - - Note also that the single character |"| will no longer produce '' - but rather |\textquotedbl|. - -\subsection{Logos} -\begin{decl} -|\LaTeX|\\ -|\LaTeXe| -\end{decl} +\section{Expandable floating point (and other) calculations} -|\LaTeX| (producing `\LaTeX') is still the `main' logo command, -but if you need to refer to the new features, you can write -|\LaTeXe| (producing `\LaTeXe'). +The \LaTeX3 programming layer which is part of the format offers a +rich interface to manipulate floating point variables and values. To +allow for (simpler) applications to use this on document-level or in +packages otherwise not making use of the L3 programming layer a few +interface commands are made available. -\subsection{Picture commands} \begin{decl} - |\qbezier[](,)(,)(,)| \\ - | \bezier{}(,)(,)(,)| -\end{decl} -The |\qbezier| command can be used in |picture| mode to draw a -quadratic Bezier curve from position |(,)| to |(,)| with -control point |(,)|. The optional argument \m{N} gives the -number of points on the curve. - -For example, the diagram: -\begin{center} - \begin{picture}(50,50) - \thicklines - \qbezier(0,0)(0,50)(50,50) - \qbezier[20](0,0)(50,0)(50,50) - \thinlines - \put(0,0){\line(1,1){50}} - \end{picture} -\end{center} -is drawn with: -\begin{verbatim} - \begin{picture}(50,50) - \thicklines - \qbezier(0,0)(0,50)(50,50) - \qbezier[20](0,0)(50,0)(50,50) - \thinlines - \put(0,0){\line(1,1){50}} - \end{picture} -\end{verbatim} -The |\bezier| command is the same, except that the argument \m{N} is not -optional. It is provided for compatibility with the \LaTeX~2.09 -|bezier| document style option. - -\subsection{Old commands} - -\begin{decl} -|\samepage| + |\fpeval| \arg{floating point expression} \end{decl} -The |\samepage| command still exists but is no longer being -maintained. -This is because it only ever worked erratically; it does not -guarantee that there will be no page-breaks within its scope; and -it can cause footnotes and marginals to be wrongly placed. +The expandable command \cs{fpeval} takes as its argument a floating +point expression and produces a result using the normal rules of +mathematics. As this command is expandable it can be used where \TeX{} +requires a number and for example within a low-level \cs{edef} operation +to give a purely numerical result. -We recommend using |\enlargethispage| in conjunction with page-break -commands such as |\newpage| and |\pagebreak| to help control page -breaks. -\begin{decl} - |\SLiTeX| -\end{decl} -Since \SLiTeX{} no longer exists, the logo is no longer defined in the -\LaTeX{} kernel. A suitable replacement is |\textsc{Sli\TeX}|. The -\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode. - -\begin{decl} -|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\ -|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd| -\end{decl} - -These symbols are contained in the \LaTeX{} symbol font, which was -automatically loaded by \LaTeX~2.09. However, \TeX{} has room for -only sixteen math font families; thus many users discovered that they -ran out. Because of this, \LaTeX{} does not load the \LaTeX{} symbol -font unless you use the \textsf{latexsym} package. - -These symbols are also made available, using different fonts, by the -\textsf{amsfonts} package, which also defines a large number of other -symbols. It is supplied by the American Mathematical Society. - -The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09 -compatibility mode. - -\section{\LaTeX~2.09 documents} -\label{Sec:209} - -\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering -\emph{\LaTeX~2.09 compatibility mode}. Nothing has changed, you run -\LaTeX{} in the same way you always did, and you will get much the -same results. - -The reason for the `almost' is that some \LaTeX~2.09 packages made use -of low-level unsupported features of \LaTeX. If you discover such a -package, you should find out if it has been updated to work with -\LaTeXe. Most packages will still work with \LaTeXe---the easiest way -to find out whether a package still works is to try it! - -\LaTeX~2.09 compatibility mode is a comprehensive emulation of -\LaTeX~2.09, but at the cost of time. Documents can run up to 50\% -slower in compatibility mode than they did under \LaTeX~2.09. -In addition, many of the new features of \LaTeXe{} are not available in -\LaTeX~2.09 compatibility mode. - -\subsection{Warning} - -\NEWdescription{1995/12/01} -This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow -you to process 2.09 documents, i.e.~documents that were written (we -hope, a long time ago) for a very old system and therefore could be -processed by using a genuine antique \LaTeX~2.09 system. - -This mode is therefore \emph{not} intended to provide access to the -enhanced features of \LaTeXe{}. Thus it must not be used to process -new documents which masquerade as 2.09 documents (i.e.~they begin with -|\documentstyle|) but which could not be processed using that genuine -antique \LaTeX~2.09 system because they contain some new, -\LaTeXe{}-only, commands or environments. - -To prevent such misuse of the system, and the consequent trouble it -causes when such misleadingly encoded documents are distributed, the -\emph{\LaTeX~2.09 compatibility mode} turns off most of these new -features and commands. Any attempt to use them will give you an error -message and, moreover, many of them simply will not work, whilst -others will produce unpredictable results. -So don't bother sending us any bug reports about such occurrences since -they are intentional. - - -\subsection{Font selection problems} -\label{Sec:fsprob} - -When using compatibility mode, it is possible that you will find -problems with font-changing commands in some old documents. These -problems are of two types: +Briefly, the floating point expressions may comprise: \begin{itemize} -\item producing error messages; -\item not producing the font changes you expected. + \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$, + multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$, + and parentheses. + \item Comparison operators: $x\fprel{<}y$, + $x\fprel{<=}y$, $x\fprel{>?}y$, + $x\fprel{!=}y$ \emph{etc.} + \item Boolean logic: sign $\fpop{sign} x$, + negation $\fpop{!}x$, conjunction + $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary + operator $x\fprel{?}y\fprel{:}z$. + \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$. + \item Integer factorial: $\fpop{fact} x$. + \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec} + x$, $\fpop{csc} x$ expecting their arguments in radians, and + $\fpop{sind} x$, $\fpop{cosd} x$, + $\fpop{tand} x$, $\fpop{cotd} x$, + $\fpop{secd} x$, $\fpop{cscd} x$ expecting their + arguments in degrees. + \item Inverse trigonometric functions: $\fpop{asin} x$, + $\fpop{acos} x$, $\fpop{atan} x$, + $\fpop{acot} x$, $\fpop{asec} x$, + $\fpop{acsc} x$ giving a result in radians, and + $\fpop{asind} x$, $\fpop{acosd} x$, + $\fpop{atand} x$, $\fpop{acotd} x$, + $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result + in degrees. + \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$, + $\fpop{abs}(x)$. + \item Rounding functions, controlled by two optional + values, $n$ (number of places, $0$ by default) and + $t$ (behavior on a tie, $\nan$ by default): + \begin{itemize} + \item $\fpop{trunc}(x,n)$ rounds towards zero, + \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$, + \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$, + \item $\fpop{round}(x,n,t)$ rounds to the closest value, with + ties rounded to an even value by default, towards zero if $t=0$, + towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$. + \end{itemize} + \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$. + \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians). + \item Dimensions, automatically expressed in points, \emph{e.g.}, + \texttt{pc} is~$12$. + \item Automatic conversion (no need for \cs{number}) of + integer, dimension, and skip variables to floating points numbers, + expressing dimensions in points and ignoring the stretch and + shrink components of skips. + \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together, + multiplied or divided by a floating point number, and nested. \end{itemize} -In case of error messages it is possible that the document (or an old -style file used therein) contains references to old internal commands -which are no longer defined, see Section~\ref{Sec:oldinternals} for -more information if this is the case. - -\NEWdescription{1995/12/01} -One example of the unexpected is if you use one of the new style of -math-mode font changing command as follows: -\begin{verbatim} -$ \mathbf{xy} A $ -\end{verbatim} -You may well find that this behaves as if you had put: -\begin{verbatim} -$ \bf {xy} A $ -\end{verbatim} -everything including the $A$ coming out bold. - -\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation, -which resulted in documents producing different results on different -\LaTeX{} installations. \LaTeXe{} no longer allows so much -customization but, for compatibility with old documents, the local -configuration file |latex209.cfg| is loaded every time \LaTeXe{} -enters \LaTeX~2.09 compatibility mode. - -For example, if your site was customized to use the New Font -Selection Scheme (\NFSS) with the |oldlfont| option, then you can -make \LaTeXe{} emulate this by creating a |latex209.cfg| file -containing the commands: -\begin{verbatim} -\ExecuteOptions{oldlfont}\RequirePackage{oldlfont} -\end{verbatim} -Similarly, to emulate \NFSS{} with the |newlfont| option, you can -create a |latex209.cfg| file containing: +An example of use could be the following: \begin{verbatim} -\ExecuteOptions{newlfont}\RequirePackage{newlfont} +\LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} + = \fpeval{sin(3.5)/2 + 2e-3} $. \end{verbatim} - - -\subsection{Native mode} -\label{Sec:native} - -To run an old document faster, and use the new features of -\LaTeXe, you should try using \emph{\LaTeXe{} native mode}. -This is done by replacing the command: -\begin{quote} - |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class} -\end{quote} -with: +which produces the following output: \begin{quote} - |\documentclass|\oarg{options}\arg{class} \\ - |\usepackage{latexsym,|\m{packages}|}| + \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} + = \fpeval{sin(3.5)/2 + 2e-3} $. \end{quote} -However, some documents which can be processed in \LaTeX~2.09 -compatibility mode may not work in native mode. Some \LaTeX~2.09 -packages will only work with \LaTeXe{} in 2.09 compatibility mode. -Some documents will cause errors because of \LaTeXe's improved error -detection abilities. - -But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native -mode with the above change. Again, the easiest way to find out -whether your documents can be processed in native mode is to try it! - - -\section{Local modifications} -\label{sec:loc} - -\NEWdescription{1995/12/01} -There are two common types of local modifications that can be done -very simply. Do not forget that documents produced using such -modifications will not be usable at other places (such documents are -called `non-portable'). - -One type of modification is the use of personal commands for commonly -used symbols or constructions. These should be put into a package -file (for example, one called \texttt{mymacros.sty}) and loaded by -putting |\usepackage{mymacros}| in the document preamble. - -Another type is a local document class that is very similar to one of -the standard classes but contains some straightforward modifications -such as extra environments, different values for some parameters, etc. -These should be put into a class file; here we shall describe a simple -method of constructing such a file using, as an example, a class -called \textsf{larticle} that is very similar to the \textsf{article} -class. - -\NEWfeature{1995/12/01} -The class file called \texttt{larticle.cls} should (after the -preliminary identification commands) start as follows: -\begin{verbatim} - \LoadClassWithOptions{article} -\end{verbatim} -This command should be followed by whatever additions and changes you -wish to make to the results of reading in the file -\texttt{article.sty}. - -The effect of using the above |\LoadClassWithOptions| command is to -load the standard class file \textsf{article} with whatever options -are asked for by the document. Thus a document using your -\textsf{larticle} class can specify any option that could be specified -when using the standard \textsf{article} class; for example: -\begin{verbatim} - \documentclass[a4paper,twocolumn,dvips]{larticle} -\end{verbatim} - - -\section{Problems} -\label{Sec:problems} - -This section describes some of the things which may go wrong when -using \LaTeXe, and what you can do about it. - -\subsection{New error messages} - -\LaTeXe{} has a number of new error messages. -Please also note that many error messages now produce further helpful -information if you press |h| in response to the error prompt. \begin{decl} -|Option clash for package |\m{package}|.| + |\inteval| \arg{integer expression} \end{decl} -The named package has been loaded twice with different options. If -you enter |h| you will be told what the options were, for example, if -your document contained: -\begin{verbatim} - \usepackage[foo]{fred} - \usepackage[baz]{fred} -\end{verbatim} -then you will get the error message: -\begin{verbatim} - Option clash for package fred. -\end{verbatim} -and typing |h| at the |?| prompt will give you: -\begin{verbatim} - The package fred has already been loaded with options: - [foo] - There has now been an attempt to load it with options: - [baz] - Adding the line: - \usepackage[foo,baz]{fred} - to your document may fix this. - Try typing <> to proceed. -\end{verbatim} -The cure is, as suggested, to load the package with both sets of -options. Note that since \LaTeX{} packages can call other packages, -it is possible to get a package option clash without explicitly -requesting the same package twice. -\begin{decl} - |Command |\m{command}| not provided in base NFSS.| -\end{decl} -The \m{command} is not provided by default in \LaTeXe. This error is -generated by using one of the commands: + The expandable command \cs{inteval} takes as its argument an integer + expression and produces a result using the normal rules of + mathematics with some restrictions, see below. The operations + recognized are |+|, |-|, |*| and |/| plus parentheses. As this + command is expandable it can be used where \TeX{} requires a number + and for example within a low-level \cs{edef} operation to give a + purely numerical result. + + This is basically a thin wrapper for the primitive \cs{numexpr} + command and therefore has some syntax restrictions. These are: + \begin{itemize} + \item \texttt{/} denotes division rounded to the closest integer with + ties rounded away from zero; + \item there is an error and the overall expression evaluates to zero + whenever the absolute value of any intermediate result exceeds + $2^{31}-1$, except in the case of scaling operations + $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be + arbitrarily large; + \item parentheses may not appear after unary \texttt{+} or + \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start + of an expression or after \texttt{+}, \texttt{-}, \texttt{*}, + \texttt{/} or~\texttt{(} leads to an error. + \end{itemize} + +An example of use could be the following. \begin{verbatim} - \mho \Join \Box \Diamond \leadsto - \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd +\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$. \end{verbatim} -which are now part of the \textsf{latexsym} package. -The cure is to add: -\begin{verbatim} - \usepackage{latexsym} -\end{verbatim} -in the preamble of your document. - -\begin{decl} - |LaTeX2e command in LaTeX 2.09 document.| -\end{decl} -The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09 -document. The cure is to replace the command by a \LaTeX~2.09 -command, or to run document in native mode, as described in -Section~\ref{Sec:native}. - -\begin{decl} - |NFSS release 1 command \newmathalphabet found.| -\end{decl} -The command |\newmathalphabet| was used by the New Font Selection -Scheme Release 1 but it has now been replaced by -|\DeclareMathAlphabet|, the use of which is described in -\emph{\fntguide}. - -The best cure is to update the package which contained the -|\newmathalphabet| command. Find out if there is a new release of -the package, or (if you wrote the package yourself) consult -\emph{\fntguide} for the new syntax of font commands. - -If there is no updated version of the package then you can cure this -error by using the \textsf{newlfont} or \textsf{oldlfont} package, -which tells \LaTeX{} which version of |\newmathalphabet| should be -emulated. - -You should use \textsf{oldlfont} if the document selects math fonts with -syntax such as this: -\begin{quote} - |{\cal A}|, etc. -\end{quote} -Use \textsf{newlfont} if the document's syntax is like this: -\begin{quote} - |\cal{A}|, etc. -\end{quote} - - -\begin{decl} - |Text for \verb command ended by end of line.| -\end{decl} -The |\verb| command has been begun but not ended on that line. This -usually means that you have forgotten to put in the end-character of -the |\verb| command. +which results in +\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.} -\begin{decl} - |Illegal use of \verb command.| -\end{decl} -The |\verb| command has been used inside the argument of another -command. This has never been allowed in \LaTeX{}---often producing -incorrect output without any warning---and so \LaTeXe{} produces -an error message. - -\subsection{Old internal commands} -\label{Sec:oldinternals} - -A number of \LaTeX~2.09 internal commands have been removed, since -their functionality is now provided in a different way. See -\emph{\clsguide} for more details of the new, supported interface for -class and package writers. \begin{decl} - |\tenrm| |\elvrm| |\twlrm| \dots\\ - |\tenbf| |\elvbf| |\twlbf| \dots\\ - |\tensf| |\elvsf| |\twlsf| \dots\\ - $\vdots$ + |\dimeval| \arg{dimen expression} \qquad + |\skipeval| \arg{skip expression} \end{decl} -These commands provided access to the seventy fonts preloaded by -\LaTeX~2.09. In contrast, \LaTeXe{} normally preloads at most -fourteen fonts, which saves a lot of font memory; but a consequence is -that any \LaTeX{} file which used the above commands to directly -access fonts will no longer work. -Their use will usually produce an error message such as: +Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a +rubber length (\texttt{skip}) value. Both are thin wrappers around +the corresponding engine primitives, which makes them fast, but +therefore shows the same syntax peculiars as discussed +above. Nevertheless, in practice they are usually sufficient. For +example \begin{verbatim} - ! Undefined control sequence. - l.5 \tenrm +\newcommand\calulateheight[1]{% + \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}} \end{verbatim} -The cure for this is to update the document to use the new -font-changing commands provided by \LaTeXe; these are described in -\emph{\fntguide}. - -If this is not possible then, as a last resort, you can -use the \textsf{rawfonts} package, which loads the -seventy \LaTeX~2.09 fonts and provides direct access to them using the -old commands. This takes both time and memory. If you do not -wish to load all seventy fonts, you can select some of them by using the -|only| option to \textsf{rawfonts}. For example, to load only |tenrm| -and |tenbf| you write: -\begin{verbatim} - \usepackage[only,tenrm,tenbf]{rawfonts} -\end{verbatim} - -The \textsf{rawfonts} package is distributed as part of the \LaTeX{} -tools software, see Section~\ref{Sec:st-pack}. - -\subsection{Old files} - -One of the more common mistakes in running \LaTeX{} is to read in old -versions of packages instead of the new versions. If you get an -incomprehensible error message from a standard package, make sure you -are loading the most recent version of the package. You can find out -which version of the package has been loaded by looking in the log -file for a line like: -\begin{verbatim} - Package: fred 1994/06/01 v0.01 Fred's package. -\end{verbatim} -You can use the \m{release-date} options to |\documentclass| and -|\usepackage| to make sure that you are getting a suitably recent copy -of the document class or package. This is useful when sending a -document to another site, which may have out-of-date software. - -\subsection{Where to go for more help} - -If you can't find the answer for your problem here, try looking in -\emph{\LaTeXbook} or \emph{\LaTeXcomp}. If you have a problem with -installing \LaTeX, look in the installation guide files which come with -the distribution. - -If this doesn't help, contact your local \LaTeX{} guru or local -\LaTeX{} mailing list. - -If you think you've discovered a bug then please report it! First, -you should find out if the problem is with a third-party package or -class. If the problem is caused by a package or class other than -those listed in Section~\ref{Sec:class+packages} then please report -the problem to the author of the package or class, not to the \LaTeX3 -project team. - -If the bug really is with core \LaTeX{} then you should create a -\emph{short}, \emph{self-contained} document which exhibits the -problem. You should run a \emph{recent} (less than a year old) -version of \LaTeX{} on the file and then run \LaTeX{} on -|latexbug.tex|. This will create an error report which you should -send, together with the sample document and log file, to the -\LaTeX{} bugs address which can be found in the file -|latexbug.tex| or |bugs.txt|. - - -\section{Enjoy!} -\label{Sec:enjoy} - -We certainly hope you will enjoy using the new standard \LaTeX{} but, -if this is not possible, we hope that you will enjoy success and -fulfillment as a result of the documents which it will help you to -create. - -If you find that the contribution of \LaTeX{} to your life is such -that you would like to support the work of the project team, then -please read Section~\ref{Sec:ltx3} and discover practical ways to do -this. - -\begin{thebibliography}{1} - -\bibitem{A-W:GRM97} -Michel Goossens, Sebastian Rahtz and Frank Mittelbach. -\newblock {\em The {\LaTeX} Graphics Companion}. -\newblock Addison-Wesley, Reading, Massachusetts, 1997. - - -\bibitem{A-W:GR99} -Michel Goossens and Sebastian Rahtz. -\newblock {\em The {\LaTeX} Web Companion}. -\newblock Addison-Wesley, Reading, Massachusetts, 1999. - - -\bibitem{A-W:DEK91} -Donald~E. Knuth. -\newblock {\em The \TeX book}. -\newblock Addison-Wesley, Reading, Massachusetts, 1986. -\newblock Revised to cover \TeX3, 1991. - - -\bibitem{A-W:LLa94} -Leslie Lamport. -\newblock {\em {\LaTeX:} A Document Preparation System}. -\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994. - -\bibitem{A-W:MG2004} -Frank Mittelbach and Michel Goossens. -\newblock {\em The {\LaTeX} Companion second edition}. -\newblock With Johannes Braams, David Carlisle, and Chris Rowley. -\newblock Addison-Wesley, Reading, Massachusetts, 2004. - - -\end{thebibliography} +sets the \cs{textheight} to the appropriate value if a page should +hold a specific number of text lines. Thus after |\calulateheight{40}| +it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given +the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip} +(\dimeval{\baselineskip}) in the current document. + +\section{Case changing} + +\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing +the case of text. However, these have a range of limitations: they only change +the case of explicit characters, do not account for the surrounding context, do +not support UTF-8 input with 8-bit engines, etc. To overcome this problem, +\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and +\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{} +primitives. These commands are engine-robust (\cs{protected}), and so +can be used in moving arguments. + +Upper- and lower-casing are well-understood in general conversation. +Titlecasing here follows the definition given by the Unicode Consortium: the +first character of the input will be converted to (broadly) uppercase, and the +rest of the input to lowercase. The full range of Unicode UTF-8 input can be +supported, with the proviso that at present the characters set up with 8-bit +engines match those available in standard input encodings (|T1|, |T2|, |LGR|). +\begin{quotation} + \begin{tabular}{rl} + |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\ + |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\ + |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\ + \end{tabular} +\end{quotation} + +The input given to these commands is `expanded' before case changing is +applied. This means that any commands within the input that convert to pure +text will be case changed. Mathematical content is automatically excluded, as +are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin} +and \cs{end}. Additional exclusions can be added using the command +\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the +command \cs{NoCaseChange}. +\begin{quotation} + \begin{tabular}{rl} + |\MakeUppercase{Some text $y = mx + c$}| + & \MakeUppercase{Some text $y = mx + c$} \\ + |\MakeUppercase{\NoCaseChange{iPhone}}| + & \MakeLowercase{\NoCaseChange{iPhone}} \\ + \end{tabular} +\end{quotation} + +To allow robust commands to be used within case changing \emph{and} to produce +the expected output, two additional control commands are available. +\cs{CaseSwitch} allows the user to specify the result for the four possible +cases +\begin{itemize} + \item No case changing + \item Uppercasing + \item Lowercasing + \item Titlecasing (only applies for the start of the input) +\end{itemize} +The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a +command by an alternative version when it is found inside a case changing +situation. \end{document} diff --git a/macros/latex-dev/base/usrguide3.pdf b/macros/latex-dev/base/usrguide3.pdf deleted file mode 100644 index 40a7c85f38..0000000000 Binary files a/macros/latex-dev/base/usrguide3.pdf and /dev/null differ diff --git a/macros/latex-dev/base/usrguide3.tex b/macros/latex-dev/base/usrguide3.tex deleted file mode 100644 index a148c77ed5..0000000000 --- a/macros/latex-dev/base/usrguide3.tex +++ /dev/null @@ -1,1112 +0,0 @@ -% \iffalse meta-comment -% -% Copyright (C) 2020-2022 -% The LaTeX Project and any individual authors listed elsewhere -% in this file. -% -% This file is part of the LaTeX base system. -% ------------------------------------------- -% -% It may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3c -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3c or later is part of all distributions of LaTeX -% version 2008 or later. -% -% This file has the LPPL maintenance status "maintained". -% -% The list of all files belonging to the LaTeX base distribution is -% given in the file `manifest.txt'. See also `legal.txt' for additional -% information. -% -% The list of derived (unpacked) files belonging to the distribution -% and covered by LPPL is defined by the unpacking scripts (with -% extension .ins) which are part of the distribution. -% -% \fi -% Filename: usrguide3.tex - -\documentclass{ltxguide} - -\usepackage[T1]{fontenc} % needed for \textbackslash in tt -\usepackage{csquotes} - -\title{New \LaTeX\ methods for authors (starting 2020)} -\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\ - All rights reserved.} - -\date{2022-07-05} - -\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}} -\NewDocumentCommand\marg{m}{\arg{#1}} -\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}} -\NewDocumentCommand\pkg{m}{\textsf{#1}} -\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi} -% Fix a 'feature' -\makeatletter -\renewcommand \verbatim@font {\normalfont \ttfamily} -\makeatother - - -% for fpeval documentation - -\providecommand\fpop[1]{\mathop{\texttt{#1}}} -\providecommand\fpbin[1]{\mathbin{\texttt{#1}}} -\providecommand\fprel[1]{\mathrel{\texttt{#1}}} -\providecommand\nan{\texttt{NaN}} - -\ExplSyntaxOn -\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } -\ExplSyntaxOff - -\begin{document} - -\maketitle - -\tableofcontents - -\section{Introduction} - -\LaTeXe{} was released in 1994 and added a number of then-new concepts to -\LaTeX{}. These are described in \texttt{usrguide}, which has largely remained -unchanged. Since then, the \LaTeX{} team have worked on a number of ideas, -firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of -tools for document authors which build on that language. Here, we describe -\emph{stable} and \emph{widely-usable} concepts that have resulted from that -work. These `new' ideas have been transferred from development packages -into the \LaTeXe{} kernel. As such, they are now available to \emph{all} -\LaTeX{} users and have the \emph{same stability} as any other part of the -kernel. The fact that `behind the scenes' they are built on \pkg{expl3} -is useful for the development team, but is not directly important to users. - -\section{Creating document commands and environments} - -\subsection{Overview} - -Creating document commands and environments using the \LaTeX3 toolset is based -around the idea that a common set of descriptions can be used to cover almost -all argument types used in real documents. Thus parsing is reduced to a simple -description of which arguments a command takes: this description provides the -`glue' between the document syntax and the implementation of the -command. - -First, we will describe the argument types, then move on to explain how these -can be used to create both document commands and environments. Various more -specialized features are then described, which allow an even richer application -of a simple interface set up. - -The details here are intended to help users create document commands in -general. More technical detail, suitable for \TeX{} programmers, is included -in \texttt{interface3}. - -\subsection{Describing argument types} - -In order to allow each argument to be defined independently, the parser does -not simply need to know the number of arguments for a function, but also the -nature of each one. This is done by constructing an \emph{argument -specification}, which defines the number of arguments, the type of each -argument and any additional information needed for the parser to read the user -input and properly pass it through to internal functions. - -The basic form of the argument specifier is a list of letters, where each -letter defines a type of argument. As will be described below, some of the -types need additional information, such as default values. The argument types -can be divided into two, those which define arguments that are mandatory -(potentially raising an error if not found) and those which define optional -arguments. The mandatory types -\begin{itemize} - \item[\texttt{m}] A standard mandatory argument, which can either be a single token - alone or multiple tokens surrounded by curly braces |{}|. Regardless of the - input, the argument will be passed to the internal code without the outer - braces. This is the type specifier for a normal \TeX{} argument. - \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a - `required' delimited argument, where the delimiters are - \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is - missing, the default marker |-NoValue-| will be inserted after a suitable - error. - \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default}, - this is a `required' delimited argument as for~\texttt{r}, - but it has a user-definable recovery \meta{default} instead of - |-NoValue-|. - \item[\texttt{v}] Reads an argument `verbatim', between the following - character and its next occurrence, in a way similar to the argument - of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument - is read between two identical characters, which cannot be any of |%|, |\|, - |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed - between braces, |{| and |}|. A command with a verbatim argument will - produce an error when it appears within an argument of another function. - \item[\texttt{b}] Only suitable in the argument specification of an - environment, it denotes the body of the environment, between - |\begin|\marg{environment} and |\end|\marg{environment}. See - Section~\ref{sec:cmd:body} for details. -\end{itemize} -The types which define optional arguments are: -\begin{itemize} - \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square - brackets, which will supply the special |-NoValue-| marker if not given - (as described later). - \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional - argument which is delimited by \meta{token1} and \meta{token2}. As with - \texttt{o}, if no value is given the special marker |-NoValue-| is - returned. - \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns - \meta{default} if no value is given. - \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is - as for \texttt{d}, but returns \meta{default} if no value is given. - Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are - short-cuts to an appropriated-constructed \texttt{D} type argument. - \item[\texttt{s}] An optional star, which will result in a value - \cs{BooleanTrue} if a star is present and \cs{BooleanFalse} - otherwise (as described later). - \item[\texttt{t}] An optional \meta{token}, which will result in a value - \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse} - otherwise. Given as \texttt{t}\meta{token}. - \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional - \emph{embellishments}, each of which requires a \emph{value}. - If an embellishment is not present, |-NoValue-| is returned. Each - embellishment gives one argument, ordered as for the list of - \meta{tokens} in the argument specification. All \meta{tokens} - must be distinct. - \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults} - if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See - Section~\ref{sec:cmd:embellishment} for more details. -\end{itemize} - -\subsection{Modifying argument descriptions} - -In addition to the argument \emph{types} discussed above, the argument -description also gives special meaning to three other characters. - -First, \texttt{+} is used to make an argument long (to accept paragraph -tokens). In contrast to \cs{newcommand}, this applies on an -argument-by-argument basis. So modifying the example to `|s o o +m O{default}|' -means that the mandatory argument is now \cs{long}, whereas the optional -arguments are not. - -Secondly, \texttt{!} is used to control whether spaces are allowed before -optional arguments. There are some subtleties to this, as \TeX{} itself -has some restrictions on where spaces can be `detected': more detail -is given in Section~\ref{sec:cmd:opt-space}. - -Finally, the character \texttt{>} is used to declare so-called -`argument processors', which can be used to modify the contents of an -argument before it is passed to the macro definition. The use of argument -processors is a somewhat advanced topic, (or at least a less commonly used -feature) and is covered in Section~\ref{sec:cmd:processors}. - -\subsection{Creating document commands and environments} - -\begin{decl} - |\NewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\RenewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} -\end{decl} -This family of commands are used to create a \meta{cmd}. The argument -specification for the function is given by \meta{arg spec}, and the command -uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found -by the parser. - -An example: -\begin{verbatim} - \NewDocumentCommand\chapter{s o m} - {% - \IfBooleanTF{#1}% - {\typesetstarchapter{#3}}% - {\typesetnormalchapter{#2}{#3}}% - } -\end{verbatim} -would be a way to define a \cs{chapter} command which would essentially behave -like the current \LaTeXe{} command (except that it would accept an optional -argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter} -could test its first argument for being |-NoValue-| to see if an optional -argument was present. (See Section~\ref{sec:cmd:special} for details of -\cs{IfBooleanTF} and testing for |-NoValue-|.) - -The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...} -and \cs{Declare...} versions is the behavior if \meta{cmd} is already -defined. -\begin{itemize} - \item \cs{NewDocumentCommand} will issue an error if \meta{cmd} - has already been defined. - \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd} - has not previously been defined. - \item \cs{ProvideDocumentCommand} creates a new definition for - \meta{function} only if one has not already been given. - \item \cs{DeclareDocumentCommand} will always create the new - definition, irrespective of any existing \meta{cmd} with the - same name. This should be used sparingly. -\end{itemize} - -If the \meta{cmd} can't be provided as a single token but needs -\enquote{constructing}, you can use \cs{ExpandArgs} as explained in -Section~\ref{sec:preconstructing-csnames} which also gives an example -in which this is needed. - -\begin{decl} - |\NewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\RenewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} -\end{decl} -These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but -create environments (\cs{begin}\arg{env} \ldots{} -\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code} -may access the arguments as defined by \meta{arg spec}. The arguments will be -given following \cs{begin}\arg{env}. - -\subsection{Optional arguments} -\label{sec:cmd:opt} - -In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional -arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for -example, following -\begin{verbatim} -\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'} -\NewDocumentCommand\baz{o}{#1-#1} -\end{verbatim} -using the command as -\begin{verbatim} -\foo[\baz[stuff]]{more stuff} -\end{verbatim} -will print -\begin{quote} -I grabbed `stuff-stuff' and `more stuff' -\end{quote} -This is particularly useful when placing a command with an optional argument -\emph{inside} the optional argument of a second command. - -When an optional argument is followed by a mandatory argument with the same -delimiter, the parser issues a warning because the optional argument could not -be omitted by the user, thus becoming in effect mandatory. This can apply to -\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t}, -\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or -\texttt{R}-type required arguments. - -The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be -the result of grabbing another argument. Thus for example -\begin{verbatim} - \NewDocumentCommand\foo{O{#2} m} -\end{verbatim} -would use the mandatory argument as the default for the leading optional -one. - -\subsection{Spacing and optional arguments} -\label{sec:cmd:opt-space} - -\TeX{} will find the first argument after a function name irrespective of any -intervening spaces. This is true for both mandatory and optional arguments. So -|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when -collecting arguments up to the last mandatory argument to be collected (as it -must exist). So after -\begin{verbatim} - \NewDocumentCommand\foo{m o m}{ ... } -\end{verbatim} -the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}| -will both be parsed in the same way. - -The behavior of optional arguments \emph{after} any mandatory arguments is -selectable. The standard settings will allow spaces here, and thus with -\begin{verbatim} - \NewDocumentCommand\foobar{m o}{ ... } -\end{verbatim} -both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an -optional argument. This can be changed by giving the modified |!| in the -argument specification: -\begin{verbatim} - \NewDocumentCommand\foobar{m !o}{ ... } -\end{verbatim} -where \verb*|\foobar{arg1} [arg2]| will not find an optional argument. - -There is one subtlety here due to the difference in handling by \TeX{} of -`control symbols', where the command name is made up of a single -character, such as `\texttt{\textbackslash\textbackslash}'. -Spaces are not ignored by \TeX{} here, -and thus it is possible to require an optional argument directly follow such a -command. The most common example is the use of \texttt{\textbackslash\textbackslash} -in \pkg{amsmath} environments, which in the terms here would be defined as -\begin{verbatim} - \NewDocumentCommand\\{!s !o}{ ... } -\end{verbatim} - -\subsection{`Embellishments'} -\label{sec:cmd:embellishment} - -The \texttt{E}-type argument allows one default value per test token. This is -achieved by giving a list of defaults for each entry in the list, for example: -\begin{verbatim} - E{^_}{{UP}{DOWN}} -\end{verbatim} -If the list of default values is \emph{shorter} than the list of test tokens, -the special |-NoValue-| marker will be returned (as for the \texttt{e}-type -argument). Thus for example -\begin{verbatim} - E{^_}{{UP}} -\end{verbatim} -has default \texttt{UP} for the |^| test character, but will return the -|-NoValue-| marker as a default for |_|. This allows mixing of explicit -defaults with testing for missing values. - - -\subsection{Testing special values} -\label{sec:cmd:special} - -Optional arguments make use of dedicated variables to return information about -the nature of the argument received. - - - -\begin{decl} - |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfNoValueT| \arg{arg} \arg{true code} \\ - |\IfNoValueF| \arg{arg} \arg{false code} -\end{decl} -The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|, -|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example -\begin{verbatim} - \NewDocumentCommand\foo{o m} - {% - \IfNoValueTF {#1}% - {\DoSomethingJustWithMandatoryArgument{#2}}% - {\DoSomethingWithBothArguments{#1}{#2}}% - } -\end{verbatim} -will use a different internal function if the optional argument -is given than if it is not present. - -Note that three tests are available, depending on which outcome -branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and -\cs{IfNoValueF}. - -As the \cs{IfNoValue(TF)} tests are expandable, it is possible to -test these values later, for example at the point of typesetting or -in an expansion context. - -It is important to note that |-NoValue-| is constructed such that it -will \emph{not} match the simple text input |-NoValue-|, i.e.~that -\begin{verbatim} - \IfNoValueTF{-NoValue-} -\end{verbatim} -will be logically \texttt{false}. -When two optional arguments follow each other (a syntax we typically -discourage), it can make sense to allow users of the command to -specify only the second argument by providing an empty first -argument. -\NEWdescription{2022/06/01} -Rather than testing separately for emptiness and for -|-NoValue-| it is then best to use the argument type~|O| with an -empty default value, and then test for emptiness using the -conditional \cs{IfBlankTF} (described below) instead. - -\begin{decl} - |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfValueT| \arg{arg} \arg{true code} \\ - |\IfValueF| \arg{arg} \arg{false code} -\end{decl} -The reverse form of the \cs{IfNoValue(TF)} tests are also available -as \cs{IfValue(TF)}. The context will determine which logical -form makes the most sense for a given code scenario. - - - - - -\begin{decl}[2022/06/01] - |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfBlankT| \arg{arg} \arg{true code} \\ - |\IfBlankF| \arg{arg} \arg{false code} -\end{decl} - - -The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not -been used at all (and it returns the special \texttt{-NoValue-} -marker), but not if it has been given an empty value. In contrast -\cs{IfBlankTF} returns true if its argument is either truly empty or -only contains one or more normal blanks. -For example -\begin{verbatim} -\NewDocumentCommand\foo{m!o}{\par #1: - \IfNoValueTF{#2}{No optional}% - {\IfBlankTF{#2}{Blanks in or empty}% - {Real content in}}% - \space argument!} -\foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] -\end{verbatim} -results -in the following output: -\begin{quote} - \NewDocumentCommand\foo{m!o}{\par #1: - \IfNoValueTF{#2}{No optional}% - {\IfBlankTF{#2}{Blanks in or empty}% - {Real content in}}% - \space argument!} - \foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] -\end{quote} - -Note that the \cs{space} in (4) is considered real content---because it is -a command and not a \enquote{space} character---even though it results -in producing a space. You can also observe in (5) the effect of the -\texttt{!} specifier, preventing the last \cs{foo} -from interpreting \texttt{[x]} as its optional argument. - - - - -\begin{decl} - |\BooleanFalse| \\ - |\BooleanTrue| -\end{decl} -The \texttt{true} and \texttt{false} flags set when searching for -an optional character (using \texttt{s} or \texttt{t\meta{char}}) have -names which are accessible outside of code blocks. - -\begin{decl} - |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfBooleanT| \arg{arg} \arg{true code} \\ - |\IfBooleanF| \arg{arg} \arg{false code} -\end{decl} -Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is -\cs{BooleanTrue} or \cs{BooleanFalse}. For example -\begin{verbatim} - \NewDocumentCommand\foo{sm} - {% - \IfBooleanTF {#1}% - {\DoSomethingWithStar{#2}}% - {\DoSomethingWithoutStar{#2}}% - } -\end{verbatim} -checks for a star as the first argument, then chooses the action to -take based on this information. - -\subsection{Argument processors} -\label{sec:cmd:processors} - -Argument processor are applied to an argument \emph{after} it has been grabbed -by the underlying system but before it is passed to \meta{code}. An argument -processor can therefore be used to regularize input at an early stage, allowing -the internal functions to be completely independent of input form. Processors -are applied to user input and to default values for optional arguments, but -\emph{not} to the special |-NoValue-| marker. - -Each argument processor is specified by the syntax \texttt{>}\marg{processor} -in the argument specification. Processors are applied from right to left, so -that -\begin{verbatim} - >{\ProcessorB} >{\ProcessorA} m -\end{verbatim} -would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed -by the \texttt{m} argument. - -\begin{decl} - |\SplitArgument| \arg{number} \arg{token(s)} -\end{decl} -This processor splits the argument given at each occurrence of the -\meta{tokens} up to a maximum of \meta{number} tokens (thus -dividing the input into $\text{\meta{number}} + 1$ parts). -An error is given if too many \meta{tokens} are present in the -input. The processed input is placed inside -$\text{\meta{number}} + 1$ sets of braces for further use. -If there are fewer than \arg{number} of \arg{tokens} in the argument -then |-NoValue-| markers are added at the end of the processed -argument. -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m} - {\InternalFunctionOfThreeArguments#1} -\end{verbatim} -If only a single character \meta{token} is used for the split, any -category code $13$ (active) character matching the \meta{token} will -be replaced before the split takes place. -Spaces are trimmed at each end of each item parsed. - -The \texttt{E} argument type is somewhat special, because with a single -\texttt{E} in the command declaration you may end up with several -arguments in a command (one formal argument per embellishment token). -Therefore, when an argument processor is applied to an \texttt{E}-type -argument, all the arguments pass through that processor before being fed -to the \meta{code}. For example, this command -\begin{verbatim} - \NewDocumentCommand \foo { >{\TrimSpaces} e{_^} } - { [#1](#2) } -\end{verbatim} -applies \cs{TrimSpaces} to both arguments. - -\begin{decl} - |\SplitList| \arg{token(s)} -\end{decl} -This processor splits the argument given at each occurrence of the -\meta{token(s)} where the number of items is not fixed. Each item is -then wrapped in braces within |#1|. The result is that the -processed argument can be further processed using a mapping function -(see below). -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitList{;}} m} - {\MappingFunction#1} -\end{verbatim} -If only a single character \meta{token} is used for the split, any -category code $13$ (active) character matching the \meta{token} will -be replaced before the split takes place. -Spaces are trimmed at each end of each item parsed. - -\begin{decl} - |\ProcessList| \arg{list} \arg{function} -\end{decl} -To support \cs{SplitList}, the function \cs{ProcessList} is available -to apply a \meta{function} to every entry in a \meta{list}. The -\meta{function} should absorb one argument: the list entry. For example -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitList{;}} m} - {\ProcessList{#1}{\SomeDocumentCommand}} -\end{verbatim} - -\begin{decl} - |\ReverseBoolean| -\end{decl} -This processor reverses the logic of \cs{BooleanTrue} and -\cs{BooleanFalse}, so that the example from earlier would become -\begin{verbatim} - \NewDocumentCommand\foo{>{\ReverseBoolean} s m} - {% - \IfBooleanTF#1% - {\DoSomethingWithoutStar{#2}}% - {\DoSomethingWithStar{#2}}% - } -\end{verbatim} - -\begin{decl} - |\TrimSpaces| -\end{decl} -Removes any leading and trailing spaces (tokens with character code~$32$ -and category code~$10$) for the ends of the argument. Thus for example -declaring a function -\begin{verbatim} - \NewDocumentCommand\foo {>{\TrimSpaces} m} - {\showtokens{#1}} -\end{verbatim} -and using it in a document as -\begin{flushleft} - \verb= =\verb*=\foo{ hello world }= -\end{flushleft} -will show `\verb*=hello world=' at the terminal, with the space at each -end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of -the input in cases where these have been included such that the standard -\TeX{} conversion of multiple spaces to a single space does not apply. - -\subsection{Body of an environment} -\label{sec:cmd:body} - -While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment} -are typically used in cases where the code implementing the \meta{environment} -does not need to access the contents of the environment (its `body'), -it is sometimes useful to have the body as a standard argument. - -This is achieved by ending the argument specification with~\texttt{b}, which is -a dedicated argument type for this situation. For instance -\begin{verbatim} - \NewDocumentEnvironment{twice} {O{\ttfamily} +b} - {#2#1#2} {} -\end{verbatim} -\begin{verbatim} - \begin{twice}[\itshape] - Hello world! - \end{twice} -\end{verbatim} -typesets `Hello world!{\itshape Hello world!}'. - -The prefix |+| is used to allow multiple paragraphs in the environment's body. -Argument processors can also be applied to \texttt{b}~arguments. By default, -spaces are trimmed at both ends of the body: in the example there would -otherwise be spaces coming from the ends the lines after |[\itshape]| and -|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming. - -When \texttt{b} is used in the argument specification, the last -argument of the environment declaration (e.g., -\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to -insert at |\end|\marg{environment}, is redundant since one can simply -put that code at the end of the \meta{start code}. Nevertheless this -(empty) \meta{end code} must be provided. - -Environments that use this feature can be nested. - -\subsection{Fully-expandable document commands} - -Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally -created so that they do not expand unexpectedly. This is done using engine -features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There -are \emph{very rare} occasion when it may be useful to create functions using a -expansion-only grabber. This imposes a number of restrictions on the -nature of the arguments accepted by a function, and the code it implements. -This facility should only be used when \emph{absolutely necessary}. - -\begin{decl} - |\NewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\RenewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} -\end{decl} -This family of commands is used to create a document-level \meta{function}, -which will grab its arguments in a fully-expandable manner. The -argument specification for the function is given by \meta{arg spec}, -and the function will execute \meta{code}. In general, \meta{code} will -also be fully expandable, although it is possible that this will -not be the case (for example, a function for use in a table might -expand so that \cs{omit} is the first non-expandable non-space token). - -Parsing arguments by pure expansion imposes a number of restrictions on -both the type of arguments that can be read and the error checking -available: -\begin{itemize} - \item The last argument (if any are present) must be one of the - mandatory types \texttt{m}, \texttt{r} or \texttt{R}. - \item The `verbatim' argument type \texttt{v} is not available. - \item Argument processors (using \texttt{>}) are not available. - \item It is not possible to differentiate between, for example - |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be - interpreted as the start of an optional argument. As a - result, checking for optional arguments is less robust than - in the standard version. -\end{itemize} - -\subsection{Details about argument delimiters} - -In normal (non-expandable) commands, the delimited types look for the -initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...| -functions) looking for the delimiter token. The token has to have the -same meaning and `shape' of the token defined as delimiter. -There are three possible cases of delimiters: character tokens, control -sequence tokens, and active character tokens. For all practical purposes -of this description, active character tokens will behave exactly as -control sequence tokens. - -\subsubsection{Character tokens} - -A character token is characterized by its character code, and its meaning -is the category code~(|\catcode|). When a command is defined, the meaning -of the character token is fixed into the definition of the command and -cannot change. A command will correctly see an argument delimiter if -the open delimiter has the same character and category codes as at the -time of the definition. For example in: -\begin{verbatim} - \NewDocumentCommand { \foobar } { D<>{default} } {(#1)} -\end{verbatim} -\begin{verbatim} - \foobar \par - \char_set_catcode_letter:N < - \foobar -\end{verbatim} -the output would be: -\begin{verbatim} - (hello) - (default) -\end{verbatim} -as the open-delimiter |<| changed in meaning between the two calls to -|\foobar|, so the second one doesn't see the |<| as a valid delimiter. -Commands assume that if a valid open-delimiter was found, a matching -close-delimiter will also be there. If it is not (either by being -omitted or by changing in meaning), a low-level \TeX{} error is raised -and the command call is aborted. - -\subsubsection{Control sequence tokens} - -A control sequence (or control character) token is characterized by is -its name, and its meaning is its definition. -A token cannot have two different meanings at the same time. -When a control sequence is defined as delimiter in a command, -it will be detected as delimiter whenever the control sequence name -is found in the document regardless of its current definition. -For example in: -\begin{verbatim} - \cs_set:Npn \x { abc } - \NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)} - \foobar \x hello\y \par - \cs_set:Npn \x { def } - \foobar \x hello\y -\end{verbatim} -the output would be: -\begin{verbatim} - (hello) - (hello) -\end{verbatim} -with both calls to the command seeing the delimiter |\x|. - -\subsection{Creating new argument processors} - -\begin{decl} - |\ProcessedArgument| -\end{decl} -Argument processors allow manipulation of a grabbed argument before it is -passed to the underlying code. New processor implementations may be created -as functions which take one trailing argument, and which leave their result in -the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is -defined as -\begin{verbatim} -\ExplSyntaxOn - \cs_new_protected:Npn \ReverseBoolean #1 - { - \bool_if:NTF #1 - { \tl_set:Nn \ProcessedArgument { \c_false_bool } } - { \tl_set:Nn \ProcessedArgument { \c_true_bool } } - } -\ExplSyntaxOff -\end{verbatim} -[As an aside: the code is written in \pkg{expl3}, so we don't have to - worry about spaces creeping into the definition.] - -\subsection{Access to the argument specification} - -The argument specifications for document commands and environments are -available for examination and use. - -\begin{decl} - |\GetDocumentCommandArgSpec| \arg{function} \\ - |\GetDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These functions transfer the current argument specification for the -requested \meta{function} or \meta{environment} into the token list -variable \cs{ArgumentSpecification}. If the \meta{function} or -\meta{environment} has no known argument specification then an error -is issued. The assignment to \cs{ArgumentSpecification} is local to -the current \TeX{} group. - -\begin{decl} - |\ShowDocumentCommandArgSpec| \arg{function} \\ - |\ShowDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These functions show the current argument specification for the -requested \meta{function} or \meta{environment} at the terminal. If -the \meta{function} or \meta{environment} has no known argument -specification then an error is issued. - - - -\section{Copying and showing (robust) commands} - -If you want to (slightly) alter an existing command you may want to -save the current definition under a new name and then use that in a -new definition. If the existing command is robust, then the old trick of -using the low-level \cs{let} for this doesn't work, because it only -copies the top-level definition, but not the part that actually does -the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{} -now offers some high-level declarations for this instead. - -However, please note that it is usually better to make use of -available hooks (e.g., the generic command or environment hooks), -instead of copying the current definition and thereby freezing it; see -the hook management documentation \texttt{lthooks-doc.pdf} for -details. - -\begin{decl} - |\NewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ - |\RenewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ - |\DeclareCommandCopy| \arg{cmd} \arg{existing-cmd} -\end{decl} - -This copies the definition of \meta{existing-cmd} to \meta{cmd}. After -this \meta{existing-cmd} can be redefined and \meta{cmd} -still works! This allows you to then provide a new definition for -\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old -definition). For example, after -\begin{verbatim} - \NewCommandCopy\LaTeXorig\LaTeX - \RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}} -\end{verbatim} -all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue -(assuming you have a color package loaded). - -The differences between \cs{New...} and \cs{Renew...} are as -elsewhere: i.e., you get an error depending on whether or not -\meta{cmd} already exists, or in case of \cs{Declare...} it is copied -regardless. Note that there is no \cs{Provide...} declaration, because -that would be of limited value. - - -If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single -token but need \enquote{constructing}, you can use \cs{ExpandArgs} -as explained in -Section~\ref{sec:preconstructing-csnames}. - - - - -\begin{decl} - |\ShowCommand| \arg{cmd} -\end{decl} - -This displays the meaning of the \meta{cmd} on the terminal and then -stops (just like the primitive \cs{show}). The difference is that it -correctly shows the meaning of more complex commands, e.g., in case of -robust commands it displays not only the top-level definition but -also the actual payload code and in case of commands declared with -\cs{NewDocumentCommand}, etc.\ it also gives you detailed information -about the argument signature. - - -\section[Preconstructing command names \\ (or otherwise expanding arguments)] - {Preconstructing command names (or otherwise expanding arguments)} -\label{sec:preconstructing-csnames} - -When declaring new commands with \cs{NewDocumentCommand} or -\cs{NewCommandCopy} or similar, it is sometimes necessary to -``construct'' the csname. As a general mechanism the L3 programming -layer has \cs{exp_args:N...} for this, but there is no mechanism for -it if \cs{ExplSyntaxOn} is not active (and mixing programming and user -interface level commands is not a good approach anyhow). We therefore -offer a mechanism to access this ability using CamelCase naming. - -\begin{decl} - |\UseName| \arg{string} \\ - |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots -\end{decl} - -\cs{UseName} turns the \meta{string} directly into a csname and -then executes it: this is equivalent to the long-standing -\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming -equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which -describes how to expand the \meta{arguments}, carries out these -operations then executes the \meta{cmd}. The \meta{spec} uses -the descriptions offered by the L3 programming layer, and the -relevant \cs{exp_args:N...} function must exist. Common cases will -have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below. - -As an example, the following declaration provides a method to generate -copyedit commands: -\begin{verbatim} -\NewDocumentCommand\newcopyedit{mO{red}} - {\newcounter{todo#1}% - \ExpandArgs{c}\NewDocumentCommand{#1}{s m}% - {\stepcounter{todo#1}% - \IfBooleanTF {##1}% - {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}% - {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}% - }% - } -\end{verbatim} -Given that declaration you can then write -\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note} -and the corresponding counter for you. - -A second example is to copy a command by string name using -\cs{NewCommandCopy}: here we might need to construct both command -names. -\begin{verbatim} -\NewDocumentCommand\savebyname{m} - {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}} -\end{verbatim} - -In the \meta{spec} each \texttt{c} stands for one argument that is -turned into a `\texttt{c}'ommand. An \texttt{n} represents a -`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for -a `\texttt{N}'ormal argument which is also left unchanged, but one -consisting only of a single token (and usually unbraced). Thus, to -construct a command from a string only for the second argument of -\cs{NewCommandCopy} you would write -\begin{verbatim} -\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c@section} -\end{verbatim} -There are several other single letters supported in the L3 programming -layer that \emph{could} be used in the \meta{spec} to manipulate -arguments in other ways. If you are interested, take a look at the -\enquote{Argument expansion} section in the L3 programming layer -documentation in \texttt{interface3.pdf}. - - - -\section{Expandable floating point (and other) calculations} - -The \LaTeX3 programming layer which is part of the format offers a -rich interface to manipulate floating point variables and values. To -allow for (simpler) applications to use this on document-level or in -packages otherwise not making use of the L3 programming layer a few -interface commands are made available. - - -\begin{decl} - |\fpeval| \arg{floating point expression} -\end{decl} - -The expandable command \cs{fpeval} takes as its argument a floating -point expression and produces a result using the normal rules of -mathematics. As this command is expandable it can be used where \TeX{} -requires a number and for example within a low-level \cs{edef} operation -to give a purely numerical result. - - - -Briefly, the floating point expressions may comprise: -\begin{itemize} - \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$, - multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$, - and parentheses. - \item Comparison operators: $x\fprel{<}y$, - $x\fprel{<=}y$, $x\fprel{>?}y$, - $x\fprel{!=}y$ \emph{etc.} - \item Boolean logic: sign $\fpop{sign} x$, - negation $\fpop{!}x$, conjunction - $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary - operator $x\fprel{?}y\fprel{:}z$. - \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$. - \item Integer factorial: $\fpop{fact} x$. - \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec} - x$, $\fpop{csc} x$ expecting their arguments in radians, and - $\fpop{sind} x$, $\fpop{cosd} x$, - $\fpop{tand} x$, $\fpop{cotd} x$, - $\fpop{secd} x$, $\fpop{cscd} x$ expecting their - arguments in degrees. - \item Inverse trigonometric functions: $\fpop{asin} x$, - $\fpop{acos} x$, $\fpop{atan} x$, - $\fpop{acot} x$, $\fpop{asec} x$, - $\fpop{acsc} x$ giving a result in radians, and - $\fpop{asind} x$, $\fpop{acosd} x$, - $\fpop{atand} x$, $\fpop{acotd} x$, - $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result - in degrees. - \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$, - $\fpop{abs}(x)$. - \item Rounding functions, controlled by two optional - values, $n$ (number of places, $0$ by default) and - $t$ (behavior on a tie, $\nan$ by default): - \begin{itemize} - \item $\fpop{trunc}(x,n)$ rounds towards zero, - \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$, - \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$, - \item $\fpop{round}(x,n,t)$ rounds to the closest value, with - ties rounded to an even value by default, towards zero if $t=0$, - towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$. - \end{itemize} - \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$. - \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians). - \item Dimensions, automatically expressed in points, \emph{e.g.}, - \texttt{pc} is~$12$. - \item Automatic conversion (no need for \cs{number}) of - integer, dimension, and skip variables to floating points numbers, - expressing dimensions in points and ignoring the stretch and - shrink components of skips. - \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together, - multiplied or divided by a floating point number, and nested. -\end{itemize} - -An example of use could be the following: -\begin{verbatim} - \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} - = \fpeval{sin(3.5)/2 + 2e-3} $. -\end{verbatim} -which produces the following output: -\begin{quote} - \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} - = \fpeval{sin(3.5)/2 + 2e-3} $. -\end{quote} - -\begin{decl} - |\inteval| \arg{integer expression} -\end{decl} - - The expandable command \cs{inteval} takes as its argument an integer - expression and produces a result using the normal rules of - mathematics with some restrictions, see below. The operations - recognized are |+|, |-|, |*| and |/| plus parentheses. As this - command is expandable it can be used where \TeX{} requires a number - and for example within a low-level \cs{edef} operation to give a - purely numerical result. - - This is basically a thin wrapper for the primitive \cs{numexpr} - command and therefore has some syntax restrictions. These are: - \begin{itemize} - \item \texttt{/} denotes division rounded to the closest integer with - ties rounded away from zero; - \item there is an error and the overall expression evaluates to zero - whenever the absolute value of any intermediate result exceeds - $2^{31}-1$, except in the case of scaling operations - $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be - arbitrarily large; - \item parentheses may not appear after unary \texttt{+} or - \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start - of an expression or after \texttt{+}, \texttt{-}, \texttt{*}, - \texttt{/} or~\texttt{(} leads to an error. - \end{itemize} - -An example of use could be the following. -\begin{verbatim} -\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$. -\end{verbatim} -which results in -\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.} - - -\begin{decl} - |\dimeval| \arg{dimen expression} \qquad - |\skipeval| \arg{skip expression} -\end{decl} - -Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a -rubber length (\texttt{skip}) value. Both are thin wrappers around -the corresponding engine primitives, which makes them fast, but -therefore shows the same syntax peculiars as discussed -above. Nevertheless, in practice they are usually sufficient. For -example -\begin{verbatim} -\newcommand\calulateheight[1]{% - \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}} -\end{verbatim} -sets the \cs{textheight} to the appropriate value if a page should -hold a specific number of text lines. Thus after |\calulateheight{40}| -it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given -the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip} -(\dimeval{\baselineskip}) in the current document. - -\section{Case changing} - -\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing -the case of text. However, these have a range of limitations: they only change -the case of explicit characters, do not account for the surrounding context, do -not support UTF-8 input with 8-bit engines, etc. To overcome this problem, -\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and -\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{} -primitives. These commands are engine-robust (\cs{protected}), and so -can be used in moving arguments. - -Upper- and lower-casing are well-understood in general conversation. -Titlecasing here follows the definition given by the Unicode Consortium: the -first character of the input will be converted to (broadly) uppercase, and the -rest of the input to lowercase. The full range of Unicode UTF-8 input can be -supported, with the proviso that at present the characters set up with 8-bit -engines match those available in standard input encodings (|T1|, |T2|, |LGR|). -\begin{quotation} - \begin{tabular}{rl} - |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\ - |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\ - |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\ - \end{tabular} -\end{quotation} - -The input given to these commands is `expanded' before case changing is -applied. This means that any commands within the input that convert to pure -text will be case changed. Mathematical content is automatically excluded, as -are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin} -and \cs{end}. Additional exclusions can be added using the command -\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the -command \cs{NoCaseChange}. -\begin{quotation} - \begin{tabular}{rl} - |\MakeUppercase{Some text $y = mx + c$}| - & \MakeUppercase{Some text $y = mx + c$} \\ - |\MakeUppercase{\NoCaseChange{iPhone}}| - & \MakeLowercase{\NoCaseChange{iPhone}} \\ - \end{tabular} -\end{quotation} - -To allow robust commands to be used within case changing \emph{and} to produce -the expected output, two additional control commands are available. -\cs{CaseSwitch} allows the user to specify the result for the four possible -cases -\begin{itemize} - \item No case changing - \item Uppercasing - \item Lowercasing - \item Titlecasing (only applies for the start of the input) -\end{itemize} -The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a -command by an alternative version when it is found inside a case changing -situation. - -\end{document} diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf index ff3d528a12..1633aff353 100644 Binary files a/macros/latex-dev/base/utf8ienc.pdf and b/macros/latex-dev/base/utf8ienc.pdf differ diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf index 2d1f29c35b..db1a1e9eba 100644 Binary files a/macros/latex-dev/base/webcomp.pdf and b/macros/latex-dev/base/webcomp.pdf differ diff --git a/macros/latex-dev/required/tools/README.md b/macros/latex-dev/required/tools/README.md index 3bf98ed1d4..23e3aca34f 100644 --- a/macros/latex-dev/required/tools/README.md +++ b/macros/latex-dev/required/tools/README.md @@ -1,7 +1,7 @@ The LaTeX `tools` bundle ======================== -Release 2022-11-01 pre-release 0 +Release 2022-11-01 pre-release 2 Overview -------- diff --git a/macros/latex-dev/required/tools/afterpage.pdf b/macros/latex-dev/required/tools/afterpage.pdf index 3901fce58e..a63eabaf5d 100644 Binary files a/macros/latex-dev/required/tools/afterpage.pdf and b/macros/latex-dev/required/tools/afterpage.pdf differ diff --git a/macros/latex-dev/required/tools/array.dtx b/macros/latex-dev/required/tools/array.dtx index c9f77d77a3..4b163b5f18 100644 --- a/macros/latex-dev/required/tools/array.dtx +++ b/macros/latex-dev/required/tools/array.dtx @@ -33,7 +33,7 @@ %<+package>\DeclareCurrentRelease{}{2020-10-01} %<+package> %<+package>\ProvidesPackage{array} -%<+package> [2022/03/10 v2.5f Tabular extension package (FMi)] +%<+package> [2022/09/04 v2.5g Tabular extension package (FMi)] % % \fi % @@ -1727,14 +1727,20 @@ % % For that reason the new implementation does the centering % manually: First we check the height of the cell and if that is -% less or equal to =\ht\@arstrutbox= we assume that this is a +% less or equal to =\ht\strutbox= we assume that this is a % single line cell. In that case we don't do any vertical maneuvre % and simply output the box, i.e., make it behave like a single % line p-cell. +% +% We use the height of \cs{strutbox} not \cs{@arstrutbox} in the comparison, +% because \cs{box}\cs{ar@mcellbox} does not have any strut +% incorporated and if \cs{arraystretch} is made very +% small the test would otherwise incorrectly assume a multi-line cell. % \changes{v2.4f}{2017/11/04}{Managing m-cells without \cs{vcenter}} +% \changes{v2.5g}{2022/09/04}{Test against \cs{strutbox} height (gh/766)} % \begin{macrocode} \def\ar@align@mcell{% - \ifdim \ht\ar@mcellbox > \ht\@arstrutbox + \ifdim \ht\ar@mcellbox > \ht\strutbox % \end{macrocode} % Otherwise we realign vertically by lowering the box. The question % is how much do we need to move down? If there is any diff --git a/macros/latex-dev/required/tools/array.pdf b/macros/latex-dev/required/tools/array.pdf index 2842a19709..f03d3b6fa0 100644 Binary files a/macros/latex-dev/required/tools/array.pdf and b/macros/latex-dev/required/tools/array.pdf differ diff --git a/macros/latex-dev/required/tools/bm.pdf b/macros/latex-dev/required/tools/bm.pdf index d9d2f4f2f7..140051caa5 100644 Binary files a/macros/latex-dev/required/tools/bm.pdf and b/macros/latex-dev/required/tools/bm.pdf differ diff --git a/macros/latex-dev/required/tools/calc.pdf b/macros/latex-dev/required/tools/calc.pdf index f7dd22f22f..0c0e726e1c 100644 Binary files a/macros/latex-dev/required/tools/calc.pdf and b/macros/latex-dev/required/tools/calc.pdf differ diff --git a/macros/latex-dev/required/tools/changes.txt b/macros/latex-dev/required/tools/changes.txt index 689d3f4369..a92d26ad57 100644 --- a/macros/latex-dev/required/tools/changes.txt +++ b/macros/latex-dev/required/tools/changes.txt @@ -5,6 +5,12 @@ completeness or accuracy and it contains some references to files that are not part of the distribution. ======================================================================= +2022-09-04 Frank Mittelbach + + * array.dtx (section{The macros \texttt{\textbackslash @classz}): + Test against \strutbox height to determine if an m-cell contains + only a single line (gh/766) + ================================================================================ All changes above are only part of the development branch for the next release. ================================================================================ diff --git a/macros/latex-dev/required/tools/dcolumn.pdf b/macros/latex-dev/required/tools/dcolumn.pdf index 980518b159..20cb899562 100644 Binary files a/macros/latex-dev/required/tools/dcolumn.pdf and b/macros/latex-dev/required/tools/dcolumn.pdf differ diff --git a/macros/latex-dev/required/tools/delarray.pdf b/macros/latex-dev/required/tools/delarray.pdf index 2544787008..8347fda51a 100644 Binary files a/macros/latex-dev/required/tools/delarray.pdf and b/macros/latex-dev/required/tools/delarray.pdf differ diff --git a/macros/latex-dev/required/tools/enumerate.pdf b/macros/latex-dev/required/tools/enumerate.pdf index 9422805402..098e198f69 100644 Binary files a/macros/latex-dev/required/tools/enumerate.pdf and b/macros/latex-dev/required/tools/enumerate.pdf differ diff --git a/macros/latex-dev/required/tools/fileerr.pdf b/macros/latex-dev/required/tools/fileerr.pdf index 4a24e93360..67dc3197c5 100644 Binary files a/macros/latex-dev/required/tools/fileerr.pdf and b/macros/latex-dev/required/tools/fileerr.pdf differ diff --git a/macros/latex-dev/required/tools/fontsmpl.pdf b/macros/latex-dev/required/tools/fontsmpl.pdf index 1f77f5e389..5b22dcc9dc 100644 Binary files a/macros/latex-dev/required/tools/fontsmpl.pdf and b/macros/latex-dev/required/tools/fontsmpl.pdf differ diff --git a/macros/latex-dev/required/tools/ftnright.pdf b/macros/latex-dev/required/tools/ftnright.pdf index 534ad0fc0b..52e9e53045 100644 Binary files a/macros/latex-dev/required/tools/ftnright.pdf and b/macros/latex-dev/required/tools/ftnright.pdf differ diff --git a/macros/latex-dev/required/tools/hhline.pdf b/macros/latex-dev/required/tools/hhline.pdf index 6ca9d7dde2..c0541d83a6 100644 Binary files a/macros/latex-dev/required/tools/hhline.pdf and b/macros/latex-dev/required/tools/hhline.pdf differ diff --git a/macros/latex-dev/required/tools/indentfirst.pdf b/macros/latex-dev/required/tools/indentfirst.pdf index 342791bb45..ab9291157b 100644 Binary files a/macros/latex-dev/required/tools/indentfirst.pdf and b/macros/latex-dev/required/tools/indentfirst.pdf differ diff --git a/macros/latex-dev/required/tools/layout.pdf b/macros/latex-dev/required/tools/layout.pdf index 382b70657e..28f5e75788 100644 Binary files a/macros/latex-dev/required/tools/layout.pdf and b/macros/latex-dev/required/tools/layout.pdf differ diff --git a/macros/latex-dev/required/tools/longtable.pdf b/macros/latex-dev/required/tools/longtable.pdf index fd00a99a92..6f275587ff 100644 Binary files a/macros/latex-dev/required/tools/longtable.pdf and b/macros/latex-dev/required/tools/longtable.pdf differ diff --git a/macros/latex-dev/required/tools/multicol.pdf b/macros/latex-dev/required/tools/multicol.pdf index 2b75b23e13..5cdc010fcb 100644 Binary files a/macros/latex-dev/required/tools/multicol.pdf and b/macros/latex-dev/required/tools/multicol.pdf differ diff --git a/macros/latex-dev/required/tools/rawfonts.pdf b/macros/latex-dev/required/tools/rawfonts.pdf index 69e1babd67..5edf06fc20 100644 Binary files a/macros/latex-dev/required/tools/rawfonts.pdf and b/macros/latex-dev/required/tools/rawfonts.pdf differ diff --git a/macros/latex-dev/required/tools/shellesc.pdf b/macros/latex-dev/required/tools/shellesc.pdf index e1626250d2..d909a2c873 100644 Binary files a/macros/latex-dev/required/tools/shellesc.pdf and b/macros/latex-dev/required/tools/shellesc.pdf differ diff --git a/macros/latex-dev/required/tools/showkeys.pdf b/macros/latex-dev/required/tools/showkeys.pdf index 422f3406f4..0bc1d1e48c 100644 Binary files a/macros/latex-dev/required/tools/showkeys.pdf and b/macros/latex-dev/required/tools/showkeys.pdf differ diff --git a/macros/latex-dev/required/tools/somedefs.pdf b/macros/latex-dev/required/tools/somedefs.pdf index 90e9b07cb1..c319cd3906 100644 Binary files a/macros/latex-dev/required/tools/somedefs.pdf and b/macros/latex-dev/required/tools/somedefs.pdf differ diff --git a/macros/latex-dev/required/tools/tabularx.pdf b/macros/latex-dev/required/tools/tabularx.pdf index 5f79443a28..489a309c1d 100644 Binary files a/macros/latex-dev/required/tools/tabularx.pdf and b/macros/latex-dev/required/tools/tabularx.pdf differ diff --git a/macros/latex-dev/required/tools/theorem.pdf b/macros/latex-dev/required/tools/theorem.pdf index 19184017f9..f85c46d0bd 100644 Binary files a/macros/latex-dev/required/tools/theorem.pdf and b/macros/latex-dev/required/tools/theorem.pdf differ diff --git a/macros/latex-dev/required/tools/tools-overview.pdf b/macros/latex-dev/required/tools/tools-overview.pdf index 0a0a4a6548..e6e8279f8e 100644 Binary files a/macros/latex-dev/required/tools/tools-overview.pdf and b/macros/latex-dev/required/tools/tools-overview.pdf differ diff --git a/macros/latex-dev/required/tools/trace.pdf b/macros/latex-dev/required/tools/trace.pdf index 4d44c10cbb..ea431061df 100644 Binary files a/macros/latex-dev/required/tools/trace.pdf and b/macros/latex-dev/required/tools/trace.pdf differ diff --git a/macros/latex-dev/required/tools/varioref.pdf b/macros/latex-dev/required/tools/varioref.pdf index d7f14f23f7..a2ff23e702 100644 Binary files a/macros/latex-dev/required/tools/varioref.pdf and b/macros/latex-dev/required/tools/varioref.pdf differ diff --git a/macros/latex-dev/required/tools/verbatim.dtx b/macros/latex-dev/required/tools/verbatim.dtx index c7cb2f02a9..2018e85505 100644 --- a/macros/latex-dev/required/tools/verbatim.dtx +++ b/macros/latex-dev/required/tools/verbatim.dtx @@ -55,7 +55,7 @@ \and Chris Rowley} -\date{2001/03/12} +\date{2022/07/02} \begin{document} \markboth{Verbatim style option}{Verbatim style option} \MaintainedByLaTeXTeam{tools} @@ -160,7 +160,7 @@ % that skips any commands or text between % |\begin{comment}| % and the next |\end{comment}|. -% It also defines the command \texttt{verbatiminput} to input a whole +% It also defines the command |\verbatiminput| to input a whole % file verbatim. % \end{abstract} % @@ -234,7 +234,7 @@ % % \DescribeMacro{\verbatiminput} % |\verbatiminput| is a command with one argument that inputs a file -% verbatim, i.e.\ the command |verbatiminput{xx.yy}| +% verbatim, i.e.\ the command |\verbatiminput{xx.yy}| % has the same effect as\\[2pt] % \hspace*{\MacroIndent}|\begin{verbatim}|\\ % \hspace*{\MacroIndent}\meta{Contents of the file \texttt{xx.yy}}\\ @@ -508,7 +508,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{verbatim} - [2020-07-07 v1.5u LaTeX2e package for verbatim enhancements] + [2022-07-02 v1.5u LaTeX2e package for verbatim enhancements] \@ifundefined{verbatim@@@}{}{\endinput} % \end{macrocode} % diff --git a/macros/latex-dev/required/tools/verbatim.pdf b/macros/latex-dev/required/tools/verbatim.pdf index 365cb51f03..f535d681d7 100644 Binary files a/macros/latex-dev/required/tools/verbatim.pdf and b/macros/latex-dev/required/tools/verbatim.pdf differ diff --git a/macros/latex-dev/required/tools/xr.pdf b/macros/latex-dev/required/tools/xr.pdf index 73937ae13c..d1041fb802 100644 Binary files a/macros/latex-dev/required/tools/xr.pdf and b/macros/latex-dev/required/tools/xr.pdf differ diff --git a/macros/latex-dev/required/tools/xspace.pdf b/macros/latex-dev/required/tools/xspace.pdf index 6d2d8f474b..6df01e873a 100644 Binary files a/macros/latex-dev/required/tools/xspace.pdf and b/macros/latex-dev/required/tools/xspace.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md index 32ce2b1be1..6224671813 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md @@ -5,6 +5,19 @@ first release 0.95a, 2021-02-23 will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project uses date-based 'snapshot' version identifiers. +## [2022-09-23] + +### Added + - XMP-Metadata are now created by code in l3pdfmeta. + More details can be found in l3pdfmeta. + +### Removed + - The patch which allowed the use of hyperxmp has been removed as no longer needed. + +### Changed + - XMP-Metadata are uncompressed (if supported by the engines). + - pdftitle allows to set the titles in various languages. + ## [2022-08-24] ### Changed diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md index 0d96f71d82..d97e82005f 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/README.md +++ b/macros/latex/contrib/pdfmanagement-testphase/README.md @@ -1,6 +1,6 @@ # LaTeX PDF management testphase bundle -Version: 0.95r, 2022-08-24 +Version: 0.95s, 2022-09-26 This package is used during a test phase to load the new PDF management code of LaTeX. diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty index 7400b4be95..1ec832466e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty @@ -24,7 +24,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2022-08-24 v0.95r +\ProvidesPackage{color-ltx}[2022-09-26 v0.95s Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty index 666d4d028b..d1757e814c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty @@ -19,41 +19,48 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2022-08-24}{0.95r} +\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2022-09-26}{0.95s} {temporay patches to for the colorspace package to test pdfresource management ... UF} +% colorspace can define more models, that l3color can't yet handle. +\cs_set_protected:Npn \expl@color@set@@nnn #1#2#3 + { + \cs_if_exist:cT { __color_parse_model_ #2 :w } + { \color_set:nnn{#1}{#2}{#3} } + } + + \hook_gput_code:nnn {begindocument} {pdf} { \tl_if_exist:NT \spc@op { \def\spc@Pageresources#1{} } - } \hook_gput_code:nnn {begindocument/end} {pdf} { \tl_if_exist:NT \spc@op { - \pdf_object_new:nn {__spc_extgstate_op_false}{dict} - \pdf_object_write:nn - {__spc_extgstate_op_false} + \pdf_object_new:n {__spc_extgstate_op_false} + \pdf_object_write:nnn + {__spc_extgstate_op_false}{dict} {/Type /ExtGState~/op~false~/OP~false} \pdfmanagement_add:nnn {Page/Resources/ExtGState} {SPCko} {\pdf_object_ref:n {__spc_extgstate_op_false}} - \pdf_object_new:nn {__spc_extgstate_op_true0}{dict} - \pdf_object_write:nn - {__spc_extgstate_op_true0} + \pdf_object_new:n {__spc_extgstate_op_true0} + \pdf_object_write:nnn + {__spc_extgstate_op_true0}{dict} {/Type /ExtGState~/op~true~/OP~true~/OPM~0}% \pdfmanagement_add:nnn {Page/Resources/ExtGState} {SPCmz} {\pdf_object_ref:n {__spc_extgstate_op_true0}} - \pdf_object_new:nn {__spc_extgstate_op_true1}{dict} - \pdf_object_write:nn - {__spc_extgstate_op_true1} + \pdf_object_new:n {__spc_extgstate_op_true1} + \pdf_object_write:nnn + {__spc_extgstate_op_true1}{dict} {/Type /ExtGState~/op~true~/OP~true~/OPM~1}% \pdfmanagement_add:nnn {Page/Resources/ExtGState} diff --git a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty index 4f52820adf..f302d729af 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty @@ -40,7 +40,7 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec-luatex-tmp-ltx}% - {2022/01/15}{2022-08-24}{0.95r} + {2022/01/15}{2022-09-26}{0.95s} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC %%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx index a1616e6f17..c8f8812c45 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx @@ -25,10 +25,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass{l3doc} -\usepackage{tabularx,array,booktabs,hyperxmp} +\usepackage{tabularx,array,booktabs} \hypersetup{pdfauthor=The LaTeX Project, pdftitle=generic hyperref driver (LaTeX PDF management testphase bundle)} \premulticols=4cm @@ -83,7 +82,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -166,8 +165,9 @@ % % \enquote{Metadata}, informations about the document, are stored in a PDF in two % places: The |/Info| dictionary and the XMP-metadata. \pkg{hyperref} only handles the -% |/Info| dictionary. The XMP-metadata can be added with like \pkg{pdfx} and -% \pkg{hyperxmp}. +% |/Info| dictionary. The XMP-metadata are added by code from \pkg{l3pdfmeta}. +% (without the pdfmanagement the XMP-metadata can be added with packages like \pkg{pdfx} and +% \pkg{hyperxmp}). % % The |/Info| dictionary can be filled with arbitrary keys, but the PDF viewer typically % care only about a few, like |/Author|, |/Title| and |/Keywords|. @@ -200,6 +200,18 @@ % \begin{verbatim} % pdfauthor = {Bär, Peter Anteater, {Riley, the sloth}} % \end{verbatim} +% +% \item It is possible to store titles in more than one language. If the value begins with +% an \enquote{optional argument} which represents a language tag, the value is taken +% as a comma list and splitted. The first value is used for the Info dictionary, +% the others are used in the XMP-metadata. Commas in a title must then be +% protected with braces: +% +% \begin{verbatim} +% pdftitle = {[en]English Title,[de] Deutscher Titel,[fr]{titre français, avec comma}} +% \end{verbatim} +% +% % \item All values of relevant keys (including keys from the hyperxmp package) % will be stored in a Metadata container, and can be retrieved with % \cs{GetDocumentProperties}. @@ -222,9 +234,6 @@ % \pkg{hyperref} has a few keys to set dates. They typically expect the date % in \enquote{PDF} format: |D:YYYYMMDDhhmmss+01'00'|. % -% One should be aware that \pkg{hyperxmp} will sometimes -% overwrites such settings. -% ^^A XMP: yyyy-mm-ddThh:mm:ss+tt:tt, PDF: D:YYYYMMDDhhmmss+01'00' % % \section{PDF page size (mediabox)} % The standard \pkg{hyperref} driver contain code to set the PDF page size. @@ -877,9 +886,10 @@ % /D & \meta{array of numbers} & dash pattern (lines/gaps) (default [3]) % \end{tabular} % -% \DescribeHypkey{pdfcreationdate}\DescribeHypkey{pdfmoddate} +% \DescribeHypkey{pdfcreationdate}\DescribeHypkey{pdfmoddate}\DescribeHypkey{pdfmetadate} % Setting these keys is normally not needed. If they are used the values -% are stored directly in the Info dictionary for |/Creationdate| and |/ModDate|. +% of the first two keys are stored directly in the Info dictionary for +% |/Creationdate| and |/ModDate|. All three keys are used in XMP-metadata. % The values are converted to strings but not processed further, so they should % have the correct PDF format without the enclosing parentheses, % e.g. |D:20200202111111+01'00'|. @@ -959,7 +969,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\ProvidesFile{hgeneric-testphase.def}[2022-08-24 v0.95r % +\ProvidesFile{hgeneric-testphase.def}[2022-09-26 v0.95s % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? @@ -2761,17 +2771,17 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_ocg_init: { - \pdf_object_new:nn { @@/OCG/View } { dict } - \pdf_object_new:nn { @@/OCG/Print } { dict } - \pdf_object_new:nn { @@/OCG/config } { dict } - \pdf_object_new:nn { @@/OCG/refarray } { array } - \pdf_object_write:nx { @@/OCG/refarray } + \pdf_object_new:n { @@/OCG/View } + \pdf_object_new:n { @@/OCG/Print } + \pdf_object_new:n { @@/OCG/config } + \pdf_object_new:n { @@/OCG/refarray } + \pdf_object_write:nnx { @@/OCG/refarray } { array } { \pdf_object_ref:n { @@/OCG/View } \c_space_tl \pdf_object_ref:n { @@/OCG/Print } } - \pdf_object_write:nn { @@/OCG/View } + \pdf_object_write:nnn { @@/OCG/View } { dict } { /Type/OCG /Name(View) @@ -2781,7 +2791,7 @@ /View <>~ >> } - \pdf_object_write:nn { @@/OCG/Print } + \pdf_object_write:nnn { @@/OCG/Print } { dict } { /Type/OCG /Name(Print) @@ -2793,7 +2803,7 @@ } \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {@@/OCG/View} } \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {@@/OCG/Print} } - \pdf_object_write:nx { @@/OCG/config } + \pdf_object_write:nnx { @@/OCG/config } { dict } { /OFF[\pdf_object_ref:n { @@/OCG/Print }] /AS[ @@ -3171,6 +3181,7 @@ { \pdfmanagement_add:nnx {Catalog} { URI }{ <> } } + \@@_store_metadata:nn {baseurl}{#1} } %only false does something ... ,bookmarks .choice: @@ -3808,14 +3819,11 @@ { ,pdflang .code:n = { - \tl_if_empty:nTF { #1 } - { - \pdfmanagement_remove:nn {Catalog} { Lang } - } + \tl_if_empty:nF { #1 } { \pdfmanagement_add:nnx {Catalog} { Lang } { (#1) } + \AddToDocumentProperties[document]{lang}{#1} } - \@@_store_metadata:nn {pdflang}{#1} } } % \end{macrocode} @@ -3823,10 +3831,14 @@ % % \subsubsection{\enquote{info keys}} % \begin{hypkey}{pdfauthor,pdftitle,pdfcreator,pdfsubject,pdfproducer,pdfkeywords} -% The keys store their value also in the metadate container, so that hyperxmp can +% The keys store their value also in the metadata container, so that hyperxmp can % use them. Creator and Producer can't be removed with the pdfmanagement, % but we allow to set an empty value. +% If the value begin with an optional argument, we assume a multilanguage clist and +% use only the first value. % \begin{macrocode} +\regex_new:N\l_@@_optlang_regex +\regex_set:Nn\l_@@_optlang_regex {\A\[([A-Za-z\-]+)\](.*)} \cs_new_protected:Npn \@@_setup_info_key:nn #1 #2 { \keys_define:nn { hyp / setup } @@ -3853,7 +3865,17 @@ } } { - \@@_text_pdfstring_info:nN {##1}\l_@@_tmpa_str + \tl_set:Nx\l_@@_tmpa_tl {\clist_item:nn{##1}{1}} + \exp_args:NNV + \regex_extract_once:NnN \l_@@_optlang_regex \l_@@_tmpa_tl\l_@@_tmpa_seq + \seq_if_empty:NTF\l_@@_tmpa_seq + { + \@@_text_pdfstring_info:nN {##1}\l_@@_tmpa_str + } + { + \exp_args:Nx + \@@_text_pdfstring_info:nN {\seq_item:Nn \l_@@_tmpa_seq{3}}\l_@@_tmpa_str + } \str_if_eq:VnF\l_@@_tmpa_str{} { \pdfmanagement_add:nnx {Info}{#2}{\l_@@_tmpa_str} @@ -3900,7 +3922,7 @@ \@@_setup_info_key:nn {keywords} {Keywords} % \end{macrocode} % \end{hypkey} -% \begin{hypkey}{pdfcreationdate,pdfmoddate} +% \begin{hypkey}{pdfcreationdate,pdfmoddate,pdfmetadate} % These keys are not really needed. We store them too in the container. % CreationDate and ModDate should not use the hex encoding. % \begin{macrocode} @@ -3918,6 +3940,7 @@ \pdfmanagement_add:nnx {Info}{#2}{(##1)} } \@@_store_metadata:nn {pdf#1}{##1} + \AddToDocumentProperties[document]{#1}{#2} } } \keys_define:nn { hyp / info } @@ -3938,6 +3961,10 @@ \@@_setup_info_date_key:nn {creationdate} {CreationDate} \@@_setup_info_date_key:nn {moddate} {ModDate} +\keys_define:nn { hyp / setup } + { + pdfmetadate .code:n = { \@@_store_metadata:nn {pdfmetadate}{#1} } + } % \end{macrocode} % \end{hypkey} % \begin{hypkey}{pdftrapped} @@ -3995,7 +4022,7 @@ % % \subsection{hyperxmp keys} % hyperxmp defines lots of keys for \cs{hypersetup}. -% They now longer work with this driver. So we provide them, +% They now longer work with this driver. So we provide most of them, % but they are only stored as metadata: % \begin{macrocode} \clist_map_inline:nn @@ -4006,10 +4033,6 @@ ,pdfauthortitle ,pdfcaptionwriter ,pdfmetalang - ,pdfapart - ,pdfaconformance - ,pdfuapart - ,pdfxstandard ,pdfsource ,pdfdocumentid ,pdfinstanceid @@ -4049,15 +4072,6 @@ } } -\str_if_eq:eeT {A}{\pdfmeta_standard_item:n{type}} - { - \exp_args:Nnx - \keys_set:nn {hyp / setup} - { - ,pdfapart = \pdfmeta_standard_item:n {level} - ,pdfaconformance = \pdfmeta_standard_item:n {conformance} - } - } % \end{macrocode} % % \subsection{Transitions} @@ -4732,10 +4746,10 @@ \ExplSyntaxOn \def\Hy@FormObjects { - \pdf_object_new:nn {@@/Encoding/pdfdoc } { dict } - \pdf_object_new:nn {@@/Font/ZaDb } { dict } - \pdf_object_new:nn {@@/Font/Helv } { dict } - \pdf_object_write:nx {@@/Encoding/pdfdoc } + \pdf_object_new:n {@@/Encoding/pdfdoc } + \pdf_object_new:n {@@/Font/ZaDb } + \pdf_object_new:n {@@/Font/Helv } + \pdf_object_write:nnx {@@/Encoding/pdfdoc } { dict } { /Type/Encoding /Differences[ @@ -4777,14 +4791,14 @@ /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] } - \pdf_object_write:nn {@@/Font/ZaDb } + \pdf_object_write:nnn {@@/Font/ZaDb } { dict } { /Type/Font /Subtype/Type1 /Name/ZaDb /BaseFont/ZapfDingbats } - \pdf_object_write:nx {@@/Font/Helv } + \pdf_object_write:nnx {@@/Font/Helv } { dict } { /Type/Font /Subtype/Type1 diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf index e19406467b..cfcac81ea0 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf and b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty deleted file mode 100644 index 5c77d8ce6b..0000000000 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty +++ /dev/null @@ -1,184 +0,0 @@ -%% This is file `hyperxmp-patches-tmp-ltx.sty" -% Copyright (C) 2019-2021 The LaTeX Project -% -% It may be distributed and/or modified under the conditions of the -% LaTeX Project Public License (LPPL), either version 1.3c of this -% license or (at your option) any later version. The latest version -% of this license is in the file -% -% https://www.latex-project.org/lppl.txt -% -% This file is part of the "pdfmanagement bundle" (The Work in LPPL) -% and all files in that bundle must be distributed together. -% -% ----------------------------------------------------------------------- -% -% The development version of the bundle can be found at -% -% https://github.com/latex3/pdfresources -% -% for those people who are interested. -\NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{hyperxmp-patches-tmp-ltx}{2022-08-24}{0.95r} - {Store hyperref metadata in XMP format / temporay patches to test pdfresource management ... UF} - -\cs_if_exist:NT \pdfmanagement_add:nnn - { - \pdfmanagement_if_active:T - { - \renewcommand\hyxmp@embed@packet{\hyxmp@embed@packet@generic} - } - } - -% -\newcommand*{\hyxmp@embed@packet@generic} - {% - \typeout{} - \typeout{!!~new-hyperxmp--generic~packet~command~used!!}{} - \typeout{} - \hyxmp@construct@packet - %or some other command to write a object: - \exp_args:Nnx - \pdf_object_unnamed_write:nn{stream}{{/Type~/Metadata~/Subtype~/XML}{\hyxmp@xml}}% - % reference in the Catalog: - \pdfmanagement_add:nnx {Catalog} {Metadata}{\pdf_object_ref_last:} - } - -% A standard should be retrieved from the document settings. -\cs_new:Npn \__hypxmp_get_Astandard: - { - \exp_args:Ne \tl_if_eq:nnT{\pdfmeta_standard_item:n{type}}{A} - { - \Hy@pdfatrue - \tl_set:Nx \@pdfapart{\pdfmeta_standard_item:n{level}} - \tl_set:Nx \@pdfaconformance{\pdfmeta_standard_item:n{conformance}} - } - } -% A-4 will need also the year, so we have to extend the schema -\renewcommand*{\hyxmp@pdfa@id@schema}{% - \ifHy@pdfa - \exp_args:Nnx\hyxmp@add@simple{pdfaid:part}{\pdfmeta_standard_item:n{level}} - \exp_args:Nnx\hyxmp@add@simple{pdfaid:conformance}{\pdfmeta_standard_item:n{conformance}} - \int_compare:nNnT{\pdfmeta_standard_item:n{level}}>{3} - { \exp_args:Nnx\hyxmp@add@simple{pdfaid:rev}{\pdfmeta_standard_item:n{year}} } - \fi -} - -\cs_new_protected:Npn \__hyxmp_get_metadata: - { - \__hypxmp_get_Astandard: - \clist_map_inline:nn - { - % hyperxmp keys: - ,pdfcopyright - ,pdftype - ,pdflicenseurl - ,pdfauthortitle - ,pdfcaptionwriter - ,pdfmetalang - %,pdfapart %document - %,pdfaconformance %document - ,pdfuapart %probably document too but later ... - ,pdfxstandard - ,pdfsource - ,pdfdocumentid - ,pdfinstanceid - ,pdfversionid - ,pdfrendition - ,pdfpublication - ,pdfpubtype - ,pdfbytes - ,pdfnumpages - ,pdfissn - ,pdfeissn - ,pdfisbn - ,pdfbookedition - ,pdfpublisher - ,pdfvolumenum - ,pdfissuenum - ,pdfpagerange - ,pdfdoi - ,pdfurl - ,pdfidentifier - ,pdfsubtitle - ,pdfpubstatus - ,pdfcontactaddress - ,pdfcontactcity - ,pdfcontactregion - ,pdfcontactpostcode - ,pdfcontactcountry - ,pdfcontactphone - ,pdfcontactemail - ,pdfcontacturl - ,pdfdate - %hyperref, needs probably special handling - % ,pdftitle %see below - % ,pdfsubject %see below - ,pdfkeywords - ,pdfproducer - } - { - \tl_if_exist:cF{@##1}{\tl_new:c{@##1}} - \tl_set:cx {@##1}{\GetDocumentProperties{hyperref/##1}} - } - - % pdfauthor, this is only a work around for simple author - % TODO needs improvement - \exp_args:NNe - \pdfstringdef\@pdfauthor{\GetDocumentProperties{hyperref/pdfauthor}} - \cs_set_eq:NN\hyxmp@pdfauthor\@pdfauthor - \exp_args:NNe - \pdfstringdef\@pdfsubject{\GetDocumentProperties{hyperref/pdfsubject}} - \cs_set_eq:NN\hyxmp@pdfsubject\@pdfsubject - \exp_args:NNe - \pdfstringdef\@pdftitle{\GetDocumentProperties{hyperref/pdftitle}} - \cs_set_eq:NN\hyxmp@pdftitle\@pdftitle - \exp_args:NNe - \pdfstringdef\@pdfcopyright{\GetDocumentProperties{hyperref/pdfcopyright}} - \cs_set_eq:NN\hyxmp@pdfcopyright\@pdfcopyright - % pdflang, - \tl_if_exist:cF{@pdflang}{\tl_new:c{@pdflang}} - \tl_set:cx {@pdflang}{\GetDocumentProperties{document/lang}} - } - -% we need to provide a few commands so that hyperxmp stops to overwrite them -% in \AtEndPreamble -% we need also add it to the document properties to avoid stray commas -% with empty author. -\AddToHook{begindocument/before}[pdfmanagement/firstaid/hyperxmp]{% - \def\@pdfauthor{Author}\def\@pdftitle {Title}% - \tl_if_blank:eT{\GetDocumentProperties{hyperref/pdfauthor}} - {\AddToDocumentProperties[hyperref]{pdfauthor}{Author}} - \tl_if_blank:eT{\GetDocumentProperties{hyperref/pdftitle}} - {\AddToDocumentProperties[hyperref]{pdfauthor}{Title}} - } - -% hyperxmp recalculates pdfproduce at begin document and we should copy that definition -\AddToHook{begindocument/end} - {\edef\next{\noexpand\AddToDocumentProperties[hyperref]{pdfproducer}{\@pdfproducer}}\next} - -\DeclareHookRule{begindocument/before}{pdfmanagement/firstaid/hyperxmp}{before}{hyperxmp} - -% hyperxmp puts the code into enddocument, but for xetex this is too late. -% so we move that to shipout/lastpage and add our command before. -% the luatex code must stay in enddocument as hyperxmp tries to detect the pdf size -% there. -\sys_if_output_dvi:TF - { - \RemoveFromHook{enddocument}[hyperxmp] - \AddToHook{shipout/lastpage}[pdfmanagement-firstaid] - { - \__hyxmp_get_metadata: - \hyxmp@auto@assign@data - \hyxmp@check@standards - \hyxmp@warn@if@no@metadata - \hyxmp@embed@packet - } - } - { - \AddToHook{enddocument}[pdfmanagement-firstaid]{\__hyxmp_get_metadata:} - \DeclareHookRule{enddocument}{pdfmanagement-firstaid}{before}{hyperxmp} - } - - -\endinput diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx index f9fc15bf4d..e556f3575c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % @@ -56,27 +56,27 @@ % \begin{macrocode} %\ProvidesExplFile %<*dvipdfmx> - {l3backend-testphase-dvipdfmx.def}{2022-08-24}{} + {l3backend-testphase-dvipdfmx.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} % %<*dvips> - {l3backend-testphase-dvips.def}{2022-08-24}{} + {l3backend-testphase-dvips.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} % %<*dvisvgm> - {l3backend-testphase-dvisvgm.def}{2022-08-24}{} + {l3backend-testphase-dvisvgm.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} % %<*luatex> - {l3backend-testphase-luatex.def}{2022-08-24}{} + {l3backend-testphase-luatex.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} % %<*pdftex> - {l3backend-testphase-pdftex.def}{2022-08-24}{} + {l3backend-testphase-pdftex.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} % %<*xdvipdfmx> - {l3backend-testphase-xetex.def}{2022-08-24}{} + {l3backend-testphase-xetex.def}{2022-09-26}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} % % \end{macrocode} @@ -580,7 +580,7 @@ %<*pdftex|luatex> \clist_map_inline:Nn \c_@@_backend_PageResources_clist { - \pdf_object_new:nn {@@/Page/Resources/#1} {dict} + \pdf_object_new:n {@@/Page/Resources/#1} \cs_if_exist:NT \tex_directlua:D { \tex_directlua:D @@ -624,8 +624,8 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g_@@_Core/Page/Resources/##1} } { - \pdf_object_write:nx - { @@/Page/Resources/##1 } + \pdf_object_write:nnx + { @@/Page/Resources/##1 } { dict } { \pdfdict_use:n { g_@@_Core/Page/Resources/##1} } } } @@ -649,8 +649,11 @@ % \clist_map_inline:Nn \c_@@_backend_PageResources_clist { - \pdf_object_new:nn { @@/Page/Resources/#1 } { dict } - \hook_gput_code:nnn{shipout/firstpage}{pdf}{\pdf_object_write:nn { @@/Page/Resources/#1 } {}} + \pdf_object_new:n { @@/Page/Resources/#1 } + \hook_gput_code:nnn + {shipout/firstpage} + {pdf} + {\pdf_object_write:nnn { @@/Page/Resources/#1 } { dict } {}} } \cs_new_protected:Npn \@@_backend_PageResources:n #1 { @@ -1998,9 +2001,52 @@ %<*drivers> \pdfmanagement_add:nnn{Info}{CreationDate}{(D:20010101205959-00'00')} \pdfmanagement_add:nnn{Info}{ModDate}{(D:20010101205959-00'00')} + \AddToDocumentProperties[document]{pdfcreationdate}{D:20010101205959-00'00'} + \AddToDocumentProperties[document]{pdfmoddate}{D:20010101205959-00'00'} + \AddToDocumentProperties[hyperref]{pdfmetadate}{D:20010101205959-00'00'} + \AddToDocumentProperties[hyperref]{pdfdate}{D:20010101205959-00'00'} + \AddToDocumentProperties[hyperref]{pdfinstanceid}{uuid:0a57c455-157a-4141-8c19-6237d832fc80} } % % \end{macrocode} +% +% \subsection{Uncompressed metadata object stream} +% The xmp metadata should be written \enquote{uncompressed} to pdf. +% It is not quite clear what exactly that means. Probably it only +% means that there should be no |/Filter| key in the stream, but +% packages like \pkg{pdfx} and \pkg{hyperref} try to suppress object +% compression too, so we add support for it too. +% With luatex this is possible by using the |uncompressed| key word. +% With pdftex one can change locally the compresslevel. (x)dvipdfmx does +% it automatically and doesn't need some special command. No solution +% is known for the dvips route. We need it only once, so we make +% it special and probably no public interface is needed. It writes +% an unnamed object so should be referenced directly with |\pdf_object_ref_last:| +% \begin{macrocode} +%<*luatex> +\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 + { + \tex_immediate:D \tex_pdfextension:D obj ~uncompressed~ + \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} + } +% +%<*pdftex> +\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 + { + \group_begin: + \tex_pdfcompresslevel:D 0 \scan_stop: + \tex_immediate:D \tex_pdfobj:D + \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} + \group_end: + } +% +%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm> +\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 + { + \pdf_object_unnamed_write:nn {stream}{{/Type~/Metadata~/Subtype~/XML}{#1}} + } +% +% \end{macrocode} % \subsection{lua code for lualatex} % \begin{macrocode} %<*lua> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf index b74c3c95ba..de655b427b 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx index 399f483a7a..afc1eebb5d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project, pdftitle=l3pdfannot (LaTeX PDF management testphase bundle)} \begin{document} @@ -49,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -382,7 +381,7 @@ % This outputs the property list of the dictionary as a list of % |/key value| pairs. % This can be used e.g. when writing a dictionary object with -% \cs{pdf_object_write:nx} +% \cs{pdf_object_write:nnx} % \end{function} % % \begin{variable}[added = 2020-12-28]{\l_pdfannot_F_bitset} @@ -433,7 +432,7 @@ % \begin{macrocode} %<@@=pdfannot> %<*header> -\ProvidesExplPackage{l3pdfannot}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdfannot}{2022-09-26}{0.95s} {PDF-annotations} \RequirePackage{l3pdfdict} % diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf index 702ae1a64e..c958d663a1 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx index 5a7fba1352..ceba32f4fd 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project, pdftitle=l3pdfdict (LaTeX PDF management testphase bundle)} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -145,7 +144,7 @@ % This outputs the property list of the dictionary as a list of % |/key value| pairs. % This can be used e.g. when writing a dictionary object with -% \cs{pdf_object_write:nx} +% \cs{pdf_object_write:nnx} % \end{function} % % \begin{function}[updated = 2020-12-03] @@ -209,7 +208,7 @@ % \begin{macrocode} %<@@=pdfdict> %<*header> -\ProvidesExplPackage{l3pdfdict}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdfdict}{2022-09-26}{0.95s} {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)} % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf index bb93058f76..69f0a3ead4 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx index 96e39426af..c0c574c2a6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs,siunitx} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -419,12 +418,12 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn % ,\pdf_object_unnamed_write:nx -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf index a2136f3d33..874f5035db 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx index ffa2b7ca3a..3b3d37f6cc 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs} @@ -65,7 +64,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -322,11 +321,11 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn @@ -542,9 +541,9 @@ { \pdf_object_if_exist:nF {@@/checkbox/AP/#1} { - \pdf_object_new:nn {@@/checkbox/AP/#1}{dict} - \pdf_object_write:nx - {@@/checkbox/AP/#1} + \pdf_object_new:n {@@/checkbox/AP/#1} + \pdf_object_write:nnx + {@@/checkbox/AP/#1} { dict } { /Yes ~ \pdfxform_ref:n { #1/Yes} /Off ~ \pdfxform_ref:n { #1/Off} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf index d075bd344f..3fc6ebb37e 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx index f9991ad304..de498078c6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -366,13 +365,13 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn % ,\pdf_object_unnamed_write:nx -% ,\pdf_object_write:nx -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnx +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf index 876073d8c7..1b9c0d3d10 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx index 83b90edcdd..3dab822d44 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs,siunitx} @@ -56,7 +55,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -348,11 +347,11 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf index 3557d2e663..800ed12562 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx index 1551e41fd0..f0f46ed31b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs} @@ -84,7 +83,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -516,13 +515,13 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn % ,\pdf_object_unnamed_write:nx -% ,\pdf_object_write:nx -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnx +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn @@ -691,13 +690,13 @@ % We need an object and a seq for the Opt array. % The object is written at the end of the document. % \begin{macrocode} - \pdf_object_new:nn {@@/field/@@/radio-Opt/#1}{array} + \pdf_object_new:n {@@/field/@@/radio-Opt/#1} \pdfdict_put:nnx { l_@@/field }{Opt} { \pdf_object_ref:n {@@/field/@@/radio-Opt/#1} } \seq_new:c { g_@@_radio_opt_#1_seq } \hook_gput_code:nnn {shipout/lastpage}{pdffield/radio} { - \pdf_object_write:nx - {@@/field/@@/radio-Opt/#1} + \pdf_object_write:nnx + {@@/field/@@/radio-Opt/#1} { array } {\seq_use:cn {g_@@_radio_opt_#1_seq}{~}} } % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf index 5f62fd992d..b13e87b842 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx index f3497cb8fb..cd9c7da10e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass[full]{l3doc} \usepackage{array,booktabs} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -419,11 +418,11 @@ % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF % ,\pdf_object_if_exist:nF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nn -% ,\pdf_object_write:nn +% ,\pdf_object_write:nnn % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf index 561066f44b..d646d15954 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx index 51a81d2f01..effe1ff41e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx @@ -23,7 +23,6 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{} \documentclass{l3doc} \usepackage{array,booktabs,caption} @@ -70,7 +69,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -921,11 +920,11 @@ % ,\NeedsTeXFormat % ,\pdf_name_from_unicode_e:n % ,\pdf_object_if_exist:nTF -% ,\pdf_object_new:nn +% ,\pdf_object_new:n % ,\pdf_object_ref:n % ,\pdf_object_ref_last: % ,\pdf_object_unnamed_write:nx -% ,\pdf_object_write:nx +% ,\pdf_object_write:nnx % ,\pdf_string_from_unicode:nnN % ,\pdfannot_box_ref_last: % ,\pdfannot_dict_put:nnn @@ -974,7 +973,7 @@ %<*package> %<@@=pdffield> \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2022-08-24}{0.95r}% +\ProvidesExplPackage{l3pdffield-testphase}{2022-09-26}{0.95s}% {form fields} % \end{macrocode} % \subsection{hyperref specific command} @@ -1167,8 +1166,8 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_field:n #1 { - \pdf_object_new:nn {@@/field/#1} {dict} - \pdf_object_new:nn {@@/field/Kids/#1} {array} + \pdf_object_new:n {@@/field/#1} + \pdf_object_new:n {@@/field/Kids/#1} \tl_if_empty:NTF \l_@@_currentparent_tl { \pdfmanagement_add:nnx @@ -1220,12 +1219,12 @@ } \hook_gput_code:nnn {shipout/lastpage}{pdffield} %xetex needs this ... { - \pdf_object_write:nx {@@/field/Kids/#1} + \pdf_object_write:nnx {@@/field/Kids/#1} { array } { \seq_use:cn{g_@@_field/Kids/#1_seq}{~} } } - \pdf_object_write:nx {@@/field/#1} { \pdfdict_use:n {l_@@/field} } + \pdf_object_write:nnx {@@/field/#1} { dict } { \pdfdict_use:n {l_@@/field} } } \hook_gput_code:nnn {shipout/lastpage}{pdffield} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf index 03a6bc7a6f..3f375babea 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx index 5527a4e128..257ed6a6f2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=l3pdffile (LaTeX PDF management testphase bundle)} \usepackage{caption} \providecommand\potentialclash{\noindent\llap{\dbend\ }} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -177,7 +176,7 @@ % Embedding an existing file is in most cases quite straightforward. This module % offers commands, but it can also be done with the basic commands % from the |l3pdf| module \cs{pdf_object_unnamed_write:nn} or -% \cs{pdf_object_new:nn}/\cs{pdf_object_write:nn} or primitive commands +% \cs{pdf_object_new:n}/\cs{pdf_object_write:nnn} or primitive commands % to create objects. % The object number should be stored for the reference % in the |/Filespec| dictionary. @@ -335,7 +334,7 @@ % created stream. % % \begin{verbatim} -% \pdf_object_new:nn{module/filespec/A}{dict} % a new filespec object +% \pdf_object_new:n {module/filespec/A} % a new filespec object % \pdf_object_ref:n {module/filespec/A} % a reference % \pdf_object_unnamed_write:nn { stream }{ {...}{content} } %writing the stream % % filling and writing the filespec dictionary: @@ -397,7 +396,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdffile}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdffile}{2022-09-26}{0.95s} {embedding and referencing files in PDF---LaTeX PDF management testphase bundle} \RequirePackage{l3pdftools} %temporarly!! % @@ -645,7 +644,7 @@ \@@_filename_convert_to_print:nN { #2 } \l_@@_tmpa_str \pdfdict_put:nnx {l_pdffile/Filespec}{F} { \l_@@_tmpa_str } \pdfdict_put:nnx {l_pdffile/Filespec}{UF}{ \l_@@_tmpa_str } - \pdf_object_write:nx { #1 } + \pdf_object_write:nnx { #1 } { dict } { \pdfdict_use:n { l_pdffile/Filespec} \tl_if_empty:nF { #3 } @@ -704,7 +703,7 @@ } \tl_if_blank:nTF { #2 } { - \pdf_object_new:nn { #3 } {dict} + \pdf_object_new:n { #3 } \exp_args:Nnnx \@@_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref @@ -713,7 +712,7 @@ {\l_@@_embed_ref_tl} } { - \pdf_object_new:nn { #3 } {dict} + \pdf_object_new:n { #3 } \exp_args:Nnnx \@@_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref @@ -747,7 +746,7 @@ { #1 } \l_@@_automimetype_tl \tl_set:Nx \l_@@_embed_ref_tl { \pdf_object_ref_last: } - \pdf_object_new:nn { #3 } {dict} + \pdf_object_new:n { #3 } \exp_args:Nnxx \@@_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf index 16a76d4976..1d0506b651 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx index 63865b4627..a2ece6cbcd 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx @@ -23,11 +23,10 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} \usepackage{tabularx} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=l3pdfmanagement (LaTeX PDF management testphase bundle)} \providecommand\potentialclash{\noindent\llap{\dbend\ }} @@ -58,7 +57,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -538,8 +537,8 @@ % The value is an object reference. It is sensible to declare the object % first. E.g. % \begin{verbatim} -% \pdf_object_new:nn {module/intent}{dict} -% \pdf_object_write:nn {module/intent}{...} +% \pdf_object_new:n {module/intent} +% \pdf_object_write:nnn {module/intent}{dict}{...} % \pdfmanagement_add:nnx {Catalog} {OutputIntents}{\pdf_object_ref:n {module/intent}} % \end{verbatim} % @@ -633,7 +632,7 @@ %<@@=pdfmanagement> %<*header> % -\ProvidesExplPackage{l3pdfmanagement}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdfmanagement}{2022-09-26}{0.95s} {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)} % % \end{macrocode} @@ -1279,9 +1278,9 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AA } } { - \pdf_object_new:nn { @@/Catalog/AA } { dict } - \pdf_object_write:nx - { @@/Catalog/AA } + \pdf_object_new:n { @@/Catalog/AA } + \pdf_object_write:nnx + { @@/Catalog/AA }{ dict } { \pdfdict_use:n { g__pdf_Core/Catalog/AA } } \exp_args:Nnx \__pdf_backend_catalog_gput:nn @@ -1309,9 +1308,9 @@ { \seq_if_empty:cF { g_@@_/Catalog/AcroForm/Fields_seq } { - \pdf_object_new:nn { @@/Catalog/AcroForm/Fields } { array } - \pdf_object_write:nx - { @@/Catalog/AcroForm/Fields } + \pdf_object_new:n { @@/Catalog/AcroForm/Fields } + \pdf_object_write:nnx + { @@/Catalog/AcroForm/Fields } { array } { \seq_use:cn { g_@@_/Catalog/AcroForm/Fields_seq } {~} } \exp_args:Nnnx \prop_gput:cnn %we have to use \prop here to avoid the handler ... @@ -1321,10 +1320,9 @@ } \seq_if_empty:cF { g_@@_/Catalog/AcroForm/CO_seq } { - \pdf_object_new:nn { @@/Catalog/AcroForm/CO } { array } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/AcroForm/CO } + \pdf_object_new:n { @@/Catalog/AcroForm/CO } + \pdf_object_write:nnx + { @@/Catalog/AcroForm/CO } { array } { \seq_use:cn { g_@@_/Catalog/AcroForm/CO_seq } {~} } \exp_args:Nnnx \prop_gput:cnn %we have to use \prop here to avoid the handler ... @@ -1334,10 +1332,9 @@ } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm/DR/Font}} { - \pdf_object_new:nn { @@/Catalog/AcroForm/DR/Font } {dict} - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/AcroForm/DR/Font } + \pdf_object_new:n { @@/Catalog/AcroForm/DR/Font } + \pdf_object_write:nnx + { @@/Catalog/AcroForm/DR/Font } { dict } { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm/DR/Font } } \exp_args:Nnnx \prop_gput:cnn %we have to use \prop here to avoid the handler ... @@ -1347,10 +1344,9 @@ } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm/DR}} { - \pdf_object_new:nn { @@/Catalog/AcroForm/DR } {dict} - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/AcroForm/DR } + \pdf_object_new:n { @@/Catalog/AcroForm/DR } + \pdf_object_write:nnx + { @@/Catalog/AcroForm/DR } { dict } { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm/DR } } \exp_args:Nnnx \prop_gput:cnn %we have to use \prop here to avoid the handler ... @@ -1360,10 +1356,9 @@ } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm} } { - \pdf_object_new:nn { @@/Catalog/AcroForm } {dict} - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/AcroForm } + \pdf_object_new:n { @@/Catalog/AcroForm } + \pdf_object_write:nnx + { @@/Catalog/AcroForm } { dict } { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm } } \exp_args:Nnnx \@@_handler_gput:nnn @@ -1385,10 +1380,9 @@ \seq_if_empty:cF { g_@@_/Catalog/AF_seq } { - \pdf_object_new:nn { @@/Catalog/AF } { array } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/AF } + \pdf_object_new:n { @@/Catalog/AF } + \pdf_object_write:nnx + { @@/Catalog/AF } { array } { \seq_use:cn { g_@@_/Catalog/AF_seq } {~} } \exp_args:Nnx \__pdf_backend_catalog_gput:nn @@ -1409,11 +1403,10 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/MarkInfo } } { - \pdf_object_new:nn { @@/Catalog/MarkInfo } { dict } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/MarkInfo } - { \pdfdict_use:n { g__pdf_Core/Catalog/MarkInfo } } + \pdf_object_new:n { @@/Catalog/MarkInfo } + \pdf_object_write:nnx + { @@/Catalog/MarkInfo } { dict } + { \pdfdict_use:n { g__pdf_Core/Catalog/MarkInfo } } \exp_args:Nnx \__pdf_backend_catalog_gput:nn {MarkInfo} @@ -1450,11 +1443,10 @@ > { 0 } { - \pdf_object_new:nn { @@/Catalog/OCProperties } { dict } + \pdf_object_new:n { @@/Catalog/OCProperties } \seq_gpop_left:cN { g_@@_/Catalog/OCProperties/Configs_seq} \l_@@_tmpa_tl - \exp_args:Nnx - \pdf_object_write:nn {@@/Catalog/OCProperties} - { + \pdf_object_write:nnx {@@/Catalog/OCProperties} {dict} + { /OCGs~[ \seq_use:cn { g_@@_/Catalog/OCProperties/OCGs_seq } {~} ] /D~\l_@@_tmpa_tl~ \seq_if_empty:cF { g_@@_/Catalog/OCProperties/Configs_seq } @@ -1462,7 +1454,7 @@ /Configs~ [ \seq_use:cn { g_@@_/Catalog/OCProperties/Configs_seq} {~} ] } - } + } \exp_args:Nnx \__pdf_backend_catalog_gput:nn { OCProperties } @@ -1481,10 +1473,9 @@ \seq_if_empty:cF { g_@@_/Catalog/OutputIntents_seq } { - \pdf_object_new:nn { @@/Catalog/OutputIntents } { array } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/OutputIntents } + \pdf_object_new:n { @@/Catalog/OutputIntents } + \pdf_object_write:nnx + { @@/Catalog/OutputIntents } { array } { \seq_use:cn { g_@@_/Catalog/OutputIntents_seq } {~} } \exp_args:Nnx \__pdf_backend_catalog_gput:nn @@ -1506,10 +1497,9 @@ \seq_if_empty:cF { g_@@_/Catalog/Requirements_seq } { - \pdf_object_new:nn { @@/Catalog/Requirements } { array } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/Requirements } + \pdf_object_new:n { @@/Catalog/Requirements } + \pdf_object_write:nnx + { @@/Catalog/Requirements } { array } { \seq_use:cn { g_@@_/Catalog/Requirements_seq } {~} } \exp_args:Nnx \__pdf_backend_catalog_gput:nn @@ -1531,10 +1521,9 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/ViewerPreferences } } { - \pdf_object_new:nn { @@/Catalog/ViewerPreferences } { dict } - \exp_args:Nnx - \pdf_object_write:nn - { @@/Catalog/ViewerPreferences } + \pdf_object_new:n { @@/Catalog/ViewerPreferences } + \pdf_object_write:nnx + { @@/Catalog/ViewerPreferences } { dict } { \pdfdict_use:n { g__pdf_Core/Catalog/ViewerPreferences } } \exp_args:Nnx \__pdf_backend_catalog_gput:nn diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf index 8f678cf00f..9cde9e1154 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx index d284c399a9..8e83708d88 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=l3pdfmeta (LaTeX PDF management testphase bundle)} \begin{document} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -372,6 +371,193 @@ % It also sets the seed for random functions. % \end{function} % +% \section{XMP-metadata} +% XMP-metadata are data in XML format embedded in a stream +% inside the PDF and referenced from the |/Catalog|. +% Such a XMP-metadata stream contains various document related data, +% is required by various PDF standards and can replace +% or extend the data in the |/Info| dictionary. +% In PDF 2.0 the /Info dictionary is actually deprecated +% and only XMP-metadata should be used for the metadata of the PDF. +% +% The content of a XMP-metadata stream is not a fix set of data. +% Typically fields like the title, the author, the language and keywords will +% be there. But standards like e.g. ZUGferd (a standard for electronic bills) +% can require to add more fields, and it is also possible +% to define and add purely local data. +% +% In some workflows (e.g. if dvips + ghostscript is used) +% a XMP-metadata stream with some standard content is added automatically by +% the backend, but normally it must be created with code. +% +% For this task the packages \pkg{hyperxmp}, \pkg{xmpincl} or \pkg{pdfx} +% (which uses \pkg{xmpincl}) +% can be used, but all these packages are not compatible with the +% pdfmanagement\footnote{\pkg{hyperxmp} was partly compatible as the pdfmanagement +% contained some patches for it, but these patches have now been removed.}. +% The following code is meant as replacement for these packages. +% +% \pkg{hyperxmp} uses |\hypersetup| as user interface to enter the XMP-metadata. +% This syntax is also supported by the new code\footnote{with a number of changes which +% are discussed in more details below}, so if \pkg{hyperref} +% has been loaded, e.g. |pdftitle=xxx| can be used to set the title. +% But XMP-metadata shouldn't require to use \pkg{hyperref} and in a future +% version an interface without \pkg{hyperref} will be added. +% +% There is currently no full user interface command to extend the XMP-metadata +% with for example the code needed for ZUGferd, +% they will be added in a second step. +% +% +% \subsection{Encoding and escaping} +% +% XMP-metadata are stored as UTF-8 in the PDF. This mean if you open a PDF in an editor +% a content like \enquote{grüße} will be shown probably as \enquote{grüße}. +% As XMP-metadata are in XML format special chars like |<|, |>|, and |&| and +% \texttt{\textquotestraightdblbase} must be escaped. +% +% \pkg{hyperxmp} hooks into \pkg{hyperref} and passes all +% input through |\pdfstringdef|. This means a word like +% \enquote{hallo} is first converted by |\pdfstringdef| into\\ +% |\376\377\000h\000a\000l\000l\000o| and then back to UTF-8 by +% \pkg{hyperxmp} and in the course of this action +% the XML-escapings are applied. +% \pkg{pdfx} uses |\pdfstringdef| together with +% a special fontencoding (similar to the PU-encoding of \pkg{hyperref}) +% for a similar aim. +% The code here is based on |\text_purify:n| followed by a few replacements for the +% escaping. +% +% User data should normally be declared in the preamble (or even in the +% |\DocumentMetadata| command), and consist of rather simple text; |&| can be entered +% as |\&| (but directly |&| will normally work too), +% babel shorthands should not be used. Some datas are interpreted as comma lists, +% in this cases commas which are part of the text should be protected by braces. +% In some cases a text in brackets like |[en]| is interpreted as language tag, +% if they are part of a text they should be protected by braces too. +% XMP-metadata are stored uncompressed in the PDF so if you are unsure +% if a value has +% been passed correctly, open the PDF in an editor, copy the whole block and +% pass it to a validator, e.g. \url{https://www.w3.org/RDF/Validator/}. +% +% \subsection{User interfaces and differences to \pkg{hyperxmp} } +% +% \subsubsection{PDF standards} +% +% The \pkg{hyperxmp}/\pkg{hyperref} keys |pdfapart|, |pdfaconformance|, |pdfuapart|, +% |pdfxstandard| and |pdfa| are ignored by this code. Standards must be set with the +% |pdfstandard| key of |\DocumentMetadata|. This key can be used more than once, +% e.g. \\ +% |pdfstandard=A-2b,pdfstandard=X-4,pdfstandard=UA-1|. +% \\ Note that using these +% keys doesn't mean that the document actually follows the standard. \LaTeX{} +% can neither ensure nor check all requirements of a standard, and not everything +% it can do theoretically has already been implemented. +% When setting an |A| standard, the code will e.g. insert a color profile and +% warn if the PDF version doesn't fit, but |X| and |UA| currently only +% adds the relevant declarations to the XMP-metadata. +% It is up to the author to ensure and validate +% that the document actually follows the standard. +% +% \subsubsection{Dates} +% \begin{itemize} +% \item +% The dates |xmp:CreateDate|, |xmp:ModifyDate|, |xmp:MetadataDate| +% are normally set automatically to the current date/time when the compilation +% started. If they should be changed +% (e.g. for regression tests to produce reproducible documents) they can +% be set with |\hypersetup| with the keys +% |pdfcreationdate|, |pdfmoddate| and |pdfmetadate|. +% +% \begin{verbatim} +% \hypersetup{pdfcreationdate=D:20010101205959-00'00'} +% \end{verbatim} +% +% The format should be a full date/time in PDF format, so one of these (naturally +% the numbers can change): +% \begin{verbatim} +% D:20010101205959-00'00' +% D:20010101205959+00'00' +% D:20010101205959Z +% \end{verbatim} +% +% \item The date |dc:date| is an \enquote{author date} and so +% should normally be set to the same date as +% given by |\date|. This can be done with the key |pdfdate|\footnote{Extracting +% the value automatically from \texttt{\textbackslash date} is not really possible +% as authors often put formatting or additional info in this command.}. +% The value should be a date in ISO 8601 format: +% +% \begin{verbatim} +% 2022 %year +% 2022-09-04 %year-month-day +% 2022-09-04T19:20 %year-month-day hour:minutes +% 2022-09-04T19:20:30 % year-month-day hour:minutes:second +% 2022-09-04T19:20:30.45 % year-month-day hour:minutes:second with fraction +% 2022-09-04T19:20+01:00 % with time zone designator +% 2022-09-04T19:20-02:00 % time zone designator +% 2022-09-04T19:20Z % time zone designator +% \end{verbatim} +% +% It is also possible to give the date as a full date in PDF format as described +% above. If not set the current date/time is used. +%\end{itemize} +% +% \subsection{Language} +% The code assumes that a default language is always declared +% (as the pdfmanagement gives the |/Lang| entry in the catalog a default value) +% This language can be changed with the |\DocumentMetadata| key |lang| (preferred) +% but the \pkg{hyperref} key |pdflang| is also honored. Its value should be a +% simple language tag like |de| or |de-DE|. +% +% The main language is also used in a number of attributes in the XMP data, +% if wanted a different language can be set here with the +% \pkg{hyperref}/\pkg{hyperxmp} key |pdfmetalang|. +% +% A number of entries can be given a language tag. Such a language is +% given by using an \enquote{optional argument} before the text: +% +% \begin{verbatim} +% \hypersetup{pdftitle={[en]english,[de]deutsch}} +% \hypersetup{pdfsubtitle={[en]subtitle in english}} +% \end{verbatim} +% +% \subsection{Rights} +% The keys |pdfcopyright| and |pdflicenseurl| work similar as in \pkg{hyperxmp}. +% But differently to \pkg{hyperxmp} the code doesn't set the |xmpRights:Marked| +% property, as I have some doubts that one deduce its value simply +% by checking if the other keys have been used; if needed it should be added manually. +% +% \subsection{PDF related data} +% The PDF producer is for all engines by default built from the engine +% name and the engine version and doesn't use the banners as with \pkg{hyperxmp} +% and \pkg{pdfx}, it can be set manually with the |pdfproducer| key. +% +% The key |pdftrapped| is ignored. |Trapped| is deprecated in PDF 2.0. +% +% \subsection{Document data} +% +% The authors should be given with the |pdfauthor| key, separated by commas. If an +% author contains a comma, protect/hide it by a brace. + +% \subsection{User commands} +% The XMP-meta data are added automatically. This can be suppressed with the +% |\DocumentMetadata| key |xmp|. +% +% \begin{function}{\pdfmeta_xmp_add:n} +% \begin{syntax} +% \cs{pdfmeta_xmp_add:n}\Arg{XML} +% \end{syntax} +% With this command additional XML code can be added to the Metadata. +% The content is added unchanged, and not sanitized. +% \end{function} +% \begin{function}{\pdfmeta_xmp_xmlns_new:nn} +% \begin{syntax} +% \cs{pdfmeta_xmp_xmlns_new:nn}\Arg{prefix}\Arg{uri} +% \end{syntax} +% With this command a xmlns name space can be added. +% \end{function} +% % \end{documentation} % % \begin{implementation} @@ -381,7 +567,7 @@ % \begin{macrocode} %<@@=pdfmeta> %<*header> -\ProvidesExplPackage{l3pdfmeta}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdfmeta}{2022-09-26}{0.95s} {PDF-Standards---LaTeX PDF management testphase bundle} % % \end{macrocode} @@ -395,11 +581,15 @@ \msg_new:nnn {pdf }{wrong-pdfversion} {PDF~version~#1~is~too~#2~for~standard~'#3'.} % \end{macrocode} -% \begin{variable}{\l_@@_tmpa_tl,\l_@@_tmpb_tl,\l_@@_tmpa_str} +% \begin{variable}{\l_@@_tmpa_tl,\l_@@_tmpb_tl,\l_@@_tmpa_str, +% \g_@@tmpa_str,\l_@@_tmpa_seq,\l_@@_tmpb_seq} % \begin{macrocode} -\tl_new:N\l_@@_tmpa_tl -\tl_new:N\l_@@_tmpb_tl +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl \str_new:N \l_@@_tmpa_str +\str_new:N \g_@@_tmpa_str +\seq_new:N \l_@@_tmpa_seq +\seq_new:N \l_@@_tmpb_seq % \end{macrocode} % \end{variable} % \subsection{Standards (work in progress)} @@ -889,8 +1079,8 @@ { \pdf_object_if_exist:nF { __color_icc_ #1 } { - \pdf_object_new:nn { __color_icc_ #1 }{fstream} - \pdf_object_write:nx { __color_icc_ #1 } + \pdf_object_new:n { __color_icc_ #1 } + \pdf_object_write:nnx { __color_icc_ #1 } { fstream } { {/N\c_space_tl \prop_item:cn{c_@@_colorprofile_#1}{N} @@ -982,6 +1172,1376 @@ \cs_new_protected:Npn \pdfmeta_set_regression_data: { \__pdf_backend_set_regression_data: } % \end{macrocode} +% +% \section{XMP-Metadata implementation} + +% \begin{variable}{\g_@@_xmp_bool} +% This boolean decides if the metadata are included +% \begin{macrocode} +\bool_new:N\g_@@_xmp_bool +\bool_gset_true:N \g_@@_xmp_bool +% \end{macrocode} +% \end{variable} +% Preset the two fields to avoid problems with standards. +% \begin{macrocode} +\hook_gput_code:nnn{pdfmanagement/add}{pdfmanagement} + { + \pdfmanagement_add:nnx {Info}{Producer}{(\c_sys_engine_exec_str-\c_sys_engine_version_str)} + \pdfmanagement_add:nnx {Info}{Creator}{(LaTeX)} + } +% \end{macrocode} +% \subsection{New document keys} +% \begin{macrocode} +\keys_define:nn { document / metadata } + { + _pdfstandard / X-4 .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-4}}, + _pdfstandard / X-4p .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-4p}}, + _pdfstandard / X-5g .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-5g}}, + _pdfstandard / X-5n .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-5n}}, + _pdfstandard / X-5pg .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-5pg}}, + _pdfstandard / X-6 .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}}, + _pdfstandard / X-6n .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6n}}, + _pdfstandard / X-6p .code:n = + {\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}}, + _pdfstandard / UA-1 .code:n = + {\AddToDocumentProperties [document]{pdfstandard-UA}{1}}, + xmp .bool_gset:N = \g_@@_xmp_bool + } +% \end{macrocode} +% \subsection{Messages} +% \begin{macrocode} +\msg_new:nnn{pdfmeta}{namespace-defined}{The~xmlns~namespace~`#1`~is~already~declared} +% \end{macrocode} +% \subsection{Some helper commands} +% \subsubsection{Generate a BOM} +% \begin{macro}{\@@_xmp_generate_bom:} +% \begin{macrocode} +\bool_lazy_or:nnTF + { \sys_if_engine_luatex_p: } + { \sys_if_engine_xetex_p: } + { + \cs_new:Npn \@@_xmp_generate_bom: + { \char_generate:nn {"FEFF}{12} } + } + { + \cs_new:Npn \@@_xmp_generate_bom: + { + \char_generate:nn {"EF}{12} + \char_generate:nn {"BB}{12} + \char_generate:nn {"BF}{12} + } + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Indentation} +% We provide a command which indents the xml based +% on a counter, and one which accepts a fix number. +% The counter can be increased and decreased. +% +% \begin{variable}{\l_@@_xmp_indent_int} +% \begin{macrocode} +\int_new:N \l_@@_xmp_indent_int +% \end{macrocode} +% \end{variable} +% \begin{macro}{\@@_xmp_indent:, +% \@@_xmp_indent:n, +% \@@_xmp_incr_indent:, +% \@@_xmp_decr_indent:} +% \begin{macrocode} +\cs_new:Npn \@@_xmp_indent: + { + \iow_newline: + \prg_replicate:nn {\l_@@_xmp_indent_int}{\c_space_tl} + } + +\cs_new:Npn \@@_xmp_indent:n #1 + { + \iow_newline: + \prg_replicate:nn {#1}{\c_space_tl} + } + +\cs_new_protected:Npn \@@_xmp_incr_indent: + { + \int_incr:N \l_@@_xmp_indent_int + } + +\cs_new_protected:Npn \@@_xmp_decr_indent: + { + \int_decr:N \l_@@_xmp_indent_int + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Date and time handling} +% If the date is given in PDF format we have to split it to create +% the XMP format. We use a precompiled regex for this. +% To some extend the regex can also handle incomplete dates. +% +% \begin{variable}{\l_@@_xmp_date_regex} +% \begin{macrocode} +\regex_new:N \l_@@_xmp_date_regex +\regex_set:Nn \l_@@_xmp_date_regex + {D:(\d{4})(\d{2})(\d{2})(\d{2})?(\d{2})?(\d{2})?([Z\+\-])?(?:(\d{2})\')?(?:(\d{2})\')?} +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_xmp_date_split:nN} +% This command takes a date in PDF format, splits it with the regex and +% stores the captures in a sequence. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_date_split:nN #1 #2 %#1 date, #2 seq + { + \regex_split:NnN \l_@@_xmp_date_regex {#1} #2 + } +\cs_generate_variant:Nn \@@_xmp_date_split:nN {VN,eN} +% \end{macrocode} +% \end{macro} + +% \begin{macro}[EXP]{\@@_xmp_print_date:N} +% This prints the date stored in a sequence as created +% by the previous command. +% +% \begin{macrocode} +\cs_new:Npn\@@_xmp_print_date:N #1 % seq + { + \tl_if_blank:eTF { \seq_item:Nn #1 {1} } + { + \seq_item:Nn #1 {2} %year + - + \seq_item:Nn #1 {3} %month + - + \seq_item:Nn #1 {4} % day + \tl_if_blank:eF + { \seq_item:Nn #1 {5} } + { T \seq_item:Nn #1 {5} } %hour + \tl_if_blank:eF + { \seq_item:Nn #1 {6} } + { : \seq_item:Nn #1 {6} } %minutes + \tl_if_blank:eF + { \seq_item:Nn #1 {7} } + { : \seq_item:Nn #1 {7} } %seconds + \seq_item:Nn #1 {8} %Z,+,- + \seq_item:Nn #1 {9} + \tl_if_blank:eF + { \seq_item:Nn #1 {10} } + { : \seq_item:Nn #1 {10} } + } + { + \seq_item:Nn #1 {1} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\l_@@_xmp_currentdate_tl,\l_@@_xmp_currentdate_seq} +% The tl var contains the date of the log-file in PDF format, +% the seq the result splitted with the regex. +% \begin{macrocode} +\tl_new:N \l_@@_xmp_currentdate_tl +\seq_new:N \l_@@_xmp_currentdate_seq +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_xmp_date_get:nNN} +% This checks a document property and if empty uses the current date. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_date_get:nNN #1 #2 #3 + %#1 property, #2 tl var with PDF date, #3 seq for splitted date + { + \tl_set:Nx #2 { \GetDocumentProperties{#1} } + \tl_if_blank:VTF #2 + { + \seq_set_eq:NN #3 \l_@@_xmp_currentdate_seq + \tl_set_eq:NN #2 \l_@@_xmp_currentdate_tl + } + { + \@@_xmp_date_split:VN #2 #3 + } + } +% \end{macrocode} +% \end{macro} +% \subsubsection{UUID} +% We need a command to generate an uuid +% \begin{macro}{\@@_xmp_create_uuid:nN} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_create_uuid:nN #1 #2 + { + \str_set:Nx#2 {\str_lowercase:f{\tex_mdfivesum:D{#1}}} + \str_set:Nx#2 + { uuid: + \str_range:Nnn #2{1}{8} + -\str_range:Nnn#2{9}{12} + -4\str_range:Nnn#2{13}{15} + -8\str_range:Nnn#2{16}{18} + -\str_range:Nnn#2{19}{30} + } + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Purifying and escaping of strings} +% +% \begin{macro}{\@@_xmp_sanitize:nN} +% We have to sanitize the user input. For this we pass +% it through |\text_purify| and then replace a few special chars. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_sanitize:nN #1 #2 +%#1 input string, #2 str with the output + { + \group_begin: + \text_declare_purify_equivalent:Nn \& {\tl_to_str:N & } + \text_declare_purify_equivalent:Nn \texttilde {\c_tilde_str} + \tl_set:Nx \l_@@_tmpa_tl { \text_purify:n {#1} } + \str_gset:Nx \g_@@_tmpa_str { \tl_to_str:N \l_@@_tmpa_tl } + \str_greplace_all:Nnn\g_@@_tmpa_str {&}{&} + \str_greplace_all:Nnn\g_@@_tmpa_str {<}{<} + \str_greplace_all:Nnn\g_@@_tmpa_str {>}{>} + \str_greplace_all:Nnn\g_@@_tmpa_str {"}{"} + \group_end: + \str_set_eq:NN #2 \g_@@_tmpa_str + } + +\cs_generate_variant:Nn\@@_xmp_sanitize:nN {VN} +% \end{macrocode} +% \end{macro} +% +% \subsection{Language handling} +% The language of the metadata is used in various attributes, so we store it in +% command. +% \begin{variable}{\l_@@_xmp_doclang_tl,\l_@@_xmp_metalang_tl} +% \begin{macrocode} +\tl_new:N \l_@@_xmp_doclang_tl +\tl_new:N \l_@@_xmp_metalang_tl +% \end{macrocode} +% \end{variable} +% +% The language is retrieved at the start of the packet. We assume that +% |lang| is always set and so don't use the |x-default| value of \pkg{hyperxmp}. +% +% \begin{variable}{\l_@@_xmp_lang_regex} +% \begin{macrocode} +\regex_new:N\l_@@_xmp_lang_regex +\regex_set:Nn\l_@@_xmp_lang_regex {\A\[([A-Za-z\-]+)\](.*)} +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_lang_get:nNN #1 #2 #3 +% #1 text, #2 tl var for lang match (or default), #3 tl var for text + { + \regex_extract_once:NnN \l_@@_xmp_lang_regex {#1}\l_@@_tmpa_seq + \seq_if_empty:NTF \l_@@_tmpa_seq + { + \tl_set:Nn #2 \l_@@_xmp_metalang_tl + \tl_set:Nn #3 {#1} + } + { + \tl_set:Nx #2 {\seq_item:Nn\l_@@_tmpa_seq{2}} + \tl_set:Nx #3 {\seq_item:Nn\l_@@_tmpa_seq{3}} + } + } +\cs_generate_variant:Nn \@@_xmp_lang_get:nNN {eNN,VNN} +% \end{macrocode} +% + + +% \subsection{Filling the packet} +% This tl var that holds the whole packet +% \begin{variable}{\g_@@_xmp_packet_tl} +% \begin{macrocode} +\tl_new:N \g_@@_xmp_packet_tl +% \end{macrocode} +% \end{variable} +% +% \subsubsection{Helper commands to add lines and lists} +% +% \begin{macro}{\@@_xmp_add_packet_chunk:n} +% This is the most basic command. +% It is meant to produce a line and will use the current indent. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_chunk:n #1 + { + \tl_gput_right:Nx\g_@@_xmp_packet_tl + { + \@@_xmp_indent: \exp_not:n{#1} + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_chunk:n {e} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_add_packet_chunk:nN} +% This is the most basic command. +% It is meant to produce a line and will use the current indent. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_chunk:nN #1 #2 + { + \tl_put_right:Nx#2 + { + \@@_xmp_indent: \exp_not:n{#1} + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_chunk:nN {eN} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_add_packet_open:nn} +% This commands opens a xml structure and increases the indent. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_open:nn #1 #2 %#1 prefix #2 name + { + \@@_xmp_add_packet_chunk:n {<#1:#2>} + \@@_xmp_incr_indent: + } +\cs_generate_variant:Nn \@@_xmp_add_packet_open:nn {ne} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_add_packet_open_attr:nnn} +% This commands opens a xml structure too but allows also to give an +% attribute. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_open_attr:nnn #1 #2 #3 + %#1 prefix #2 name #3 attr + { + \@@_xmp_add_packet_chunk:n {<#1:#2~#3>} + \@@_xmp_incr_indent: + } +\cs_generate_variant:Nn \@@_xmp_add_packet_open_attr:nnn {nne} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_add_packet_close:nn} +% This closes a structure and decreases the indent. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_close:nn #1 #2 %#1 prefix #2:name + { + \@@_xmp_decr_indent: + \@@_xmp_add_packet_chunk:n {} + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_xmp_add_packet_line:nnn} +% This will produce a full line with open and closing xml. +% The content is sanitized. We test if there is content to be +% able to suppress data which has not be set. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_line:nnn #1 #2 #3 + %#1 prefix #2 name #3 content + { + \tl_if_blank:nF {#3} + { + \@@_xmp_sanitize:nN {#3}\l_@@_tmpa_str + \@@_xmp_add_packet_chunk:e {<#1:#2>\l_@@_tmpa_str} + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_line:nnn {nne,nnV,nee} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_xmp_add_packet_line:nnnN} +% This will produce a full line with open and closing xml and store it in +% the given tl-var. This allows to prebuild blocks and then to test if there are empty. +% The content is sanitized. We test if there is content to be +% able to suppress data which has not be set. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_line:nnnN #1 #2 #3 #4 + %#1 prefix #2 name #3 content #4 tl_var to prebuilt. + { + \tl_if_blank:nF {#3} + { + \@@_xmp_sanitize:nN {#3}\l_@@_tmpa_str + \@@_xmp_add_packet_chunk:eN {<#1:#2>\l_@@_tmpa_str} #4 + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_line:nnnN {nneN} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_xmp_add_packet_line_attr:nnnn} +% A similar command with attribute +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_line_attr:nnnn #1 #2 #3 #4 + %#1 prefix #2 name #3 attribute #4 content + { + \tl_if_blank:nF {#4} + { + \@@_xmp_sanitize:nN {#4}\l_@@_tmpa_str + \@@_xmp_add_packet_chunk:e {<#1:#2~#3>\l_@@_tmpa_str} + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_line_attr:nnnn {nnee,nneV} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_xmp_add_packet_line_default:nnnn} +% \begin{macrocode} + \cs_new_protected:Npn \@@_xmp_add_packet_line_default:nnnn #1 #2 #3 #4 + % #1 prefix #2 name #3 default #4 content + { + \tl_if_blank:nTF { #4 } + { + \tl_set:Nn \l_@@_tmpa_tl {#3} + } + { + \tl_set:Nn \l_@@_tmpa_tl {#4} + } + \@@_xmp_add_packet_line:nnV {#1}{#2}\l_@@_tmpa_tl + } +\cs_generate_variant:Nn \@@_xmp_add_packet_line_default:nnnn {nnee} +% \end{macrocode} +% \end{macro} +% Some data are stored as unordered (Bag) or ordered lists (Seq) or (Alt). +% Here we check also for the language. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_list:nnnn #1 #2 #3 #4 + %#1 prefix, #2 name, #3 type (Seq/Bag/Alt) #4 a clist + { + \clist_if_empty:nF { #4 } + { + \@@_xmp_add_packet_open:nn {#1}{#2} + \@@_xmp_add_packet_open:nn {rdf}{#3} + \clist_map_inline:nn {#4} + { + \@@_xmp_lang_get:nNN {##1}\l_@@_tmpa_tl\l_@@_tmpb_tl + \@@_xmp_add_packet_line_attr:nneV + {rdf}{li}{xml:lang="\l_@@_tmpa_tl" }\l_@@_tmpb_tl + } + \@@_xmp_add_packet_close:nn{rdf}{#3} + \@@_xmp_add_packet_close:nn {#1}{#2} + } + } +\cs_generate_variant:Nn \@@_xmp_add_packet_list:nnnn {nnne} +% \end{macrocode} +% +% \subsubsection{Building the main packet} +% +% \begin{macro}{\@@_xmp_build_packet:} +% This is the main command to build the packet. +% As data has to be set and collected first, it will be expanded +% rather late in the document. +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_packet: + { +% \end{macrocode} +% Get the main languages +% \begin{NOTE}{UF} +% think if an error is needed for empty lang. +% \end{NOTE} +% \begin{macrocode} + \tl_set:Nx \l_@@_xmp_doclang_tl {\GetDocumentProperties{document/lang}} + \tl_set:Nx \l_@@_xmp_metalang_tl {\GetDocumentProperties{hyperref/pdfmetalang}} + \tl_if_blank:VT \l_@@_xmp_metalang_tl + { \cs_set_eq:NN \l_@@_xmp_metalang_tl\l_@@_xmp_doclang_tl} +% \end{macrocode} +% we preprocess a number of data to be able to suppress them and their schema +% if there are unused. Currently only done for iptc +% \begin{macrocode} + \@@_xmp_build_iptc_data:N \l_@@_xmp_iptc_data_tl + \tl_if_empty:NT \l_@@_xmp_iptc_data_tl + { + \seq_remove_all:Nn \l_@@_xmp_schema_seq { Iptc4xmpCore } + } +% \end{macrocode} +% The start of the package. +% No need to try to juggle with catcode, this is fix text +% \begin{macrocode} + \@@_xmp_add_packet_chunk:e + {} + \@@_xmp_add_packet_open:nn{x}{xmpmeta~xmlns:x="adobe:ns:meta/"} + \@@_xmp_add_packet_open:ne{rdf} + {RDF~xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\c_hash_str"} +% \end{macrocode} +% The rdf namespaces +% \begin{macrocode} + \@@_xmp_add_packet_open_attr:nne + {rdf}{Description}{rdf:about="" \g_@@_xmp_xmlns_tl} +% \end{macrocode} +% The extensions +% \begin{macrocode} + \@@_xmp_add_packet_open:nn{pdfaExtension}{schemas} + \@@_xmp_add_packet_open:nn {rdf}{Bag} + \seq_map_inline:Nn \l_@@_xmp_schema_seq + { + \tl_use:c { g_@@_xmp_schema_##1_tl } + } + \@@_xmp_add_packet_close:nn {rdf}{Bag} + \@@_xmp_add_packet_close:nn {pdfaExtension}{schemas} +% \end{macrocode} +% Now starts the part with the data. +% \begin{macrocode} + % data + \@@_xmp_build_pdf: + \@@_xmp_build_xmpRights: + \@@_xmp_build_standards: %pdfaid,pdfxid,pdfuaid + \@@_xmp_build_dc: + \@@_xmp_build_photoshop: + \@@_xmp_build_xmp: + \@@_xmp_build_xmpMM: + \@@_xmp_build_prism: + \@@_xmp_build_iptc: + \@@_xmp_build_user: %user additions + % end + \@@_xmp_add_packet_close:nn {rdf}{Description} + \@@_xmp_add_packet_close:nn {rdf}{RDF} + \@@_xmp_add_packet_close:nn {x}{xmpmeta} + \int_set:Nn \l_@@_xmp_indent_int{20} + \prg_replicate:nn{10}{\@@_xmp_add_packet_chunk:n {}} + \int_zero:N \l_@@_xmp_indent_int + \@@_xmp_add_packet_chunk:n {} + } +% \end{macrocode} +% \end{macro} + +% \subsection{Building the chunks: rdf namespaces} +% This is the list of external names spaces. +% They are rather simple, and we store them directly +% into a string. Special chars should be escaped properly, +% see e.g. |\c_hash_str| for the hash. + +% \begin{variable}{\g_@@_xmp_xmlns_tl,\g_@@_xmp_xmlns_prop} +% The string will hold the prepared chunk, the prop stores the name spaces +% so that one can check on the user level for duplicates. +% \begin{macrocode} +\str_new:N \g_@@_xmp_xmlns_tl +\prop_new:N \g_@@_xmp_xmlns_prop +% \end{macrocode} +% \end{variable} +% \begin{macro}{\@@_xmp_xmlns_new:nn,\@@_xmp_xmlns_new:nx} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_xmlns_new:nn #1 #2 + { + \prop_gput:Nnn \g_@@_xmp_xmlns_prop {#1}{#2} + \tl_gput_right:Nx \g_@@_xmp_xmlns_tl + { + \@@_xmp_indent:n{4} xmlns:\exp_not:n{#1="#2"} + } + } +\cs_generate_variant:Nn \@@_xmp_xmlns_new:nn {nx} +% \end{macrocode} +% \end{macro} +% Now we fill the data. The list is more or less the same as in hyperxmp +% \begin{macrocode} +\@@_xmp_xmlns_new:nn {pdf} {http://ns.adobe.com/pdf/1.3/} +\@@_xmp_xmlns_new:nn {xmpRights}{http://ns.adobe.com/xap/1.0/rights/} +\@@_xmp_xmlns_new:nn {dc} {http://purl.org/dc/elements/1.1/} +\@@_xmp_xmlns_new:nn {photoshop}{http://ns.adobe.com/photoshop/1.0/} +\@@_xmp_xmlns_new:nn {xmp} {http://ns.adobe.com/xap/1.0/} +\@@_xmp_xmlns_new:nn {xmpMM} {http://ns.adobe.com/xap/1.0/mm/} +\@@_xmp_xmlns_new:nx {stEvt} + {http://ns.adobe.com/xap/1.0/sType/ResourceEvent\c_hash_str} +\@@_xmp_xmlns_new:nn {pdfaid} {http://www.aiim.org/pdfa/ns/id/} +\@@_xmp_xmlns_new:nn {pdfuaid} {http://www.aiim.org/pdfua/ns/id/} +\@@_xmp_xmlns_new:nn {pdfx} {http://ns.adobe.com/pdfx/1.3/} +\@@_xmp_xmlns_new:nn {pdfxid} {http://www.npes.org/pdfx/ns/id/} +\@@_xmp_xmlns_new:nn {prism} {http://prismstandard.org/namespaces/basic/3.0/} +%\@@_xmp_xmlns_new:nn {jav} {http://www.niso.org/schemas/jav/1.0/} +%\@@_xmp_xmlns_new:nn {xmpTPg} {http://ns.adobe.com/xap/1.0/t/pg/} +\@@_xmp_xmlns_new:nx {stFnt} {http://ns.adobe.com/xap/1.0/sType/Font\c_hash_str} +\@@_xmp_xmlns_new:nn {Iptc4xmpCore}{http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/} +\@@_xmp_xmlns_new:nn {pdfaExtension}{http://www.aiim.org/pdfa/ns/extension/} +\@@_xmp_xmlns_new:nx {pdfaSchema}{http://www.aiim.org/pdfa/ns/schema\c_hash_str} +\@@_xmp_xmlns_new:nx {pdfaProperty}{http://www.aiim.org/pdfa/ns/property\c_hash_str} +\@@_xmp_xmlns_new:nx {pdfaType} {http://www.aiim.org/pdfa/ns/type\c_hash_str} +\@@_xmp_xmlns_new:nx {pdfaField}{http://www.aiim.org/pdfa/ns/field\c_hash_str} +% \end{macrocode} + +% \subsection{Building the chunks: Extensions} +% In this part local name spaces or additional names in a name space can be declared. +% A \enquote{schema} declaration consist of the declaration of the name, uri and prefix +% which then surrounds a bunch of property declarations. +% The current code doesn't support all syntax options but sticks to +% what is used in \pkg{hyperxmp} and \pkg{pdfx}. +% If needed it can be extended later. +% +% \begin{variable}{\l_@@_xmp_schema_seq} +% This variable will hold the list of prefix so that we can loop +% to produce the final XML +% \begin{macrocode} +\seq_new:N \l_@@_xmp_schema_seq +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_xmp_schema_new:nnn} +% With this command a new schema can be declared. The main tl contains the +% XML wrapper code, it then includes the list of properties which are +% created with the next command. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_schema_new:nnn #1 #2 #3 + %#1 name #2 prefix, #3 text + { + \seq_put_right:Nn \l_@@_xmp_schema_seq { #2 } + \tl_new:c { g_@@_xmp_schema_#2_tl } + \tl_new:c { g_@@_xmp_schema_#2_properties_tl } + \tl_gput_right:cn { g_@@_xmp_schema_#2_tl } + { + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn {pdfaSchema}{schema}{#1} + \@@_xmp_add_packet_line:nnn {pdfaSchema}{prefix}{#2} + \@@_xmp_add_packet_line:nnn {pdfaSchema}{namespaceURI}{#3} + \@@_xmp_add_packet_open:nn {pdfaSchema}{property} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \tl_use:c { g_@@_xmp_schema_#2_properties_tl } + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn {pdfaSchema}{property} + \cs_if_exist_use:c {@@_xmp_schema_#2_additions:} + \@@_xmp_add_packet_close:nn{rdf}{li} + } + } +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_property_new:nnn} +% This adds a property to a schema. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_property_new:nnnnn #1 #2 #3 #4 #5 % + %#1 schema #2 name, #3 type, #4 category #5 description + { + \tl_gput_right:cn { g_@@_xmp_schema_#1_properties_tl } + { + \@@_xmp_add_packet_open:nn {rdf}{li~rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn {pdfaProperty}{name}{#2} + \@@_xmp_add_packet_line:nnn {pdfaProperty}{valueType}{#3} + \@@_xmp_add_packet_line:nnn {pdfaProperty}{category}{#4} + \@@_xmp_add_packet_line:nnn {pdfaProperty}{description}{#5} + \@@_xmp_add_packet_close:nn{rdf}{li} + } + } +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\@@_xmp_add_packet_field:nnn} +% This adds a field to a schema. +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_add_packet_field:nnn #1 #2 #3 % + %#1 name #2 valuetype #3 description + { + \@@_xmp_add_packet_open_attr:nnn {rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn {pdfaField}{name}{#1} + \@@_xmp_add_packet_line:nnn {pdfaField}{valueType}{#2} + \@@_xmp_add_packet_line:nnn {pdfaField}{description}{#3} + \@@_xmp_add_packet_close:nn{rdf}{li} + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The extension data} +% +% The list of extension has been reviewed and compared with +% the list of namespaces which can be used in pdf/A-1\footnote{While +% A-1 builds on PDF 1.4 and so it probably no longer relevant, it is +% not quite clear if one can remove this for A-2 and newer, so we stay on the +% safe side.} +% +% +% [1]~\url{https://www.pdfa.org/wp-content/uploads/2011/08/tn0008_predefined_xmp_properties_in_pdfa-1_2008-03-20.pdf} +% and the content of the namespaces as listed here +% [2]~\url{https://developer.adobe.com/xmp/docs/XMPNamespaces/pdf/} +% +% +% \begin{description} +% \item[pdf] property: Trapped. +% We ignore it, it seems to validate without it. +% \item[xmpMM] properties DocumentID, InstanceID, VersionID, +% Renditionclass declared by hyperxmp. +% Properties InstanceID and OriginalDocumentID declared by pdfx (pdfx.xmp) +% With the exception of OriginalDocumentID all are already allowed and +% predefined. We ignore OriginalDocumentID until requested. +% \item[pdfaid] properties part and conformance are declared by hyperxmp, but +% no here as already in http://www.aiim.org/pdfa/ns/id/. But we declare +% year so that it can be used also with older A-standards. +% \begin{macro}{pdfaid~(schema)} +% \begin{macrocode} +\@@_xmp_schema_new:nnn + {PDF/A~Identification~Schema} + {pdfaid} + {http://www.aiim.org/pdfa/ns/id/} +\@@_xmp_property_new:nnnnn + {pdfaid} + {year} + {Integer} + {internal} + {Year~of~standard} +% \end{macrocode} +% \end{macro} +% \item[pdfuaid] here we need to declare the property \enquote{part}. +% \begin{macro}{pdfuaid~(schema)} +% \begin{macrocode} +\@@_xmp_schema_new:nnn + {PDF/UA~Universal~Accessibility~Schema} + {pdfuaid} + {http://www.aiim.org/pdfua/ns/id/} +\@@_xmp_property_new:nnnnn + {pdfuaid} + {part} + {Integer} + {internal} + {Part~of~ISO~14289~standard} +% \end{macrocode} +% \end{macro} +% \item[pdfx] According to [1] not an allowed schema, but it seems +% to validate and allow to set the pdf/X version, \pkg{hyperxmp} +% declares here the properties |GTS_PDFXVersion| and |GTS_PDFXConformance|. +% Ignored as only relevant for older pdf/X version not supported by the pdfmanagement. +% +% \item[pdfxid] we set this so that we +% can add the pdf/X version for pdf/X-4 and higher +% \begin{macro}{pdfxid~(schema)} +% \begin{macrocode} +\@@_xmp_schema_new:nnn + {PDF/X~ID~Schema} + {pdfxid} + {http://www.npes.org/pdfx/ns/id/} +\@@_xmp_property_new:nnnnn + {pdfxid} + {GTS_PDFXVersion} + {Text} + {internal} + {ID~of~PDF/X~standard} +% \end{macrocode} +% \end{macro} + +%\item[Prism] +% \begin{macro}{prism~(schema)} +% \begin{macrocode} +\@@_xmp_schema_new:nnn + {PRISM~Basic~Metadata} + {prism} + {http://prismstandard.org/namespaces/basic/3.0/} +\@@_xmp_property_new:nnnnn + {prism} + {complianceProfile} + {Text} + {internal} + {PRISM~specification~compliance~profile~to~which~this~document~adheres} +\@@_xmp_property_new:nnnnn + {prism} + {publicationName} + {Text} + {external} + {Publication name} +\@@_xmp_property_new:nnnnn + {prism} + {aggregationType} + {Text} + {external} + {Publication type} +\@@_xmp_property_new:nnnnn + {prism} + {bookEdition} + {Text} + {external} + {Edition~of~the~book~in~which~the~document~was~published} +\@@_xmp_property_new:nnnnn + {prism} + {volume} + {Text} + {external} + {Publication~volume~number} +\@@_xmp_property_new:nnnnn + {prism} + {number} + {Text} + {external} + {Publication~issue~number~within~a~volume} +\@@_xmp_property_new:nnnnn + {prism} + {pageRange} + {Text} + {external} + {Page~range~for~the~document~within~the~print~version~of~its~publication} +\@@_xmp_property_new:nnnnn + {prism} + {issn} + {Text} + {external} + {ISSN~for~the~printed~publication~in~which~the~document~was~published} +\@@_xmp_property_new:nnnnn + {prism} + {eIssn} + {Text} + {external} + {ISSN~for~the~electronic~publication~in~which~the~document~was~published} +\@@_xmp_property_new:nnnnn + {prism} + {isbn} + {Text} + {external} + {ISBN for the publication in which the document was published} +\@@_xmp_property_new:nnnnn + {prism} + {doi} + {Text} + {external} + {Digital~Object~Identifier~for~the~document} +\@@_xmp_property_new:nnnnn + {prism} + {url} + {URL} + {external} + {URL~at~which~the~document~can~be~found} +\@@_xmp_property_new:nnnnn + {prism} + {byteCount} + {Integer} + {internal} + {Approximate~file~size~in~octets} +\@@_xmp_property_new:nnnnn + {prism} + {pageCount} + {Integer} + {internal} + {Number~of~pages~in~the~print~version~of~the~document} +\@@_xmp_property_new:nnnnn + {prism} + {subtitle} + {Text} + {external} + {Document's subtitle} +% \end{macrocode} +% \end{macro} +% \item[iptc] +% \begin{macrocode} +\@@_xmp_schema_new:nnn + {IPTC~Core~Schema} + {Iptc4xmpCore} + {http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/} +\@@_xmp_property_new:nnnnn + {Iptc4xmpCore} + {CreatorContactInfo} + {ContactInfo} + {external} + {Document~creator's~contact~information} +\cs_new_protected:cpn { @@_xmp_schema_Iptc4xmpCore_additions: } + { + \@@_xmp_add_packet_open:nn{pdfaSchema}{valueType} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"} + \@@_xmp_add_packet_line:nnn{pdfaType}{type}{ContactInfo} + \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI} + {http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/} + \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{Iptc4xmpCore} + \@@_xmp_add_packet_line:nnn{pdfaType}{description} + {Basic~set~of~information~to~get~in~contact~with~a~person} + \@@_xmp_add_packet_open:nn{pdfaType}{field} + \@@_xmp_add_packet_open:nn{rdf}{Seq} + \@@_xmp_add_packet_field:nnn{CiAdrCity}{Text} + {Contact~information~city} + \@@_xmp_add_packet_field:nnn{CiAdrCtry}{Text} + {Contact~information~country} + \@@_xmp_add_packet_field:nnn{CiAdrExtadr}{Text} + {Contact~information~address} + \@@_xmp_add_packet_field:nnn{CiAdrPcode}{Text} + {Contact~information~local~postal~code} + \@@_xmp_add_packet_field:nnn{CiAdrRegion}{Text} + {Contact~information~regional~information~such~as~state~or~province} + \@@_xmp_add_packet_field:nnn{CiEmailWork}{Text} + {Contact~information~email~address(es)} + \@@_xmp_add_packet_field:nnn{CiTelWork}{Text} + {Contact~information~telephone~number(s)} + \@@_xmp_add_packet_field:nnn{CiUrlWork}{Text} + {Contact~information~Web~URL(s)} + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn{pdfaType}{field} + \@@_xmp_add_packet_close:nn{rdf}{li} + \@@_xmp_add_packet_close:nn{rdf}{Seq} + \@@_xmp_add_packet_close:nn{pdfaSchema}{valueType} + } +% \end{macrocode} +% \item[jav]: currently ignored +% +% \end{description} +% \subsection{The actual user / document data} + +% \subsubsection{pdf} +% This builds pdf related the data with the (prefix \enquote{pdf}). +% +% \begin{macro}{\@@_xmp_build_pdf:} +% \begin{macro}{ +% Producer/pdfproducer, +% PDFversion} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_pdf: + { +% \end{macrocode} +% At first the producer. If not given manually we build it from the exec string +% plus the version number +% \begin{macrocode} + \@@_xmp_add_packet_line_default:nnee + {pdf}{Producer} + {\c_sys_engine_exec_str-\c_sys_engine_version_str} + {\GetDocumentProperties{hyperref/pdfproducer}} +% \end{macrocode} +% Now the PDF version +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{pdf}{PDFVersion}{\pdf_version:} +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{xmp} +% This builds the data with the (prefix \enquote{xmp}). +% +% \begin{macro}{\@@_xmp_build_xmp:} +% \begin{macro}{ +% CreatorTool/pdfcreator, +% BaseUrl/baseurl} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_xmp: + { +% \end{macrocode} +% The creator +% \begin{macrocode} + \@@_xmp_add_packet_line_default:nnee + {xmp}{CreatorTool} + {LaTeX} + { \GetDocumentProperties{hyperref/pdfcreator} } +% \end{macrocode} +% The baseurl +% \begin{macrocode} + \@@_xmp_add_packet_line_default:nnee + {xmp}{BaseURL}{} + { \GetDocumentProperties{hyperref/baseurl} } +% \end{macrocode} +% CreationDate +% \begin{macrocode} + \@@_xmp_date_get:nNN + {document/pdfcreationdate}\l_@@_tmpa_tl\l_@@_tmpa_seq + \@@_xmp_add_packet_line:nne{xmp}{CreateDate}{\@@_xmp_print_date:N\l_@@_tmpa_seq} + \pdfmanagement_add:nnx{Info}{CreationDate}{(\l_@@_tmpa_tl)} +% \end{macrocode} +% ModifyDate +% \begin{macrocode} + \@@_xmp_date_get:nNN + {document/pdfmoddate}\l_@@_tmpa_tl\l_@@_tmpa_seq + \@@_xmp_add_packet_line:nne{xmp}{ModifyDate}{\@@_xmp_print_date:N\l_@@_tmpa_seq} + \pdfmanagement_add:nnx{Info}{ModDate}{(\l_@@_tmpa_tl)} +% \end{macrocode} +% MetadataDate +% \begin{macrocode} + \@@_xmp_date_get:nNN + {hyperref/pdfmetadate}\l_@@_tmpa_tl\l_@@_tmpa_seq + \@@_xmp_add_packet_line:nne{xmp}{MetadataDate}{\@@_xmp_print_date:N\l_@@_tmpa_seq} +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Standards} +% The metadata for standards are taken from the |pdfstandard| key +% of |\DocumentMetadata|. +% The values for A-standards are taken from the property, X and UA are currently +% taken from the document container, this should be changed when merging of +% standards are possible. +% \begin{macro}{\@@_xmp_build_standards:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_standards: + { + \@@_xmp_add_packet_line:nne {pdfaid}{part}{\pdfmeta_standard_item:n{level}} + \@@_xmp_add_packet_line:nne + {pdfaid}{conformance}{\pdfmeta_standard_item:n{conformance}} + \@@_xmp_add_packet_line:nne {pdfaid}{year} {\pdfmeta_standard_item:n{year}} + \@@_xmp_add_packet_line:nne + {pdfxid}{GTS_PDFXVersion}{\GetDocumentProperties{document/pdfstandard-X}} + \@@_xmp_add_packet_line:nne + {pdfuaid}{part}{\GetDocumentProperties{document/pdfstandard-UA}} + } +% \end{macrocode} +% \end{macro} +% + +% \subsubsection{Photoshop} +% \begin{macro}{\@@_xmp_build_photoshop:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_photoshop: + { +% \end{macrocode} +% pdfauthortitle/photoshop:AuthorsPosition +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{photoshop}{AuthorsPosition} + { \GetDocumentProperties{hyperref/pdfauthortitle} } +% \end{macrocode} +% pdfcaptionwriter/photoshop:CaptionWriter +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{photoshop}{CaptionWriter} + { \GetDocumentProperties{hyperref/pdfcaptionwriter} } +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% + +% \subsection{XMP Media Management} + +% \begin{macro}{\@@_xmp_build_xmpMM:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_xmpMM: + { +% \end{macrocode} +% pdfdocumentid / xmpMM:DocumentID +% \begin{macrocode} + \str_set:Nx\l_@@_tmpa_str {\GetDocumentProperties{hyperref/pdfdocumentid}} + \str_if_empty:NT \l_@@_tmpa_str + { + \@@_xmp_create_uuid:nN + {\jobname\GetDocumentProperties{hyperref/pdftitle}} + \l_@@_tmpa_str + } + \@@_xmp_add_packet_line:nnV{xmpMM}{DocumentID} + \l_@@_tmpa_str +% \end{macrocode} +% pdfinstanceid / xmpMM:InstanceID +% \begin{macrocode} + \str_set:Nx\l_@@_tmpa_str {\GetDocumentProperties{hyperref/pdfinstanceid}} + \str_if_empty:NT \l_@@_tmpa_str + { + \@@_xmp_create_uuid:nN + {\jobname\l_@@_xmp_currentdate_tl} + \l_@@_tmpa_str + } + \@@_xmp_add_packet_line:nnV{xmpMM}{InstanceID} + \l_@@_tmpa_str +% \end{macrocode} +% pdfversionid/xmpMM:VersionID +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{xmpMM}{VersionID} + { \GetDocumentProperties{hyperref/pdfversionid} } +% \end{macrocode} +% pdfrendition/xmpMM:RenditionClass +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{xmpMM}{RenditionClass} + { \GetDocumentProperties{hyperref/pdfrendition} } +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Rest of dublin Core data} +% +% \begin{macro}{\@@_xmp_build_dc:} +% \begin{macro}{ +% dc:creator/pdfauthor, +% dc:subject/pdfkeywords, +% dc:type/pdftype, +% dc:publisher/pdfpublisher, +% dc:description/pdfsubject, +% dc:language/lang/pdflang, +% dc:identifier/pdfidentifier, +% photoshop:AuthorsPosition/pdfauthortitle, +% photoshop:CaptionWriter/pdfcaptionwriter +% } +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_dc: + { +% \end{macrocode} +% pdfauthor/dc:creator +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne {dc}{creator}{Seq} + { \GetDocumentProperties{hyperref/pdfauthor} } + \int_compare:nNnT {0\pdfmeta_standard_item:n{level}}={1} + { \pdfmanagement_remove:nn{Info}{Author} } +% \end{macrocode} +% pdftitle/dc:title. This is rather complex as we want to support a list +% with different languages. +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne {dc}{title}{Alt} + { \GetDocumentProperties{hyperref/pdftitle} } +% \end{macrocode} +% pdfkeywords/dc:subject +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne {dc}{subject}{Bag} + { \GetDocumentProperties{hyperref/pdfkeywords} } + \int_compare:nNnT {0\pdfmeta_standard_item:n{level}}={1} + { \pdfmanagement_remove:nn{Info}{Keywords} } +% \end{macrocode} +% pdftype/dc:type +% \begin{macrocode} + \tl_if_blank:eTF { \GetDocumentProperties{hyperref/pdftype} } + { + \@@_xmp_add_packet_list:nnne {dc}{type}{Bag}{Text} + } + { + \@@_xmp_add_packet_list:nnne {dc}{type}{Bag} + { { \GetDocumentProperties{hyperref/pdftype} }} + } +% \end{macrocode} +% pdfpublisher/dc:publisher +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne {dc}{publisher}{Bag} + { \GetDocumentProperties{hyperref/pdfpublisher} } +% \end{macrocode} +% pdfsubject/dc:description +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne + {dc}{description}{Alt} + {\GetDocumentProperties{hyperref/pdfsubject}} +% \end{macrocode} +% lang/pdflang/dc:language +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne {dc}{language}{Bag} + { \l_@@_xmp_doclang_tl } +% \end{macrocode} +% pdfidentifier/dc:identifier +% \begin{macrocode} + \@@_xmp_add_packet_line:nne{dc}{identifier} + { \GetDocumentProperties{hyperref/pdfidentifier} } +% \end{macrocode} +% pdfdate/dc:date +% \begin{macrocode} + \@@_xmp_date_get:nNN {hyperref/pdfdate}\l_@@_tmpa_tl\l_@@_tmpa_seq + \@@_xmp_add_packet_list:nnne {dc}{date}{Seq} + {\@@_xmp_print_date:N\l_@@_tmpa_seq} +% \end{macrocode} +% The file format +% \begin{macrocode} + \@@_xmp_add_packet_line:nnn{dc}{format}{application/pdf} +% \end{macrocode} +% The source +% \begin{macrocode} + \@@_xmp_add_packet_line_default:nnee + {dc}{source} + { \c_sys_jobname_str.tex } + { \GetDocumentProperties{hyperref/pdfsource} } +% \end{macrocode} +% \begin{macrocode} + \@@_xmp_add_packet_list:nnne{dc}{rights}{Alt} + {\GetDocumentProperties{hyperref/pdfcopyright}} +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{xmpRights} +% \begin{macro}{\@@_xmp_build_xmpRights:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_xmpRights: + { + \@@_xmp_add_packet_line:nne + {xmpRights} + {WebStatement} + {\GetDocumentProperties{hyperref/pdflicenseurl}} + } +% \end{macrocode} +% \end{macro} +% +% \subsection{IPTC} +% We want the block and also the resources only if they are actually used. So we pack +% them first in a local variable +% \begin{variable}{\l_@@_xmp_iptc_data_tl} +% \begin{macrocode} +\tl_new:N\l_@@_xmp_iptc_data_tl +% \end{macrocode} +% \end{variable} +% \begin{macro}{\@@_xmp_build_iptc_data:N} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_iptc_data:N #1 + { + \tl_clear:N #1 + \@@_xmp_incr_indent:\@@_xmp_incr_indent:\@@_xmp_incr_indent:\@@_xmp_incr_indent: + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiAdrExtadr} + {\GetDocumentProperties{hyperref/pdfcontactaddress}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiAdrCity} + {\GetDocumentProperties{hyperref/pdfcontactcity}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiAdrPcode} + {\GetDocumentProperties{hyperref/pdfcontactpostcode}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiAdrCtry} + {\GetDocumentProperties{hyperref/pdfcontactcountry}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiTelWork} + {\GetDocumentProperties{hyperref/pdfcontactphone}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiEmailWork} + {\GetDocumentProperties{hyperref/pdfcontactemail}} + #1 + \@@_xmp_add_packet_line:nneN + {Iptc4xmpCore}{CiUrlWork} + {\GetDocumentProperties{hyperref/pdfcontacturl}} + #1 + \@@_xmp_decr_indent:\@@_xmp_decr_indent:\@@_xmp_decr_indent:\@@_xmp_decr_indent: + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@@_xmp_build_iptc:} +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_iptc: + { + \tl_if_empty:NF\l_@@_xmp_iptc_data_tl + { + \@@_xmp_add_packet_open_attr:nnn + {Iptc4xmpCore}{CreatorContactInfo}{rdf:parseType="Resource"} + \tl_gput_right:Nx\g_@@_xmp_packet_tl { \l_@@_xmp_iptc_data_tl } + \@@_xmp_add_packet_close:nn + {Iptc4xmpCore}{CreatorContactInfo} + } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Prism} +% \begin{macro}{\@@_xmp_build_prism:} +% \begin{macro} +% { +% complianceProfile, +% prism:subtitle/pdfsubtitle, +% } +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_prism: + { +% \end{macrocode} +% The compliance profile is a fix value taken from \pkg{hyperxmp} +% \begin{macrocode} + \@@_xmp_add_packet_line:nnn + {prism}{complianceProfile} + {three} +% \end{macrocode} +% the next two values can take an optional language argument. +% First subtitle +% \begin{macrocode} + \@@_xmp_lang_get:eNN + {\GetDocumentProperties{hyperref/pdfsubtitle}} + \l_@@_tmpa_tl\l_@@_tmpb_tl + \@@_xmp_add_packet_line_attr:nneV + {prism}{subtitle} + {xml:lang="\l_@@_tmpa_tl"} + \l_@@_tmpb_tl +% \end{macrocode} +% Then publicationName +% \begin{macrocode} + \@@_xmp_lang_get:eNN + {\GetDocumentProperties{hyperref/pdfpublication}} + \l_@@_tmpa_tl\l_@@_tmpb_tl + \@@_xmp_add_packet_line_attr:nneV + {prism}{publicationName} + {xml:lang="\l_@@_tmpa_tl"} + \l_@@_tmpb_tl +% \end{macrocode} +% Now the rest +% \begin{macrocode} + \@@_xmp_add_packet_line:nne + {prism}{bookEdition} + {\GetDocumentProperties{hyperref/pdfbookedition}} + \@@_xmp_add_packet_line:nne + {prism}{aggregationType} + {\GetDocumentProperties{hyperref/pdfpubtype}} + \@@_xmp_add_packet_line:nne + {prism}{volume} + {\GetDocumentProperties{hyperref/pdfvolumenum}} + \@@_xmp_add_packet_line:nne + {prism}{number} + {\GetDocumentProperties{hyperref/pdfissuenum}} + \@@_xmp_add_packet_line:nne + {prism}{pageRange} + {\GetDocumentProperties{hyperref/pdfpagerange}} + \@@_xmp_add_packet_line:nne + {prism}{issn} + {\GetDocumentProperties{hyperref/pdfissn}} + \@@_xmp_add_packet_line:nne + {prism}{eIssn} + {\GetDocumentProperties{hyperref/pdfeissn}} + \@@_xmp_add_packet_line:nne + {prism}{doi} + {\GetDocumentProperties{hyperref/pdfdoi}} + \@@_xmp_add_packet_line:nne + {prism}{url} + {\GetDocumentProperties{hyperref/pdfurl}} +% \end{macrocode} +% The page count is take from the previous run or from +% pdfnumpages. +% \begin{macrocode} + \tl_set:Nx \l_@@_tmpa_tl { \GetDocumentProperties{hyperref/pdfnumpages} } + \@@_xmp_add_packet_line:nne + {prism}{pageCount} + {\tl_if_blank:VTF \l_@@_tmpa_tl {\PreviousTotalPages}{\l_@@_tmpa_tl}} +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{User additions} +% +% \begin{variable}{\g_@@_xmp_user_packet_str } +% \begin{macrocode} +\tl_new:N \g_@@_xmp_user_packet_tl +% \end{macrocode} +% \end{variable} +% \begin{macro}{\@@_xmp_build_user: } +% \begin{macrocode} +\cs_new_protected:Npn \@@_xmp_build_user: + { + \int_zero:N \l_@@_xmp_indent_int + \g_@@_xmp_user_packet_tl + \int_set:Nn \l_@@_xmp_indent_int {3} + } +% \end{macrocode} +% \end{macro} +% \subsection{Activating the metadata} +% We don't try to get the byte count. So we can put everything +% in the |shipout/lastpage| hook +% \begin{macrocode} +\AddToHook{shipout/lastpage} + { + \bool_if:NT\g_@@_xmp_bool + { + \file_get_timestamp:nN{\jobname.log}\l_@@_xmp_currentdate_tl + \@@_xmp_date_split:VN\l_@@_xmp_currentdate_tl\l_@@_xmp_currentdate_seq + \@@_xmp_build_packet: + \exp_args:No + \__pdf_backend_metadata_stream:n {\g_@@_xmp_packet_tl} + \pdfmanagement_add:nnx {Catalog} {Metadata}{\pdf_object_ref_last:} + } + } +% \end{macrocode} + +% \subsection{User commands} + +% \begin{macro}{\pdfmeta_xmp_add:n } +% \begin{macrocode} +\cs_new_protected:Npn \pdfmeta_xmp_add:n #1 + { + \tl_gput_right:Nn \g_@@_xmp_user_packet_tl + { + \@@_xmp_add_packet_chunk:n { #1 } + } + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pdfmeta_xmp_xmlns_new:nn } +% \begin{macrocode} +\cs_new_protected:Npn \pdfmeta_xmp_xmlns_new:nn #1 #2 + { + \prop_if_in:NnTF \g_@@_xmp_xmlns_prop {#1} + {\msg_warning:nnn{pdfmeta}{namespace-defined}{#1}} + {\@@_xmp_xmlns_new:nn {#1}{#2}} + } +% \end{macrocode} +% \end{macro} % \begin{macrocode} % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf index d3647b4051..8497593064 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx index b7bd6a54ed..c936d36933 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=l3pdftools (LaTeX PDF management testphase bundle)} \providecommand\potentialclash{\noindent\llap{\dbend\ }} @@ -50,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -152,7 +151,7 @@ % This command adds a BDC marked content operator to the current page stream. % \meta{tag} is the tag of this operator (without the leading slash), % \meta{object name} is a the name of an dictionary object reserved with -% \cs{pdf_object_new:nn} and filled with \cs{pdf_object_write:n} with +% \cs{pdf_object_new:n} and filled with \cs{pdf_object_write:nnn} with % the properties of the BDC. Reusing a predefined object can save space % but the command works correctly % only if the resources management has been activated and should be used only @@ -195,8 +194,8 @@ % It should be on the same page as the bdc-command. % % \begin{verbatim} -% \pdf_object_new:nn {module/objA}{dict} -% \pdf_object_write:nn {module/objA}{/Type/Artifact} +% \pdf_object_new:n {module/objA} +% \pdf_object_write:nnn {module/objA}{dict}{/Type/Artifact} % \pdf_bdc:nn {Span}{module/objA} % text % \pdf_emc: @@ -212,7 +211,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdftools}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdftools}{2022-09-26}{0.95s} {candidate commands for l3pdf---LaTeX PDF management testphase bundle} % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf index b26d20df9d..6630c4f836 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx index 3b7d724710..609ab32e7a 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=l3pdfxform (LaTeX PDF management testphase bundle)} \begin{document} @@ -49,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -133,7 +132,7 @@ % \begin{macrocode} %<@@=pdf> %<*header> -\ProvidesExplPackage{l3pdfxform}{2022-08-24}{0.95r} +\ProvidesExplPackage{l3pdfxform}{2022-09-26}{0.95s} {command to create xforms (beta)---LaTeX PDF management testphase bundle} % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf index ee6f8179e8..f34ed4243a 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf and b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx index ed9fda6588..0142b337b6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=ltdocinit (LaTeX PDF management testphase bundle)} \begin{document} @@ -48,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -131,6 +130,9 @@ % \item[\texttt{colorprofiles}] This allows to load icc-colorprofiles. Details % are described in the documentation of \pkg{l3pdfmeta}. % +% \item[\texttt{xmp}] A boolean, if set to false no XMP metadata are added to the PDF. +% The default is true. 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. @@ -217,7 +219,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2022-08-24}{0.95r} +\ProvidesExplPackage{ltdocinit}{2022-09-26}{0.95s} {Initialize document metadata} % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf index cf8942cb50..10562a1ddb 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf and b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf index 4db63d591e..2ad57b85ac 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf and b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty index 1cefb7112c..2ae273e857 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty @@ -22,7 +22,7 @@ %% This work consists of the main source file pdflscape-ltx.sty %% \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{pdflscape-ltx}{2022-08-24}{0.95r} +\ProvidesExplPackage{pdflscape-ltx}{2022-09-26}{0.95s} {Display of landscape pages in PDF - adaption of pdflscape to the PDFmanagement bundle (testphase)} \DeclareOption*{\PassOptionsToPackage\CurrentOption{graphics}} diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx index f02cc7ec55..e7d445088c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass[full]{l3doc} -\usepackage{array,booktabs,hyperxmp} +\usepackage{array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=pdfmanagement-firstaid (LaTeX PDF management testphase bundle)} \begin{document} @@ -48,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -64,11 +63,11 @@ % |debug={firstaidoff={name1,name2,...},...}|. % \begin{macrocode} %<*package> -\ProvidesExplPackage{pdfmanagement-firstaid}{2022-08-24}{0.95r} +\ProvidesExplPackage{pdfmanagement-firstaid}{2022-09-26}{0.95s} {LaTeX PDF management testphase bundle / firstaid-patches} %<@@=pdfmanagement> -\clist_map_inline:nn {pgf,transparent,hyperxmp,pdflscape,xcolor,color,beamer,output,colorspace,fontspec} +\clist_map_inline:nn {pgf,transparent,xmp,pdflscape,xcolor,color,beamer,output,colorspace,fontspec} { \bool_new:c { g_@@_firstaid_#1_bool } \bool_gset_true:c { g_@@_firstaid_#1_bool } @@ -84,6 +83,10 @@ { loading~pdfmanagement~firstaid~code~for~#1 } \msg_new:nnn { pdfmanagement } { firstaid-changed } { package~#1~has~changed.~Check~if~patch~is~still~valid! } +\msg_new:nnn { pdfmanagement } { firstaid-disabled } + { The~loading~of~package~#1~is~disabled.\\ + It~is~not~compatible~with~the~PDF~management. } + % \end{macrocode} % \subsection{Fontspec} % When using luaLaTeX opacity is broken (issue \#30) as @@ -308,16 +311,25 @@ \declare@file@substitution{pdflscape.sty}{pdflscape-ltx.sty} } % \end{macrocode} -% \subsection{hyperxmp} -% We add some code at the end of hyperxmp.sty. +% +% \subsection{xmp} +% This handles the new xmp code. % \begin{macrocode} -\bool_if:NT \g_@@_firstaid_hyperxmp_bool +\bool_if:NT \g_@@_firstaid_xmp_bool { - \AddToHook - { - file/hyperxmp.sty/after - } - {\RequirePackage{hyperxmp-patches-tmp-ltx}} + \disable@package@load{hyperxmp}{\msg_warning:nnn{pdfmanagement}{firstaid-disabled}{hyperxmp}} + \disable@package@load{pdfx} {\msg_warning:nnn{pdfmanagement}{firstaid-disabled}{pdfx}} + \AddToHook + { + file/doclicense.sty/after + } + { + \hypersetup + { + pdfcopyright = {\doclicenseLongTextForHyperref}, + pdflicenseurl = {\doclicenseURL}, + } + } } % % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf index 1acdd4fefe..5a617f457c 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf and b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx index 22f0445ac0..ffc2dca20c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx @@ -23,10 +23,9 @@ % for those people who are interested. % %<*driver> -\RequirePackage{pdfmanagement-testphase} \DocumentMetadata{pdfstandard=A-2b} \documentclass{l3doc} -\usepackage{tabularx,array,booktabs,hyperxmp} +\usepackage{tabularx,array,booktabs} \hypersetup{pdfauthor=The LaTeX Project,pdftitle=LaTeX PDF management testphase bundle} \newcommand\potentialclash{\noindent\llap{\dbend\ }} \raggedbottom @@ -48,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95r, released 2022-08-24} +% \date{Version 0.95s, released 2022-09-26} % % \maketitle % \begin{documentation} @@ -326,20 +325,21 @@ % see the documentation of \pkg{l3pdfmeta}. % % \subsection{hyperxmp} -% \pkg{hyperxmp} uses \cs{pdfcatalog} to insert the \texttt{/MetaData} reference. This -% makes it incompatible, but adjusting this is even possible with external -% patches. \pkg{hyperxmp} also relies on some \pkg{hyperref} internals, so -% changes in \pkg{hyperref} must be coordinated. +% \pkg{hyperxmp} uses \cs{pdfcatalog} to insert the \texttt{/MetaData} reference +% and also relies on some \pkg{hyperref} internals which are not present in the new +% generic driver used by \pkg{hyperref} when the pdfmanagement is active. +% This makes \pkg{hyperxmp} incompatible. % -% Some patch code is provided by the bundle and loaded automatically, -% but it is not complete currently. Failures are e.g. possible with complicated -% author or title settings. The handling of dates isn't correct either yet. -% The patch code can be disabled by using |debug={firstaidoff=hyperxmp}| in \cs{DocumentMetadata} +% For some time some patch code was provided by the bundle to keep \pkg{hyperxmp} +% working but starting with version 0.95s XMP-metadata are handled directly +% by the \pkg{pdfmanagement-testphase} bundle (see the documentation of \pkg{l3pdfmeta}) +% and the patch code has been removed and the loading of +% \pkg{hyperxmp} has been disabled. % % \subsection{tikz/pgf} % \pkg{pgf} writes to the page resources too and so is incompatible. The needed % changes are rather small and will be done in coordination with the maintainer. -% Until this works, \pkg{pagemanagement} will load the patches automatically. +% Until this works, \pkg{pdfmanagement-testphase} will load the patches automatically. % This can be disabled by using |debug={firstaidoff=pgf}| in \cs{DocumentMetadata} % % \subsection{transparent} @@ -356,7 +356,7 @@ % The package is incompatible. Some patches % have been added to \pkg{pdfmanagement-firstaid}. % Alternative code for spot colors is -% in the \pkg{l3color} package which has now been add to \pkg{l3kernel}. +% in the \pkg{l3color} package which has now been added to \pkg{l3kernel}. % % \subsection{embedfile, attachfile, attachfile2} % Tools needed to be able to write a replacement @@ -386,7 +386,7 @@ % \begin{macrocode} %<@@=pdf> %<*package> -\ProvidesExplPackage{pdfmanagement-testphase}{2022-08-24}{0.95r} +\ProvidesExplPackage{pdfmanagement-testphase}{2022-09-26}{0.95s} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ @@ -414,7 +414,7 @@ % to allow to set it in the document. % \begin{macrocode} %<*header> -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2022-08-24}{0.95r} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2022-09-26}{0.95s} {PDF~management~code~(testphase)} % %<*package> diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf index d63d623952..8caacacb0f 100644 Binary files a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf and b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf differ diff --git a/macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty index bf44fbeb22..320723135b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/transparent-ltx.sty @@ -3,7 +3,7 @@ %% a replacement for transparent sty from Heiko Oberdiek %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{transparent-ltx}{2022-08-24}{0.95r} +\ProvidesExplPackage{transparent-ltx}{2022-09-26}{0.95s} {Transparency with color stacks (replacement for transparent.sty from Heiko Oberdiek)}% \RequirePackage{l3opacity} diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index 88c8bf739d..0cda30ee81 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,6 +1,6 @@ %% LaTeX2e file `xcolor-patches.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2022-08-24 v0.95r patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2022-09-26 v0.95s patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn diff --git a/macros/latex/contrib/wargame/README.md b/macros/latex/contrib/wargame/README.md index a66da25247..000f3cd68b 100644 --- a/macros/latex/contrib/wargame/README.md +++ b/macros/latex/contrib/wargame/README.md @@ -1,6 +1,8 @@ -# A package to make Hex'n'Counter wargames in LaTeX +A package to make Hex'n'Counter wargames in LaTeX +================================================= -## Version 0.2.1 +Version 0.3.2 +------------- This package can help make classic [Hex'n'Counter wargames](https://en.wikipedia.org/wiki/Wargame) using LaTeX. The @@ -23,12 +25,50 @@ one will need for a game (rules, charts, boards, counter sheets). - The package support exporting the game to a [VASSAL](#vassal-support%20'Section%20below') module -## Sources +Sources +------- The sources of the package are kept at [GitLab](https://gitlab.com/wargames_tex/wargame_tex) -## CTAN +Download from GitLab +-------------------- + +- [Zip file of package and support + files](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist) +- [Browse content of + package](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist) +- [Documentation](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist) +- [Tutorial](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist) + (and associated VASSAL + [module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)) +- [Table of + symbols](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist) +- [Compatibility](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist) + +To install, get the ([zip +file](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist)) +and unzip into your TeX tree, for example + + mkdir -p ~/texmf + (cd ~/texmf && unzip ../artifacts.zip) + +on Un\*x like systems. + +If you clone from GitLab +(`git clone https://gitlab.com/wargames_tex/wargame_tex.git`) to get the +sources, then you can do + + cd wargame + make install + +to install in `~/texmf`. If you prefer another destination, say +`/usr/local/share/texmf`, do + + make install DESTDIR=/usr/local/share/texmf + +Download from CTAN +------------------ The package is available from [CTAN](https://ctan.org/tex-archive/macros/latex/contrib/wargame) in the @@ -36,19 +76,40 @@ directory `/macros/latex/contrib/wargame`. As of this writing, the package has not hit any of the major distributions (e.g., [TeXLive](https://tug.org/texlive/index.html)). -If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files, then -to install do +### From TDS zip archive + +You can get the *TDS* [zip +file](https://mirrors.ctan.org/install/macros/latex/contrib/wargame.tds.zip) +and unpack that into your desired destination, e.g., `~/texmf` + + unzip wargame.tds.zip -d ~/texmf + +### From sources + +If you get the source (`wargame.ins`, all `.dtx`,`.py`, and `Makefile`) +files, then do + + make install + +to install into `~/texmf`. If you prefer to install somewhere else, say +`/usr/local/share/texmf`, then do + + make install DESTDIR=/usr/local/share/texmf + +If you do not have `make` (or `gmake` on MacOSX), or because you are on +some system which does not have that tool (e.g., Windows), then do (the +equivalent of) latex wargame.ins - pdflatex beach - pdflatex city - pdflatex light_woods - pdflatex mountains - pdflatex rough - pdflatex swamp - pdflatex town - pdflatex village - pdflatex woods + pdflatex wargame.beach + pdflatex wargame.city + pdflatex wargame.light_woods + pdflatex wargame.mountains + pdflatex wargame.rough + pdflatex wargame.swamp + pdflatex wargame.town + pdflatex wargame.village + pdflatex wargame.woods (You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex` with DVI output will not work) @@ -56,19 +117,12 @@ with DVI output will not work) Then copy the relevant files to your TeX tree (e.g., `~/texmf/`) as mkdir ~/texmf/tex/latex/wargame - cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/ - cp wargame.sty ~/texmf/tex/latex/wargame/ - cp wgexpor.sty ~/texmf/tex/latex/wargame/ - cp city.pdf ~/texmf/tex/latex/wargame/ - cp light_woods.pdf ~/texmf/tex/latex/wargame/ - cp mountains.pdf ~/texmf/tex/latex/wargame/ - cp rough.pdf ~/texmf/tex/latex/wargame/ - cp swamp.pdf ~/texmf/tex/latex/wargame/ - cp town.pdf ~/texmf/tex/latex/wargame/ - cp village.pdf ~/texmf/tex/latex/wargame/ - cp woods.pdf ~/texmf/tex/latex/wargame/ - cp export.py ~/texmf/tex/latex/wargame/ - cp svg2tikz.py ~/texmf/tex/latex/wargame/ + cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/ + cp wargame.sty ~/texmf/tex/latex/wargame/ + cp wgexport.cls ~/texmf/tex/latex/wargame/ + cp wargame.*.pdf ~/texmf/tex/latex/wargame/ + cp wgexport.py ~/texmf/tex/latex/wargame/ + cp wgsvg2tikz.py ~/texmf/tex/latex/wargame/ To generate the documentation, after having done the above, do @@ -92,6 +146,11 @@ You can install these into your TeX tree with (e.g., `~/texmf/`) If you want to generate the tutorial document, do + cd tutorial + make + +or + cd tutorial pdflatex game pdflatex game @@ -100,42 +159,27 @@ If you also want to make the tutorial VASSAL module, do (also in `tutorial`), do pdflatex export.tex - ../export.py export.pdf export.json -o Game.vmod \ + ../wgexport.py export.pdf export.json -o Game.vmod \ -d "Example module from LaTeX PnP game" \ -t "LaTeX wargame tutorial" -v 0.1 \ -p patch.py + -## Download from GitLab - -- [Zip file of package and support - files](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist) -- [Browse content of - package](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist) -- [Documentation](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist) -- [Tutorial](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist) - (and associated VASSAL - [module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)) -- [Table of - symbols](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist) -- [Compatibility](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist) - -To install, get the ([zip -file](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist)) -and unzip into your TeX tree, for example +Note, you need `pdfinfo` and `pdftocairo` from Poppler, and Python with +the module `PIL` for this. On Debian based systems, do - mkdir -p ~/texmf - (cd ~/texmf && unzip ../artifacts.zip) - -on Un\*x like systems. + sudo apt install poppler-utils python3-pil -## Tutorial +Tutorial +-------- See the [tutorial](tutorial/README.md "Link works on GitLab only") page for more ([here](https://ctan.org/tex-archive/macros/latex/contrib/wargame/doc/tutorial/) if you browse from CTAN). -## Examples +Examples +-------- Below are some print'n'play board wargames made with this package. These are not original games but rather revamps of existing games. All credits @@ -144,11 +188,7 @@ goes to the original authors of these games. - WWII - Eastern Front - [Battle for Moscow](https://gitlab.com/wargames_tex/bfm_tex) - - [Hell's Gate](https://gitlab.com/wargames_tex/hellsgate_tex) - (private) - - [Unternehmung - 25](https://gitlab.com/wargames_tex/unternehmung_tex) - (private) + (classic introductory game) - Western Front - [D-Day](https://gitlab.com/wargames_tex/dday_tex) (Avalon Hill classic) @@ -160,25 +200,22 @@ goes to the original authors of these games. - [First Blood](https://gitlab.com/wargames_tex/firstblood_tex) (Avalon Hill International Kriegspiel Association classic) - - [Malaya](https://gitlab.com/wargames_tex/malaya_tex) - (private) - Africa - [Afrika Korps](https://gitlab.com/wargames_tex/afrikakorps_tex) (Avalon Hill classic) - - [Battles of El - Alamein](https://gitlab.com/wargames_tex/boel_tex) (private) - Modern/Speculative - [Strike Force One](https://gitlab.com/wargames_tex/sfo_tex) - [Kriegspiel](https://gitlab.com/wargames_tex/kriegspiel_tex) (Avalon Hill classic) -## VASSAL support +VASSAL support +-------------- -The packages has the script [`export.py`](utils/export.py) to generate a -draft [VASSAL](https://vassalengine.org) module from the defined charts, -boards, counters, OOBs, and so on. More about this is given in the -documentation. +The packages has the script [`wgexport.py`](utils/wgexport.py) to +generate a draft [VASSAL](https://vassalengine.org) module from the +defined charts, boards, counters, OOBs, and so on. More about this is +given in the documentation. The script will generate a first draft of a module, which then can be edited in the VASSAL editor for the final thing. @@ -194,7 +231,8 @@ An example of this is given in the [Battle for Moscow](https://gitlab.com/wargames_tex/bfm_tex) project, and of course in the [tutorial](tutorial/ "Link works on GitLab only") -## NATO App6 +NATO App6 +--------- The package supports @@ -219,7 +257,8 @@ standard. - Other LaTeX package for making NATO symbology [XMilSymb](https://github.com/ralphieraccoon/MilSymb) -## Copyright and license +Copyright and license +--------------------- (c) 2022 Christian Holm Christensen diff --git a/macros/latex/contrib/wargame/doc/README.md b/macros/latex/contrib/wargame/doc/README.md deleted file mode 100644 index a66da25247..0000000000 --- a/macros/latex/contrib/wargame/doc/README.md +++ /dev/null @@ -1,265 +0,0 @@ -# A package to make Hex'n'Counter wargames in LaTeX - -## Version 0.2.1 - -This package can help make classic [Hex'n'Counter -wargames](https://en.wikipedia.org/wiki/Wargame) using LaTeX. The -package provide tools for generating - -- Hex maps and boards -- Counters (called *chits* since TeX have already taken *counters*) - for units, markers, and so on -- Counter sheets -- Order of Battle charts -- Illustrations in the rules using the defined maps and counters - -The result will often be a PDF (or set of PDFs) that contain everything -one will need for a game (rules, charts, boards, counter sheets). - -- The package uses [NATO App6](#nato-app6 "Section below") symbology - for units. -- The package uses [TikZ](https://github.com/pgf-tikz/pgf) for most - things. -- The package support exporting the game to a - [VASSAL](#vassal-support%20'Section%20below') module - -## Sources - -The sources of the package are kept at -[GitLab](https://gitlab.com/wargames_tex/wargame_tex) - -## CTAN - -The package is available from -[CTAN](https://ctan.org/tex-archive/macros/latex/contrib/wargame) in the -directory `/macros/latex/contrib/wargame`. As of this writing, the -package has not hit any of the major distributions (e.g., -[TeXLive](https://tug.org/texlive/index.html)). - -If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files, then -to install do - - latex wargame.ins - pdflatex beach - pdflatex city - pdflatex light_woods - pdflatex mountains - pdflatex rough - pdflatex swamp - pdflatex town - pdflatex village - pdflatex woods - -(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex` -with DVI output will not work) - -Then copy the relevant files to your TeX tree (e.g., `~/texmf/`) as - - mkdir ~/texmf/tex/latex/wargame - cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/ - cp wargame.sty ~/texmf/tex/latex/wargame/ - cp wgexpor.sty ~/texmf/tex/latex/wargame/ - cp city.pdf ~/texmf/tex/latex/wargame/ - cp light_woods.pdf ~/texmf/tex/latex/wargame/ - cp mountains.pdf ~/texmf/tex/latex/wargame/ - cp rough.pdf ~/texmf/tex/latex/wargame/ - cp swamp.pdf ~/texmf/tex/latex/wargame/ - cp town.pdf ~/texmf/tex/latex/wargame/ - cp village.pdf ~/texmf/tex/latex/wargame/ - cp woods.pdf ~/texmf/tex/latex/wargame/ - cp export.py ~/texmf/tex/latex/wargame/ - cp svg2tikz.py ~/texmf/tex/latex/wargame/ - -To generate the documentation, after having done the above, do - - pdflatex wargame.dtx - makeindex -s gind -o wargame.ind wargame.idx - pdflatex wargame.dtx - pdflatex wargame.dtx - pdflatex symbols.tex - pdflatex compat.tex - pdflatex compat.tex - -(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex` -with DVI output will not work) - -You can install these into your TeX tree with (e.g., `~/texmf/`) - - mkdir -p ~/texmf/doc/latex/wargame/ - cp wargame.pdf ~/texmf/doc/latex/wargame/ - cp symbols.py ~/texmf/doc/latex/wargame/ - cp compat.py ~/texmf/doc/latex/wargame/ - -If you want to generate the tutorial document, do - - cd tutorial - pdflatex game - pdflatex game - -If you also want to make the tutorial VASSAL module, do (also in -`tutorial`), do - - pdflatex export.tex - ../export.py export.pdf export.json -o Game.vmod \ - -d "Example module from LaTeX PnP game" \ - -t "LaTeX wargame tutorial" -v 0.1 \ - -p patch.py - -## Download from GitLab - -- [Zip file of package and support - files](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist) -- [Browse content of - package](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist) -- [Documentation](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist) -- [Tutorial](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist) - (and associated VASSAL - [module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)) -- [Table of - symbols](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist) -- [Compatibility](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist) - -To install, get the ([zip -file](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist)) -and unzip into your TeX tree, for example - - mkdir -p ~/texmf - (cd ~/texmf && unzip ../artifacts.zip) - -on Un\*x like systems. - -## Tutorial - -See the [tutorial](tutorial/README.md "Link works on GitLab only") page -for more -([here](https://ctan.org/tex-archive/macros/latex/contrib/wargame/doc/tutorial/) -if you browse from CTAN). - -## Examples - -Below are some print'n'play board wargames made with this package. These -are not original games but rather revamps of existing games. All credits -goes to the original authors of these games. - -- WWII - - Eastern Front - - [Battle for Moscow](https://gitlab.com/wargames_tex/bfm_tex) - - [Hell's Gate](https://gitlab.com/wargames_tex/hellsgate_tex) - (private) - - [Unternehmung - 25](https://gitlab.com/wargames_tex/unternehmung_tex) - (private) - - Western Front - - [D-Day](https://gitlab.com/wargames_tex/dday_tex) (Avalon - Hill classic) - - [Paul Koenig's Market - Garden](https://gitlab.com/wargames_tex/pkmg_tex) - - [Paul Koenig's - D-Day](https://gitlab.com/wargames_tex/pkdday_tex) - - Pacific theatre - - [First - Blood](https://gitlab.com/wargames_tex/firstblood_tex) - (Avalon Hill International Kriegspiel Association classic) - - [Malaya](https://gitlab.com/wargames_tex/malaya_tex) - (private) - - Africa - - [Afrika - Korps](https://gitlab.com/wargames_tex/afrikakorps_tex) - (Avalon Hill classic) - - [Battles of El - Alamein](https://gitlab.com/wargames_tex/boel_tex) (private) -- Modern/Speculative - - [Strike Force One](https://gitlab.com/wargames_tex/sfo_tex) - - [Kriegspiel](https://gitlab.com/wargames_tex/kriegspiel_tex) - (Avalon Hill classic) - -## VASSAL support - -The packages has the script [`export.py`](utils/export.py) to generate a -draft [VASSAL](https://vassalengine.org) module from the defined charts, -boards, counters, OOBs, and so on. More about this is given in the -documentation. - -The script will generate a first draft of a module, which then can be -edited in the VASSAL editor for the final thing. - -Alternatively, one can provide a Python script to do more on the -generated module, such as defining starting positions, fixing grid -layouts, and so on. Using such a patch script, one can get an (almost) -final module. This means, that even if one makes changes to the original -content, it is easy to remake the module without much need for the -VASSAL editor. - -An example of this is given in the [Battle for -Moscow](https://gitlab.com/wargames_tex/bfm_tex) project, and of course -in the [tutorial](tutorial/ "Link works on GitLab only") - -## NATO App6 - -The package supports - -- All air, equipment, installation, land, sea surface, sub surface, - and space command symbols, including amplifiers and modifiers -- All friendly, hostile, neutral, and unknown faction frame. Undecided - faction frames can be made by specifying `dashed` line styles. -- Some, but very few, other kinds of symbology. - -Here are some references for more information on the NATO App6 symbology -standard. - -- The [Wikipedia - page](https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology) - on NATO Joint Military Symbology -- The [NATO - page](https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN). - If this does not work for you, then try to go to the [standards - page](https://nso.nato.int/nso/nsdd/main/standards) and put in and - write in `SYMBOLOGY` in the *Document Title Contains Words* field - and press *Start*. -- Other LaTeX package for making NATO symbology - [XMilSymb](https://github.com/ralphieraccoon/MilSymb) - -## Copyright and license - -(c) 2022 Christian Holm Christensen - -This work is licensed under the Creative Commons Attribution-ShareAlike -4.0 International License (CC-BY-SA-4.0). To view a copy of this -license, visit [CC](http://creativecommons.org/licenses/by-sa/4.0/) or -send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, -USA. - -### Some comments on copyright - -*Caveat*: I am not a lawyer. - -Note that this license applies to the `wargame` package as such. What -you generate using the package is *not* required to be licensed -according to the *ShareAlike* clause of CC-BY-SA-4.0. That is, you can -license your materials *any way you want*. - -However, that copyright rights on games is not as prohibitive as you may -think (see [this thread on -BGG](https://boardgamegeek.com/thread/493249/)). What you *can* -copyright is original, artistic expression. That is, the copyrighted -work must not be a copy of something else (originality) and must be some -form of expression. One *cannot* copyright ideas, only their expression -in so far as it is *artistic* (i.e., not a trivial expression that -anyone knowledgeable within the field can do with rudimentary effort). - -So you *can not* copyright your game mechanics, for example, only how -you described them. You *can not* copyright a title (but you may be able -to claim trademark on it). You *can* copyright the wording of the rules, -the graphics that you use, and so on. - -This also means, that you are essentially free to make your own version -of previously published game, *as long as* - -- you do not copy existing text -- you do not copy existing graphics -- you respect any kind of trademark claims - -However, it is advisable to contact the copyright holders of the -previously published game to avoid -[SNAFU](https://en.wikipedia.org/wiki/SNAFU). If in doubt, seek -professional help. diff --git a/macros/latex/contrib/wargame/doc/compat.pdf b/macros/latex/contrib/wargame/doc/compat.pdf index 3e9956c6d7..70583eca2f 100644 Binary files a/macros/latex/contrib/wargame/doc/compat.pdf and b/macros/latex/contrib/wargame/doc/compat.pdf differ diff --git a/macros/latex/contrib/wargame/doc/symbols.pdf b/macros/latex/contrib/wargame/doc/symbols.pdf index 20dcb7101b..b7f8a0a6c0 100644 Binary files a/macros/latex/contrib/wargame/doc/symbols.pdf and b/macros/latex/contrib/wargame/doc/symbols.pdf differ diff --git a/macros/latex/contrib/wargame/doc/tutorial/Makefile b/macros/latex/contrib/wargame/doc/tutorial/Makefile index 5d4061c347..4947d84ee0 100644 --- a/macros/latex/contrib/wargame/doc/tutorial/Makefile +++ b/macros/latex/contrib/wargame/doc/tutorial/Makefile @@ -6,7 +6,7 @@ LATEX_FLAGS := -interaction=nonstopmode \ -file-line-error \ --synctex=15 \ -shell-escape -EXPORT := ../utils/export.py +EXPORT := ../utils/wgexport.py EXPORT_FLAGS := ifdef VERBOSE diff --git a/macros/latex/contrib/wargame/doc/tutorial/README.md b/macros/latex/contrib/wargame/doc/tutorial/README.md index 92c884f6ef..38fd222142 100644 --- a/macros/latex/contrib/wargame/doc/tutorial/README.md +++ b/macros/latex/contrib/wargame/doc/tutorial/README.md @@ -33,7 +33,7 @@ LaTeX from there. To build the VASSAL module, simply do pdflatex export.tex - `kpsewhich export.py` export.pdf export.json -o Game.vmod \ + `kpsewhich wgexport.py` export.pdf export.json -o Game.vmod \ -d "Example module from LaTeX PnP game" \ -t "LaTeX wargame tutorial" -v 0.1 \ -p patch.py diff --git a/macros/latex/contrib/wargame/doc/tutorial/export.tex b/macros/latex/contrib/wargame/doc/tutorial/export.tex index adbb65ba6e..d51ecf0e5c 100644 --- a/macros/latex/contrib/wargame/doc/tutorial/export.tex +++ b/macros/latex/contrib/wargame/doc/tutorial/export.tex @@ -15,7 +15,7 @@ % % The trick is to prepare a separate \LaTeX{} document, say % \texttt{export.tex} as in this tutorial, which exports the images as -% single pages. Then, the Python script \texttt{export.py} +% single pages. Then, the Python script \texttt{wgexport.py} % distributed with the \textsf{wargame} package picks up this output % (\texttt{export.pdf} and \texttt{export.json}) and generates a draft % VASSAL module. @@ -202,14 +202,16 @@ % \end{macrocode} % % This looks like -% \tikz{\draw[fill=friendly] (.1,0) rectangle(.5,-.1); -% \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25); -% \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4); -% \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);} -% -% Normally the \texttt{export.py} script used the \emph{undo} image +% \tikz{ +% \draw[fill=friendly] (.1,0) rectangle(.5,-.1); +% \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25); +% \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4); +% \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);} +% +% Normally the \texttt{wgexport.py} script used the \emph{undo} mage % for the flip button. However, that may be a bit confusing, so we -% will use a large ``F'' instead. \tikz{\node[color=blue!75!black,font=\sffamily\bfseries\LARGE]{F}} +% will use a large ``F'' +% instead. \tikz{\node[color=blue!75!black,font=\sffamily\bfseries\LARGE]{F}} % % And similarly for the ``Eliminate''\tikz{\node[color=red!75!black,font=\sffamily\bfseries\LARGE]{E}} % @@ -245,11 +247,11 @@ % We run \LaTeX{} on the above \texttt{export.tex} file (the source of % this section) to generate \texttt{export.pdf} and % \texttt{export.json}. We then process these with the -% \texttt{export.py} Python script to get the draft VASSAL module +% \texttt{wgexport.py} Python script to get the draft VASSAL module % \texttt{Draft.vmod}. % % \begin{verbatim} -% `kpsewhich export.py` export.pdf export.json +% `kpsewhich wgexport.py` export.pdf export.json % \end{verbatim} % % The utility \texttt{kpsewhich}\footnotemark{\TeX{}Live and similar @@ -273,7 +275,7 @@ % \texttt{game.pdf}, then we can do % % \begin{verbatim} -% `kpsewhich export.py` export.pdf export.json \ +% `kpsewhich wgexport.py` export.pdf export.json \ % -r game.pdf -o Game.vmod % \end{verbatim} % @@ -298,7 +300,7 @@ % complete module, we would do something like % % \begin{verbatim} -% `kpsewhich export.py` export.pdf export.json \ +% `kpsewhich wgexport.py` export.pdf export.json \ % -r game.pdf -o Game.vmod \ % -t "LaTeX Wargame tutorial" \ % -d "Example of using wargame to make a module" \ @@ -313,7 +315,7 @@ % % We will take one more step on the VASSAL module, and then we will % get back to the Print'n'Play version of the game. We can provide -% the \texttt{export.py} script with an additional Python script that +% the \texttt{wgexport.py} script with an additional Python script that % can tweak the VASSAL module any way we like. We can for example % move counters into their starting positions, to the OOB, adjust % grids, add more materials, and so on. It is only your imagination, @@ -322,7 +324,7 @@ % % Here we will make a simple \texttt{patch.py} Python script which % does very little. The \textsf{wargame} package, -% \textsf{wgexport} class, and \texttt{export.py} script has already +% \textsf{wgexport} class, and \texttt{wgexport.py} script has already % done the heavy work for us. Not least be because we have taken care % to add in \texttt{zone} styles where needed. % @@ -332,7 +334,7 @@ % do much. % % \begin{verbatim} -% `kpsewhich export.py` export.pdf export.json \ +% `kpsewhich wgexport.py` export.pdf export.json \ % -r game.pdf -o Game.vmod % -t "LaTeX Wargame tutorial" \ % -d "Example of using wargame to make a module" \ @@ -344,37 +346,34 @@ % \begin{verbatim} % def patch(build,data,vmod,verbose=False): % # We need to import the export module :-) -% import export +% import wgexport as wg % % # Get the game and last free GPID -% game = export.get_game(build) +% game = wg.get_game(build) % gpid = int(game.getAttribute('nextPieceSlotId')) % % # Get all boards -% maps = export.get_maps(build) +% maps = wg.get_maps(build) % board = maps['Board'] % -% mkeys = export.get_masskey(board,'name') -% export.set_node_attr(mkeys['Eliminate'], -% icon='eliminate-icon.png') -% export.set_node_attr(mkeys['Flip'], -% icon='flip-icon.png') +% mkeys = wg.get_masskey(board,'name') +% wg.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png') +% wg.set_node_attr(mkeys['Flip'],icon='flip-icon.png') % % # Get main map % pool = maps['DeadMap'] -% export.set_node_attr(pool,icon='pool-icon.png') +% wg.set_node_attr(pool,icon='pool-icon.png') % -% mkeys = export.get_masskey(pool,'name') -% export.set_node_attr(mkeys['Restore'], -% icon='restore-icon.png') +% mkeys = wg.get_masskey(pool,'name') +% wg.set_node_attr(mkeys['Restore'],icon='restore-icon.png') % % # Get the OOB map -% oob = export.get_chartwindows(game)['OOBs'] -% export.set_node_attr(oob,icon='oob-icon.png') +% oob = wg.get_chartwindows(game)['OOBs'] +% wg.set_node_attr(oob,icon='oob-icon.png') % \end{verbatim} % % In the \texttt{patch.py} script we can use all the functionality -% provided by \texttt{export.py}. Elements are XML elements that we +% provided by \texttt{wgexport.py}. Elements are XML elements that we % apply \texttt{xml.dom.minidom} operations on. % % \iffalse diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.pdf b/macros/latex/contrib/wargame/doc/tutorial/game.pdf index 875523b4d4..14bcde8f98 100644 Binary files a/macros/latex/contrib/wargame/doc/tutorial/game.pdf and b/macros/latex/contrib/wargame/doc/tutorial/game.pdf differ diff --git a/macros/latex/contrib/wargame/doc/tutorial/patch.py b/macros/latex/contrib/wargame/doc/tutorial/patch.py index 71785252bb..0fcdd49645 100644 --- a/macros/latex/contrib/wargame/doc/tutorial/patch.py +++ b/macros/latex/contrib/wargame/doc/tutorial/patch.py @@ -1,29 +1,29 @@ def patch(build,data,vmod,verbose=False): # We need to import the export module :-) - import export + import wgexport as wg # Get the game and last free GPID - game = export.get_game(build) + game = wg.get_game(build) gpid = int(game.getAttribute('nextPieceSlotId')) # Get all boards - maps = export.get_maps(build) + maps = wg.get_maps(build) board = maps['Board'] - mkeys = export.get_masskey(board,'name') - export.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png') - export.set_node_attr(mkeys['Flip'],icon='flip-icon.png') + mkeys = wg.get_masskey(board,'name') + wg.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png') + wg.set_node_attr(mkeys['Flip'],icon='flip-icon.png') # Get main map pool = maps['DeadMap'] - export.set_node_attr(pool,icon='pool-icon.png') + wg.set_node_attr(pool,icon='pool-icon.png') - mkeys = export.get_masskey(pool,'name') - export.set_node_attr(mkeys['Restore'],icon='restore-icon.png') + mkeys = wg.get_masskey(pool,'name') + wg.set_node_attr(mkeys['Restore'],icon='restore-icon.png') # Get the OOB map - oob = export.get_chartwindows(game)['OOBs'] - export.set_node_attr(oob,icon='oob-icon.png') + oob = wg.get_chartwindows(game)['OOBs'] + wg.set_node_attr(oob,icon='oob-icon.png') diff --git a/macros/latex/contrib/wargame/doc/wargame.pdf b/macros/latex/contrib/wargame/doc/wargame.pdf index a030c938f4..c25e83c175 100644 Binary files a/macros/latex/contrib/wargame/doc/wargame.pdf and b/macros/latex/contrib/wargame/doc/wargame.pdf differ diff --git a/macros/latex/contrib/wargame/source/Makefile b/macros/latex/contrib/wargame/source/Makefile index bfb4db8e27..faca441091 100644 --- a/macros/latex/contrib/wargame/source/Makefile +++ b/macros/latex/contrib/wargame/source/Makefile @@ -2,7 +2,7 @@ # # NAME := wargame -VERSION := 0.2.1 +VERSION := 0.3 LATEX_FLAGS := -interaction=nonstopmode \ -file-line-error \ --synctex=15 \ @@ -67,7 +67,7 @@ SOURCES := wargame.ins \ natoapp6c/util.dtx \ tests/map.dtx \ tests/chits.dtx -SCRIPTS := utils/svg2tikz.py utils/export.py +SCRIPTS := utils/wgsvg2tikz.py utils/wgexport.py DESTDIR := $(HOME)/texmf/ instdir := tex/latex/$(NAME) @@ -84,7 +84,9 @@ TILES := beach \ swamp \ town \ village \ - woods + woods +TILES_PDF := $(TILES:%=wargame.%.pdf) +TILES_TEX := $(TILES:%=wargame.%.tex) TABLES := air \ missile \ land \ @@ -101,7 +103,7 @@ PKG_FILES := wargame.sty \ tikzlibrarywargame.natoapp6c.code.tex \ tikzlibrarywargame.chit.code.tex \ wgexport.cls \ - $(TILES:%=%.pdf) + $(TILES_PDF) # beach.png \ # city.png \ @@ -187,7 +189,7 @@ clean: $(MUTE)rm -f tikzlibrarywargame.natoapp6c.code.tex $(MUTE)rm -f tikzlibrarywargame.chit.code.tex $(MUTE)rm -f wgexport.cls mksvg.pdf README.md.version - $(MUTE)rm -f $(TILES:%=%.tex) $(TILES:%=%.pdf) + $(MUTE)rm -f $(TILES_TEX) $(TILES_PDF) $(MUTE)rm -rf public texmf $(MUTE)rm -rf $(distsdir) $(MUTE)rm -f $(distsdir).tar.gz @@ -209,12 +211,12 @@ tikzlibrarywargame.hex.code.tex \ tikzlibrarywargame.natoapp6c.code.tex \ tikzlibrarywargame.chit.code.tex \ wgexport.cls \ -$(TILES:%=%.tex) \ +$(TILES_TEX) \ $(TABLES:%=cmp_%.tex): $(SOURCES) @echo "DOCSTRIP $<" $(MUTE)$(LATEX) $< $(REDIR) -wargame.idx: wargame.dtx wargame.sty $(TILES:%=%.pdf) +wargame.idx: wargame.dtx wargame.sty $(TILES_PDF) wargame.pdf: wargame.aux wargame.ind fast: wargame.idx symbols.aux: symbols.tex wargame.sty @@ -317,7 +319,7 @@ docker: docker-prep: apt update - apt install -y poppler-utils python3-pil pandoc \ + apt install -y poppler-utils python3-pil pandoc zip \ libwww-mechanize-perl libfile-copy-recursive-perl pwd ls diff --git a/macros/latex/contrib/wargame/source/chit/misc.dtx b/macros/latex/contrib/wargame/source/chit/misc.dtx index 6c406af3f8..de373864e6 100644 --- a/macros/latex/contrib/wargame/source/chit/misc.dtx +++ b/macros/latex/contrib/wargame/source/chit/misc.dtx @@ -169,7 +169,7 @@ \ifx\u\m\def\m{1}\fi \foreach \n in {1,...,\m}{% \ifx\u\chit@blank\else - \chit[\u=\ti,zone point={\u}{\c}{\r}](\c,\r) + \chit[\u=\ti,zone oob point={\u}{\c}{\r}](\c,\r); \fi \chit@oob@cellupdate(\c,\r){#2}{#3}{\y} } @@ -452,7 +452,8 @@ % % \begin{macrocode} \tikzset{ - zone point/.code n args={3}{}} + zone point/.code n args={3}{}, + zone oob point/.code n args={3}{}} % \end{macrocode} % % \iffalse diff --git a/macros/latex/contrib/wargame/source/hex/terrain.dtx b/macros/latex/contrib/wargame/source/hex/terrain.dtx index 765b38e759..42155ca5c9 100644 --- a/macros/latex/contrib/wargame/source/hex/terrain.dtx +++ b/macros/latex/contrib/wargame/source/hex/terrain.dtx @@ -65,15 +65,15 @@ \else \tikzset{ /hex/terrain/.cd,% - beach/.style={image=beach}, - light woods/.style={image=light_woods}, - woods/.style={image=woods}, - swamp/.style={image=swamp}, - rough/.style={image=rough}, - mountains/.style={image=mountains}, - village/.style={image=village}, - town/.style={image=town}, - city/.style={image=city}, + beach/.style={image=wargame.beach}, + light woods/.style={image=wargame.light_woods}, + woods/.style={image=wargame.woods}, + swamp/.style={image=wargame.swamp}, + rough/.style={image=wargame.rough}, + mountains/.style={image=wargame.mountains}, + village/.style={image=wargame.village}, + town/.style={image=wargame.town}, + city/.style={image=wargame.city}, } \fi % \end{macrocode} diff --git a/macros/latex/contrib/wargame/source/util/core.dtx b/macros/latex/contrib/wargame/source/util/core.dtx index 506cb19ece..1d95aa38c6 100644 --- a/macros/latex/contrib/wargame/source/util/core.dtx +++ b/macros/latex/contrib/wargame/source/util/core.dtx @@ -1225,6 +1225,23 @@ \@rbchar, } %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py} }, + zone oob point/.code n args={3}{ + \pgf@xa=##2 cm + \pgf@ya=##3 cm + \advance\pgf@xa.1cm + \advance\pgf@ya.1cm + \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}} + % \pgfpointtransformed{\pgfpoint{0pt}{0pt}} + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult} + \pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult} + \advance\mk@point1 + \global\mk@point=\mk@point + \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py] + \@rbchar, } + %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py} + }, zone global point/.code n args={3}{ \advance\mk@point1 \global\mk@point=\mk@point diff --git a/macros/latex/contrib/wargame/source/utils/export.py b/macros/latex/contrib/wargame/source/utils/export.py deleted file mode 100755 index d62c9e5f77..0000000000 --- a/macros/latex/contrib/wargame/source/utils/export.py +++ /dev/null @@ -1,3752 +0,0 @@ -#!/usr/bin/env python -# -from pprint import pprint - -# ==================================================================== -def add_pws(opw=None,upw=None): - '''Add password options to the poppler commands - - Parameters - ---------- - opw : str - Owner password - upw : str - User password - - Returns - ------- - opts : list - List of arguments - ''' - args = [] - if upw is not None: - args.extend(['-upw',upw]) - - if opw is not None: - args.extend(['-opw',opw]) - - return args - -# -------------------------------------------------------------------- -def create_proc(args): - '''Create a process - - Parameters - ---------- - args : list - List of commmand line arguments - - Returns - ------- - proc : subprocess.Process - Process handle - ''' - from os import environ - from subprocess import Popen, PIPE, TimeoutExpired - - return Popen(args,env=environ.copy(),stdout=PIPE,stderr=PIPE) - -# -------------------------------------------------------------------- -def get_pdf_info(pdfname='export.pdf',upw=None,opw=None,timeout=None): - '''Get dictionary of PDF information - - Parameters - ---------- - pdfname : str - File name - opw : str - Owner password - upw : str - User password - timeout : int - Timeout in seconds or None - - Returns - ------- - info : dict - PDF information - ''' - from subprocess import TimeoutExpired - - args = ['pdfinfo', pdfname] - args.extend(add_pws(opw=opw,upw=upw)) - - proc = create_proc(args) - - try: - out, err = proc.communicate(timeout=timeout) - except Exception as e: - proc.kill() - proc.communicate() - raise RuntimeError(f'Failed to get PDF info: {e}') - - d = {} - for field in out.decode("utf8", "ignore").split("\n"): - sf = field.split(":") - key, value = sf[0], ":".join(sf[1:]) - if key != "": - d[key] = (int(value.strip()) if key == 'Pages' else value.strip()) - - if "Pages" not in d: - raise ValueError - - return d - -# -------------------------------------------------------------------- -def get_images_info(infofile): - '''Read in image information from file - - Parameters - ---------- - infofile : str - file name - - Returns - ------- - images : list - List of image information - ''' - #from csv import DictReader - from json import load - - with open(infofile,'r') as file: - info = load(file) - #reader = DictReader(file,fieldnames=['page','name','type','sub type']) - #return [l for l in reader] - - return info - - -# -------------------------------------------------------------------- -def convert_page(pdfname,page,opw=None,upw=None,timeout=None): - '''Convert a single PDF page to an image - - Parameters - ---------- - pdfname : str - File name - page : int - Page number - opw : str - Owner password - upw : str - User password - timeout : int - Timeout in seconds or None - - Returns - ------- - img : bytes - The bytes of the image - ''' - args = ['pdftocairo', - '-singlefile', - '-f', str(page), - '-l', str(page), - '-png'] - args.extend(add_pws(opw=opw,upw=upw)) - args.append(pdfname) - args.append('-') - - proc = create_proc(args) - - try: - out, err = proc.communicate(timeout=timeout) - except Exception as e: - proc.kill() - proc.communicate() - raise RuntimeError(f'Failed to convert page {page} of {pdfname}: {e}') - - from io import BytesIO - from PIL import Image - - img = out #Image.open(BytesIO(out)) - - return img - -# -------------------------------------------------------------------- -def ignore_entry(entry): - return entry['category'] in ['<>','<>'] - -# -------------------------------------------------------------------- -def convert_pages(pdfname,infoname, - opw=None,upw=None,timeout=None): - '''Convert pages in a PDF to images - - This creates a list of dictionaries with the image name and data - (as bytes) - - Parameters - ---------- - pdfname : str - File name of PDF to read images from - infoname : str - File name of CSV to read image info from - opw : str - Owner password - upw : str - User password - timeout : int - Timeout in seconds or None - - Returns - ------- - imgs : list - List of images as dicts, info and the bytes of the images - ''' - - oargs = {'opw':opw,'upw':upw,'timeout':timeout} - docinfo = get_pdf_info(pdfname,**oargs) - info = get_images_info(infoname) - - if len(info)-1 != docinfo['Pages']: - raise RuntimeError(f'Number of pages in {pdfname} ' - f'({docinfo["Pages"]}) not {len(info)-1}') - - for i in info: - if ignore_entry(i): continue - i['img'] = convert_page(pdfname,i['number'],**oargs) - - return info - -# ==================================================================== -def remove_and_get(zipfname,*filenames): - '''Open zip file, and make a copy of it without the files listed - in entries. Return the data of files listed in entry.''' - from tempfile import mkdtemp - from zipfile import ZipFile - from shutil import move, rmtree - from os import path - - tempdir = mkdtemp() - ret = {} - try: - tempname = path.join(tempdir, 'new.zip') - with ZipFile(zipfname, 'r') as zipread: - - with ZipFile(tempname, 'w') as zipwrite: - - for item in zipread.infolist(): - data = zipread.read(item.filename) - - if item.filename not in filenames: - zipwrite.writestr(item, data) - else: - ret[item.filename] = data - - move(tempname, zipfname) - finally: - rmtree(tempdir) - - return ret - -# -------------------------------------------------------------------- -def add_back(zipfname,files): - '''Open a zip file for appending and add data in files - - Files is a dictionary of filenames mapping to file content, - as returned by remove_and_get - ''' - from zipfile import ZipFile - - with ZipFile(zipfname, 'a') as zipadd: - for filename,data in files.items(): - zipadd.writestr(filename,data) - -# ==================================================================== -# Contants used for tag names -BUILD = 'VASSAL.build.' -MODULE = BUILD + 'module.' -WIDGET = BUILD + 'widget.' -MAP = MODULE + 'map.' -PICKER = MAP + 'boardPicker.' - -# ==================================================================== -def get_asdict(elem,tag,key,enable=True): - cont = elem.getElementsByTagName(tag) - if not enable: - return cont - - return {e.getAttribute(key): e for e in cont} - -# -------------------------------------------------------------------- -def get_asone(elem,tag,enable=True): - cont = elem.getElementsByTagName(tag) - if enable and len(cont) != 1: - return None - return cont - -# -------------------------------------------------------------------- -def get_doc(string): - from xml.dom.minidom import parseString - - return parseString(string) - -# -------------------------------------------------------------------- -def get_game(doc): - return doc.getElementsByTagName('VASSAL.build.GameModule')[0] - -# -------------------------------------------------------------------- -def get_globalproperties(doc,one=True): - return get_asone(doc,MODULE+'properties.GlobalProperties',one) - -# -------------------------------------------------------------------- -def get_globalproperty(doc,asdict=True): - '''A little confusing - this returns a dictionary''' - return get_asdict(doc,MODULE+'properties.GlobalProperty','name',asdict) - -# -------------------------------------------------------------------- -def get_turntrack(doc,asdict=True): - return get_asdict(doc,MODULE+'turn.TurnTracker','name',asdict) - -# -------------------------------------------------------------------- -def get_turncounter(doc,asdict=True): - return get_asdict(doc,MODULE+'turn.CounterTurnLevel','property',asdict) - -# -------------------------------------------------------------------- -def get_turnlist(doc,asdict=True): - return get_asdict(doc,MODULE+'turn.ListTurnLevel','property',asdict) - -# -------------------------------------------------------------------- -def get_turnhotkey(doc,asdict=True): - return get_asdict(doc,MODULE+'turn.TurnGlobalHotkey','hotkey',asdict) - -# -------------------------------------------------------------------- -def get_documentation(doc,one=True): - return get_asone(doc,MODULE+'Documentation',one) - -# -------------------------------------------------------------------- -def get_helpfiles(doc,key='fileName',asdict=True): - return get_asdict(doc,MODULE+'documentation.HelpFile',key,asdict) - -# -------------------------------------------------------------------- -def get_inventories(doc,key='name',asdict=False): - return get_asdict(doc,MODULE+'Inventory',key,asdict) - -# -------------------------------------------------------------------- -def get_maps(doc,asdict=True): - return get_asdict(doc,MODULE+'Map','mapName',asdict) - -# -------------------------------------------------------------------- -def get_widgetmap(doc,asdict=True): - return get_asdict(doc,WIDGET+'WidgetMap','mapName',asdict) - -# -------------------------------------------------------------------- -def get_chartwindows(doc,asdict=True): - return get_asdict(doc,MODULE+'ChartWindow','name',asdict) - -# -------------------------------------------------------------------- -def get_map(doc,name): - maps = get_maps(doc,True) - return maps.get(name, None) if maps else None - -# -------------------------------------------------------------------- -def get_boards(doc,asdict=True): - return get_asdict(doc,PICKER+'Board','name',asdict) - -# -------------------------------------------------------------------- -def get_zoned(doc,one=True): - return get_asone(doc,PICKER+'board.ZonedGrid',one) - -# -------------------------------------------------------------------- -def get_zone(doc,asdict=True): - return get_asdict(doc,PICKER+'board.mapgrid.Zone','name',asdict) - -# -------------------------------------------------------------------- -def get_hexgrid(doc,one=True): - return get_asone(doc,PICKER+'board.HexGrid',one) - -# -------------------------------------------------------------------- -def get_squaregrid(doc,one=True): - return get_asone(doc,PICKER+'board.SquareGrid',one) - -# -------------------------------------------------------------------- -def get_regiongrid(doc,one=True): - return get_asone(doc,PICKER+'board.RegionGrid',one) - -# -------------------------------------------------------------------- -def get_hexnumbering(doc,one=True): - return get_asone(doc,PICKER+'board.mapgrid.HexGridNumbering',one) - -# -------------------------------------------------------------------- -def get_regions(doc,asdict=True): - return get_asdict(doc,PICKER+'board.Region', 'name', asdict) - -# -------------------------------------------------------------------- -def get_squarenumbering(doc,one=True): - return get_asone(doc,PICKER+'board.mapgrid.SquareGridNumbering', one) - -# -------------------------------------------------------------------- -def get_pieces(doc,asdict=True): - return get_asdict(doc,WIDGET+'PieceSlot','entryName',asdict) - -# -------------------------------------------------------------------- -def get_prototypecontainer(doc,one=True): - return get_asone(doc,MODULE+'PrototypesContainer',one) - -# -------------------------------------------------------------------- -def get_prototypes(doc,asdict=True): - return get_asdict(doc,MODULE+'PrototypeDefinition', 'name',asdict) - -# -------------------------------------------------------------------- -def get_masskey(map,asdict=True): - return get_asdict(map,MAP+'MassKeyCommand','name', asdict) - -# -------------------------------------------------------------------- -def get_masskey(map,asdict=True): - return get_asdict(map,MAP+'MassKeyCommand','name', asdict) - - -# -------------------------------------------------------------------- -def get_piece_parts(code): - '''Takes the code part of a pieceslot (the text node) and decodes - it into traits. - - One can use this to modify the pieces. One could for example - remove a trait by calling this function, and remove the element - corresponding to the trait from the returned list. Then one must - collect up the definitions and states separately and pass each of - them to `enc_parts', which gives us two strings that can be passed - to `add_piece' (or `add_proto') function to get the new text node - content of the piece slot or prototype definition. For example - - piece = get_pieceslots(root,pieces)['foo'] - code = piece.childNodes[0].nodeValue - traits = get_piece_parts(code) - ... # Modify the list - - # Separate out definitions and states - defs = [enc_def(e['def']) for e in traits] - states = [enc_def(e['state']) for e in traits] - - # Encode definitions and states as a single string, and then form body - def = enc_parts(*defs) - state = enc_parts(*states) - body = add_piece(def,state) - - # Set new definition - piece.childNodes[0].nodeValue = body - - See also dicts_to_piece - - Parameters - ---------- - code : str - Text node content of or tags - - Returns - ------- - traits : list of dict - All the traits in a list. Each element of the list is a - dictionary with the keys 'def' and 'status'. - - The key 'def' points to a list of the trait attributes used to - define the trait type. The first element of the 'def' list is - the trait identifier. The rest are the arguments for that - trait type. Note, all fields are encoded as strings. - - The key 'status' encodes the status of the trait. The format - of this depends on the trait.Note, all fields are encoded as - strings. - - ''' - cmd,iden,typ,sta = code.split('/') - defs = typ.split(r' ') - stas = sta.split(r' ') - defs = [d.rstrip("\\").split(';') for d in defs] - stas = [s.rstrip("\\").split(';') for s in stas] - ret = [{'def': d, 'state': s} for d,s in zip(defs,stas)] - return ret - -# -------------------------------------------------------------------- -def dicts_to_piece(traits): - # Separate out definitions and states - defs = [enc_def(e['def']) for e in traits] - states = [enc_def(e['state']) for e in traits] - - # Encode definitions and states as a single string, and then form body - df = enc_parts(*defs) - state = enc_parts(*states) - body = add_piece(df,state) - - return body - - -# ==================================================================== -# Key encoding -SHIFT = 65 -CTRL = 130 -ALT = 520 -CTRL_SHIFT = CTRL+SHIFT -ALT_SHIFT = ALT+SHIFT -NONE = '\ue004' -NONE_MOD = 0 -def key(let,mod=CTRL): - - '''Encode a key sequence - - Parameters - ---------- - let : str - Key code (Letter) - mod : int - Modifier mask - ''' - return f'{ord(let)},{mod}' -# Colour encoding -def rgb(r,g,b): - return ','.join([str(r),str(g),str(b)]) - -def rgba(r,g,b,a): - return ','.join([str(r),str(g),str(b),str(a)]) - - -# -------------------------------------------------------------------- -def set_node_attr(node,**attr): - for k,v in attr.items(): - node.setAttribute(k,str(v).lower() if isinstance(v,bool) else str(v)) - -# -------------------------------------------------------------------- -def add_node(root,parent,tag,**attr): - e = root.createElement(tag) - if parent: parent.appendChild(e) - set_node_attr(e,**attr) - - return e - - -# -------------------------------------------------------------------- -def add_text(root,parent,text): - t = root.createTextNode(text) - parent.appendChild(t) - return t - -# -------------------------------------------------------------------- -def add_game(root,doc, - name, - version, - ModuleOther1 = "", - ModuleOther2 = "", - VassalVersion = "3.6.7", - description = "", - nextPieceSlotId = 0): - return add_node(root,doc,BUILD+'GameModule', - name = name, - version = version, - ModuleOther1 = ModuleOther1, - ModuleOther2 = ModuleOther2, - VassalVersion = VassalVersion, - description = description, - nextPieceSlotId = nextPieceSlotId) - -# -------------------------------------------------------------------- -def add_basiccommandencoder(root,doc): - return add_node(root,doc,MODULE+'BasicCommandEncoder') - -# -------------------------------------------------------------------- -def add_globalproperties(root,elem,*props,**named): - gp = add_node(root,elem,MODULE+'properties.GlobalProperties') - # Add elements where each is a dict with _at least_ - # "{'name':NAME, 'initialValue':VALUE}" - for p in props: - add_globalproperty(root,gp,**p) - # Add elements where each is a named dict with _at least_ - # "{'initialValue':VALUE}" - for n, p in named: - add_globalproperty(root,gp,name=n,**p) - - return gp - - -# -------------------------------------------------------------------- -def add_globalproperty(root,elem,name,initialValue, - isNumeric = False, - min = "null", - max = "null", - wrap = False, - description = ""): - return add_node(root,elem,MODULE+'properties.GlobalProperty', - name = name, - initialValue = initialValue, - isNumeric = isNumeric, - min = min, - max = max, - wrap = wrap, - description = description) - -# -------------------------------------------------------------------- -def add_turntrack(root, elem, name, - buttonText = 'Turn', - hotkey = '', - icon = '', - length = -1, - lengthStyle = 'Maximum', - nexthotkey = key('T',ALT), - plusButtonSize = 22, - prevhotkey = key('T',ALT_SHIFT), - reportFormat = '<$PlayerId$> Turn updated from $oldTurn$ to $newTurn$', - turnButtonHeight = 22, - turnFormat = None, - counter = None, - phases = None): - - levels = (counter if counter is not None else - phases if phases is not None else None) - if levels is not None: - lvl = 1 - lvls = [f'$level{lvl}$'] - sub = levels - while True: - sub = sub.get('counter',sub.get('phases',None)) - if sub is None: - break - lvl += 1 - lvls.append(f'$level{lvl}$') - - turnFormat = ' '.join(lvls) - - if turnFormat is None: - turnFormat = '$level1$ $level2$ $level3$ $level4$' - - t = add_node(root, elem, MODULE+'turn.TurnTracker', - name = name, - buttonText = buttonText, - hotkey = hotkey, - icon = icon, - length = length, - lengthStyle = lengthStyle, - nexthotkey = nexthotkey, - plusButtonSize = plusButtonSize, - prevhotkey = prevhotkey, - reportFormat = reportFormat, - turnButtonHeight = turnButtonHeight, - turnFormat = turnFormat) - - add_turnlevel(root, t, counter=counter, phases=phases) - - return t - -# -------------------------------------------------------------------- -def add_turnlevel(root,parent,counter=None,phases=None): - f,s = ((add_turncounter,counter) if counter is not None else - (add_turnlist,phases) if phases is not None else (None,None)) - if f is None: return parent - - subcounter = s.pop('counter',None) - subphases = s.pop('phases',None) - - sub = f(root,parent,**s) - - return add_turnlevel(root,sub,counter=subcounter,phases=subphases) - -# -------------------------------------------------------------------- -def add_turncounter(root,elem,property, - incr = 1, - loop = False, - loopLimit = -1, - turnFormat = "$value$"): - c = add_node(root,elem,MODULE+"turn.CounterTurnLevel", - property = property, - incr = incr, - loop = loop, - loopLimit = loopLimit, - turnFormat = turnFormat) - return c - -# -------------------------------------------------------------------- -def add_turnlist(root,elem,property,names, - configFirst = False, - configList = False, - turnFormat = '$value$'): - c = add_node(root,elem,MODULE+"turn.ListTurnLevel", - property = property, - list = ','.join([str(p) for p in names]), - configFirst = configFirst, - configList = configList, - turnFormat = turnFormat) - return c - -# -------------------------------------------------------------------- -def add_turnhotkey(root,elem, - hotkey, - match = '{phase=="first"}', - reportFormat = '{PlayerName}', - name = ''): - return add_node(root,elem,MODULE+'turn.TurnGlobalHotkey', - hotkey = hotkey, - match = match, - reportFormat = reportFormat, - name = name) - - - -# -------------------------------------------------------------------- -def add_translatable(root,elem): - return add_node(root,elem,MODULE+'properties.GlobalTranslatableMessages') - -# -------------------------------------------------------------------- -def add_language(root,elem): - return add_node(root,elem,'VASSAL.i18n.Language') - -# -------------------------------------------------------------------- -def add_chatter(root,elem): - return add_node(root,elem,MODULE+'Chatter') - -# -------------------------------------------------------------------- -def add_keynamer(root,elem): - return add_node(root,elem,MODULE+'KeyNamer') - -# -------------------------------------------------------------------- -def add_documentation(root,doc): - return add_node(root,doc,MODULE+'Documentation') - -# -------------------------------------------------------------------- -def add_about(root,doc,title,fileName=""): - return add_node(root,doc,MODULE+'documentation.AboutScreen', - fileName = fileName, - title = title) -# -------------------------------------------------------------------- -def add_pdffile(root,doc,title,pdfFile): - return add_node(root,doc,MODULE+'documentation.BrowserPDFFile', - pdfFile = pdfFile, title=title) -# -------------------------------------------------------------------- -def add_helpfile(root,doc,title,fileName,fileType="archive"): - return add_node(root,doc,MODULE+'documentation.HelpFile', - fileName = fileName, - fileType = fileType, - title = title) - -# -------------------------------------------------------------------- -def add_htmlfile(root,doc,title,startingPage='index.html'): - return add_node(root,doc,MODULE+'documentation.BrowserHelpFile', - startingPage=startingPage, - title=title) - -# -------------------------------------------------------------------- -def add_roster(root,doc,buttonKeyStroke='', - buttonText='Retire', - buttonToolTip='Switch sides, become observer, or release faction'): - return add_node(root,doc,MODULE+'PlayerRoster', - buttonKeyStroke = buttonKeyStroke, - buttonText = buttonText, - buttonToolTip = buttonToolTip) - -# -------------------------------------------------------------------- -def add_entry(root,doc,text): - n = add_node(root,doc,'entry') - add_text(root,n,text) - return n - -# -------------------------------------------------------------------- -def add_globaloptions(root,doc, - autoReport = "Use Preferences Setting", - centerOnMove = "Use Preferences Setting", - chatterHTMLSupport = "Always", - hotKeysOnClosedWindows = "Never", - inventoryForAll = "Always", - nonOwnerUnmaskable = "Use Preferences Setting", - playerIdFormat = "$playerName$", - promptString = "Opponents can unmask pieces", - sendToLocationMoveTrails = "Never"): - return add_node(root,doc,MODULE+'GlobalOptions', - autoReport = autoReport, - centerOnMove = centerOnMove, - chatterHTMLSupport = chatterHTMLSupport, - hotKeysOnClosedWindows = hotKeysOnClosedWindows, - inventoryForAll = inventoryForAll, - nonOwnerUnmaskable = nonOwnerUnmaskable, - playerIdFormat = playerIdFormat, - promptString = promptString, - sendToLocationMoveTrails = sendToLocationMoveTrails) - -# -------------------------------------------------------------------- -def add_option(root,doc,name,value): - n = add_node(root,doc,'option',name=name) - add_text(n,root,value) - return n - -# -------------------------------------------------------------------- -# CurrentMap == "Board" -def add_inventory(root,doc, - canDisable = False, - centerOnPiece = True, - disabledIcon = '', - drawPieces = True, - foldersOnly = False, - forwardKeystroke = True, - groupBy = '', - hotkey = key('I'), - icon = '/images/inventory.gif', - include = '{}', - launchFunction = 'functionHide', - leafFormat = '$PieceName$', - name = '', - nonLeafFormat = '$PropertyValue$', - pieceZoom = '0.33', - pieceZoom2 = '0.5', - pieceZoom3 = '0.6', - propertyGate = '', - refreshHotkey = key('I',195), - showMenu = True, - sides = '', - sortFormat = '$PieceName$', - sortPieces = True, - sorting = 'alpha', - text = '', - tooltip = 'Show inventory of all pieces', - zoomOn = False): - return add_node(root,doc,MODULE+'Inventory', - canDisable = canDisable, - centerOnPiece = centerOnPiece, - disabledIcon = disabledIcon, - drawPieces = drawPieces, - foldersOnly = foldersOnly, - forwardKeystroke = forwardKeystroke, - groupBy = groupBy, - hotkey = hotkey, - icon = icon, - include = include, - launchFunction = launchFunction, - leafFormat = leafFormat, - name = name, - nonLeafFormat = nonLeafFormat, - pieceZoom = pieceZoom, - pieceZoom2 = pieceZoom2, - pieceZoom3 = pieceZoom3, - propertyGate = propertyGate, - refreshHotkey = refreshHotkey, - showMenu = showMenu, - sides = sides, - sortFormat = sortFormat, - sortPieces = sortPieces, - sorting = sorting, - text = text, - tooltip = tooltip, - zoomOn = zoomOn) - - - -# -------------------------------------------------------------------- -def add_map(root,doc, - mapName, - allowMultiple = 'false', - backgroundcolor = rgb(255,255,255), - buttonName = '', - changeFormat = '$message$', - color = rgb(0,0,0), - createFormat = '$pieceName$ created in $location$ *', - edgeHeight = '0', - edgeWidth = '0', - hideKey = '', - hotkey = key('M',ALT), - icon = '/images/map.gif', - launch = 'false', - markMoved = 'Always', - markUnmovedHotkey = '', - markUnmovedIcon = '/images/unmoved.gif', - markUnmovedReport = '', - markUnmovedText = '', - markUnmovedTooltip = 'Mark all pieces on this map as not moved', - moveKey = '', - moveToFormat = '$pieceName$ moves $previousLocation$ &rarr; $location$ *', - moveWithinFormat = '$pieceName$ moves $previousLocation$ &rarr; $location$ *', - showKey = '', - thickness = '3', - cls = MODULE+'Map'): - return add_node(root,doc,cls, - allowMultiple = allowMultiple, - backgroundcolor = backgroundcolor, - buttonName = buttonName, - changeFormat = changeFormat, - color = color, - createFormat = createFormat, - edgeHeight = edgeHeight, - edgeWidth = edgeWidth, - hideKey = hideKey, - hotkey = hotkey, - icon = icon, - launch = launch, - mapName = mapName, - markMoved = markMoved, - markUnmovedHotkey = markUnmovedHotkey, - markUnmovedIcon = markUnmovedIcon, - markUnmovedReport = markUnmovedReport, - markUnmovedText = markUnmovedText, - markUnmovedTooltip = markUnmovedTooltip, - moveKey = moveKey, - moveToFormat = moveToFormat, - moveWithinFormat = moveWithinFormat, - showKey = showKey, - thickness = thickness) - -# -------------------------------------------------------------------- -def add_widgetmap(root,doc, mapName,**attr): - return add_map(root,doc,mapName,cls=WIDGET+'WidgetMap',**attr) - -# -------------------------------------------------------------------- -def add_boardpicker(root,doc, - addColumnText = 'Add column', - addRowText = 'Add row', - boardPrompt = 'Select board', - slotHeight = 125, - slotScale = 0.2, - slotWidth = 350, - title = 'Choose Boards'): - return add_node(root,doc,MAP+'BoardPicker', - addColumnText = addColumnText, - addRowText = addRowText, - boardPrompt = boardPrompt, - slotHeight = slotHeight, - slotScale = slotScale, - slotWidth = slotWidth, - title = title) - -# -------------------------------------------------------------------- -def add_setup(root,picker,mapName,maxColumns,boardNames): - '''Add given boards in row-first up to maxColumns per row''' - s = add_node(root,picker,'setup') - col = 0 - row = 0 - lst = [f'{mapName}BoardPicker'] - for bn in boardNames: - lst.extend([bn,str(col),str(row)]) - col += 1 - if col >= maxColumns: - col = 0 - row += 1 - txt = r' '.join(lst) - add_text(root,s,txt) - -# -------------------------------------------------------------------- -def add_board(root,picker,name, - image = '', - reversible = False, - color = rgb(255,255,255), - width = 0, - height = 0): - return add_node(root,picker,PICKER+'Board', - image = image, - name = name, - reversible = reversible, - color = color, - width = width, - height = height) - -# -------------------------------------------------------------------- -def add_zoned(root,board): - return add_node(root,board,PICKER+'board.ZonedGrid') - -# -------------------------------------------------------------------- -def add_zonehighlighter(root,zoned): - return add_node(root,zoned,PICKER+'board.mapgrid.ZonedGridHighlighter') - -# -------------------------------------------------------------------- -def add_zone(root,zoned, - name = "", - highlightProperty = "", - locationFormat = "$gridLocation$", - path = "0,0;976,0;976,976;0,976", - useHighlight = False, - useParentGrid = False): - return add_node(root,zoned,PICKER+'board.mapgrid.Zone', - name = name, - highlightProperty = highlightProperty, - locationFormat = locationFormat, - path = path, - useHighlight = useHighlight, - useParentGrid = useParentGrid) - -# -------------------------------------------------------------------- -HEX_WIDTH = 88.50779626676963 -HEX_HEIGHT = 102.2 -def add_hexgrid(root,zone, - color = rgb(0,0,0), - cornersLegal = False, - dotsVisible = False, - dx = HEX_WIDTH, - dy = HEX_HEIGHT, - edgesLegal = False, - sideways = False, - snapTo = True, - visible = True, - x0 = 0, - y0 = 32, - cls = PICKER+'board.HexGrid'): - return add_node(root,zone,cls, - color = color, - cornersLegal = cornersLegal, - dotsVisible = dotsVisible, - dx = dx, - dy = dy, - edgesLegal = edgesLegal, - sideways = sideways, - snapTo = snapTo, - visible = visible, - x0 = x0, - y0 = y0) - -# -------------------------------------------------------------------- -def add_hexnumbering(root,grid, - color = rgb(255,0,0), - first = 'H', - fontSize = 24, - hDescend = False, - hDrawOff = 0, - hLeading = 1, - hOff = 0, - hType = 'A', - locationFormat = '$gridLocation$', - rotateText = 0, - sep = '', - stagger = True, - vDescend = False, - vDrawOff = 32, - vLeading = 0, - vOff = 0, - vType = 'N', - visible = True, - cls = PICKER+'board.mapgrid.HexGridNumbering'): - return add_node(root,grid,cls, - color = color, - first = first, - fontSize = fontSize, - hDescend = hDescend, - hDrawOff = hDrawOff, - hLeading = hLeading, - hOff = hOff, - hType = hType, - locationFormat = locationFormat, - rotateText = rotateText, - sep = sep, - stagger = stagger, - vDescend = vDescend, - vDrawOff = vDrawOff, - vLeading = vLeading, - vOff = vOff, - vType = vType, - visible = visible) - -# -------------------------------------------------------------------- -RECT_WIDTH = 80 -RECT_HEIGHT = 80 -def add_squaregrid(root,zone, - dx = RECT_WIDTH, - dy = RECT_HEIGHT, - edgesLegal = False, - x0 = 0, - y0 = int(0.4*RECT_HEIGHT), - **attr): - return add_hexgrid(root,zone,cls=PICKER+'board.SquareGrid', - dx = dx, - dy = dy, - edgesLegal = edgesLegal, - x0 = x0, - y0 = y0, - **attr) - -# -------------------------------------------------------------------- -def add_squarenumbering(root,grid, - hType = 'N', - **attr): - return add_hexnumbering(root,grid, - cls=PICKER+'board.mapgrid.SquareGridNumbering', - hType = hType, - **attr) - -# -------------------------------------------------------------------- -def add_regiongrid(root,zone,snapto=True,fontsize=9,visible=True): - # print(f'Make region grid visible: {visible}') - return add_node(root,zone,PICKER+'board.RegionGrid', - fontsize = fontsize, - snapto = snapto, - visble = visible) - -# -------------------------------------------------------------------- -def get_region_piece(root,grid,name,alsoPiece=True,piece=None,verbose=False): - if not alsoPiece: - return None, None - - # Find the parent map element by stepping up the tree - from functools import reduce - - map = reduce(lambda nn, _: None if nn is None else nn.parentNode, - range(5), grid) - if map is None or \ - map.tagName not in [MODULE+'Map',WIDGET+'WidgetMap']: - if map is None: - print(f' = Map not found from grid') - return None, None - - if piece is not None: - print(f' Using supplied piece') - return piece, map - - # Find the piece by searching from the top of the tree - piece = get_pieces(root,root).get(name,None) - # if piece is None: - # print(list(get_pieces(root,root).keys())) - if verbose: - print(f' Possible piece for region {name}: {piece}') - return piece, map - -# -------------------------------------------------------------------- -def check_region_name(grid,name): - post = '' - targ = name - same = 0 - regs = list(get_regions(grid).keys()) - poss = len([e for e in regs if e.startswith(name)]) - if poss == 0: - return name - - return name + f' {poss}' - # Loop over keys, sorted - # regs.sort() - # for r in regs: - # if targ == r: - # same += 1 - # targ = name + f' {same:02d}' - # print(f' Found region named {r} -> {targ}') - - return targ - -# -------------------------------------------------------------------- -def add_region(root,grid,name,originx,originy,gpid, - alsoPiece=True,piece=None,verbose=True): - # First thing is to check if we have a piece - piece, map = get_region_piece(root,grid,name,alsoPiece,piece,verbose) - if verbose: - print(f' Region {name} -> piece {piece}') - - - nam = check_region_name(grid,name) - if verbose: - print(f' Region {name} -> real name {nam}') - n = add_node(root,grid,PICKER+'board.Region', - name = nam, - originx = originx, - originy = originy) - if piece is None: - return n, gpid - - if verbose: - print(f' Add piece {name} to region') - _, gpid = add_atstart(root,map,name,piece, - location = nam, - useGridLocation = True, - owningBoard = map.getAttribute('mapName'), - x = 0, - y = 0, - gpid = gpid) - return n, gpid - - -# -------------------------------------------------------------------- -def add_stacking(root,map, - bottom = '40,0', - disabled = False, - down = '37,0', - exSepX = 6, - exSepY = 18, - top = '38,0', - unexSepX = 8, - unexSepY = 16, - up = '39,0'): - return add_node(root,map,MAP+'StackMetrics', - bottom = bottom, - disabled = disabled, - down = down, - exSepX = exSepX, - exSepY = exSepY, - top = top, - unexSepX = unexSepX, - unexSepY = unexSepY, - up = up) - -# -------------------------------------------------------------------- -def add_camera(root,map, - buttonText = '', - canDisable = False, - hotkey = '', - icon = '/images/camera.gif', - propertyGate = '', - tooltip = 'Save map as PNG image'): - return add_node(root,map,MAP+'ImageSaver', - buttonText = buttonText, - canDisable = canDisable, - hotkey = hotkey, - icon = icon, - propertyGate = propertyGate, - tooltip = tooltip) - -# -------------------------------------------------------------------- -def add_forwardtochatter(root,map): - return add_node(root,map,MAP+'ForwardToChatter') - -# -------------------------------------------------------------------- -def add_menudisplayer(root,map): - return add_node(root,map,MAP+'MenuDisplayer') - -# -------------------------------------------------------------------- -def add_mapcenterer(root,map): - return add_node(root,map,MAP+'MapCenterer') - -# -------------------------------------------------------------------- -def add_stackexpander(root,map): - return add_node(root,map,MAP+'StackExpander') - -# -------------------------------------------------------------------- -def add_piecemover(root,map): - return add_node(root,map,MAP+'PieceMover') - -# -------------------------------------------------------------------- -def add_selectionhighlighters(root,map): - return add_node(root,map,MAP+'SelectionHighlighters') - -# -------------------------------------------------------------------- -def add_keybufferer(root,map): - return add_node(root,map,MAP+'KeyBufferer') - -# -------------------------------------------------------------------- -def add_highlightlastmoved(root,map,color=rgb(255,0,0),enabled=True,thickness=2): - return add_node(root,map,MAP+'HighlightLastMoved', - color=color,enabled=enabled,thickness=thickness) - -# -------------------------------------------------------------------- -def add_counterviewer(root,map, - borderWidth = 0, - centerAll = False, - centerText = False, - combineCounterSummary = False, - counterReportFormat = '', - delay = 700, - description = '', - display = 'from top-most layer only', - emptyHexReportForma = '$LocationName$', - enableHTML = True, - extraTextPadding = 0, - fgColor = rgb(0,0,0), - fontSize = 9, - graphicsZoom = 1.0, - hotkey = key('\n',0), - layerList = '', - minDisplayPieces = 2, - propertyFilter = '', - showDeck = False, - showDeckDepth = 1, - showDeckMasked = False, - showMoveSelectde = False, - showNoStack = False, - showNonMovable = False, - showOverlap = False, - showgraph = True, - showgraphsingle = False, - showtext = False, - showtextsingle = False, - stretchWidthSummary = False, - summaryReportFormat = '$LocationName$', - unrotatePieces = False, - version = 3, - verticalOffset = 0, - verticalTopText = 5, - zoomlevel = 1.0): - return add_node(root,map,MAP+'CounterDetailViewer', - borderWidth = borderWidth, - centerAll = centerAll, - centerText = centerText, - combineCounterSummary = combineCounterSummary, - counterReportFormat = counterReportFormat, - delay = delay, - description = description, - display = display, - emptyHexReportForma = emptyHexReportForma, - enableHTML = enableHTML, - extraTextPadding = extraTextPadding, - fgColor = fgColor, - fontSize = fontSize, - graphicsZoom = graphicsZoom, - hotkey = hotkey, - layerList = layerList, - minDisplayPieces = minDisplayPieces, - propertyFilter = propertyFilter, - showDeck = showDeck, - showDeckDepth = showDeckDepth, - showDeckMasked = showDeckMasked, - showMoveSelectde = showMoveSelectde, - showNoStack = showNoStack, - showNonMovable = showNonMovable, - showOverlap = showOverlap, - showgraph = showgraph, - showgraphsingle = showgraphsingle, - showtext = showtext, - showtextsingle = showtextsingle, - stretchWidthSummary = stretchWidthSummary, - summaryReportFormat = summaryReportFormat, - unrotatePieces = unrotatePieces, - version = version, - verticalOffset = verticalOffset, - verticalTopText = verticalTopText, - zoomlevel = zoomlevel) - -# -------------------------------------------------------------------- -def add_globalmap(root,map, - buttonText = '', - color = rgb(255,0,0), - hotkey = '79,195', - icon = '/images/overview.gif', - scale = 0.2, - tooltip = 'Show/Hide overview window'): - return add_node(root,map,MAP+'GlobalMap', - buttonText = buttonText, - color = color, - hotkey = hotkey, - icon = icon, - scale = scale, - tooltip = 'Show/Hide overview window') - -# -------------------------------------------------------------------- -def add_zoomer(root,map, - inButtonText = '', - inIconName = '/images/zoomIn.gif', - inTooltip = 'Zoom in', - outButtonText = '', - outIconName = '/images/zoomOut.gif', - outTooltip = 'Zoom out', - pickButtonText = '', - pickIconName = '/images/zoom.png', - pickTooltip = 'Select Zoom', - zoomInKey = '61,195', - zoomLevels = [0.2,0.25,0.333,0.4,0.5,0.555,0.625,0.75,1.0,1.25,1.6], - zoomOutKey = key('-'), - zoomPickKey = key('='), - zoomStart = 3): - '''Zoom start is counting from the back (with default zoom levels, - and zoom start, the default zoom is 1''' - lvls = ','.join([str(z) for z in zoomLevels]) - return add_node(root,map,MAP+'Zoomer', - inButtonText = inButtonText, - inIconName = inIconName, - inTooltip = inTooltip, - outButtonText = outButtonText, - outIconName = outIconName, - outTooltip = outTooltip, - pickButtonText = pickButtonText, - pickIconName = pickIconName, - pickTooltip = pickTooltip, - zoomInKey = zoomInKey, - zoomLevels = lvls, - zoomOutKey = zoomOutKey, - zoomPickKey = zoomPickKey, - zoomStart = zoomStart) - -# -------------------------------------------------------------------- -def add_hidepieces(root,map, - buttonText = '', - hiddenIcon = '/images/globe_selected.gif', - hotkey = key('O'), - showingIcon = '/images/globe_unselected.gif', - tooltip = 'Hide all pieces on this map'): - return add_node(root,map,MAP+'HidePiecesButton', - buttonText = buttonText, - hiddenIcon = hiddenIcon, - hotkey = hotkey, - showingIcon = showingIcon, - tooltip = tooltip) -# -------------------------------------------------------------------- -def add_masskey(root,map, - name, - buttonHotkey, - hotkey, - buttonText = '', - canDisable = False, - deckCount = '-1', - filter = '', - propertyGate = '', - reportFormat = '', - reportSingle = False, - singleMap = True, - target = 'MAP|false|MAP|||||0|0||true|Selected|true|EQUALS', - tooltip = '', - icon = ''): - '''Default targets are selected units''' - return add_node(root,map,MAP+'MassKeyCommand', - name = name, - buttonHotkey = buttonHotkey, # This hot key - hotkey = hotkey, # Target hot key - buttonText = buttonText, - canDisable = canDisable, - deckCount = deckCount, - filter = filter, - propertyGate = propertyGate, - reportFormat = reportFormat, - reportSingle = reportSingle, - singleMap = singleMap, - target = target, - tooltip = tooltip, - icon = icon) - - -# -------------------------------------------------------------------- -def add_flare(root,map, - circleColor = rgb(255,0,0), - circleScale = True, - circleSize = 100, - flareKey = 'keyAlt', - flareName = 'Map Flare', - flarePulses = 6, - flarePulsesPerSec = 3, - reportFormat = ''): - return add_node(root,map,MAP+'Flare', - circleColor = circleColor, - circleScale = circleScale, - circleSize = circleSize, - flareKey = flareKey, - flareName = flareName, - flarePulses = flarePulses, - flarePulsesPerSec = flarePulsesPerSec, - reportFormat = '') - -# -------------------------------------------------------------------- -def add_atstart(root,map,name,*pieces, - location = '', - useGridLocation = True, - owningBoard = '', - x = 0, - y = 0, - gpid = None): - '''Pieces are existing PieceSlot elements''' - a = add_node(root,map,MODULE+'map.SetupStack', - name = name, - location = location, - owningBoard = owningBoard, - useGridLocation = useGridLocation, - x = x, - y = y) - # copy pieces here - for p in pieces: - c = p.cloneNode(True) - a.appendChild(c) - if gpid is not None: - # Update gpid in element - c.setAttribute('gpid',str(gpid)) - # Update gpid in traits state - traits = get_piece_parts(p.childNodes[0].nodeValue) - for t in traits: - code = t['def'] - stat = t['state'] - if code[0] == 'piece': - stat[3] = gpid - # Put back the traits - c.childNodes[0].nodeValue = dicts_to_piece(traits) - - gpid += 1 - - return a, gpid - -# -------------------------------------------------------------------- -def add_pieceslot(root,elem, - entryName, - gpid, - code, - height=72, - width=72, - icon = ''): - p = add_node(root,elem,WIDGET+'PieceSlot', - entryName = entryName, - gpid = gpid, - height = height, - width = width, - icon = icon) - add_text(root,p,code) - return p - -# -------------------------------------------------------------------- -def add_prototypes(root,elem,*defs): - '''Defs are existing definition elements''' - p = add_node(root,elem,MODULE+'PrototypesContainer') - - for d in defs: - c = d.cloneNode(True) - p.appendChild(c) - - return p - -# -------------------------------------------------------------------- -def add_prototype(root,elem,name,code,description=''): - d = add_node(root,elem,MODULE+'PrototypeDefinition', - name = name, - description = description) - add_text(root,d,code) - return d - -# -------------------------------------------------------------------- -def add_piecewindow(root,elem,name, - defaultWidth = 0, - hidden = False, - hotkey = key('C',ALT), - scale = 1., - text = '', - tooltip = 'Show/hide piece window', - icon = '/images/counter.gif'): - return add_node(root,elem,MODULE+'PieceWindow', - name = name, - defaultWidth = defaultWidth, - hidden = hidden, - hotkey = hotkey, - scale = scale, - text = text, - tooltip = tooltip, - icon = icon) - -# -------------------------------------------------------------------- -def add_tabs(root,elem,entryName): - return add_node(root,elem,WIDGET+'TabWidget',entryName=entryName) - -# -------------------------------------------------------------------- -def add_list(root,elem, - entryName, - height = 0, - width = 0, - scale = 1., - divider = 100): - return add_node(root,elem,WIDGET+'ListWidget', - entryName = entryName, - height = height, - width = width, - scale = scale, - divider = divider) - -# -------------------------------------------------------------------- -def add_panel(root,elem, - entryName, - fixed = False, - nColumns = 1, - vert = False): - return add_node(root,elem,WIDGET+'PanelWidget', - entryName = entryName, - fixed = fixed, - nColumns = nColumns, - vert = vert) - -# -------------------------------------------------------------------- -def add_mapwidget(root,elem,entryName=''): - return add_node(root,elem,WIDGET+'MapWidget',entryName=entryName) - -# -------------------------------------------------------------------- -def add_chartwindow(root,elem, - name, - hotkey = key('A',ALT), - description = '', - text = '', - tooltip = 'Show/hide Charts', - icon = '/images/chart.gif'): - return add_node(root,elem,MODULE+'ChartWindow', - name = name, - hotkey = hotkey, - description = description, - text = text, - tooltip = tooltip, - icon = icon) - -# -------------------------------------------------------------------- -def add_chart(root,elem, - chartName, - fileName, - description = ''): - return add_node(root,elem,WIDGET+'Chart', - chartName = chartName, - description = description, - fileName = fileName) - -# -------------------------------------------------------------------- -def add_dice(root,elem, - addToTotal = 0, - canDisable = False, - hotkey = key('6',ALT), - icon = '/images/die.gif', - keepCount = 1, - keepDice = False, - keepOption = '>', - lockAdd = False, - lockDice = False, - lockPlus = False, - lockSides = False, - nDice = 1, - nSides = 6, - name = '1d6', - plus = 0, - prompt = False, - propertyGate = '', - reportFormat = '** $name$ = $result$ *** &lt;$PlayerName$&gt;', - reportTotal = False, - sortDice = False, - text = '1d6', - tooltip = 'Roll a 1d6'): - return add_node(root,elem,MODULE+'DiceButton', - addToTotal = addToTotal, - canDisable = canDisable, - hotkey = hotkey, - icon = icon, - keepCount = keepCount, - keepDice = keepDice, - keepOption = keepOption, - lockAdd = lockAdd, - lockDice = lockDice, - lockPlus = lockPlus, - lockSides = lockSides, - nDice = nDice, - nSides = nSides, - name = name, - plus = plus, - prompt = prompt, - propertyGate = propertyGate, - reportFormat = reportFormat, - reportTotal = reportTotal, - sortDice = sortDice, - text = text, - tooltip = tooltip) - -# ==================================================================== -def enc_def(args,term=False): - '''Encode a piece (decorator) definition - - Parameters - ---------- - args : list - List of fields - term : bool - If true, add terminating ';' - - Returns - ------- - code : str - The encoded definition - ''' - return ';'.join([str(e).lower() if isinstance(e,bool) else str(e) - for e in args])+(';' if term else '') - -# -------------------------------------------------------------------- -def layer_trait(images, - newNames = None, - activateName = 'Activate', - activateMask = CTRL, - activateChar = 'A', - increaseName = 'Increase', - increaseMask = CTRL, - increaseChar = '[', - decreaseName = '', - decreaseMask = CTRL, - decreaseChar = ']', - resetName = '', - resetKey = '', - resetLevel = 1, - under = False, - underXoff = 0, - underYoff = 0, - loop = True, - name = '', - description = '', - randomKey = '', - randomName = '', - follow = False, - expression = '', - first = 1, - version = 1, # 1:new, 0:old - always = 'true', - activateKey = key('A'), - increaseKey = key('['), - decreaseKey = key(']'), - scale = 1.): - '''Create a layer trait (VASSAL.counter.Embellishment) - - Parameters - ---------- - main : dict - Main image dictionary - flipped : dict - Flipped image dictionary - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state - ''' - if newNames is None: - newNames = ['']*len(images) - args = ['emb2', # Code - activateName, activateMask, activateChar, # ACTIVATE ; MASK ; KEY - increaseName, increaseMask, increaseChar, - decreaseName, decreaseMask, decreaseChar, - resetName, resetKey, resetLevel, - under, underXoff, underYoff, - ','.join(images), - ','.join(newNames), - loop, - name, - randomKey, randomName, - follow, expression, - first, - version, - always, - activateKey, - increaseKey, - decreaseKey, - description, - scale ] - stat = '1' # CURRENT LEVEL - return enc_def(args), stat - -# -------------------------------------------------------------------- -def prototype_trait(name): - '''Create a prototype trait (VASSAL.counter.UsePrototype) - - Parameters - ---------- - family : str - Side in game - - Return - ------ - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['prototype', name ] - stat = '' # State is nothing - return enc_def(args), stat - -# -------------------------------------------------------------------- -def mark_trait(key,value): - '''Create a marker trait (VASSAL.counter.Marker) - - Parameters - ---------- - family : str - Side in game - - Return - ------ - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['mark', key ] - stat = value # State is nothing - return enc_def(args), stat - -# -------------------------------------------------------------------- -def report_trait(*keys, - nosuppress = True, - description = '', - report = '$location$: $newPieceName$ $menuCommand$ *', - cyclekeys = '', - cyclereps = ''): - '''Create a report trait (VASSAL.counters.ReportActon) - - Parameters - ---------- - *keys : tuple of str - The keys to report actions for - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - esckeys = ','.join([k.replace(',',r'\,') for k in keys]) - esccycl = ','.join([k.replace(',',r'\,') for k in cyclekeys]) - escreps = ','.join([k.replace(',',r'\,') for k in cyclereps]) - args = ['report', # CODE - esckeys, # ESCAPED KEYS (commas escaped) - report, # REPORT - esccycl, # CYCLE KEYS (commas escaped) - escreps, # CYCKE REPORTS (commas escaped) - description, # DESCRIPTION - nosuppress] # NOSUPPRESS - stat = '-1' # CYCLE STATE - return enc_def(args), stat - -# -------------------------------------------------------------------- -def moved_trait(image='moved.gif', - xoff = 36, - yoff = -38, - name = 'Mark Moved', - key = key('M')): - '''Create a moved trait (VASSAL.counters.MovementMarkable) - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['markmoved', # CODE - image, # IMAGE - xoff, yoff, # XOFF ; YOFF - name, # MENU - key, # KEY, MODIFIER - ''] # ? - stat = False # MOVED? - return enc_def(args), stat - -# -------------------------------------------------------------------- -def trail_trait(key = key('T'), - name = 'Movement Trail', - localVisible = False, - globalVisible = False, - radius = 10, - fillColor = rgb(255,255,255), - lineColor = rgb(0,0,0), - activeOpacity = 100, - inactiveOpacity = 50, - edgesBuffer = 20, - displayBuffer = 30, - lineWidth = 1, - turnOn = '', - turnOff = '', - reset = '', - description = ''): - ''' Create a movement trail trait ( VASSAL.counters.Footprint) - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state - ''' - args = ['footprint', # CODE - key, # ENABLE KEY - name, # MENU - localVisible, # LOCAL VISABLE - globalVisible, # GLOBAL VISABLE - radius, # RADIUS - fillColor, # FILL COLOR - lineColor, # LINE COLOR - activeOpacity, # ACTIVE OPACITY - inactiveOpacity, # INACTIVE OPACITY - edgesBuffer, # EDGES BUFFER - displayBuffer, # DISPLAY BUFFER - lineWidth, # LINE WIDTH - turnOn, # TURN ON KEY - turnOff, # TURN OFF KEY - reset, # RESET KEY - description] # DESC - stat = [False, # GLOBAL VIS - '', # MAP - 0] # POINTS (followed by [; [X,Y]*] - return enc_def(args), enc_def(stat) - -# -------------------------------------------------------------------- -def delete_trait(name = 'Delete', key = key('D')): - '''Create a delete trait (VASSAL.counters.Delete) - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['delete', name, key, ''] - stat = '' # Nothing - return enc_def(args), stat - -# -------------------------------------------------------------------- -def sendto_trait(mapName, - boardName, - name = '', - key = key('E'), - restoreName = 'Restore', - restoreKey = key('R'), - x = 200, - y = 200, - xidx = 0, - yidx = 0, - xoff = 1, - yoff = 1, - description = '', - destination = 'L', - zone = '', - region = '', - expression = '', - position = ''): - '''Create a send to trait (VASSAL.counter.SendToLocation) - - Parameters - ---------- - side : str - Sub-map to move to - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['sendto', # CODE - name, # NAME - key, # KEY , MODIFIER - mapName, # MAP - boardName, # BOARD - x, y, # X ; Y - restoreName, # BACK - restoreKey, # KEY , MODIFIER - xidx, yidx, # XIDX ; YIDX - xoff, yoff, # XOFF ; YOFF - description, # DESC - destination, # DEST - zone, # ZONE - region, # REGION - expression, # EXPRESSION - position ] # GRIDPOS - stat = ['', # BACKMAP - '', # X - ''] # Y - return enc_def(args), enc_def(stat) - -# -------------------------------------------------------------------- -def basic_trait(name, - filename, # Can be empty - gpid, # Can be empty - cloneKey='', # Deprecated - deleteKey=''):# Deprecated - '''Create a basic unit (VASSAL.counters.BasicPiece) - - Parameters - ---------- - main : dict - Information - gpid : int - Piece global identifier - image : bool - If true, add image - - Returns - ------- - code : str - Encoded trait - stat : str - Encoded state (empty string) - ''' - args = ['piece', # CODE - cloneKey, # CLONEKEY - deleteKey, # DELETEKEY - filename, # IMAGE - name] # NAME - stat = ['null', # MAPID (possibly 'null') - 0, # X - 0, # Y - gpid, # GLOBAL PIECE ID - 0] # PROPERTY COUNT (followed by [; KEY; VALUE]+) - return enc_def(args), enc_def(stat) - -# -------------------------------------------------------------------- -def enc_parts(*parts): - '''Encode parts of a full piece definition - - Each trait (VASSAL.counter.Decorator, VASSAL.counter.BasicPiece) - definition or state is separated by a litteral TAB character. - Beyond the first TAB separator, additional escape characters - (BACKSLAH) are added in front of the separator. This is to that - VASSAL.utils.SequenceDecoder does not see consequitive TABs as a - single TAB. - - Parameters - ---------- - parts : tuple - The various trait definitions or states - - Returns - ------- - code : str - The encoded piece - ''' - ret = '' - sep = r' ' - for i, p in enumerate(parts): - if i != 0: - ret += '\\'*(i-1) + sep - ret += str(p) - - return ret - -# -------------------------------------------------------------------- -def add_piece(typ, state): - '''Create and add piece command (VASSAL.command.AddPiece) - - Each part is separated by a SLASH ('/'). The first part is the - command type (PLUS '+') to perform. Second is the IDENTIFIER, - possibly 'null'. Then comes the fully encoded type of the piece, - followed by the state of the piece (also fully encoded). - - Parameters - ---------- - typ : str - Encoded piece definition - state : str - Encoded state definition - - Returns - ------- - cmd : str - The add command encoded - ''' - args = ['+', # Type - 'null', # IDENTIFER - typ, # DEFINITION - state] # STATE - return '/'.join(args) - -# -------------------------------------------------------------------- -def add_proto(typ,state): - '''Create an add prototype command. This is the same as 'add_piece' - - Parameters - ---------- - typ : str - Encoded piece definition - state : str - Encoded state definition - - Returns - ------- - cmd : str - The add command encoded - ''' - return add_piece(typ,state) - - -# -------------------------------------------------------------------- -def add_proto_code(decs): - typs = [d[0] for d in decs] - stts = [d[1] for d in decs] - typ = enc_parts(*typs) - stt = enc_parts(*stts) - - return add_proto(typ,stt) - -# ==================================================================== -# -# Below specific to the export app -# -# ==================================================================== -def get_bb(buffer): - '''Get bounding box of image - - Parameters - ---------- - buffer : bytes - The image bytes - - Returns - ------- - ulx, uly, lrx, lry : tuple - The coordinates of the bounding box - ''' - from PIL import Image - from io import BytesIO - - with Image.open(BytesIO(buffer)) as img: - bb = img.getbbox() - - return bb - -# ==================================================================== -def piece_body(family,main,flipped,gpid): - '''Create an full add piece command from the side, image, and ID - information. This adds (in reverse order) - - - BasicPiece - - Side prototype - - Flip layer (if 'flipped' is not none) - - Parameters - ---------- - family : str - Side in the game - main : dict - Main image information - flipped : dict - Flipped image information, possibly None - gpid : int - Global piece identifier - - Returns - ------- - cmd : str - The command to add the piece - ''' - # Create the layer, prototype, and basic piece traits - decs = [] - if flipped is not None: - imgs = [ main['filename'], flipped['filename'] ] - decs.extend([ layer_trait(images=imgs, - newNames=['','Reduced +'], - activateName = '', - decreaseName = '', - increaseName = 'Flip', - increaseKey = key('F'), - decreaseKey = '', - name='Step'), - report_trait(key('F')) ]) - for m in main.get('mains',[]): - decs.append(prototype_trait(m + ' prototype')) - ech = main.get('echelon',None) - cmd = main.get('command',None) - if ech is not None: decs.append(prototype_trait(ech + ' prototype')) - if cmd is not None: decs.append(prototype_trait(cmd + ' prototype')) - - decs.extend([ prototype_trait(family+' prototype'), - basic_trait(main['name'], main['filename'],gpid) - ]) - - typs = [d[0] for d in decs] - stts = [d[1] for d in decs] - typ = enc_parts(*typs) - stt = enc_parts(*stts) - - return add_piece(typ,stt) - -# -------------------------------------------------------------------- -def proto_body(family): - '''Create an full add prototype com from the side information. - This adds (in reverse order) - - - An empty BasicPiece - - An eliminate (or sendto) trait - - A delete trait - - A mark moved trait - - A move trail trait - - Parameters - ---------- - family : str - Side in the game - - Returns - ------- - cmd : str - The command to add the piece - ''' - # Dummy image - decs = [ report_trait(key('E'),key('R'),key('M')), - moved_trait(), - trail_trait(), - delete_trait(), - sendto_trait('DeadMap',family+' pool','Eliminate',key('E'), - 'Restore',key('R'),description="Eliminate unit"), - mark_trait('Faction',family), - basic_trait('','','') ] - typs = [d[0] for d in decs] - stts = [d[1] for d in decs] - typ = enc_parts(*typs) - stt = enc_parts(*stts) - - return add_proto(typ,stt) - - -# -------------------------------------------------------------------- -def add_splash(root,doc,categories,title='',verbose=False): - '''Add an about page - - Parametersg - ---------- - root : xml.dom.minidom.Document - Root of the document - doc : xml.dom.minidom.Element - The documentation element - categories : dict - Catalog of images - title : str - Title of the game - ''' - fronts = categories.get('front',{}).get('all',[]) - front = list(fronts.values())[0] if len(fronts) > 0 else None - if front is None: - return - - if verbose: - print(f'Adding about page with {title}') - - add_about(root,doc, f'About {title}', fileName = front['filename']) - -# -------------------------------------------------------------------- -def add_rules(root,doc,zipfile,rules,verbose=False): - '''Add rules to the module - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - doc : xml.dom.minidom.Element - The documentation element - zipfile : zipfile.ZipFile - The module archive - rules : str - File name of rules (PDF) - ''' - if rules is None or rules == '': - return - - if verbose: - print('Adding rules PDF to module') - - zipfile.write(rules,'rules.pdf') - - add_pdffile(root,doc,title='Show rules',pdfFile='rules.pdf') - -# -------------------------------------------------------------------- -def add_notes(root,doc,zipfile,title,version,sides,pdffile,infofile,rules, - verbose=False): - '''Add rules to the module - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - doc : xml.dom.minidom.Element - The documentation element - zipfile : zipfile.ZipFile - The module archive - sides : list - Sides in the game - pdffile : str - The images PDF - infofile : str - The images information - rules : str - File name of rules (PDF) - ''' - factions = "".join([f'
  • {s}
  • ' for s in sides]) - notes = f''' - - -

    Draft VASSAL module of {title} (Version {version})

    -

    - This is a draft VASSAL module of {title} generated from -

    - -

    - both generated by LaTeX using the wargame [1] package, and - processed by the Python script export.py from that - package. -

    -

    - The module is not complete and the developer should edit - the module as needed in the VASSAL module editor. -

    -

    - [1] https://gitlab.com/wargames_tex/wargame_tex -

    -

    Content of the module

    -

    - The export.py Python script has identified the - factions of the game to be -

    - -

    - and generated prototype pieces for these (along with possible - non-faction pieces. The script also generated a map ("dead map") - that contains boards for each faction and is meant to store - eliminated units ("<faction> pool"). These pools have a - generic shape and colour, and the developer should take care to - correct these as needed. -

    -

    - Boards of the game present in the {pdffile} and {infofile} files - have been generated. Each board has a single zone in it that - encompasses the full board, and a hex grid is added to that - zone. The module developer should adjust the zone and embedded - hex grid according to the actual map, using the VASSAL module - editor. The hex grid (as well as coordinates) is drawn by - default so as to make this obvious to the developer. The hex - sizes should be correct, and mainly the offset needs to be - adjusted. -

    -

    - Images marked as OOBs have also been added as maps to the - module. These also have a single zone with a rectangular grid - imposed in it. This grid, and the grid coordinates are drawn by - default, so it is easier to see and to remember to adjust it. The - module developer should adjust this, possibly adding zones, so - that it matches up with the graphics. The developer can add - units to the OOB via 'At-start' stacks in the VASSAL editor. -

    -

    - All pieces identified by {infofile} and present in {pdffile} have - been generated. Double sided pieces (identified by images which - also has a suffix-"flipped" image) are created as such. -

    -

    - Charts identified by the {infofile} and {pdffile} have been added - to the module. The are added as separate (pop-up) frames, but - the module developer can change this in the VASSAL module editor. -

    -

    - If the {infofile} and {pdffile} identified a front page, then that - has been added to module as the splash screen. -

    -

    - If a PDF rules file ({rules}) was passed to the Python script, - then that has been included in the module and is accessible from - the "Help" menu. -

    -

    Key-bindings

    -

    - The following key bindings have been defined -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Alt-AShow the charts panel
    Alt-BShow the OOBs
    Alt-CShow the counters panel
    Alt-EShow the eliminated units
    Alt-6Roll the die
    Ctrl-OHide/show counters
    Ctrl-FFlip selected counters
    Ctrl-EEliminate selected counters
    Ctrl-+Zoom in
    Ctrl--Zoom out
    Ctrl-=Select zoom
    Ctrl-Shift-OShow overview map
    - - Counter short cuts (may not work, right click and use context menu) - - - - - - - - - - - - - - - - - - - - - - - - - -
    Ctrl-FFlip counter
    Ctrl-DDelete counter
    Ctrl-MToggle "moved" marker
    Ctrl-TToggle move trail
    Ctrl-EEliminate unit
    Ctrl-RRestore unit (from dead pool)
    -

    After finalising the module

    -

    - After the developer has finalised the module (added more pieces, - fixed board zones a and grids, add in more commands), then this - Help menu entry should be deleted. You may want to keep key - bindings information in some help file. -

    - - - ''' - if version.lower() == 'draft': - if verbose: - print(f' Adding draft notes {version}') - zipfile.writestr('help/notes.html',notes) - add_helpfile(root,doc,title='Draft Module notes', - fileName='help/notes.html') - - keys = f''' - - -

    {title} (Version {version}) Key bindings

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key Where Effect
    Alt-A-Show the charts panel
    Alt-B-Show the OOBs
    Alt-C-Show the counters panel
    Alt-E-Show the eliminated units
    Alt-6-Roll the dice
    Ctrl-OBoardHide/show counters
    Ctrl-FBoardFlip selected counters
    Ctrl-EBoardEliminate selected counters
    Ctrl-+BoardZoom in
    Ctrl--BoardZoom out
    Ctrl-=BoardSelect zoom
    Ctrl-Shift-OBoardShow overview map
    Ctrl-FCounterFlip counter
    Ctrl-DCounterDelete counter
    Ctrl-MCounterToggle "moved" marker
    Ctrl-TCounterToggle move trail
    Ctrl-ECounterEliminate unit
    Ctrl-RCounterRestore unit (from dead pool)
    -

    - Counter short cuts (may not work, right click and use context - menu) -

    - - - ''' - if verbose: - print(f'Add key bindings help file') - zipfile.writestr('help/keys.html',keys) - add_helpfile(root,doc,title='Key bindings', - fileName='help/keys.html') - - return notes - -# -------------------------------------------------------------------- -def add_basics_to_map(root,map,**attr): - '''Add a map to the document - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - parent : xml.dom.minidom.Element - The parent element - button : str - Button text - name : str - Name of the map - stacking : bool - Whether to enable stacking - - Returns - ------- - map : xml.dom.minidom.Element - The map element - bpicker : xml.dom.minidom.Element - The board picker in map - ''' - stacking = add_stacking(root,map) - add_camera (root,map) - add_forwardtochatter (root,map) - add_menudisplayer (root,map) - add_mapcenterer (root,map) - add_stackexpander (root,map) - add_piecemover (root,map) - add_keybufferer (root,map) - add_selectionhighlighters(root,map) # TBD - add_highlightlastmoved (root,map) - - return stacking - -# -------------------------------------------------------------------- -def add_elim(root,game,sides,categories,verbose=False): - '''Add an eliminated map - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The parent element - sides : list of str - List of sides in the game - ''' - if verbose: - print(' Adding eliminated map and boards') - - if sides is None or len(sides) == 0: - return - - map = add_map(root,game,'DeadMap', - buttonName = '', #'Eliminated units', - icon = '/images/playerAway.gif', - markMoved = 'Never', - launch = True, - allowMultiple = True, - hotkey=key('E',ALT)) - bpicker = add_boardpicker(root,map, - slotHeight = 400, - slotWidth = 400) - add_setup(root,bpicker,'DeadMap',2,[s+' pool' for s in sides]) - add_masskey(root,map,'Restore', - key('R'), - key('R'), - icon = '/images/Undo16.gif', - tooltip = "Restore selected units") - - for i,s in enumerate(sides): - if verbose: - print(f' Adding {s} pool') - - color = [0,0,0,64] - color[i % 3] = 255 - - w = 400 - h = 400 - c = ','.join([str(c) for c in color]) - dimg = categories.get('pool',{}).get('all',{}).get(s,None) - img = '' - - if dimg: - bb = get_bb(dimg['img']) - w = bb[2] - bb[0] - h = bb[3] - bb[1] - c = '' - img = dimg['filename'] - if verbose: - print(f' Using image provided by the user: {img}') - - add_board(root,bpicker,f'{s} pool', - image = img, - color = c, - width = w, - height = h) - - add_basics_to_map(root,map) - -# -------------------------------------------------------------------- -def add_hex_grid(root,parent,color=rgb(255,0,0),visible=True,grid=True): - '''Add a hex grid, either to a zone or to the multizone container''' - - hexes = add_hexgrid(root,parent,color=color,visible=visible, - edgesLegal=True) - if not grid: - return hexes - - add_hexnumbering(root,hexes, - color = color, - hType = 'A', - hOff = -1, - vType = 'N', - vOff = -1, - visible = visible) - - return hexes - -# -------------------------------------------------------------------- -def get_picture_info(picture,name,width,height,verbose): - ''' - Returns - ------- - hex_width, hex_height : float, float - Scale hex width - scx, scy : float, float, float, float - Scale to image and picture (x,y) - rot90 : bool - True if rotated +/-90 degrees - tran : callable - Translation function - ''' - if picture is None: - print(f'WARNING: No Tikz picture information.' - f"Are you sure you used the `[zoned]' option for the " - f"tikzpicture environment of {name}?") - f = lambda x,y: (x,y) - return HEX_WIDTH,HEX_HEIGHT,1,1,False,f - - # Get picture bounding box - tll = picture['lower left'] - tur = picture['upper right'] - # Get picture transformation - pa = picture['xx'] - pb = picture['xy'] - pc = picture['yx'] - pd = picture['yy'] - # Get picture offset (always 0,0?) - pdx = picture['dx'] - pdy = picture['dy'] - # Define picture global transformation - pr = lambda x,y: (pa * x + pc * y, pb * x + pd * y) - # Globally transform (rotate) picture bounding box - pll = pr(*tll) - pur = pr(*tur) - # Calculate widht, height, and scaling factors - pw = pur[0] - pll[0] - ph = pur[1] - pll[1] - scw = width / pw - sch = height / ph - # Extract picture scales and rotation - # Courtesy of - # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix - from math import sqrt, atan2, degrees, isclose - psx = sqrt(pa**2 + pb**2) # * (-1 if pa < 0 else 1) - psy = sqrt(pc**2 + pd**2) # * (-1 if pd < 0 else 1) - prt = degrees(atan2(pc,pd)) - if not any([isclose(abs(prt),a) for a in [0,90,180,270]]): - raise RuntimeException('Rotations of Tikz pictures other than ' - '0 or +/-90,+/- 180, or +/-270 not supported. ' - 'found {prt}') - rot90 = isclose(abs(prt),90) - if any([isclose(prt,a) for a in [90,270,180,-180]]): - print(f'WARNING: rotations by {prt} not fully supported') - - hex_width = psx * HEX_WIDTH - hex_height = psy * HEX_HEIGHT - if verbose: - print(f' Picture transformations: {pa},{pb},{pc},{pd}\n' - f' Scale (x,y): {psx},{psy}\n' - f' Rotation (degrees): {prt}') - - # When translating the Tikz coordinates, it is important to note - # that the Tikz y-axis point upwards, while the picture y-axis - # point downwards. This means that the upper right corner is at - # (width,0) and the lower left corner is at (0,height). - def tranx(x,off=-pll[0]): - # print(f'x: {x} + {off} -> {x+off} -> {int(scw*(x+off))}') - return int(scw * (x + off)+.5) - def trany(y,off=-pur[1]): - # print(f'y: {y} + {off} -> {y+off} -> {-int(sch*(y+off))}') - return -int(sch * (y + off)+.5) - tran = lambda x,y : (tranx(x), trany(y)) - - return hex_width, hex_height, scw * psx, sch * psy, rot90, tran - -# -------------------------------------------------------------------- -def get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90, - labels,coords,targs,nargs): - targs['dx'] = hex_width - targs['dy'] = hex_height - if labels is not None: - labmap = { - 'auto': { - 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' }, - 'auto=numbers' : { - 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' }, - 'auto=alpha column': { - 'hLeading': 0, 'vLeading': 0, 'hType': 'A', 'vType': 'N', - 'hOff': -1 }, - 'auto=alpha 2 column': {# Not supported - 'hLeading': 1, 'vLeading': 1, 'hType': 'A', 'vType': 'N' }, - 'auto=inv y x plus 1': { - 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N', - 'hOff': 0, 'vDescend': True }, - 'auto=x and y plus 1': { - 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N', - 'hOff': 0, 'vOff': 0 } - } - for l in labels.split(','): - nargs.update(labmap.get(l,{})) - - # Field/Direction | Normal | Rotated | - # ----------------|--------|---------| - # hOff | column | column | - # vOff | row | row | - # hDescend | column | row | True, incr to left - # vDescend | row | column | True, incr upward - # First='H' | column | column | - - # In wargame offset=0 means that the first coordinates are 0,0. - # But offset 0,0 in VASSAL means start at 1,1 - horiz = 'column' - vert = 'row' - nargs['vOff'] = nargs.get('vOff',0)-coords[vert] ['offset']-1 - nargs['hOff'] = nargs.get('hOff',0)-coords[horiz]['offset']-1 - - # In VASSAL, vDesend=False means rows increase downward, - # while in wargame, factor=-1 means rows increase downward - horiz = 'row' if rot90 else 'column' - vert = 'column' if rot90 else 'row' - nargs['hDescend'] = coords[horiz]['factor'] != 1 - nargs['vDescend'] = coords[vert] ['factor'] != -1 # flipped y - targs['edgesLegal'] = True - - # Check for inversed columns - inv_col = coords['column']['factor'] == -1 - ell = hex_width if inv_col else 0 - - # Some special stuff in case of 90 degree rotation - if rot90: - targs.update({'sideways': True}) - nargs['hOff'] -= 1 - nargs['hDescend'] = not nargs['hDescend'] - if inv_col: - nargs['hOff'] += 3 - - margin = i.get('board frame',{}).get('margin',0) - mx = scx * margin - my = scy * margin - if inv_col: mx = 0 # Bug in wargame? - - # Grid offset is defined relative to the full image, - # not the zone: - # - # X,Y offset: The horizontal and vertical position of - # the center of the first hex of the grid. - # - # That is, (x,y)=(0,0) is in the top-left corner of the - # image, while in TikZ it is in the bottom left corner. - # This means we shift by the boudning box offsets plus - # some stuff to align with the zone. - # - # In case of inversed columns, we need to add some extra stuff. - x0, y0 = llx-hex_width/3 + ell + mx, ury + my - - # Rotated? - if rot90: - x0, y0 = ury+2*hex_width/3 + ell + mx, llx + my - - # Below should be double-checked. - - if not rot90: - if coords.get('column',{}).get('top short','') == 'isodd' \ - and coords.get('column',{}).get('offset',0) == -1: - y0 -= hex_width/2 - elif coords.get('column',{}).get('top short','') == 'iseven' \ - and coords.get('column',{}).get('offset',-1) == 0: - y0 -= hex_width/2 - - targs.update({'x0': int(x0),'y0': int(y0)}) - -# -------------------------------------------------------------------- -def get_rectparams(i,llx,ury,width,height,rot90,targs,nargs): - targs['dx'] = width - targs['dy'] = height - targs['x0'] = int(llx - width/2) - targs['y0'] = int(ury + height/2) - targs['color'] = rgb(0,255,0) - nargs['color'] = rgb(0,255,0) - nargs['vDescend'] = True - nargs['vOff'] = -3 - nargs.update({'sep':',','vLeading':0,'hLeading':0}) - -# -------------------------------------------------------------------- -def add_zones(root,zoned,name,board,width,height,gpid, - labels=None,coords=None,picinfo=None, - verbose=False,visible=True): - grids = [] - picture = None - if verbose: - print(f' Adding zones to {name} zoned={"zoned" in board}') - - for k, v in board.items(): - if k == 'labels': labels = v - if k == 'coords': coords = v - if k == 'zoned': picture = v - if 'zone' not in k or k == 'zoned': - continue - - gridtype = (add_hexgrid - if 'hex' in k.lower() - else add_squaregrid) - gridnum = (add_hexnumbering - if 'hex' in k.lower() - else add_squarenumbering) - grids.append([k,v,gridtype,gridnum]) - - if len(grids) < 1: return gpid - if verbose: - print(f' Got zones: {[k[0] for k in grids]}') - # Either get picture information from argument, or deduce from the - # found 'zoned' key. - if picinfo is None: - picinfo = get_picture_info(picture,name,width,height,verbose) - - hex_width, hex_height, scx, scy, rot90, tran = picinfo - - - for g in grids: - n, i, typ, num = g - if verbose: - print(f' Adding zone {n}') - if 'scope' in n: - llx,lly = tran(*i['global lower left']) - urx,ury = tran(*i['global upper right']) - path = [[llx,ury],[urx,ury],[urx,lly],[llx,lly]] - nm = n.replace('zone scope ','') - elif 'path' in n: - path = [tran(*ii) for ii in i['path']] - llx = min([px for px,py in path]) - ury = max([py for px,py in path]) - nm = n.replace('zone path ','') - - # Checkf if we have "point" type elements in this object and - # add them to dict. - points = [ v for k,v in i.items() - if (k.startswith('point') and - isinstance(v,dict) and \ - v.get('type','') == 'point')] - - pathstr = ';'.join([f'{s[0]},{s[1]}' for s in path]) - if verbose: - print(f' Zone path ({llx},{ury}): {pathstr}') - zone = add_zone(root,zoned, - name=nm, - locationFormat = ("$name$" - if 'pool' in n.lower() else - "$gridLocation$"), - useParentGrid=False, - path=pathstr) - - # Do not add grids to pools - if 'pool' in n.lower(): - continue - - targs = {'color':rgb(255,0,0),'visible':visible} - nargs = {'color':rgb(255,0,0),'visible':visible} - if 'hex' in n.lower(): - get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90, - labels,coords,targs,nargs) - else: - width = hex_width / HEX_WIDTH * RECT_WIDTH - height = hex_height / HEX_HEIGHT * RECT_HEIGHT - get_rectparams(i,llx,ury,width,height,rot90,targs,nargs) - - # print(targs,nargs) - if 'turn' in n.lower(): nargs['sep'] = 'T' - if 'oob' in n.lower(): nargs['sep'] = 'O' - - if verbose: - print(f' Adding grid') - - if len(points) <= 0: - grid = typ(root,zone,**targs) - num(root,grid,**nargs) - else: - if verbose: - print(f' Use a region grid') - grid = add_regiongrid(root,zone,snapto=True,visible=visible) - for p in points: - pn = p["name"] - pc = p["coords"] - if verbose: - print(f' Add region {pn} {p}') - - n, gpid = add_region(root,grid,pn,*tran(*pc),gpid, - alsoPiece=True,verbose=verbose) - - - # Once we've dealt with this grid, we should see if we have - # any embedded zones we should deal with. - add_zones(root,zoned,name,i,width,height,gpid, - labels=labels,coords=coords,picinfo=picinfo, - verbose=verbose) - - # Adding a global grid - #targs['color'] = rgb(0,255,0) - #nargs['color'] = rgb(0,255,0) - #grid = typ(root,zoned,**targs) - #num(root,grid,**nargs) - - return gpid - - -# -------------------------------------------------------------------- -def add_inv(root,game,sides,**attr): - '''Add inventory to module''' - filt = '{' + '||'.join([f'Faction=="{s}"' for s in sides])+'}' - grp = 'Faction,Command,Echelon,Type' - inv = add_inventory(root,game, - include = filt, - groupBy = grp, - sortFormat = '$PieceName$', - tooltip = 'Show inventory of all pieces', - zoomOn = True, - **attr) - return inv - - -# -------------------------------------------------------------------- -def add_map_board(root,game,name,board,gpid,verbose=False,visible=False): - '''A add a single board to the module - ''' - - map = add_map(root,game, name) - bpicker = add_boardpicker(root,map) - - add_counterviewer (root,map) - add_hidepieces (root,map) - add_globalmap (root,map) - add_zoomer (root,map) - add_basics_to_map (root,map) - add_masskey (root,map,'Flip', key('F'),key('F'), - icon = '/images/Undo16.gif', - tooltip='Flip selected units') - add_masskey (root,map,'Eliminate',key('E'),key('E'), - icon = '/images/playerAway.gif', - tooltip='Eliminate selected units') - - # Get the image so we may make a rectangle - if verbose: - print(f' Adding board {board["name"]} -> {board["filename"]}') - ulx,uly,lrx,lry = get_bb(board['img']) - eboard = add_board(root,bpicker,name,image=board['filename']) - zoned = add_zoned(root,eboard) - #hexes = add_hexgrid(root,zoned) - add_zonehighlighter(root,zoned) - - if not 'zones' in board: - full = add_zone(root,zoned, - name='full', - useParentGrid=False, - path=(f'{ulx},{uly};' + - f'{lrx},{uly};' + - f'{lrx},{lry};' + - f'{ulx},{lry}')) - - # We do not have board info, so add a grid to the whole thing - add_hex_grid(root,full,rgb(255,0,0),True,True,visible=visible) - return - - # If we get here, we have board info! - w = abs(ulx-lrx) - h = abs(uly-lry) - return add_zones(root,zoned,name,board['zones'],w,h,gpid, - verbose=verbose,visible=visible) - -# -------------------------------------------------------------------- -def add_boards(root,game,categories,sides,gpid,verbose=False,visible=False): - '''Add all boards to the module, including eliminated map - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The parent element - categories : dict - Catalogue of images - sides : list of str - List of sides in the game - Name of the map - ''' - if verbose: - print('Adding maps and boards') - - # Loop over defined boards - for bn, b in categories.get('board',{}).get('all',{}).items(): - gpid = add_map_board(root,game,bn,b,gpid,verbose,visible) - - add_elim(root,game,sides,categories,verbose) - - return gpid - -# -------------------------------------------------------------------- -def add_oob(root,widget,name,oob,gpid,hotkey='',verbose=False,visible=False): - '''A add a single board to the module - ''' - # Short hand - cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr) - - if verbose: - print(f' Adding oob {name}') - - map = add_widgetmap(root,widget, name,markMoved='Never',hotkey='') - bpicker = add_boardpicker(root,map) - - add_counterviewer (root,map) - add_zoomer (root,map) - add_basics_to_map (root,map) - - - # Get the image so we may make a rectangle - if verbose: - print(f' Adding OOB {oob["name"]} -> {oob["filename"]}') - - ulx,uly,lrx,lry = get_bb(oob['img']) - board = add_board(root,bpicker,name,image=oob['filename']) - zoned = add_zoned(root,board) - add_zonehighlighter(root,zoned) - - if not 'zones' in oob: - zone = add_zone(root,zoned, - name='full', - useParentGrid=False, - path=(f'{ulx},{uly};' + - f'{lrx},{uly};' + - f'{lrx},{lry};' + - f'{ulx},{lry}')) - # We do not have board info, so add a grid to the whole thing - grid = add_squaregrid(root,zone,visible=visible) - add_squarenumbering(root,grid,visible=visible) - return - - # If we get here, we have board info! - w = abs(ulx-lrx) - h = abs(uly-lry) - return add_zones(root,zoned,name,oob['zones'],w,h,gpid, - verbose=verbose,visible=visible) - -# -------------------------------------------------------------------- -def add_oobs(root,game,categories,gpid,verbose=False,visible=False): - '''Add all OObs to the module - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The parent element - categories : dict - Catalogue of images - ''' - # Short hand - oobc = categories.get('oob',{}).get('all',{}).items() - if len(oobc) < 1: - return gpid - - oobs = add_chartwindow(root,game, 'OOBs', - hotkey = key('B',ALT), - description = 'OOBs', - text = '', - icon = '/images/inventory.gif', - tooltip = 'Show/hide OOBs') - tabs = add_tabs(root,oobs,'OOBs') - - if verbose: - print('Adding OOBs') - - # Loop over defined boards - for on, o in oobc: - widget = add_mapwidget(root,tabs, entryName=on) - gpid = add_oob(root,widget,on,o,gpid, - verbose = verbose, - hotkey = key('B',ALT), - visible = visible) - - return gpid - -# -------------------------------------------------------------------- -def add_markproto(root,protos,key,value): - decs = [ mark_trait(key,value.capitalize()), - basic_trait('','','') ] - typs = [d[0] for d in decs] - stts = [d[1] for d in decs] - typ = enc_parts(*typs) - stt = enc_parts(*stts) - body = add_proto(typ,stt) - add_prototype(root,protos,value+' prototype',body) - -# -------------------------------------------------------------------- -def add_counters(root,game,categories, - unittypes,echelons,commands,verbose=False): - '''Add all counters to the module. - - This will add all counters to the module, as well as prototypes - for each sub-category. - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The game element - categories : dict - Catalogue of images - ''' - # Short hand - # Create prototypes container before adding pieces - protos = add_prototypes(root,game) - for utype in unittypes: add_markproto(root,protos,'Type',utype) - for ech in echelons: add_markproto(root,protos,'Echelon',ech) - for cmd in commands: add_markproto(root,protos,'Command',cmd) - - # Stating global piece ID - gpid = 20 - - # A window to hold the pieces - piecew = add_piecewindow(root,game,'Counters', - hotkey = key('C',ALT)) - # Tab container for each sub-category - piecet = add_tabs(root,piecew,entryName='Counters') - - if verbose: - print('Adding counters and prototypes') - - # Loop over sub-categories - for subn, subc in categories.get('counter',{}).items(): - # Friendly message - if verbose: - print(f' Adding {subn} counters and prototype') - - # Create a panel for this sub-category - piecep = add_panel(root,piecet, - entryName = subn, - fixed = False) - # Add a list to the panel - piecel = add_list(root,piecep, - entryName=f'{subn} counters') - - if verbose: - print(f' Prototype: {subn} prototype') - # Create prototype for this sub-category - proto = add_prototype(root,protos, - name = f'{subn} prototype', - code = proto_body(subn), - description = f'Prototype for {subn} counters') - - # Loop over counters in this sub-category - for cn, c in subc.items(): - # Flipped counters are not added directly - if cn.endswith('flipped'): continue - - if verbose: - print(f' counter: {cn}') - - # Get image bounding box - bb = get_bb(c['img']) - - # Get flipped image, if any - cf = subc.get(cn + ' flipped', None) - - # Create a slot for this piece - sl = add_pieceslot(root,piecel, - entryName = cn, - gpid = gpid, - code = piece_body(subn,c,cf,gpid), - height = bb[3]-bb[1], - width = bb[2]-bb[0]) - - # Store the global piece identifier - do we need this? - c['gpid'] = gpid - - # Increment global piece identifier - gpid += 1 - - # Return next free piece identifier - return gpid - -# -------------------------------------------------------------------- -def add_charts(root,game,categories,verbose=False): - '''Add all boards to the module - - This will select all 'chart' elements from the catalogue and add - them as individual (popup) panels to the module. - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The game element - categories : dict - Catalogue of images - - ''' - chartc = categories.get('chart',{}).get('all',{}).items() - if len(chartc) < 1: - return - - # Short hand - cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr) - cw = lambda parent,tag,**attr : create_elem(root,parent,vw(tag),**attr) - - if verbose: - print('Adding charts') - - charts = add_chartwindow(root,game, 'Charts', - hotkey = key('A',ALT), - description = 'Charts', - tooltip = 'Show/hide Charts') - tabs = add_tabs(root,charts,'Charts') - - - # Loop over defined charts - for cn, c in chartc: - if verbose: - print(f' Chart {cn} ({c["filename"]})') - add_chart(root,tabs, - chartName = cn, - description = cn, - fileName = c['filename']) - -# -------------------------------------------------------------------- -def add_diceroll(root,game,categories,verbose=False): - '''Add a dice button (1d6) - - Parameters - ---------- - root : xml.dom.minidom.Document - Root of the document - game : xml.dom.minidom.Element - The game element - categories : dict - Catalogue of images - ''' - if verbose: - print('Adding dice') - - add_dice(root,game, - hotkey = key('6',ALT), - nDice = 1, - nSides = 6, - text = '1d6', - tooltip = 'Roll a 1d6', - name = '1d6') - - -# ==================================================================== -def create_build(info, - categories, - unittypes, - echelons, - commands, - zipfile, - title, - version, - desc = '', - rules = None, - pdffile = '', - infofile = '', - verbose = False, - visible = False): - '''Create the buildFile.xml document - - Parameters - ---------- - info : dict - Information dicationary - categories : dict - Catalogue of images - unittypes : set - Set of used unit types - zipfile : zipfile.ZipFile - Module archive - title : str - Title of module - version : str - Version number of module - desc : str - Short description of the game - rules : str - Filename of PDF rules document (if any) - - Returns - ------- - xml : str - The encoded document - ''' - from xml.dom.minidom import Document - - if verbose: - print(f'Creating buildFile.xml: {title},{version}') - - # Create document - root = Document() - - # Add game element - game = add_game(root,root, - name = title, - version = version, - description = desc) - - # Extract the sides of the game from the counter sub-categories - # Should be a little more clever about the case here - dsides = {k.lower() : k for k in categories.get('counter',{}).keys()} - sides = None - for skip in ['all','common', 'marker', 'markers']: - if skip in dsides: del dsides[skip] - sides = list(dsides.values()) - if verbose: - print('Identified factions: ',sides) - - # Use the standard command encoder - add_basiccommandencoder(root,game) - - # Add document parts - doc = add_documentation(root,game) - add_splash(root, doc, categories, title,verbose) - add_rules(root, doc, zipfile, rules,verbose) - notes = add_notes(root,doc,zipfile,title,version, - sides,pdffile,infofile,rules,verbose) - - - # Create roster or player sides - roster = add_roster(root,game) - for s in sides: - add_entry(root,roster,s) - - # Add global options - mainly defer to user settings - add_globaloptions(root,game, - autoReport = 'Use Preferences Setting', - centerOnMove = 'Use Preferences Setting', - nonOwnerUnmaskable = 'Use Preferences Setting', - playerIdFormat = '$playerName$') - # Add global properties - gp = add_globalproperties(root,game) - # Add a turn tracker - tt = add_turntrack(root,game,'Turn',counter={ - 'property': 'Turn', - 'phases': { - 'property': 'Phase', - 'names': sides }}) - add_globalproperty(root,gp,'TurnTracker.defaultDocked',True) - - # Add all pieces to the module (including prototypes) - gpid = add_counters(root,game,categories, - unittypes,echelons,commands,verbose) - # Add an inventory - add_inv(root,game,sides) - # Add all boards to the module (including eliminated map) - gpid = add_boards(root,game,categories,sides,gpid, - verbose=verbose,visible=visible) - # Add all OOBs to the module - gpid = add_oobs(root,game,categories,gpid, - verbose=verbose,visible=visible) - # Add charts to the module - add_charts(root,game,categories,verbose=verbose) - # Add a dice rool - add_diceroll(root,game,categories,verbose=verbose) - - # Set next available piece identifier on the game - game.setAttribute('nextPieceSlotId',str(gpid+1)) - - # Return the document - return root, notes - -# -------------------------------------------------------------------- -def create_data(title,version,desc='',verbose=False): - '''Create the module data XML - - Parameters - ---------- - title : str - Title of the game - version : str - Version number of the module - desc : str - Short description - - Returns - ------- - xml : str - The encoded document - ''' - from xml.dom.minidom import Document - from time import time - - if verbose: - print('Create module data') - - # The document - root = Document() - - # Top of the document - data = root.createElement('data') - data.setAttribute("version","1") - root.appendChild(data) - - # Version number of module - vers = root.createElement('version') - vers.appendChild(root.createTextNode(str(version))) - data.appendChild(vers) - - # Name of the game - name = root.createElement('name') - name.appendChild(root.createTextNode(title)) - data.appendChild(name) - - # VASSAL version (should get this in some other way) - vvers = root.createElement('VassalVersion') - vvers.appendChild(root.createTextNode("3.6.7")) - data.appendChild(vvers) - - # Description, if any - desc = root.createElement('description') - data.appendChild(desc) - - # Automatically set the save data - save = root.createElement('dateSaved') - save.appendChild(root.createTextNode(f'{int(time())}')) - data.appendChild(save) - - return root - - -# ==================================================================== -def create_vmod(vmodname, - info, - title, - version, - desc = '', - rules = None, - pdfname = '', - infoname = '', - patch = None, - verbose = False, - visible = False): - '''Create a VASSAL module from the information passed - - Parameters - ---------- - vmodname : str - Name of the module - info : list - List of images and image data - title : str - Name of the game - version : str - Version of the module - desc : str - Short description of the game - rules : str - Rules PDF (optional) - - Returns - ------- - ''' - from zipfile import ZipFile, ZIP_DEFLATED - from pprint import pprint - - categories = {} - unittypes = [] - echelons = [] - commands = [] - with ZipFile(vmodname,'w',compression=ZIP_DEFLATED) as vmod: - # Create images in ZIP file - for i in info: - if ignore_entry(i): continue - - # Store the name of the image file in catalogue - i['filename'] = i['name'].replace(' ','_') + '.png' - imgfn = 'images/'+i['filename'] - if imgfn not in vmod.namelist(): - vmod.writestr(imgfn,i['img']) - - # Categorize - assume counter - typ = i.get('category','counter') - sub = i.get('subcategory','all') - if sub == '': - i['subcategory'] = 'all' - sub = 'all' - - # Add to catalogue - if typ not in categories: - categories[typ] = {} - cat = categories[typ] - - if sub not in cat: - cat[sub] = {} - tgt = cat[sub] - - tgt[i['name']] = i - - natoapp6c = i.get('natoapp6c',None) - if natoapp6c is not None: - from re import sub - mains = natoapp6c.get('main',None) - echelon = natoapp6c.get('echelon',None) - command = natoapp6c.get('command',None) - - if mains is not None: - mains = sub(r'\[[^]]+\]','',mains)\ - .replace('{','').replace('}','').split(',') - unittypes.extend(mains) - i['mains'] = mains - - if echelon is not None: - echelons.append(natoapp6c['echelon']) - i['echelon'] = echelon - - if command is not None: - commands.append(command) - i['command'] = command - - # Friendly message - # if verbose: - # print(f'{i["name"]} -> {i["type"]}/{i["sub type"]} {typ}/{sub}') - - unittypes = set(unittypes) - echelons = set(echelons) - commands = set(commands) - - # Now create the `buildFile.xml` file - build, notes = create_build(info, - categories, - unittypes, - echelons, - commands, - vmod, - title, - version, - desc, - rules, - pdfname, - infoname, - verbose, - visible) - # Now create the `moduledata` file - data = create_data(title, version, desc,verbose) - - - if patch: - from importlib.util import spec_from_file_location, \ - module_from_spec - from pathlib import Path - from sys import modules - - p = Path(patch) - if verbose: - pn = str(p.stem) - print(f'Will patch module with {pn}.patch function') - - spec = spec_from_file_location(p.stem, p.absolute()) - module = module_from_spec(spec) - spec.loader.exec_module(module) - modules[p.stem] = module - - - # Patch must accept xml.dom.document,xml.dom.document,ZipFile - module.patch(build,data,vmod,verbose) - - buildstr = build.toprettyxml(indent=' ', - encoding="UTF-8", - standalone=False) - datastr = data.toprettyxml(indent=' ', - encoding="UTF-8", - standalone=False) - - vmod.writestr('buildFile.xml',buildstr) - vmod.writestr('moduledata',datastr) - - return notes - -# ==================================================================== -def export(vmodname = 'Draft.vmod', - pdfname = 'export.pdf', - infoname = 'export.json', - title = 'Test', - version = 'Draft', - desc = '', - rules = None, - patch = None, - verbose = False, - visible = False): - '''Do the whole thing - - - Read in information form the 'infoname' file (a CSV file - generated by LaTeX) - - - Convert each page in the 'pdfname' file (a PDF generated by - LaTex) into images - - - Create the VASSAL module - - ''' - if verbose: - print(f'Module name : {vmodname}\n' - f'PDF name : {pdfname}\n' - f'Info name : {infoname}\n' - f'Title : {title}\n' - f'Version : {version}\n' - f'Description : {desc}\n' - f'Rules : {rules}\n') - info = convert_pages(pdfname=pdfname,infoname=infoname) - return create_vmod(vmodname = vmodname, - info = info, - title = title, - version = version, - desc = desc, - rules = rules, - pdfname = pdfname, - infoname = infoname, - patch = patch, - verbose = verbose, - visible = visible) - -# ==================================================================== -if __name__ == '__main__': - from argparse import ArgumentParser, FileType - - ap = ArgumentParser(description='Create draft VASSAL module') - ap.add_argument('pdffile', - help='The PDF file to read images from', - type=FileType('r'), - default='export.pdf', - nargs='?') - ap.add_argument('infofile', - help='The JSON file to read image information from', - type=FileType('r'), - default='export.json', - nargs='?') - ap.add_argument('-p','--patch', - help='A python script to patch generated module', - type=FileType('r')) - ap.add_argument('-o','--output', - help='Output file to write module to', - type=FileType('w'), - default='Draft.vmod') - ap.add_argument('-t','--title', - help='Module title', default='Draft', - type=str) - ap.add_argument('-v','--version', - help='Module version', - type=str, - default='draft') - ap.add_argument('-r','--rules', - help='Rules PDF file', - type=FileType('r')) - ap.add_argument('-d','--description', - help='Short description of module', - type=str, - default='draft of module') - ap.add_argument('-V','--verbose', - help='Be verbose', - action='store_true') - ap.add_argument('-G','--visible-grids', - action='store_true', - help='Make grids visible in the module') - ap.add_argument('-n','--notes', - help='Show notes', - action='store_true') - - - args = ap.parse_args() - - vmodname = args.output.name - rulesname = args.rules.name if args.rules is not None else None - args.output.close() - - patchname = args.patch.name if args.patch is not None else None - if args.patch is not None: - args.patch.close() - - if args.version.lower() == 'draft': - args.visible_grids = True - - try: - notes = export(vmodname = vmodname, - pdfname = args.pdffile.name, - infoname = args.infofile.name, - title = args.title, - version = args.version, - desc = args.description, - rules = rulesname, - patch = patchname, - verbose = args.verbose, - visible = args.visible_grids) - - if args.notes: - print(f'Module {vmodname} created. ' - 'Here are the notes from the module') - print(notes) - - except Exception as e: - from sys import stderr - print(f'Failed to build {vmodname}: e',file=stderr) - from os import unlink - try: - unlink(vmodname) - except: - pass - - raise e diff --git a/macros/latex/contrib/wargame/source/utils/svg2tikz.py b/macros/latex/contrib/wargame/source/utils/svg2tikz.py deleted file mode 100755 index a9f3c60203..0000000000 --- a/macros/latex/contrib/wargame/source/utils/svg2tikz.py +++ /dev/null @@ -1,365 +0,0 @@ -#!/usr/bin/env python3 - -from sys import stderr, stdout - -def monkey_patch(): - from svgelements import SVGElement - - def SVGElement__imatmul__(self,other): - print('Dummy SVGElement.__imatmul__') - return self - - SVGElement.__imatmul__ = SVGElement__imatmul__ - -monkey_patch() - -# -------------------------------------------------------------------- -def open_svg(input): - from svgelements import SVG - - svg = SVG.parse(input,reify=False) - print(type(svg[0]),file=stderr) - return svg - -# -------------------------------------------------------------------- -def get_bb(svg): - llx,lly,urx,ury = svg.bbox() - # print(llx,lly,urx,ury) - return llx,lly,urx,ury - -# -------------------------------------------------------------------- -def flush_left(svg): - from svgelements import Matrix - - llx,lly,urx,ury = get_bb(svg) - svg *= Matrix.translate(-llx,-lly) - return svg - -# -------------------------------------------------------------------- -def scale_unit(svg): - from svgelements import Matrix - - llx,lly,urx,ury = get_bb(svg) - scale = 1 / max(urx,ury) - svg *= Matrix.scale(scale) - - return svg - -# -------------------------------------------------------------------- -def scale_to_cm(svg,px_per_cm = 37.79531157367762334497): - from svgelements import Matrix - - scale = 1 / px_per_cm - svg *= Matrix.scale(scale) - - return svg - -# -------------------------------------------------------------------- -def shift_to_centre(svg): - from svgelements import Matrix - - llx,lly,urx,ury = get_bb(svg) - svg *= Matrix.translate(-urx/2,-ury/2) - svg *= Matrix.scale(1,-1) - svg.reify() - svg.render() - return svg - -# -------------------------------------------------------------------- -def flipy(svg): - from svgelements import Matrix - - llx,lly,urx,ury = get_bb(svg) - svg *= Matrix.translate(-llx,-lly) - svg *= Matrix.scale(1,-1) - svg.reify() - svg.render() - llx,lly,urx,ury = get_bb(svg) - svg *= Matrix.translate(0,-lly) - return svg - -# ==================================================================== -def get_paths(svg): - '''Read in paths from the SVG image - - This will recurse down groups for path operations - - Returns - ------- - paths : list - List of svg.path.Path objects - ''' - from svgelements import Path, Group - from svg.path import parse_path - - paths = [] - - for e in svg: - if isinstance(e,Path): - print('Parse path',file=stderr) - p = parse_path(e.d()) - paths.append(p) - if isinstance(e,Group): - print('Parse group',file=stderr) - paths.append(get_paths(e)) - - return paths - -# ==================================================================== -def tikz_point(e,f): - '''Ouput a point - - Parameters - ---------- - e : complex - The point - f : str - Floating point format - - Return - ------ - coord : str - The point formatted for Tikz - ''' - return f'({e.real:{f}},{e.imag:{f}})' - -# -------------------------------------------------------------------- -def tikz_move(e,f): - '''Output a move-to operation - - Parameters - ---------- - e : complex - The point to move to - f : str - Floating point format - - Return - ------ - coord : str - The point formatted for Tikz - ''' - return tikz_point(e.start,f) - -# -------------------------------------------------------------------- -def tikz_line(e,f): - '''Output a line-to operation - - Parameters - ---------- - e : complex - The point to draw line to - f : str - Floating point format - - Return - ------ - line : str - The line-to operation to point - ''' - return '-- '+tikz_point(e.end,f) - -# -------------------------------------------------------------------- -def tikz_curve(e,f): - '''Output a curve-to operation - - Parameters - ---------- - e : curve operation (3 complex numbers) - The control points (2 of them) and the point to draw curve to - f : str - Floating point format - - Return - ------ - curve : str - The curve-to operation to point - ''' - return \ - '.. controls '+tikz_point(e.control1,f) + \ - ' and ' +tikz_point(e.control2,f) + \ - ' ..' +tikz_point(e.end,f) - -# -------------------------------------------------------------------- -def tikz_close(e,f): - '''Ouput a close (or cycle) operation - ''' - return '-- cycle' - -# ==================================================================== -def path_to_tikz(path,f='8.5f'): - '''Convert a svt.path.Path to a TikZ path - - Parameters - ---------- - path : svg.path.Path - Path to convert - f : str - floating point format to use - - Returns - ------- - code : list - List of Tikz path operations as strings - ''' - from svg.path import Line, Move, Close, CubicBezier, Path - - code = [] - for e in path: - if isinstance(e, Move): code.append(tikz_move(e, f)) - elif isinstance(e, Line): code.append(tikz_line(e, f)) - elif isinstance(e, Close): code.append(tikz_close(e,f)) - elif isinstance(e, CubicBezier): code.append(tikz_curve(e,f)) - elif isinstance(e, Path): code.extend(path_to_tikz(e,f)) - else: - print(f'Unknown type: {type(e)}',file=stderr) - - return code - -# ==================================================================== -def doc_header(output=stdout): - '''Prinout put standalone document header - ''' - print(r'''% -\documentclass{standalone} -\usepackage{tikz} -\begin{document}%''',file=output) - -# -------------------------------------------------------------------- -def doc_footer(output=stdout): - '''Prinout put standalone document footer - ''' - print(r'''% -\end{document}''',file=output) - -# -------------------------------------------------------------------- -def path_to_pic(path,name,output,format): - '''Output a Tikz pic definition from the path - - Parameters - ---------- - path : Path - The path to convert - name : str - The name of the pic - output : File - Output file - format : str - Floating point format - ''' - print(fr'''\tikzset{{% - {name}/.pic={{% - \path[pic actions]''',file=output,end='\n ') - - code = path_to_tikz(path,format) - print('\n '.join(code),file=output) - print(' ;\n }',file=output) - print('}%',file=output) - -# ==================================================================== - -# ==================================================================== -def doit(input='soldier_side.svg', - centre=True, - unit=True, - output=stdout, - standalone=False, - format='8.5f'): - svg = open_svg(input) - orig_bb = get_bb(svg) - - if centre or unit: - svg = flush_left(svg) - if unit: - svg = scale_unit(svg) - else: - svg = scale_to_cm(svg) - if centre: - svg = shift_to_centre(svg) - else: - svg = flipy(svg) - new_bb = get_bb(svg) - - paths = get_paths(svg) - - if standalone: - doc_header(output) - print(f'% Original bounding box: ({orig_bb[0]},{orig_bb[1]}) ({orig_bb[2]},{orig_bb[3]})', - file=output) - print(f'% New bounding box: ({new_bb[0]},{new_bb[1]}) ({new_bb[2]},{new_bb[3]})', - file=output) - pics = [] - for i, path in enumerate(paths): - name = f'pic_{i:03d}' - path_to_pic(path,name,output,format) - pics.append(name) - - if standalone: - print(r'\begin{tikzpicture}%',file=output) - x = 0 - y = 0 - for i, name in enumerate(pics): - if x > 10: - x = 0 - y += 2 - - print(fr' \pic[draw,fill=red] at ({x},{y}) {{{name}}};%', - file=output) - x += 2 - - print(r'\end{tikzpicture}%',file=output) - doc_footer(output) - -# ==================================================================== -def test(svgfile='soldier_side.svg',tikzfile=stdout,standalone=True): - with open(svgfile,'r') as input: - with open(tikzfile,'w') if isinstance(tikzfile,str) else tikzfile as output: - doit(input=input,output=output,standalone=standalone) - - -# ==================================================================== -if __name__ == '__main__': - from argparse import ArgumentParser, FileType - - ap = ArgumentParser(description='Convert SVG to unit Tikz picture') - ap.add_argument('input',type=FileType('r'),nargs='?',default='soldier_side.svg', - help='Input SVG file') - ap.add_argument('-o','--output',type=FileType('w'),default=None, - help='Output Tikz file') - ap.add_argument('-s','--standalone',action='store_true',default=True, - help='Write standalone document') - ap.add_argument('-p','--picture',action='store_false',dest='standalone', - help='Only write picture') - ap.add_argument('-f','--format',type=str,default='8.5f', - help='Format for coordinates') - ap.add_argument('-O','--original-size',dest='unit',action='store_false', - help='Do no scale paths to unit size') - ap.add_argument('-S','--unit-size',dest='unit',action='store_true', - help='Scale paths to unit size') - ap.add_argument('-Z','--no-centre',dest='centre',action='store_false', - help='Do not centre paths') - ap.add_argument('-C','--centre',dest='centre',action='store_true', - help='Centre paths') - - args = ap.parse_args() - - if args.output is None: - from pathlib import Path - inname = Path(args.input.name) - outname = inname.with_suffix('.tex') - args.output = open(outname,'w') - - - doit(input = args.input, - unit = args.unit, - centre = args.centre, - output = args.output, - standalone = args.standalone, - format = args.format) - - - - - - - diff --git a/macros/latex/contrib/wargame/source/utils/wgexport.py b/macros/latex/contrib/wargame/source/utils/wgexport.py new file mode 100755 index 0000000000..9ad370cfcd --- /dev/null +++ b/macros/latex/contrib/wargame/source/utils/wgexport.py @@ -0,0 +1,3750 @@ +#!/usr/bin/env python +# +from pprint import pprint + +# ==================================================================== +def add_pws(opw=None,upw=None): + '''Add password options to the poppler commands + + Parameters + ---------- + opw : str + Owner password + upw : str + User password + + Returns + ------- + opts : list + List of arguments + ''' + args = [] + if upw is not None: + args.extend(['-upw',upw]) + + if opw is not None: + args.extend(['-opw',opw]) + + return args + +# -------------------------------------------------------------------- +def create_proc(args): + '''Create a process + + Parameters + ---------- + args : list + List of commmand line arguments + + Returns + ------- + proc : subprocess.Process + Process handle + ''' + from os import environ + from subprocess import Popen, PIPE, TimeoutExpired + + return Popen(args,env=environ.copy(),stdout=PIPE,stderr=PIPE) + +# -------------------------------------------------------------------- +def get_pdf_info(pdfname='export.pdf',upw=None,opw=None,timeout=None): + '''Get dictionary of PDF information + + Parameters + ---------- + pdfname : str + File name + opw : str + Owner password + upw : str + User password + timeout : int + Timeout in seconds or None + + Returns + ------- + info : dict + PDF information + ''' + from subprocess import TimeoutExpired + + args = ['pdfinfo', pdfname] + args.extend(add_pws(opw=opw,upw=upw)) + + proc = create_proc(args) + + try: + out, err = proc.communicate(timeout=timeout) + except Exception as e: + proc.kill() + proc.communicate() + raise RuntimeError(f'Failed to get PDF info: {e}') + + d = {} + for field in out.decode("utf8", "ignore").split("\n"): + sf = field.split(":") + key, value = sf[0], ":".join(sf[1:]) + if key != "": + d[key] = (int(value.strip()) if key == 'Pages' else value.strip()) + + if "Pages" not in d: + raise ValueError + + return d + +# -------------------------------------------------------------------- +def get_images_info(infofile): + '''Read in image information from file + + Parameters + ---------- + infofile : str + file name + + Returns + ------- + images : list + List of image information + ''' + #from csv import DictReader + from json import load + + with open(infofile,'r') as file: + info = load(file) + #reader = DictReader(file,fieldnames=['page','name','type','sub type']) + #return [l for l in reader] + + return info + + +# -------------------------------------------------------------------- +def convert_page(pdfname,page,opw=None,upw=None,timeout=None): + '''Convert a single PDF page to an image + + Parameters + ---------- + pdfname : str + File name + page : int + Page number + opw : str + Owner password + upw : str + User password + timeout : int + Timeout in seconds or None + + Returns + ------- + img : bytes + The bytes of the image + ''' + args = ['pdftocairo', + '-singlefile', + '-f', str(page), + '-l', str(page), + '-png'] + args.extend(add_pws(opw=opw,upw=upw)) + args.append(pdfname) + args.append('-') + + proc = create_proc(args) + + try: + out, err = proc.communicate(timeout=timeout) + except Exception as e: + proc.kill() + proc.communicate() + raise RuntimeError(f'Failed to convert page {page} of {pdfname}: {e}') + + from io import BytesIO + from PIL import Image + + img = out #Image.open(BytesIO(out)) + + return img + +# -------------------------------------------------------------------- +def ignore_entry(entry): + return entry['category'] in ['<>','<>'] + +# -------------------------------------------------------------------- +def convert_pages(pdfname,infoname, + opw=None,upw=None,timeout=None): + '''Convert pages in a PDF to images + + This creates a list of dictionaries with the image name and data + (as bytes) + + Parameters + ---------- + pdfname : str + File name of PDF to read images from + infoname : str + File name of CSV to read image info from + opw : str + Owner password + upw : str + User password + timeout : int + Timeout in seconds or None + + Returns + ------- + imgs : list + List of images as dicts, info and the bytes of the images + ''' + + oargs = {'opw':opw,'upw':upw,'timeout':timeout} + docinfo = get_pdf_info(pdfname,**oargs) + info = get_images_info(infoname) + + if len(info)-1 != docinfo['Pages']: + raise RuntimeError(f'Number of pages in {pdfname} ' + f'({docinfo["Pages"]}) not {len(info)-1}') + + for i in info: + if ignore_entry(i): continue + i['img'] = convert_page(pdfname,i['number'],**oargs) + + return info + +# ==================================================================== +def remove_and_get(zipfname,*filenames): + '''Open zip file, and make a copy of it without the files listed + in entries. Return the data of files listed in entry.''' + from tempfile import mkdtemp + from zipfile import ZipFile + from shutil import move, rmtree + from os import path + + tempdir = mkdtemp() + ret = {} + try: + tempname = path.join(tempdir, 'new.zip') + with ZipFile(zipfname, 'r') as zipread: + + with ZipFile(tempname, 'w') as zipwrite: + + for item in zipread.infolist(): + data = zipread.read(item.filename) + + if item.filename not in filenames: + zipwrite.writestr(item, data) + else: + ret[item.filename] = data + + move(tempname, zipfname) + finally: + rmtree(tempdir) + + return ret + +# -------------------------------------------------------------------- +def add_back(zipfname,files): + '''Open a zip file for appending and add data in files + + Files is a dictionary of filenames mapping to file content, + as returned by remove_and_get + ''' + from zipfile import ZipFile + + with ZipFile(zipfname, 'a') as zipadd: + for filename,data in files.items(): + zipadd.writestr(filename,data) + +# ==================================================================== +# Contants used for tag names +BUILD = 'VASSAL.build.' +MODULE = BUILD + 'module.' +WIDGET = BUILD + 'widget.' +MAP = MODULE + 'map.' +PICKER = MAP + 'boardPicker.' + +# ==================================================================== +def get_asdict(elem,tag,key,enable=True): + cont = elem.getElementsByTagName(tag) + if not enable: + return cont + + return {e.getAttribute(key): e for e in cont} + +# -------------------------------------------------------------------- +def get_asone(elem,tag,enable=True): + cont = elem.getElementsByTagName(tag) + if enable and len(cont) != 1: + return None + return cont + +# -------------------------------------------------------------------- +def get_doc(string): + from xml.dom.minidom import parseString + + return parseString(string) + +# -------------------------------------------------------------------- +def get_game(doc): + return doc.getElementsByTagName('VASSAL.build.GameModule')[0] + +# -------------------------------------------------------------------- +def get_globalproperties(doc,one=True): + return get_asone(doc,MODULE+'properties.GlobalProperties',one) + +# -------------------------------------------------------------------- +def get_globalproperty(doc,asdict=True): + '''A little confusing - this returns a dictionary''' + return get_asdict(doc,MODULE+'properties.GlobalProperty','name',asdict) + +# -------------------------------------------------------------------- +def get_turntrack(doc,asdict=True): + return get_asdict(doc,MODULE+'turn.TurnTracker','name',asdict) + +# -------------------------------------------------------------------- +def get_turncounter(doc,asdict=True): + return get_asdict(doc,MODULE+'turn.CounterTurnLevel','property',asdict) + +# -------------------------------------------------------------------- +def get_turnlist(doc,asdict=True): + return get_asdict(doc,MODULE+'turn.ListTurnLevel','property',asdict) + +# -------------------------------------------------------------------- +def get_turnhotkey(doc,asdict=True): + return get_asdict(doc,MODULE+'turn.TurnGlobalHotkey','hotkey',asdict) + +# -------------------------------------------------------------------- +def get_documentation(doc,one=True): + return get_asone(doc,MODULE+'Documentation',one) + +# -------------------------------------------------------------------- +def get_helpfiles(doc,key='fileName',asdict=True): + return get_asdict(doc,MODULE+'documentation.HelpFile',key,asdict) + +# -------------------------------------------------------------------- +def get_tutorials(doc,key='name',asdict=True): + return get_asdict(doc,MODULE+'documentation.Tutorial',key,asdict) + +# -------------------------------------------------------------------- +def get_inventories(doc,key='name',asdict=False): + return get_asdict(doc,MODULE+'Inventory',key,asdict) + +# -------------------------------------------------------------------- +def get_maps(doc,asdict=True): + return get_asdict(doc,MODULE+'Map','mapName',asdict) + +# -------------------------------------------------------------------- +def get_widgetmap(doc,asdict=True): + return get_asdict(doc,WIDGET+'WidgetMap','mapName',asdict) + +# -------------------------------------------------------------------- +def get_chartwindows(doc,asdict=True): + return get_asdict(doc,MODULE+'ChartWindow','name',asdict) + +# -------------------------------------------------------------------- +def get_map(doc,name): + maps = get_maps(doc,True) + return maps.get(name, None) if maps else None + +# -------------------------------------------------------------------- +def get_boards(doc,asdict=True): + return get_asdict(doc,PICKER+'Board','name',asdict) + +# -------------------------------------------------------------------- +def get_zoned(doc,one=True): + return get_asone(doc,PICKER+'board.ZonedGrid',one) + +# -------------------------------------------------------------------- +def get_zone(doc,asdict=True): + return get_asdict(doc,PICKER+'board.mapgrid.Zone','name',asdict) + +# -------------------------------------------------------------------- +def get_hexgrid(doc,one=True): + return get_asone(doc,PICKER+'board.HexGrid',one) + +# -------------------------------------------------------------------- +def get_squaregrid(doc,one=True): + return get_asone(doc,PICKER+'board.SquareGrid',one) + +# -------------------------------------------------------------------- +def get_regiongrid(doc,one=True): + return get_asone(doc,PICKER+'board.RegionGrid',one) + +# -------------------------------------------------------------------- +def get_hexnumbering(doc,one=True): + return get_asone(doc,PICKER+'board.mapgrid.HexGridNumbering',one) + +# -------------------------------------------------------------------- +def get_regions(doc,asdict=True): + return get_asdict(doc,PICKER+'board.Region', 'name', asdict) + +# -------------------------------------------------------------------- +def get_squarenumbering(doc,one=True): + return get_asone(doc,PICKER+'board.mapgrid.SquareGridNumbering', one) + +# -------------------------------------------------------------------- +def get_pieces(doc,asdict=True): + return get_asdict(doc,WIDGET+'PieceSlot','entryName',asdict) + +# -------------------------------------------------------------------- +def get_prototypecontainer(doc,one=True): + return get_asone(doc,MODULE+'PrototypesContainer',one) + +# -------------------------------------------------------------------- +def get_prototypes(doc,asdict=True): + return get_asdict(doc,MODULE+'PrototypeDefinition', 'name',asdict) + +# -------------------------------------------------------------------- +def get_masskey(map,asdict=True): + return get_asdict(map,MAP+'MassKeyCommand','name', asdict) + +# -------------------------------------------------------------------- +def get_masskey(map,asdict=True): + return get_asdict(map,MAP+'MassKeyCommand','name', asdict) + + +# -------------------------------------------------------------------- +def get_piece_parts(code): + '''Takes the code part of a pieceslot (the text node) and decodes + it into traits. + + One can use this to modify the pieces. One could for example + remove a trait by calling this function, and remove the element + corresponding to the trait from the returned list. Then one must + collect up the definitions and states separately and pass each of + them to `enc_parts', which gives us two strings that can be passed + to `add_piece' (or `add_proto') function to get the new text node + content of the piece slot or prototype definition. For example + + piece = get_pieceslots(root,pieces)['foo'] + code = piece.childNodes[0].nodeValue + traits = get_piece_parts(code) + ... # Modify the list + + # Separate out definitions and states + defs = [enc_def(e['def']) for e in traits] + states = [enc_def(e['state']) for e in traits] + + # Encode definitions and states as a single string, and then form body + def = enc_parts(*defs) + state = enc_parts(*states) + body = add_piece(def,state) + + # Set new definition + piece.childNodes[0].nodeValue = body + + See also dicts_to_piece + + Parameters + ---------- + code : str + Text node content of or tags + + Returns + ------- + traits : list of dict + All the traits in a list. Each element of the list is a + dictionary with the keys 'def' and 'status'. + + The key 'def' points to a list of the trait attributes used to + define the trait type. The first element of the 'def' list is + the trait identifier. The rest are the arguments for that + trait type. Note, all fields are encoded as strings. + + The key 'status' encodes the status of the trait. The format + of this depends on the trait.Note, all fields are encoded as + strings. + + ''' + cmd,iden,typ,sta = code.split('/') + defs = typ.split(r' ') + stas = sta.split(r' ') + defs = [d.rstrip("\\").split(';') for d in defs] + stas = [s.rstrip("\\").split(';') for s in stas] + ret = [{'def': d, 'state': s} for d,s in zip(defs,stas)] + return ret + +# -------------------------------------------------------------------- +def dicts_to_piece(traits): + # Separate out definitions and states + defs = [enc_def(e['def']) for e in traits] + states = [enc_def(e['state']) for e in traits] + + # Encode definitions and states as a single string, and then form body + df = enc_parts(*defs) + state = enc_parts(*states) + body = add_piece(df,state) + + return body + + +# ==================================================================== +# Key encoding +SHIFT = 65 +CTRL = 130 +ALT = 520 +CTRL_SHIFT = CTRL+SHIFT +ALT_SHIFT = ALT+SHIFT +NONE = '\ue004' +NONE_MOD = 0 +def key(let,mod=CTRL): + + '''Encode a key sequence + + Parameters + ---------- + let : str + Key code (Letter) + mod : int + Modifier mask + ''' + return f'{ord(let)},{mod}' +# Colour encoding +def rgb(r,g,b): + return ','.join([str(r),str(g),str(b)]) + +def rgba(r,g,b,a): + return ','.join([str(r),str(g),str(b),str(a)]) + + +# -------------------------------------------------------------------- +def set_node_attr(node,**attr): + for k,v in attr.items(): + node.setAttribute(k,str(v).lower() if isinstance(v,bool) else str(v)) + +# -------------------------------------------------------------------- +def add_node(root,parent,tag,**attr): + e = root.createElement(tag) + if parent: parent.appendChild(e) + set_node_attr(e,**attr) + + return e + + +# -------------------------------------------------------------------- +def add_text(root,parent,text): + t = root.createTextNode(text) + parent.appendChild(t) + return t + +# -------------------------------------------------------------------- +def add_game(root,doc, + name, + version, + ModuleOther1 = "", + ModuleOther2 = "", + VassalVersion = "3.6.7", + description = "", + nextPieceSlotId = 0): + return add_node(root,doc,BUILD+'GameModule', + name = name, + version = version, + ModuleOther1 = ModuleOther1, + ModuleOther2 = ModuleOther2, + VassalVersion = VassalVersion, + description = description, + nextPieceSlotId = nextPieceSlotId) + +# -------------------------------------------------------------------- +def add_basiccommandencoder(root,doc): + return add_node(root,doc,MODULE+'BasicCommandEncoder') + +# -------------------------------------------------------------------- +def add_globalproperties(root,elem,*props,**named): + gp = add_node(root,elem,MODULE+'properties.GlobalProperties') + # Add elements where each is a dict with _at least_ + # "{'name':NAME, 'initialValue':VALUE}" + for p in props: + add_globalproperty(root,gp,**p) + # Add elements where each is a named dict with _at least_ + # "{'initialValue':VALUE}" + for n, p in named: + add_globalproperty(root,gp,name=n,**p) + + return gp + + +# -------------------------------------------------------------------- +def add_globalproperty(root,elem,name,initialValue, + isNumeric = False, + min = "null", + max = "null", + wrap = False, + description = ""): + return add_node(root,elem,MODULE+'properties.GlobalProperty', + name = name, + initialValue = initialValue, + isNumeric = isNumeric, + min = min, + max = max, + wrap = wrap, + description = description) + +# -------------------------------------------------------------------- +def add_turntrack(root, elem, name, + buttonText = 'Turn', + hotkey = '', + icon = '', + length = -1, + lengthStyle = 'Maximum', + nexthotkey = key('T',ALT), + plusButtonSize = 22, + prevhotkey = key('T',ALT_SHIFT), + reportFormat = '<$PlayerId$> Turn updated from $oldTurn$ to $newTurn$', + turnButtonHeight = 22, + turnFormat = None, + counter = None, + phases = None): + + levels = (counter if counter is not None else + phases if phases is not None else None) + if levels is not None: + lvl = 1 + lvls = [f'$level{lvl}$'] + sub = levels + while True: + sub = sub.get('counter',sub.get('phases',None)) + if sub is None: + break + lvl += 1 + lvls.append(f'$level{lvl}$') + + turnFormat = ' '.join(lvls) + + if turnFormat is None: + turnFormat = '$level1$ $level2$ $level3$ $level4$' + + t = add_node(root, elem, MODULE+'turn.TurnTracker', + name = name, + buttonText = buttonText, + hotkey = hotkey, + icon = icon, + length = length, + lengthStyle = lengthStyle, + nexthotkey = nexthotkey, + plusButtonSize = plusButtonSize, + prevhotkey = prevhotkey, + reportFormat = reportFormat, + turnButtonHeight = turnButtonHeight, + turnFormat = turnFormat) + + add_turnlevel(root, t, counter=counter, phases=phases) + + return t + +# -------------------------------------------------------------------- +def add_turnlevel(root,parent,counter=None,phases=None): + f,s = ((add_turncounter,counter) if counter is not None else + (add_turnlist,phases) if phases is not None else (None,None)) + if f is None: return parent + + subcounter = s.pop('counter',None) + subphases = s.pop('phases',None) + + sub = f(root,parent,**s) + + return add_turnlevel(root,sub,counter=subcounter,phases=subphases) + +# -------------------------------------------------------------------- +def add_turncounter(root,elem,property, + incr = 1, + loop = False, + loopLimit = -1, + turnFormat = "$value$"): + c = add_node(root,elem,MODULE+"turn.CounterTurnLevel", + property = property, + incr = incr, + loop = loop, + loopLimit = loopLimit, + turnFormat = turnFormat) + return c + +# -------------------------------------------------------------------- +def add_turnlist(root,elem,property,names, + configFirst = False, + configList = False, + turnFormat = '$value$'): + c = add_node(root,elem,MODULE+"turn.ListTurnLevel", + property = property, + list = ','.join([str(p) for p in names]), + configFirst = configFirst, + configList = configList, + turnFormat = turnFormat) + return c + +# -------------------------------------------------------------------- +def add_turnhotkey(root,elem, + hotkey, + match = '{phase=="first"}', + reportFormat = '{PlayerName}', + name = ''): + return add_node(root,elem,MODULE+'turn.TurnGlobalHotkey', + hotkey = hotkey, + match = match, + reportFormat = reportFormat, + name = name) + + + +# -------------------------------------------------------------------- +def add_translatable(root,elem): + return add_node(root,elem,MODULE+'properties.GlobalTranslatableMessages') + +# -------------------------------------------------------------------- +def add_language(root,elem): + return add_node(root,elem,'VASSAL.i18n.Language') + +# -------------------------------------------------------------------- +def add_chatter(root,elem): + return add_node(root,elem,MODULE+'Chatter') + +# -------------------------------------------------------------------- +def add_keynamer(root,elem): + return add_node(root,elem,MODULE+'KeyNamer') + +# -------------------------------------------------------------------- +def add_documentation(root,doc): + return add_node(root,doc,MODULE+'Documentation') + +# -------------------------------------------------------------------- +def add_about(root,doc,title,fileName=""): + return add_node(root,doc,MODULE+'documentation.AboutScreen', + fileName = fileName, + title = title) +# -------------------------------------------------------------------- +def add_pdffile(root,doc,title,pdfFile): + return add_node(root,doc,MODULE+'documentation.BrowserPDFFile', + pdfFile = pdfFile, title=title) +# -------------------------------------------------------------------- +def add_helpfile(root,doc,title,fileName,fileType="archive"): + return add_node(root,doc,MODULE+'documentation.HelpFile', + fileName = fileName, + fileType = fileType, + title = title) + +# -------------------------------------------------------------------- +def add_htmlfile(root,doc,title,startingPage='index.html'): + return add_node(root,doc,MODULE+'documentation.BrowserHelpFile', + startingPage=startingPage, + title=title) + +# -------------------------------------------------------------------- +def add_tutorial(root,doc, + name = 'Tutorial', + logfile = 'tutorial.vlog', + promptMessage = 'Load the tutorial?', + welcomeMessage = 'Press "Step forward" (PnDn) to step through the tutorial', + launchOnStartup = True): + return add_node(root,doc,MODULE+'documentation.Tutorial', + name = name, + logfile = logfile, + promptMessage = promptMessage, + welcomeMessage = welcomeMessage, + launchOnStartup = launchOnStartup) + +# -------------------------------------------------------------------- +def add_roster(root,doc,buttonKeyStroke='', + buttonText='Retire', + buttonToolTip='Switch sides, become observer, or release faction'): + return add_node(root,doc,MODULE+'PlayerRoster', + buttonKeyStroke = buttonKeyStroke, + buttonText = buttonText, + buttonToolTip = buttonToolTip) + +# -------------------------------------------------------------------- +def add_entry(root,doc,text): + n = add_node(root,doc,'entry') + add_text(root,n,text) + return n + +# -------------------------------------------------------------------- +def add_globaloptions(root,doc, + autoReport = "Use Preferences Setting", + centerOnMove = "Use Preferences Setting", + chatterHTMLSupport = "Always", + hotKeysOnClosedWindows = "Never", + inventoryForAll = "Always", + nonOwnerUnmaskable = "Use Preferences Setting", + playerIdFormat = "$playerName$", + promptString = "Opponents can unmask pieces", + sendToLocationMoveTrails = "Never"): + return add_node(root,doc,MODULE+'GlobalOptions', + autoReport = autoReport, + centerOnMove = centerOnMove, + chatterHTMLSupport = chatterHTMLSupport, + hotKeysOnClosedWindows = hotKeysOnClosedWindows, + inventoryForAll = inventoryForAll, + nonOwnerUnmaskable = nonOwnerUnmaskable, + playerIdFormat = playerIdFormat, + promptString = promptString, + sendToLocationMoveTrails = sendToLocationMoveTrails) + +# -------------------------------------------------------------------- +def add_option(root,doc,name,value): + n = add_node(root,doc,'option',name=name) + add_text(n,root,value) + return n + +# -------------------------------------------------------------------- +# CurrentMap == "Board" +def add_inventory(root,doc, + canDisable = False, + centerOnPiece = True, + disabledIcon = '', + drawPieces = True, + foldersOnly = False, + forwardKeystroke = True, + groupBy = '', + hotkey = key('I',ALT), + icon = '/images/inventory.gif', + include = '{}', + launchFunction = 'functionHide', + leafFormat = '$PieceName$', + name = '', + nonLeafFormat = '$PropertyValue$', + pieceZoom = '0.33', + pieceZoom2 = '0.5', + pieceZoom3 = '0.6', + propertyGate = '', + refreshHotkey = key('I',ALT_SHIFT), + showMenu = True, + sides = '', + sortFormat = '$PieceName$', + sortPieces = True, + sorting = 'alpha', + text = '', + tooltip = 'Show inventory of all pieces', + zoomOn = False): + return add_node(root,doc,MODULE+'Inventory', + canDisable = canDisable, + centerOnPiece = centerOnPiece, + disabledIcon = disabledIcon, + drawPieces = drawPieces, + foldersOnly = foldersOnly, + forwardKeystroke = forwardKeystroke, + groupBy = groupBy, + hotkey = hotkey, + icon = icon, + include = include, + launchFunction = launchFunction, + leafFormat = leafFormat, + name = name, + nonLeafFormat = nonLeafFormat, + pieceZoom = pieceZoom, + pieceZoom2 = pieceZoom2, + pieceZoom3 = pieceZoom3, + propertyGate = propertyGate, + refreshHotkey = refreshHotkey, + showMenu = showMenu, + sides = sides, + sortFormat = sortFormat, + sortPieces = sortPieces, + sorting = sorting, + text = text, + tooltip = tooltip, + zoomOn = zoomOn) + + + +# -------------------------------------------------------------------- +def add_map(root,doc, + mapName, + allowMultiple = 'false', + backgroundcolor = rgb(255,255,255), + buttonName = '', + changeFormat = '$message$', + color = rgb(0,0,0), + createFormat = '$pieceName$ created in $location$ *', + edgeHeight = '0', + edgeWidth = '0', + hideKey = '', + hotkey = key('M',ALT), + icon = '/images/map.gif', + launch = 'false', + markMoved = 'Always', + markUnmovedHotkey = '', + markUnmovedIcon = '/images/unmoved.gif', + markUnmovedReport = '', + markUnmovedText = '', + markUnmovedTooltip = 'Mark all pieces on this map as not moved', + moveKey = '', + moveToFormat = '$pieceName$ moves $previousLocation$ &rarr; $location$ *', + moveWithinFormat = '$pieceName$ moves $previousLocation$ &rarr; $location$ *', + showKey = '', + thickness = '3', + cls = MODULE+'Map'): + return add_node(root,doc,cls, + allowMultiple = allowMultiple, + backgroundcolor = backgroundcolor, + buttonName = buttonName, + changeFormat = changeFormat, + color = color, + createFormat = createFormat, + edgeHeight = edgeHeight, + edgeWidth = edgeWidth, + hideKey = hideKey, + hotkey = hotkey, + icon = icon, + launch = launch, + mapName = mapName, + markMoved = markMoved, + markUnmovedHotkey = markUnmovedHotkey, + markUnmovedIcon = markUnmovedIcon, + markUnmovedReport = markUnmovedReport, + markUnmovedText = markUnmovedText, + markUnmovedTooltip = markUnmovedTooltip, + moveKey = moveKey, + moveToFormat = moveToFormat, + moveWithinFormat = moveWithinFormat, + showKey = showKey, + thickness = thickness) + +# -------------------------------------------------------------------- +def add_widgetmap(root,doc, mapName,**attr): + return add_map(root,doc,mapName,cls=WIDGET+'WidgetMap',**attr) + +# -------------------------------------------------------------------- +def add_boardpicker(root,doc, + addColumnText = 'Add column', + addRowText = 'Add row', + boardPrompt = 'Select board', + slotHeight = 125, + slotScale = 0.2, + slotWidth = 350, + title = 'Choose Boards'): + return add_node(root,doc,MAP+'BoardPicker', + addColumnText = addColumnText, + addRowText = addRowText, + boardPrompt = boardPrompt, + slotHeight = slotHeight, + slotScale = slotScale, + slotWidth = slotWidth, + title = title) + +# -------------------------------------------------------------------- +def add_setup(root,picker,mapName,maxColumns,boardNames): + '''Add given boards in row-first up to maxColumns per row''' + s = add_node(root,picker,'setup') + col = 0 + row = 0 + lst = [f'{mapName}BoardPicker'] + for bn in boardNames: + lst.extend([bn,str(col),str(row)]) + col += 1 + if col >= maxColumns: + col = 0 + row += 1 + txt = r' '.join(lst) + add_text(root,s,txt) + +# -------------------------------------------------------------------- +def add_board(root,picker,name, + image = '', + reversible = False, + color = rgb(255,255,255), + width = 0, + height = 0): + return add_node(root,picker,PICKER+'Board', + image = image, + name = name, + reversible = reversible, + color = color, + width = width, + height = height) + +# -------------------------------------------------------------------- +def add_zoned(root,board): + return add_node(root,board,PICKER+'board.ZonedGrid') + +# -------------------------------------------------------------------- +def add_zonehighlighter(root,zoned): + return add_node(root,zoned,PICKER+'board.mapgrid.ZonedGridHighlighter') + +# -------------------------------------------------------------------- +def add_zone(root,zoned, + name = "", + highlightProperty = "", + locationFormat = "$gridLocation$", + path = "0,0;976,0;976,976;0,976", + useHighlight = False, + useParentGrid = False): + return add_node(root,zoned,PICKER+'board.mapgrid.Zone', + name = name, + highlightProperty = highlightProperty, + locationFormat = locationFormat, + path = path, + useHighlight = useHighlight, + useParentGrid = useParentGrid) + +# -------------------------------------------------------------------- +HEX_WIDTH = 88.50779626676963 +HEX_HEIGHT = 102.2 +def add_hexgrid(root,zone, + color = rgb(0,0,0), + cornersLegal = False, + dotsVisible = False, + dx = HEX_WIDTH, + dy = HEX_HEIGHT, + edgesLegal = False, + sideways = False, + snapTo = True, + visible = True, + x0 = 0, + y0 = 32, + cls = PICKER+'board.HexGrid'): + return add_node(root,zone,cls, + color = color, + cornersLegal = cornersLegal, + dotsVisible = dotsVisible, + dx = dx, + dy = dy, + edgesLegal = edgesLegal, + sideways = sideways, + snapTo = snapTo, + visible = visible, + x0 = x0, + y0 = y0) + +# -------------------------------------------------------------------- +def add_hexnumbering(root,grid, + color = rgb(255,0,0), + first = 'H', + fontSize = 24, + hDescend = False, + hDrawOff = 0, + hLeading = 1, + hOff = 0, + hType = 'A', + locationFormat = '$gridLocation$', + rotateText = 0, + sep = '', + stagger = True, + vDescend = False, + vDrawOff = 32, + vLeading = 0, + vOff = 0, + vType = 'N', + visible = True, + cls = PICKER+'board.mapgrid.HexGridNumbering'): + return add_node(root,grid,cls, + color = color, + first = first, + fontSize = fontSize, + hDescend = hDescend, + hDrawOff = hDrawOff, + hLeading = hLeading, + hOff = hOff, + hType = hType, + locationFormat = locationFormat, + rotateText = rotateText, + sep = sep, + stagger = stagger, + vDescend = vDescend, + vDrawOff = vDrawOff, + vLeading = vLeading, + vOff = vOff, + vType = vType, + visible = visible) + +# -------------------------------------------------------------------- +RECT_WIDTH = 80 +RECT_HEIGHT = 80 +def add_squaregrid(root,zone, + dx = RECT_WIDTH, + dy = RECT_HEIGHT, + edgesLegal = False, + x0 = 0, + y0 = int(0.4*RECT_HEIGHT), + **attr): + return add_hexgrid(root,zone,cls=PICKER+'board.SquareGrid', + dx = dx, + dy = dy, + edgesLegal = edgesLegal, + x0 = x0, + y0 = y0, + **attr) + +# -------------------------------------------------------------------- +def add_squarenumbering(root,grid, + hType = 'N', + **attr): + return add_hexnumbering(root,grid, + cls=PICKER+'board.mapgrid.SquareGridNumbering', + hType = hType, + **attr) + +# -------------------------------------------------------------------- +def add_regiongrid(root,zone,snapto=True,fontsize=9,visible=True): + # print(f'Make region grid visible: {visible}') + return add_node(root,zone,PICKER+'board.RegionGrid', + fontsize = fontsize, + snapto = snapto, + visble = visible) + +# -------------------------------------------------------------------- +def get_region_piece(root,grid,name,alsoPiece=True,piece=None,verbose=False): + if not alsoPiece: + return None, None + + # Find the parent map element by stepping up the tree + from functools import reduce + + map = reduce(lambda nn, _: None if nn is None else nn.parentNode, + range(5), grid) + if map is None or \ + map.tagName not in [MODULE+'Map',WIDGET+'WidgetMap']: + if map is None: + print(f' = Map not found from grid') + return None, None + + if piece is not None: + print(f' Using supplied piece') + return piece, map + + # Find the piece by searching from the top of the tree + piece = get_pieces(root,root).get(name,None) + # if piece is None: + # print(list(get_pieces(root,root).keys())) + if verbose: + print(f' Possible piece for region {name}: {piece}') + return piece, map + +# -------------------------------------------------------------------- +def check_region_name(grid,name): + post = '' + targ = name + same = 0 + regs = list(get_regions(grid).keys()) + poss = len([e for e in regs if e.startswith(name)]) + if poss == 0: + return name + + return name + f' {poss}' + # Loop over keys, sorted + # regs.sort() + # for r in regs: + # if targ == r: + # same += 1 + # targ = name + f' {same:02d}' + # print(f' Found region named {r} -> {targ}') + + return targ + +# -------------------------------------------------------------------- +def add_region(root,grid,name,originx,originy,gpid, + alsoPiece=True,piece=None,verbose=True): + # First thing is to check if we have a piece + piece, map = get_region_piece(root,grid,name,alsoPiece,piece,verbose) + if verbose: + print(f' Region {name} -> piece {piece}') + + + nam = check_region_name(grid,name) + if verbose: + print(f' Region {name} -> real name {nam}') + n = add_node(root,grid,PICKER+'board.Region', + name = nam, + originx = originx, + originy = originy) + if piece is None: + return n, gpid + + if verbose: + print(f' Add piece {name} to region') + _, gpid = add_atstart(root,map,name,piece, + location = nam, + useGridLocation = True, + owningBoard = map.getAttribute('mapName'), + x = 0, + y = 0, + gpid = gpid) + return n, gpid + + +# -------------------------------------------------------------------- +def add_stacking(root,map, + bottom = '40,0', + disabled = False, + down = '37,0', + exSepX = 6, + exSepY = 18, + top = '38,0', + unexSepX = 8, + unexSepY = 16, + up = '39,0'): + return add_node(root,map,MAP+'StackMetrics', + bottom = bottom, + disabled = disabled, + down = down, + exSepX = exSepX, + exSepY = exSepY, + top = top, + unexSepX = unexSepX, + unexSepY = unexSepY, + up = up) + +# -------------------------------------------------------------------- +def add_camera(root,map, + buttonText = '', + canDisable = False, + hotkey = '', + icon = '/images/camera.gif', + propertyGate = '', + tooltip = 'Save map as PNG image'): + return add_node(root,map,MAP+'ImageSaver', + buttonText = buttonText, + canDisable = canDisable, + hotkey = hotkey, + icon = icon, + propertyGate = propertyGate, + tooltip = tooltip) + +# -------------------------------------------------------------------- +def add_forwardtochatter(root,map): + return add_node(root,map,MAP+'ForwardToChatter') + +# -------------------------------------------------------------------- +def add_menudisplayer(root,map): + return add_node(root,map,MAP+'MenuDisplayer') + +# -------------------------------------------------------------------- +def add_mapcenterer(root,map): + return add_node(root,map,MAP+'MapCenterer') + +# -------------------------------------------------------------------- +def add_stackexpander(root,map): + return add_node(root,map,MAP+'StackExpander') + +# -------------------------------------------------------------------- +def add_piecemover(root,map): + return add_node(root,map,MAP+'PieceMover') + +# -------------------------------------------------------------------- +def add_selectionhighlighters(root,map): + return add_node(root,map,MAP+'SelectionHighlighters') + +# -------------------------------------------------------------------- +def add_keybufferer(root,map): + return add_node(root,map,MAP+'KeyBufferer') + +# -------------------------------------------------------------------- +def add_highlightlastmoved(root,map,color=rgb(255,0,0),enabled=True,thickness=2): + return add_node(root,map,MAP+'HighlightLastMoved', + color=color,enabled=enabled,thickness=thickness) + +# -------------------------------------------------------------------- +def add_counterviewer(root,map, + borderWidth = 0, + centerAll = False, + centerText = False, + combineCounterSummary = False, + counterReportFormat = '', + delay = 700, + description = '', + display = 'from top-most layer only', + emptyHexReportForma = '$LocationName$', + enableHTML = True, + extraTextPadding = 0, + fgColor = rgb(0,0,0), + fontSize = 9, + graphicsZoom = 1.0, + hotkey = key('\n',0), + layerList = '', + minDisplayPieces = 2, + propertyFilter = '', + showDeck = False, + showDeckDepth = 1, + showDeckMasked = False, + showMoveSelectde = False, + showNoStack = False, + showNonMovable = False, + showOverlap = False, + showgraph = True, + showgraphsingle = False, + showtext = False, + showtextsingle = False, + stretchWidthSummary = False, + summaryReportFormat = '$LocationName$', + unrotatePieces = False, + version = 3, + verticalOffset = 0, + verticalTopText = 5, + zoomlevel = 1.0): + return add_node(root,map,MAP+'CounterDetailViewer', + borderWidth = borderWidth, + centerAll = centerAll, + centerText = centerText, + combineCounterSummary = combineCounterSummary, + counterReportFormat = counterReportFormat, + delay = delay, + description = description, + display = display, + emptyHexReportForma = emptyHexReportForma, + enableHTML = enableHTML, + extraTextPadding = extraTextPadding, + fgColor = fgColor, + fontSize = fontSize, + graphicsZoom = graphicsZoom, + hotkey = hotkey, + layerList = layerList, + minDisplayPieces = minDisplayPieces, + propertyFilter = propertyFilter, + showDeck = showDeck, + showDeckDepth = showDeckDepth, + showDeckMasked = showDeckMasked, + showMoveSelectde = showMoveSelectde, + showNoStack = showNoStack, + showNonMovable = showNonMovable, + showOverlap = showOverlap, + showgraph = showgraph, + showgraphsingle = showgraphsingle, + showtext = showtext, + showtextsingle = showtextsingle, + stretchWidthSummary = stretchWidthSummary, + summaryReportFormat = summaryReportFormat, + unrotatePieces = unrotatePieces, + version = version, + verticalOffset = verticalOffset, + verticalTopText = verticalTopText, + zoomlevel = zoomlevel) + +# -------------------------------------------------------------------- +def add_globalmap(root,map, + buttonText = '', + color = rgb(255,0,0), + hotkey = key('O',CTRL_SHIFT), + icon = '/images/overview.gif', + scale = 0.2, + tooltip = 'Show/Hide overview window'): + return add_node(root,map,MAP+'GlobalMap', + buttonText = buttonText, + color = color, + hotkey = hotkey, + icon = icon, + scale = scale, + tooltip = 'Show/Hide overview window') + +# -------------------------------------------------------------------- +def add_zoomer(root,map, + inButtonText = '', + inIconName = '/images/zoomIn.gif', + inTooltip = 'Zoom in', + outButtonText = '', + outIconName = '/images/zoomOut.gif', + outTooltip = 'Zoom out', + pickButtonText = '', + pickIconName = '/images/zoom.png', + pickTooltip = 'Select Zoom', + zoomInKey = key('=',CTRL_SHIFT), + zoomLevels = [0.2,0.25,0.333,0.4,0.5,0.555,0.625,0.75,1.0,1.25,1.6], + zoomOutKey = key('-'), + zoomPickKey = key('='), + zoomStart = 3): + '''Zoom start is counting from the back (with default zoom levels, + and zoom start, the default zoom is 1''' + lvls = ','.join([str(z) for z in zoomLevels]) + return add_node(root,map,MAP+'Zoomer', + inButtonText = inButtonText, + inIconName = inIconName, + inTooltip = inTooltip, + outButtonText = outButtonText, + outIconName = outIconName, + outTooltip = outTooltip, + pickButtonText = pickButtonText, + pickIconName = pickIconName, + pickTooltip = pickTooltip, + zoomInKey = zoomInKey, + zoomLevels = lvls, + zoomOutKey = zoomOutKey, + zoomPickKey = zoomPickKey, + zoomStart = zoomStart) + +# -------------------------------------------------------------------- +def add_hidepieces(root,map, + buttonText = '', + hiddenIcon = '/images/globe_selected.gif', + hotkey = key('O'), + showingIcon = '/images/globe_unselected.gif', + tooltip = 'Hide all pieces on this map'): + return add_node(root,map,MAP+'HidePiecesButton', + buttonText = buttonText, + hiddenIcon = hiddenIcon, + hotkey = hotkey, + showingIcon = showingIcon, + tooltip = tooltip) +# -------------------------------------------------------------------- +def add_masskey(root,map, + name, + buttonHotkey, + hotkey, + buttonText = '', + canDisable = False, + deckCount = '-1', + filter = '', + propertyGate = '', + reportFormat = '', + reportSingle = False, + singleMap = True, + target = 'MAP|false|MAP|||||0|0||true|Selected|true|EQUALS', + tooltip = '', + icon = ''): + '''Default targets are selected units''' + return add_node(root,map,MAP+'MassKeyCommand', + name = name, + buttonHotkey = buttonHotkey, # This hot key + hotkey = hotkey, # Target hot key + buttonText = buttonText, + canDisable = canDisable, + deckCount = deckCount, + filter = filter, + propertyGate = propertyGate, + reportFormat = reportFormat, + reportSingle = reportSingle, + singleMap = singleMap, + target = target, + tooltip = tooltip, + icon = icon) + + +# -------------------------------------------------------------------- +def add_flare(root,map, + circleColor = rgb(255,0,0), + circleScale = True, + circleSize = 100, + flareKey = 'keyAlt', + flareName = 'Map Flare', + flarePulses = 6, + flarePulsesPerSec = 3, + reportFormat = ''): + return add_node(root,map,MAP+'Flare', + circleColor = circleColor, + circleScale = circleScale, + circleSize = circleSize, + flareKey = flareKey, + flareName = flareName, + flarePulses = flarePulses, + flarePulsesPerSec = flarePulsesPerSec, + reportFormat = '') + +# -------------------------------------------------------------------- +def add_atstart(root,map,name,*pieces, + location = '', + useGridLocation = True, + owningBoard = '', + x = 0, + y = 0, + gpid = None): + '''Pieces are existing PieceSlot elements''' + a = add_node(root,map,MODULE+'map.SetupStack', + name = name, + location = location, + owningBoard = owningBoard, + useGridLocation = useGridLocation, + x = x, + y = y) + # copy pieces here + for p in pieces: + c = p.cloneNode(True) + a.appendChild(c) + if gpid is not None: + # Update gpid in element + c.setAttribute('gpid',str(gpid)) + # Update gpid in traits state + traits = get_piece_parts(p.childNodes[0].nodeValue) + for t in traits: + code = t['def'] + stat = t['state'] + if code[0] == 'piece': + stat[3] = gpid + # Put back the traits + c.childNodes[0].nodeValue = dicts_to_piece(traits) + + gpid += 1 + + return a, gpid + +# -------------------------------------------------------------------- +def add_pieceslot(root,elem, + entryName, + gpid, + code, + height=72, + width=72, + icon = ''): + p = add_node(root,elem,WIDGET+'PieceSlot', + entryName = entryName, + gpid = gpid, + height = height, + width = width, + icon = icon) + add_text(root,p,code) + return p + +# -------------------------------------------------------------------- +def add_prototypes(root,elem,*defs): + '''Defs are existing definition elements''' + p = add_node(root,elem,MODULE+'PrototypesContainer') + + for d in defs: + c = d.cloneNode(True) + p.appendChild(c) + + return p + +# -------------------------------------------------------------------- +def add_prototype(root,elem,name,code,description=''): + d = add_node(root,elem,MODULE+'PrototypeDefinition', + name = name, + description = description) + add_text(root,d,code) + return d + +# -------------------------------------------------------------------- +def add_piecewindow(root,elem,name, + defaultWidth = 0, + hidden = False, + hotkey = key('C',ALT), + scale = 1., + text = '', + tooltip = 'Show/hide piece window', + icon = '/images/counter.gif'): + return add_node(root,elem,MODULE+'PieceWindow', + name = name, + defaultWidth = defaultWidth, + hidden = hidden, + hotkey = hotkey, + scale = scale, + text = text, + tooltip = tooltip, + icon = icon) + +# -------------------------------------------------------------------- +def add_tabs(root,elem,entryName): + return add_node(root,elem,WIDGET+'TabWidget',entryName=entryName) + +# -------------------------------------------------------------------- +def add_list(root,elem, + entryName, + height = 0, + width = 0, + scale = 1., + divider = 100): + return add_node(root,elem,WIDGET+'ListWidget', + entryName = entryName, + height = height, + width = width, + scale = scale, + divider = divider) + +# -------------------------------------------------------------------- +def add_panel(root,elem, + entryName, + fixed = False, + nColumns = 1, + vert = False): + return add_node(root,elem,WIDGET+'PanelWidget', + entryName = entryName, + fixed = fixed, + nColumns = nColumns, + vert = vert) + +# -------------------------------------------------------------------- +def add_mapwidget(root,elem,entryName=''): + return add_node(root,elem,WIDGET+'MapWidget',entryName=entryName) + +# -------------------------------------------------------------------- +def add_chartwindow(root,elem, + name, + hotkey = key('A',ALT), + description = '', + text = '', + tooltip = 'Show/hide Charts', + icon = '/images/chart.gif'): + return add_node(root,elem,MODULE+'ChartWindow', + name = name, + hotkey = hotkey, + description = description, + text = text, + tooltip = tooltip, + icon = icon) + +# -------------------------------------------------------------------- +def add_chart(root,elem, + chartName, + fileName, + description = ''): + return add_node(root,elem,WIDGET+'Chart', + chartName = chartName, + description = description, + fileName = fileName) + +# -------------------------------------------------------------------- +def add_dice(root,elem, + addToTotal = 0, + canDisable = False, + hotkey = key('6',ALT), + icon = '/images/die.gif', + keepCount = 1, + keepDice = False, + keepOption = '>', + lockAdd = False, + lockDice = False, + lockPlus = False, + lockSides = False, + nDice = 1, + nSides = 6, + name = '1d6', + plus = 0, + prompt = False, + propertyGate = '', + reportFormat = '** $name$ = $result$ *** &lt;$PlayerName$&gt;', + reportTotal = False, + sortDice = False, + text = '1d6', + tooltip = 'Roll a 1d6'): + return add_node(root,elem,MODULE+'DiceButton', + addToTotal = addToTotal, + canDisable = canDisable, + hotkey = hotkey, + icon = icon, + keepCount = keepCount, + keepDice = keepDice, + keepOption = keepOption, + lockAdd = lockAdd, + lockDice = lockDice, + lockPlus = lockPlus, + lockSides = lockSides, + nDice = nDice, + nSides = nSides, + name = name, + plus = plus, + prompt = prompt, + propertyGate = propertyGate, + reportFormat = reportFormat, + reportTotal = reportTotal, + sortDice = sortDice, + text = text, + tooltip = tooltip) + +# ==================================================================== +def enc_def(args,term=False): + '''Encode a piece (decorator) definition + + Parameters + ---------- + args : list + List of fields + term : bool + If true, add terminating ';' + + Returns + ------- + code : str + The encoded definition + ''' + return ';'.join([str(e).lower() if isinstance(e,bool) else str(e) + for e in args])+(';' if term else '') + +# -------------------------------------------------------------------- +def layer_trait(images, + newNames = None, + activateName = 'Activate', + activateMask = CTRL, + activateChar = 'A', + increaseName = 'Increase', + increaseMask = CTRL, + increaseChar = '[', + decreaseName = '', + decreaseMask = CTRL, + decreaseChar = ']', + resetName = '', + resetKey = '', + resetLevel = 1, + under = False, + underXoff = 0, + underYoff = 0, + loop = True, + name = '', + description = '', + randomKey = '', + randomName = '', + follow = False, + expression = '', + first = 1, + version = 1, # 1:new, 0:old + always = 'true', + activateKey = key('A'), + increaseKey = key('['), + decreaseKey = key(']'), + scale = 1.): + '''Create a layer trait (VASSAL.counter.Embellishment) + + Parameters + ---------- + main : dict + Main image dictionary + flipped : dict + Flipped image dictionary + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state + ''' + if newNames is None: + newNames = ['']*len(images) + args = ['emb2', # Code + activateName, activateMask, activateChar, # ACTIVATE ; MASK ; KEY + increaseName, increaseMask, increaseChar, + decreaseName, decreaseMask, decreaseChar, + resetName, resetKey, resetLevel, + under, underXoff, underYoff, + ','.join(images), + ','.join(newNames), + loop, + name, + randomKey, randomName, + follow, expression, + first, + version, + always, + activateKey, + increaseKey, + decreaseKey, + description, + scale ] + stat = '1' # CURRENT LEVEL + return enc_def(args), stat + +# -------------------------------------------------------------------- +def prototype_trait(name): + '''Create a prototype trait (VASSAL.counter.UsePrototype) + + Parameters + ---------- + family : str + Side in game + + Return + ------ + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['prototype', name ] + stat = '' # State is nothing + return enc_def(args), stat + +# -------------------------------------------------------------------- +def mark_trait(key,value): + '''Create a marker trait (VASSAL.counter.Marker) + + Parameters + ---------- + family : str + Side in game + + Return + ------ + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['mark', key ] + stat = value # State is nothing + return enc_def(args), stat + +# -------------------------------------------------------------------- +def report_trait(*keys, + nosuppress = True, + description = '', + report = '$location$: $newPieceName$ $menuCommand$ *', + cyclekeys = '', + cyclereps = ''): + '''Create a report trait (VASSAL.counters.ReportActon) + + Parameters + ---------- + *keys : tuple of str + The keys to report actions for + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + esckeys = ','.join([k.replace(',',r'\,') for k in keys]) + esccycl = ','.join([k.replace(',',r'\,') for k in cyclekeys]) + escreps = ','.join([k.replace(',',r'\,') for k in cyclereps]) + args = ['report', # CODE + esckeys, # ESCAPED KEYS (commas escaped) + report, # REPORT + esccycl, # CYCLE KEYS (commas escaped) + escreps, # CYCKE REPORTS (commas escaped) + description, # DESCRIPTION + nosuppress] # NOSUPPRESS + stat = '-1' # CYCLE STATE + return enc_def(args), stat + +# -------------------------------------------------------------------- +def moved_trait(image='moved.gif', + xoff = 36, + yoff = -38, + name = 'Mark Moved', + key = key('M')): + '''Create a moved trait (VASSAL.counters.MovementMarkable) + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['markmoved', # CODE + image, # IMAGE + xoff, yoff, # XOFF ; YOFF + name, # MENU + key, # KEY, MODIFIER + ''] # ? + stat = False # MOVED? + return enc_def(args), stat + +# -------------------------------------------------------------------- +def trail_trait(key = key('T'), + name = 'Movement Trail', + localVisible = False, + globalVisible = False, + radius = 10, + fillColor = rgb(255,255,255), + lineColor = rgb(0,0,0), + activeOpacity = 100, + inactiveOpacity = 50, + edgesBuffer = 20, + displayBuffer = 30, + lineWidth = 1, + turnOn = '', + turnOff = '', + reset = '', + description = ''): + ''' Create a movement trail trait ( VASSAL.counters.Footprint) + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state + ''' + args = ['footprint', # CODE + key, # ENABLE KEY + name, # MENU + localVisible, # LOCAL VISABLE + globalVisible, # GLOBAL VISABLE + radius, # RADIUS + fillColor, # FILL COLOR + lineColor, # LINE COLOR + activeOpacity, # ACTIVE OPACITY + inactiveOpacity, # INACTIVE OPACITY + edgesBuffer, # EDGES BUFFER + displayBuffer, # DISPLAY BUFFER + lineWidth, # LINE WIDTH + turnOn, # TURN ON KEY + turnOff, # TURN OFF KEY + reset, # RESET KEY + description] # DESC + stat = [False, # GLOBAL VIS + '', # MAP + 0] # POINTS (followed by [; [X,Y]*] + return enc_def(args), enc_def(stat) + +# -------------------------------------------------------------------- +def delete_trait(name = 'Delete', key = key('D')): + '''Create a delete trait (VASSAL.counters.Delete) + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['delete', name, key, ''] + stat = '' # Nothing + return enc_def(args), stat + +# -------------------------------------------------------------------- +def sendto_trait(mapName, + boardName, + name = '', + key = key('E'), + restoreName = 'Restore', + restoreKey = key('R'), + x = 200, + y = 200, + xidx = 0, + yidx = 0, + xoff = 1, + yoff = 1, + description = '', + destination = 'L', + zone = '', + region = '', + expression = '', + position = ''): + '''Create a send to trait (VASSAL.counter.SendToLocation) + + Parameters + ---------- + side : str + Sub-map to move to + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['sendto', # CODE + name, # NAME + key, # KEY , MODIFIER + mapName, # MAP + boardName, # BOARD + x, y, # X ; Y + restoreName, # BACK + restoreKey, # KEY , MODIFIER + xidx, yidx, # XIDX ; YIDX + xoff, yoff, # XOFF ; YOFF + description, # DESC + destination, # DEST + zone, # ZONE + region, # REGION + expression, # EXPRESSION + position ] # GRIDPOS + stat = ['', # BACKMAP + '', # X + ''] # Y + return enc_def(args), enc_def(stat) + +# -------------------------------------------------------------------- +def basic_trait(name, + filename, # Can be empty + gpid, # Can be empty + cloneKey='', # Deprecated + deleteKey=''):# Deprecated + '''Create a basic unit (VASSAL.counters.BasicPiece) + + Parameters + ---------- + main : dict + Information + gpid : int + Piece global identifier + image : bool + If true, add image + + Returns + ------- + code : str + Encoded trait + stat : str + Encoded state (empty string) + ''' + args = ['piece', # CODE + cloneKey, # CLONEKEY + deleteKey, # DELETEKEY + filename, # IMAGE + name] # NAME + stat = ['null', # MAPID (possibly 'null') + 0, # X + 0, # Y + gpid, # GLOBAL PIECE ID + 0] # PROPERTY COUNT (followed by [; KEY; VALUE]+) + return enc_def(args), enc_def(stat) + +# -------------------------------------------------------------------- +def enc_parts(*parts): + '''Encode parts of a full piece definition + + Each trait (VASSAL.counter.Decorator, VASSAL.counter.BasicPiece) + definition or state is separated by a litteral TAB character. + Beyond the first TAB separator, additional escape characters + (BACKSLAH) are added in front of the separator. This is to that + VASSAL.utils.SequenceDecoder does not see consequitive TABs as a + single TAB. + + Parameters + ---------- + parts : tuple + The various trait definitions or states + + Returns + ------- + code : str + The encoded piece + ''' + ret = '' + sep = r' ' + for i, p in enumerate(parts): + if i != 0: + ret += '\\'*(i-1) + sep + ret += str(p) + + return ret + +# -------------------------------------------------------------------- +def add_piece(typ, state): + '''Create and add piece command (VASSAL.command.AddPiece) + + Each part is separated by a SLASH ('/'). The first part is the + command type (PLUS '+') to perform. Second is the IDENTIFIER, + possibly 'null'. Then comes the fully encoded type of the piece, + followed by the state of the piece (also fully encoded). + + Parameters + ---------- + typ : str + Encoded piece definition + state : str + Encoded state definition + + Returns + ------- + cmd : str + The add command encoded + ''' + args = ['+', # Type + 'null', # IDENTIFER + typ, # DEFINITION + state] # STATE + return '/'.join(args) + +# -------------------------------------------------------------------- +def add_proto(typ,state): + '''Create an add prototype command. This is the same as 'add_piece' + + Parameters + ---------- + typ : str + Encoded piece definition + state : str + Encoded state definition + + Returns + ------- + cmd : str + The add command encoded + ''' + return add_piece(typ,state) + + +# -------------------------------------------------------------------- +def add_proto_code(decs): + typs = [d[0] for d in decs] + stts = [d[1] for d in decs] + typ = enc_parts(*typs) + stt = enc_parts(*stts) + + return add_proto(typ,stt) + +# ==================================================================== +# +# Below specific to the export app +# +# ==================================================================== +def get_bb(buffer): + '''Get bounding box of image + + Parameters + ---------- + buffer : bytes + The image bytes + + Returns + ------- + ulx, uly, lrx, lry : tuple + The coordinates of the bounding box + ''' + from PIL import Image + from io import BytesIO + + with Image.open(BytesIO(buffer)) as img: + bb = img.getbbox() + + return bb + +# ==================================================================== +def piece_body(family,main,flipped,gpid): + '''Create an full add piece command from the side, image, and ID + information. This adds (in reverse order) + + - BasicPiece + - Side prototype + - Flip layer (if 'flipped' is not none) + + Parameters + ---------- + family : str + Side in the game + main : dict + Main image information + flipped : dict + Flipped image information, possibly None + gpid : int + Global piece identifier + + Returns + ------- + cmd : str + The command to add the piece + ''' + # Create the layer, prototype, and basic piece traits + decs = [] + if flipped is not None: + imgs = [ main['filename'], flipped['filename'] ] + decs.extend([ layer_trait(images=imgs, + newNames=['','Reduced +'], + activateName = '', + decreaseName = '', + increaseName = 'Flip', + increaseKey = key('F'), + decreaseKey = '', + name='Step'), + report_trait(key('F')) ]) + for m in main.get('mains',[]): + decs.append(prototype_trait(m + ' prototype')) + ech = main.get('echelon',None) + cmd = main.get('command',None) + if ech is not None: decs.append(prototype_trait(ech + ' prototype')) + if cmd is not None: decs.append(prototype_trait(cmd + ' prototype')) + + decs.extend([ prototype_trait(family+' prototype'), + basic_trait(main['name'], main['filename'],gpid) + ]) + + typs = [d[0] for d in decs] + stts = [d[1] for d in decs] + typ = enc_parts(*typs) + stt = enc_parts(*stts) + + return add_piece(typ,stt) + +# -------------------------------------------------------------------- +def proto_body(family): + '''Create an full add prototype com from the side information. + This adds (in reverse order) + + - An empty BasicPiece + - An eliminate (or sendto) trait + - A delete trait + - A mark moved trait + - A move trail trait + + Parameters + ---------- + family : str + Side in the game + + Returns + ------- + cmd : str + The command to add the piece + ''' + # Dummy image + decs = [ report_trait(key('E'),key('R'),key('M')), + moved_trait(), + trail_trait(), + delete_trait(), + sendto_trait('DeadMap',family+' pool','Eliminate',key('E'), + 'Restore',key('R'),description="Eliminate unit"), + mark_trait('Faction',family), + basic_trait('','','') ] + typs = [d[0] for d in decs] + stts = [d[1] for d in decs] + typ = enc_parts(*typs) + stt = enc_parts(*stts) + + return add_proto(typ,stt) + + +# -------------------------------------------------------------------- +def add_splash(root,doc,categories,title='',verbose=False): + '''Add an about page + + Parametersg + ---------- + root : xml.dom.minidom.Document + Root of the document + doc : xml.dom.minidom.Element + The documentation element + categories : dict + Catalog of images + title : str + Title of the game + ''' + fronts = categories.get('front',{}).get('all',[]) + front = list(fronts.values())[0] if len(fronts) > 0 else None + if front is None: + return + + if verbose: + print(f'Adding about page with {title}') + + add_about(root,doc, f'About {title}', fileName = front['filename']) + +# -------------------------------------------------------------------- +def add_rules(root,doc,zipfile,rules,verbose=False): + '''Add rules to the module + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + doc : xml.dom.minidom.Element + The documentation element + zipfile : zipfile.ZipFile + The module archive + rules : str + File name of rules (PDF) + ''' + if rules is None or rules == '': + return + + if verbose: + print('Adding rules PDF to module') + + zipfile.write(rules,'rules.pdf') + + add_pdffile(root,doc,title='Show rules',pdfFile='rules.pdf') + +# -------------------------------------------------------------------- +def add_notes(root,doc,zipfile,title,version,sides,pdffile,infofile,rules, + verbose=False): + '''Add rules to the module + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + doc : xml.dom.minidom.Element + The documentation element + zipfile : zipfile.ZipFile + The module archive + sides : list + Sides in the game + pdffile : str + The images PDF + infofile : str + The images information + rules : str + File name of rules (PDF) + ''' + factions = "".join([f'
  • {s}
  • ' for s in sides]) + notes = f''' + + +

    Draft VASSAL module of {title} (Version {version})

    +

    + This is a draft VASSAL module of {title} generated from +

    +
      +
    • images in {pdffile}, and
    • +
    • information in {infofile}
    • +
    +

    + both generated by LaTeX using the wargame [1] package, and + processed by the Python script wgexport.py from that + package. +

    +

    + The module is not complete and the developer should edit + the module as needed in the VASSAL module editor. +

    +

    + [1] https://gitlab.com/wargames_tex/wargame_tex +

    +

    Content of the module

    +

    + The wgexport.py Python script has identified the + factions of the game to be +

    +
      + '''+factions+f''' +
    +

    + and generated prototype pieces for these (along with possible + non-faction pieces. The script also generated a map ("dead map") + that contains boards for each faction and is meant to store + eliminated units ("<faction> pool"). These pools have a + generic shape and colour, and the developer should take care to + correct these as needed. +

    +

    + Boards of the game present in the {pdffile} and {infofile} files + have been generated. Each board has a single zone in it that + encompasses the full board, and a hex grid is added to that + zone. The module developer should adjust the zone and embedded + hex grid according to the actual map, using the VASSAL module + editor. The hex grid (as well as coordinates) is drawn by + default so as to make this obvious to the developer. The hex + sizes should be correct, and mainly the offset needs to be + adjusted. +

    +

    + Images marked as OOBs have also been added as maps to the + module. These also have a single zone with a rectangular grid + imposed in it. This grid, and the grid coordinates are drawn by + default, so it is easier to see and to remember to adjust it. The + module developer should adjust this, possibly adding zones, so + that it matches up with the graphics. The developer can add + units to the OOB via 'At-start' stacks in the VASSAL editor. +

    +

    + All pieces identified by {infofile} and present in {pdffile} have + been generated. Double sided pieces (identified by images which + also has a suffix-"flipped" image) are created as such. +

    +

    + Charts identified by the {infofile} and {pdffile} have been added + to the module. The are added as separate (pop-up) frames, but + the module developer can change this in the VASSAL module editor. +

    +

    + If the {infofile} and {pdffile} identified a front page, then that + has been added to module as the splash screen. +

    +

    + If a PDF rules file ({rules}) was passed to the Python script, + then that has been included in the module and is accessible from + the "Help" menu. +

    +

    After finalising the module

    +

    + After the developer has finalised the module (added more pieces, + fixed board zones a and grids, add in more commands), then this + Help menu entry should be deleted. +

    + + + ''' + if version.lower() == 'draft': + if verbose: + print(f' Adding draft notes {version}') + zipfile.writestr('help/notes.html',notes) + add_helpfile(root,doc,title='Draft Module notes', + fileName='help/notes.html') + + keys = f''' + + +

    {title} (Version {version}) Key bindings

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Key Where Effect
    Alt-A-Show the charts panel
    Alt-B-Show the OOBs
    Alt-C-Show the counters panel
    Alt-E-Show the eliminated units
    Alt-I-Show/refresh inventory window
    Alt-M-Show map
    Alt-T-Increase turn track
    Alt-Shift-T-Decrease turn track
    Alt-6-Roll the dice
    Ctrl-DBoard,CounterDelete selected counters
    Ctrl-EBoard,CounterEliminate selected counters
    Ctrl-FBoard,CounterFlip selected counters
    Ctrl-MBoard,CounterToggle "moved" markers on selected counters
    Ctrl-OBoardHide/show counters
    Ctrl-RBoard,CounterRestore unit (from dead pool)
    Ctrl-TBoard,CounterToggle move trail
    Ctrl-+BoardZoom in
    Ctrl--BoardZoom out
    Ctrl-=BoardSelect zoom
    Ctrl-Shift-OBoardShow overview map
    ←,→,↑↓BoardScroll board left, right, up, down (slowly)
    PnUp,PnDnBoardScroll board up/down (fast)
    Ctrl-PnUp,Ctrl-PnDnBoardScroll board left/right (fast)
    Mouse-scroll up/downBoardScroll board up//down
    Shift-Mouse-scroll up/downBoardScroll board right/leftown
    Ctrl-Mouse-scroll up/downBoardZoom board out/in
    Mouse-2BoardCentre on mouse
    + + + ''' + if verbose: + print(f'Add key bindings help file') + zipfile.writestr('help/keys.html',keys) + add_helpfile(root,doc,title='Key bindings', + fileName='help/keys.html') + + return notes + +# -------------------------------------------------------------------- +def add_tut(root,doc,zipfile,tutorial,verbose=False): + if tutorial is None: + return None + + if verbose: + print(f'Adding tutorial {tutorial}') + zipfile.write(tutorial,'tutorial.vlog') + + return add_tutorial(root,doc,name='Tutorial',logfile='tutorial.vlog') + +# -------------------------------------------------------------------- +def add_basics_to_map(root,map,**attr): + '''Add a map to the document + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + parent : xml.dom.minidom.Element + The parent element + button : str + Button text + name : str + Name of the map + stacking : bool + Whether to enable stacking + + Returns + ------- + map : xml.dom.minidom.Element + The map element + bpicker : xml.dom.minidom.Element + The board picker in map + ''' + stacking = add_stacking(root,map) + add_camera (root,map) + add_forwardtochatter (root,map) + add_menudisplayer (root,map) + add_mapcenterer (root,map) + add_stackexpander (root,map) + add_piecemover (root,map) + add_keybufferer (root,map) + add_selectionhighlighters(root,map) # TBD + add_highlightlastmoved (root,map) + add_zoomer (root,map) + + return stacking + +# -------------------------------------------------------------------- +def add_elim(root,game,sides,categories,verbose=False): + '''Add an eliminated map + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The parent element + sides : list of str + List of sides in the game + ''' + if verbose: + print(' Adding eliminated map and boards') + + if sides is None or len(sides) == 0: + return + + map = add_map(root,game,'DeadMap', + buttonName = '', #'Eliminated units', + icon = '/images/playerAway.gif', + markMoved = 'Never', + launch = True, + allowMultiple = True, + hotkey=key('E',ALT)) + bpicker = add_boardpicker(root,map, + slotHeight = 400, + slotWidth = 400) + add_setup(root,bpicker,'DeadMap',2,[s+' pool' for s in sides]) + add_masskey(root,map,'Restore', + key('R'), + key('R'), + icon = '/images/Undo16.gif', + tooltip = "Restore selected units") + + for i,s in enumerate(sides): + if verbose: + print(f' Adding {s} pool') + + color = [0,0,0,64] + color[i % 3] = 255 + + w = 400 + h = 400 + c = ','.join([str(c) for c in color]) + dimg = categories.get('pool',{}).get('all',{}).get(s,None) + img = '' + + if dimg: + bb = get_bb(dimg['img']) + w = bb[2] - bb[0] + h = bb[3] - bb[1] + c = '' + img = dimg['filename'] + if verbose: + print(f' Using image provided by the user: {img}') + + add_board(root,bpicker,f'{s} pool', + image = img, + color = c, + width = w, + height = h) + + add_basics_to_map(root,map) + +# -------------------------------------------------------------------- +def add_hex_grid(root,parent,color=rgb(255,0,0),visible=True,grid=True): + '''Add a hex grid, either to a zone or to the multizone container''' + + hexes = add_hexgrid(root,parent,color=color,visible=visible, + edgesLegal=True) + if not grid: + return hexes + + add_hexnumbering(root,hexes, + color = color, + hType = 'A', + hOff = -1, + vType = 'N', + vOff = -1, + visible = visible) + + return hexes + +# -------------------------------------------------------------------- +def get_picture_info(picture,name,width,height,verbose): + ''' + Returns + ------- + hex_width, hex_height : float, float + Scale hex width + scx, scy : float, float, float, float + Scale to image and picture (x,y) + rot90 : bool + True if rotated +/-90 degrees + tran : callable + Translation function + ''' + if picture is None: + print(f'WARNING: No Tikz picture information.' + f"Are you sure you used the `[zoned]' option for the " + f"tikzpicture environment of {name}?") + f = lambda x,y: (x,y) + return HEX_WIDTH,HEX_HEIGHT,1,1,False,f + + # Get picture bounding box + tll = picture['lower left'] + tur = picture['upper right'] + # Get picture transformation + pa = picture['xx'] + pb = picture['xy'] + pc = picture['yx'] + pd = picture['yy'] + # Get picture offset (always 0,0?) + pdx = picture['dx'] + pdy = picture['dy'] + # Define picture global transformation + pr = lambda x,y: (pa * x + pc * y, pb * x + pd * y) + # Globally transform (rotate) picture bounding box + pll = pr(*tll) + pur = pr(*tur) + # Calculate widht, height, and scaling factors + pw = pur[0] - pll[0] + ph = pur[1] - pll[1] + scw = width / pw + sch = height / ph + # Extract picture scales and rotation + # Courtesy of + # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix + from math import sqrt, atan2, degrees, isclose + psx = sqrt(pa**2 + pb**2) # * (-1 if pa < 0 else 1) + psy = sqrt(pc**2 + pd**2) # * (-1 if pd < 0 else 1) + prt = degrees(atan2(pc,pd)) + if not any([isclose(abs(prt),a) for a in [0,90,180,270]]): + raise RuntimeException('Rotations of Tikz pictures other than ' + '0 or +/-90,+/- 180, or +/-270 not supported. ' + 'found {prt}') + rot90 = isclose(abs(prt),90) + if any([isclose(prt,a) for a in [90,270,180,-180]]): + print(f'WARNING: rotations by {prt} not fully supported') + + hex_width = psx * HEX_WIDTH + hex_height = psy * HEX_HEIGHT + if verbose: + print(f' Picture transformations: {pa},{pb},{pc},{pd}\n' + f' Scale (x,y): {psx},{psy}\n' + f' Rotation (degrees): {prt}') + + # When translating the Tikz coordinates, it is important to note + # that the Tikz y-axis point upwards, while the picture y-axis + # point downwards. This means that the upper right corner is at + # (width,0) and the lower left corner is at (0,height). + def tranx(x,off=-pll[0]): + # print(f'x: {x} + {off} -> {x+off} -> {int(scw*(x+off))}') + return int(scw * (x + off)+.5) + def trany(y,off=-pur[1]): + # print(f'y: {y} + {off} -> {y+off} -> {-int(sch*(y+off))}') + return -int(sch * (y + off)+.5) + tran = lambda x,y : (tranx(x), trany(y)) + + return hex_width, hex_height, scw * psx, sch * psy, rot90, tran + +# -------------------------------------------------------------------- +def get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90, + labels,coords,targs,nargs): + targs['dx'] = hex_width + targs['dy'] = hex_height + if labels is not None: + labmap = { + 'auto': { + 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' }, + 'auto=numbers' : { + 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' }, + 'auto=alpha column': { + 'hLeading': 0, 'vLeading': 0, 'hType': 'A', 'vType': 'N', + 'hOff': -1 }, + 'auto=alpha 2 column': {# Not supported + 'hLeading': 1, 'vLeading': 1, 'hType': 'A', 'vType': 'N' }, + 'auto=inv y x plus 1': { + 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N', + 'hOff': 0, 'vDescend': True }, + 'auto=x and y plus 1': { + 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N', + 'hOff': 0, 'vOff': 0 } + } + for l in labels.split(','): + nargs.update(labmap.get(l,{})) + + # Field/Direction | Normal | Rotated | + # ----------------|--------|---------| + # hOff | column | column | + # vOff | row | row | + # hDescend | column | row | True, incr to left + # vDescend | row | column | True, incr upward + # First='H' | column | column | + + # In wargame offset=0 means that the first coordinates are 0,0. + # But offset 0,0 in VASSAL means start at 1,1 + horiz = 'column' + vert = 'row' + nargs['vOff'] = nargs.get('vOff',0)-coords[vert] ['offset']-1 + nargs['hOff'] = nargs.get('hOff',0)-coords[horiz]['offset']-1 + + # In VASSAL, vDesend=False means rows increase downward, + # while in wargame, factor=-1 means rows increase downward + horiz = 'row' if rot90 else 'column' + vert = 'column' if rot90 else 'row' + nargs['hDescend'] = coords[horiz]['factor'] != 1 + nargs['vDescend'] = coords[vert] ['factor'] != -1 # flipped y + targs['edgesLegal'] = True + + # Check for inversed columns + inv_col = coords['column']['factor'] == -1 + ell = hex_width if inv_col else 0 + + # Some special stuff in case of 90 degree rotation + if rot90: + targs.update({'sideways': True}) + nargs['hOff'] -= 1 + nargs['hDescend'] = not nargs['hDescend'] + if inv_col: + nargs['hOff'] += 3 + + margin = i.get('board frame',{}).get('margin',0) + mx = scx * margin + my = scy * margin + if inv_col: mx = 0 # Bug in wargame? + + # Grid offset is defined relative to the full image, + # not the zone: + # + # X,Y offset: The horizontal and vertical position of + # the center of the first hex of the grid. + # + # That is, (x,y)=(0,0) is in the top-left corner of the + # image, while in TikZ it is in the bottom left corner. + # This means we shift by the boudning box offsets plus + # some stuff to align with the zone. + # + # In case of inversed columns, we need to add some extra stuff. + x0, y0 = llx-hex_width/3 + ell + mx, ury + my + + # Rotated? + if rot90: + x0, y0 = ury+2*hex_width/3 + ell + mx, llx + my + + # Below should be double-checked. + + if not rot90: + if coords.get('column',{}).get('top short','') == 'isodd' \ + and coords.get('column',{}).get('offset',0) == -1: + y0 -= hex_width/2 + elif coords.get('column',{}).get('top short','') == 'iseven' \ + and coords.get('column',{}).get('offset',-1) == 0: + y0 -= hex_width/2 + + targs.update({'x0': int(x0),'y0': int(y0)}) + +# -------------------------------------------------------------------- +def get_rectparams(i,llx,ury,width,height,rot90,targs,nargs): + targs['dx'] = width + targs['dy'] = height + targs['x0'] = int(llx - width/2) + targs['y0'] = int(ury + height/2) + targs['color'] = rgb(0,255,0) + nargs['color'] = rgb(0,255,0) + nargs['vDescend'] = True + nargs['vOff'] = -3 + nargs.update({'sep':',','vLeading':0,'hLeading':0}) + +# -------------------------------------------------------------------- +def add_zones(root,zoned,name,board,width,height,gpid, + labels=None,coords=None,picinfo=None, + verbose=False,visible=True): + grids = [] + picture = None + if verbose: + print(f' Adding zones to {name} zoned={"zoned" in board}') + + for k, v in board.items(): + if k == 'labels': labels = v + if k == 'coords': coords = v + if k == 'zoned': picture = v + if 'zone' not in k or k == 'zoned': + continue + + gridtype = (add_hexgrid + if 'hex' in k.lower() + else add_squaregrid) + gridnum = (add_hexnumbering + if 'hex' in k.lower() + else add_squarenumbering) + grids.append([k,v,gridtype,gridnum]) + + if len(grids) < 1: return gpid + if verbose: + print(f' Got zones: {[k[0] for k in grids]}') + # Either get picture information from argument, or deduce from the + # found 'zoned' key. + if picinfo is None: + picinfo = get_picture_info(picture,name,width,height,verbose) + + hex_width, hex_height, scx, scy, rot90, tran = picinfo + + + for g in grids: + n, i, typ, num = g + if verbose: + print(f' Adding zone {n}') + if 'scope' in n: + llx,lly = tran(*i['global lower left']) + urx,ury = tran(*i['global upper right']) + path = [[llx,ury],[urx,ury],[urx,lly],[llx,lly]] + nm = n.replace('zone scope ','') + elif 'path' in n: + path = [tran(*ii) for ii in i['path']] + llx = min([px for px,py in path]) + ury = max([py for px,py in path]) + nm = n.replace('zone path ','') + + # Checkf if we have "point" type elements in this object and + # add them to dict. + points = [ v for k,v in i.items() + if (k.startswith('point') and + isinstance(v,dict) and \ + v.get('type','') == 'point')] + + pathstr = ';'.join([f'{s[0]},{s[1]}' for s in path]) + if verbose: + print(f' Zone path ({llx},{ury}): {pathstr}') + zone = add_zone(root,zoned, + name=nm, + locationFormat = ("$name$" + if 'pool' in n.lower() else + "$gridLocation$"), + useParentGrid=False, + path=pathstr) + + # Do not add grids to pools + if 'pool' in n.lower(): + continue + + targs = {'color':rgb(255,0,0),'visible':visible} + nargs = {'color':rgb(255,0,0),'visible':visible} + if 'hex' in n.lower(): + get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90, + labels,coords,targs,nargs) + else: + width = hex_width / HEX_WIDTH * RECT_WIDTH + height = hex_height / HEX_HEIGHT * RECT_HEIGHT + get_rectparams(i,llx,ury,width,height,rot90,targs,nargs) + + # print(targs,nargs) + if 'turn' in n.lower(): nargs['sep'] = 'T' + if 'oob' in n.lower(): nargs['sep'] = 'O' + + if verbose: + print(f' Adding grid') + + if len(points) <= 0: + grid = typ(root,zone,**targs) + num(root,grid,**nargs) + else: + if verbose: + print(f' Use a region grid') + grid = add_regiongrid(root,zone,snapto=True,visible=visible) + for p in points: + pn = p["name"] + pc = p["coords"] + if verbose: + print(f' Add region {pn} {p}') + + n, gpid = add_region(root,grid,pn,*tran(*pc),gpid, + alsoPiece=True,verbose=verbose) + + + # Once we've dealt with this grid, we should see if we have + # any embedded zones we should deal with. + add_zones(root,zoned,name,i,width,height,gpid, + labels=labels,coords=coords,picinfo=picinfo, + verbose=verbose) + + # Adding a global grid + #targs['color'] = rgb(0,255,0) + #nargs['color'] = rgb(0,255,0) + #grid = typ(root,zoned,**targs) + #num(root,grid,**nargs) + + return gpid + + +# -------------------------------------------------------------------- +def add_inv(root,game,sides,**attr): + '''Add inventory to module''' + filt = '{' + '||'.join([f'Faction=="{s}"' for s in sides])+'}' + grp = 'Faction,Command,Echelon,Type' + inv = add_inventory(root,game, + include = filt, + groupBy = grp, + sortFormat = '$PieceName$', + tooltip = 'Show inventory of all pieces', + zoomOn = True, + **attr) + return inv + + +# -------------------------------------------------------------------- +def add_map_board(root,game,name,board,gpid,verbose=False,visible=False): + '''A add a single board to the module + ''' + + map = add_map(root,game, name) + bpicker = add_boardpicker(root,map) + + add_counterviewer (root,map) + add_hidepieces (root,map) + add_globalmap (root,map) + add_basics_to_map (root,map) + add_masskey (root,map,'Flip', key('F'),key('F'), + icon = '/images/Undo16.gif', + tooltip='Flip selected units') + add_masskey (root,map,'Eliminate',key('E'),key('E'), + icon = '/images/playerAway.gif', + tooltip='Eliminate selected units') + + # Get the image so we may make a rectangle + if verbose: + print(f' Adding board {board["name"]} -> {board["filename"]}') + ulx,uly,lrx,lry = get_bb(board['img']) + eboard = add_board(root,bpicker,name,image=board['filename']) + zoned = add_zoned(root,eboard) + #hexes = add_hexgrid(root,zoned) + add_zonehighlighter(root,zoned) + + if not 'zones' in board: + full = add_zone(root,zoned, + name='full', + useParentGrid=False, + path=(f'{ulx},{uly};' + + f'{lrx},{uly};' + + f'{lrx},{lry};' + + f'{ulx},{lry}')) + + # We do not have board info, so add a grid to the whole thing + add_hex_grid(root,full,rgb(255,0,0),True,True,visible=visible) + return + + # If we get here, we have board info! + w = abs(ulx-lrx) + h = abs(uly-lry) + return add_zones(root,zoned,name,board['zones'],w,h,gpid, + verbose=verbose,visible=visible) + +# -------------------------------------------------------------------- +def add_boards(root,game,categories,sides,gpid,verbose=False,visible=False): + '''Add all boards to the module, including eliminated map + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The parent element + categories : dict + Catalogue of images + sides : list of str + List of sides in the game + Name of the map + ''' + if verbose: + print('Adding maps and boards') + + # Loop over defined boards + for bn, b in categories.get('board',{}).get('all',{}).items(): + gpid = add_map_board(root,game,bn,b,gpid,verbose,visible) + + add_elim(root,game,sides,categories,verbose) + + return gpid + +# -------------------------------------------------------------------- +def add_oob(root,widget,name,oob,gpid,hotkey='',verbose=False,visible=False): + '''A add a single board to the module + ''' + # Short hand + cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr) + + if verbose: + print(f' Adding oob {name}') + + map = add_widgetmap(root,widget, name,markMoved='Never',hotkey='') + bpicker = add_boardpicker(root,map) + + add_counterviewer (root,map) + add_basics_to_map (root,map) + + + # Get the image so we may make a rectangle + if verbose: + print(f' Adding OOB {oob["name"]} -> {oob["filename"]}') + + ulx,uly,lrx,lry = get_bb(oob['img']) + board = add_board(root,bpicker,name,image=oob['filename']) + zoned = add_zoned(root,board) + add_zonehighlighter(root,zoned) + + if not 'zones' in oob: + zone = add_zone(root,zoned, + name='full', + useParentGrid=False, + path=(f'{ulx},{uly};' + + f'{lrx},{uly};' + + f'{lrx},{lry};' + + f'{ulx},{lry}')) + # We do not have board info, so add a grid to the whole thing + grid = add_squaregrid(root,zone,visible=visible) + add_squarenumbering(root,grid,visible=visible) + return + + # If we get here, we have board info! + w = abs(ulx-lrx) + h = abs(uly-lry) + return add_zones(root,zoned,name,oob['zones'],w,h,gpid, + verbose=verbose,visible=visible) + +# -------------------------------------------------------------------- +def add_oobs(root,game,categories,gpid,verbose=False,visible=False): + '''Add all OObs to the module + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The parent element + categories : dict + Catalogue of images + ''' + # Short hand + oobc = categories.get('oob',{}).get('all',{}).items() + if len(oobc) < 1: + return gpid + + oobs = add_chartwindow(root,game, 'OOBs', + hotkey = key('B',ALT), + description = 'OOBs', + text = '', + icon = '/images/inventory.gif', + tooltip = 'Show/hide OOBs') + tabs = add_tabs(root,oobs,'OOBs') + + if verbose: + print('Adding OOBs') + + # Loop over defined boards + for on, o in oobc: + widget = add_mapwidget(root,tabs, entryName=on) + gpid = add_oob(root,widget,on,o,gpid, + verbose = verbose, + hotkey = key('B',ALT), + visible = visible) + + return gpid + +# -------------------------------------------------------------------- +def add_markproto(root,protos,key,value): + decs = [ mark_trait(key,value.capitalize()), + basic_trait('','','') ] + typs = [d[0] for d in decs] + stts = [d[1] for d in decs] + typ = enc_parts(*typs) + stt = enc_parts(*stts) + body = add_proto(typ,stt) + add_prototype(root,protos,value+' prototype',body) + +# -------------------------------------------------------------------- +def add_counters(root,game,categories, + unittypes,echelons,commands,verbose=False): + '''Add all counters to the module. + + This will add all counters to the module, as well as prototypes + for each sub-category. + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The game element + categories : dict + Catalogue of images + ''' + # Short hand + # Create prototypes container before adding pieces + protos = add_prototypes(root,game) + for utype in unittypes: add_markproto(root,protos,'Type',utype) + for ech in echelons: add_markproto(root,protos,'Echelon',ech) + for cmd in commands: add_markproto(root,protos,'Command',cmd) + + # Stating global piece ID + gpid = 20 + + # A window to hold the pieces + piecew = add_piecewindow(root,game,'Counters', + hotkey = key('C',ALT)) + # Tab container for each sub-category + piecet = add_tabs(root,piecew,entryName='Counters') + + if verbose: + print('Adding counters and prototypes') + + # Loop over sub-categories + for subn, subc in categories.get('counter',{}).items(): + # Friendly message + if verbose: + print(f' Adding {subn} counters and prototype') + + # Create a panel for this sub-category + piecep = add_panel(root,piecet, + entryName = subn, + fixed = False) + # Add a list to the panel + piecel = add_list(root,piecep, + entryName=f'{subn} counters') + + if verbose: + print(f' Prototype: {subn} prototype') + # Create prototype for this sub-category + proto = add_prototype(root,protos, + name = f'{subn} prototype', + code = proto_body(subn), + description = f'Prototype for {subn} counters') + + # Loop over counters in this sub-category + for cn, c in subc.items(): + # Flipped counters are not added directly + if cn.endswith('flipped'): continue + + if verbose: + print(f' counter: {cn}') + + # Get image bounding box + bb = get_bb(c['img']) + + # Get flipped image, if any + cf = subc.get(cn + ' flipped', None) + + # Create a slot for this piece + sl = add_pieceslot(root,piecel, + entryName = cn, + gpid = gpid, + code = piece_body(subn,c,cf,gpid), + height = bb[3]-bb[1], + width = bb[2]-bb[0]) + + # Store the global piece identifier - do we need this? + c['gpid'] = gpid + + # Increment global piece identifier + gpid += 1 + + # Return next free piece identifier + return gpid + +# -------------------------------------------------------------------- +def add_charts(root,game,categories,verbose=False): + '''Add all boards to the module + + This will select all 'chart' elements from the catalogue and add + them as individual (popup) panels to the module. + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The game element + categories : dict + Catalogue of images + + ''' + chartc = categories.get('chart',{}).get('all',{}).items() + if len(chartc) < 1: + return + + # Short hand + cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr) + cw = lambda parent,tag,**attr : create_elem(root,parent,vw(tag),**attr) + + if verbose: + print('Adding charts') + + charts = add_chartwindow(root,game, 'Charts', + hotkey = key('A',ALT), + description = 'Charts', + tooltip = 'Show/hide Charts') + tabs = add_tabs(root,charts,'Charts') + + + # Loop over defined charts + for cn, c in chartc: + if verbose: + print(f' Chart {cn} ({c["filename"]})') + add_chart(root,tabs, + chartName = cn, + description = cn, + fileName = c['filename']) + +# -------------------------------------------------------------------- +def add_diceroll(root,game,categories,verbose=False): + '''Add a dice button (1d6) + + Parameters + ---------- + root : xml.dom.minidom.Document + Root of the document + game : xml.dom.minidom.Element + The game element + categories : dict + Catalogue of images + ''' + if verbose: + print('Adding dice') + + add_dice(root,game, + hotkey = key('6',ALT), + nDice = 1, + nSides = 6, + text = '1d6', + tooltip = 'Roll a 1d6', + name = '1d6') + + +# ==================================================================== +def create_build(info, + categories, + unittypes, + echelons, + commands, + zipfile, + title, + version, + desc = '', + rules = None, + tutorial = None, + pdffile = '', + infofile = '', + verbose = False, + visible = False): + '''Create the buildFile.xml document + + Parameters + ---------- + info : dict + Information dicationary + categories : dict + Catalogue of images + unittypes : set + Set of used unit types + zipfile : zipfile.ZipFile + Module archive + title : str + Title of module + version : str + Version number of module + desc : str + Short description of the game + rules : str + Filename of PDF rules document (if any) + + Returns + ------- + xml : str + The encoded document + ''' + from xml.dom.minidom import Document + + if verbose: + print(f'Creating buildFile.xml: {title},{version}') + + # Create document + root = Document() + + # Add game element + game = add_game(root,root, + name = title, + version = version, + description = desc) + + # Extract the sides of the game from the counter sub-categories + # Should be a little more clever about the case here + dsides = {k.lower() : k for k in categories.get('counter',{}).keys()} + sides = None + for skip in ['all','common', 'marker', 'markers']: + if skip in dsides: del dsides[skip] + sides = list(dsides.values()) + if verbose: + print('Identified factions: ',sides) + + # Use the standard command encoder + add_basiccommandencoder(root,game) + + # Add document parts + doc = add_documentation(root,game) + add_splash(root, doc, categories, title,verbose) + add_rules(root, doc, zipfile, rules, verbose) + add_tut(root, doc, zipfile, tutorial, verbose) + notes = add_notes(root,doc,zipfile,title,version, + sides,pdffile,infofile,rules,verbose) + + + # Create roster or player sides + roster = add_roster(root,game) + for s in sides: + add_entry(root,roster,s) + + # Add global options - mainly defer to user settings + add_globaloptions(root,game, + autoReport = 'Use Preferences Setting', + centerOnMove = 'Use Preferences Setting', + nonOwnerUnmaskable = 'Use Preferences Setting', + playerIdFormat = '$playerName$') + # Add global properties + gp = add_globalproperties(root,game) + # Add a turn tracker + tt = add_turntrack(root,game,'Turn',counter={ + 'property': 'Turn', + 'phases': { + 'property': 'Phase', + 'names': sides }}) + add_globalproperty(root,gp,'TurnTracker.defaultDocked',True) + + # Add all pieces to the module (including prototypes) + gpid = add_counters(root,game,categories, + unittypes,echelons,commands,verbose) + # Add an inventory + add_inv(root,game,sides) + # Add all boards to the module (including eliminated map) + gpid = add_boards(root,game,categories,sides,gpid, + verbose=verbose,visible=visible) + # Add all OOBs to the module + gpid = add_oobs(root,game,categories,gpid, + verbose=verbose,visible=visible) + # Add charts to the module + add_charts(root,game,categories,verbose=verbose) + # Add a dice rool + add_diceroll(root,game,categories,verbose=verbose) + + # Set next available piece identifier on the game + game.setAttribute('nextPieceSlotId',str(gpid+1)) + + # Return the document + return root, notes + +# -------------------------------------------------------------------- +def create_data(title,version,desc='',verbose=False): + '''Create the module data XML + + Parameters + ---------- + title : str + Title of the game + version : str + Version number of the module + desc : str + Short description + + Returns + ------- + xml : str + The encoded document + ''' + from xml.dom.minidom import Document + from time import time + + if verbose: + print('Create module data') + + # The document + root = Document() + + # Top of the document + data = root.createElement('data') + data.setAttribute("version","1") + root.appendChild(data) + + # Version number of module + vers = root.createElement('version') + vers.appendChild(root.createTextNode(str(version))) + data.appendChild(vers) + + # Name of the game + name = root.createElement('name') + name.appendChild(root.createTextNode(title)) + data.appendChild(name) + + # VASSAL version (should get this in some other way) + vvers = root.createElement('VassalVersion') + vvers.appendChild(root.createTextNode("3.6.7")) + data.appendChild(vvers) + + # Description, if any + desc = root.createElement('description') + data.appendChild(desc) + + # Automatically set the save data + save = root.createElement('dateSaved') + save.appendChild(root.createTextNode(f'{int(time())}')) + data.appendChild(save) + + return root + + +# ==================================================================== +def create_vmod(vmodname, + info, + title, + version, + desc = '', + rules = None, + tutorial = None, + pdfname = '', + infoname = '', + patch = None, + verbose = False, + visible = False): + '''Create a VASSAL module from the information passed + + Parameters + ---------- + vmodname : str + Name of the module + info : list + List of images and image data + title : str + Name of the game + version : str + Version of the module + desc : str + Short description of the game + rules : str + Rules PDF (optional) + + Returns + ------- + ''' + from zipfile import ZipFile, ZIP_DEFLATED + from pprint import pprint + + categories = {} + unittypes = [] + echelons = [] + commands = [] + with ZipFile(vmodname,'w',compression=ZIP_DEFLATED) as vmod: + # Create images in ZIP file + for i in info: + if ignore_entry(i): continue + + # Store the name of the image file in catalogue + i['filename'] = i['name'].replace(' ','_') + '.png' + imgfn = 'images/'+i['filename'] + if imgfn not in vmod.namelist(): + vmod.writestr(imgfn,i['img']) + + # Categorize - assume counter + typ = i.get('category','counter') + sub = i.get('subcategory','all') + if sub == '': + i['subcategory'] = 'all' + sub = 'all' + + # Add to catalogue + if typ not in categories: + categories[typ] = {} + cat = categories[typ] + + if sub not in cat: + cat[sub] = {} + tgt = cat[sub] + + tgt[i['name']] = i + + natoapp6c = i.get('natoapp6c',None) + if natoapp6c is not None: + from re import sub + mains = natoapp6c.get('main',None) + echelon = natoapp6c.get('echelon',None) + command = natoapp6c.get('command',None) + + if mains is not None: + mains = sub(r'\[[^]]+\]','',mains)\ + .replace('{','').replace('}','').split(',') + unittypes.extend(mains) + i['mains'] = mains + + if echelon is not None: + echelons.append(natoapp6c['echelon']) + i['echelon'] = echelon + + if command is not None: + commands.append(command) + i['command'] = command + + # Friendly message + # if verbose: + # print(f'{i["name"]} -> {i["type"]}/{i["sub type"]} {typ}/{sub}') + + unittypes = set(unittypes) + echelons = set(echelons) + commands = set(commands) + + # Now create the `buildFile.xml` file + build, notes = create_build(info, + categories, + unittypes, + echelons, + commands, + vmod, + title, + version, + desc, + rules, + tutorial, + pdfname, + infoname, + verbose, + visible) + # Now create the `moduledata` file + data = create_data(title, version, desc,verbose) + + + if patch: + from importlib.util import spec_from_file_location, \ + module_from_spec + from pathlib import Path + from sys import modules + + p = Path(patch) + if verbose: + pn = str(p.stem) + print(f'Will patch module with {pn}.patch function') + + spec = spec_from_file_location(p.stem, p.absolute()) + module = module_from_spec(spec) + spec.loader.exec_module(module) + modules[p.stem] = module + + + # Patch must accept xml.dom.document,xml.dom.document,ZipFile + module.patch(build,data,vmod,verbose) + + buildstr = build.toprettyxml(indent=' ', + encoding="UTF-8", + standalone=False) + datastr = data.toprettyxml(indent=' ', + encoding="UTF-8", + standalone=False) + + vmod.writestr('buildFile.xml',buildstr) + vmod.writestr('moduledata',datastr) + + return notes + +# ==================================================================== +def export(vmodname = 'Draft.vmod', + pdfname = 'export.pdf', + infoname = 'export.json', + title = 'Test', + version = 'Draft', + desc = '', + rules = None, + tutorial = None, + patch = None, + verbose = False, + visible = False): + '''Do the whole thing + + - Read in information form the 'infoname' file (a CSV file + generated by LaTeX) + + - Convert each page in the 'pdfname' file (a PDF generated by + LaTex) into images + + - Create the VASSAL module + + ''' + if verbose: + print(f'Module name : {vmodname}\n' + f'PDF name : {pdfname}\n' + f'Info name : {infoname}\n' + f'Title : {title}\n' + f'Version : {version}\n' + f'Description : {desc}\n' + f'Rules : {rules}\n' + f'Tutorial : {tutorial}') + info = convert_pages(pdfname=pdfname,infoname=infoname) + return create_vmod(vmodname = vmodname, + info = info, + title = title, + version = version, + desc = desc, + rules = rules, + tutorial = tutorial, + pdfname = pdfname, + infoname = infoname, + patch = patch, + verbose = verbose, + visible = visible) + +# ==================================================================== +if __name__ == '__main__': + from argparse import ArgumentParser, FileType + + ap = ArgumentParser(description='Create draft VASSAL module') + ap.add_argument('pdffile', + help='The PDF file to read images from', + type=FileType('r'), + default='export.pdf', + nargs='?') + ap.add_argument('infofile', + help='The JSON file to read image information from', + type=FileType('r'), + default='export.json', + nargs='?') + ap.add_argument('-p','--patch', + help='A python script to patch generated module', + type=FileType('r')) + ap.add_argument('-o','--output', + help='Output file to write module to', + type=FileType('w'), + default='Draft.vmod') + ap.add_argument('-t','--title', + help='Module title', default='Draft', + type=str) + ap.add_argument('-v','--version', + help='Module version', + type=str, + default='draft') + ap.add_argument('-r','--rules', + help='Rules PDF file', + type=FileType('r')) + ap.add_argument('-T','--tutorial', + help='Tutorial (v)log file', + type=FileType('r')) + ap.add_argument('-d','--description', + help='Short description of module', + type=str, + default='draft of module') + ap.add_argument('-V','--verbose', + help='Be verbose', + action='store_true') + ap.add_argument('-G','--visible-grids', + action='store_true', + help='Make grids visible in the module') + ap.add_argument('-n','--notes', + help='Show notes', + action='store_true') + + + args = ap.parse_args() + + vmodname = args.output.name + rulesname = args.rules.name if args.rules is not None else None + tutname = args.tutorial.name if args.tutorial is not None else None + args.output.close() + + patchname = args.patch.name if args.patch is not None else None + if args.patch is not None: + args.patch.close() + + if args.version.lower() == 'draft': + args.visible_grids = True + + try: + notes = export(vmodname = vmodname, + pdfname = args.pdffile.name, + infoname = args.infofile.name, + title = args.title, + version = args.version, + desc = args.description, + rules = rulesname, + tutorial = tutname, + patch = patchname, + verbose = args.verbose, + visible = args.visible_grids) + + if args.notes: + print(f'Module {vmodname} created. ' + 'Here are the notes from the module') + print(notes) + + except Exception as e: + from sys import stderr + print(f'Failed to build {vmodname}: e',file=stderr) + from os import unlink + try: + unlink(vmodname) + except: + pass + + raise e diff --git a/macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py b/macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py new file mode 100755 index 0000000000..a9f3c60203 --- /dev/null +++ b/macros/latex/contrib/wargame/source/utils/wgsvg2tikz.py @@ -0,0 +1,365 @@ +#!/usr/bin/env python3 + +from sys import stderr, stdout + +def monkey_patch(): + from svgelements import SVGElement + + def SVGElement__imatmul__(self,other): + print('Dummy SVGElement.__imatmul__') + return self + + SVGElement.__imatmul__ = SVGElement__imatmul__ + +monkey_patch() + +# -------------------------------------------------------------------- +def open_svg(input): + from svgelements import SVG + + svg = SVG.parse(input,reify=False) + print(type(svg[0]),file=stderr) + return svg + +# -------------------------------------------------------------------- +def get_bb(svg): + llx,lly,urx,ury = svg.bbox() + # print(llx,lly,urx,ury) + return llx,lly,urx,ury + +# -------------------------------------------------------------------- +def flush_left(svg): + from svgelements import Matrix + + llx,lly,urx,ury = get_bb(svg) + svg *= Matrix.translate(-llx,-lly) + return svg + +# -------------------------------------------------------------------- +def scale_unit(svg): + from svgelements import Matrix + + llx,lly,urx,ury = get_bb(svg) + scale = 1 / max(urx,ury) + svg *= Matrix.scale(scale) + + return svg + +# -------------------------------------------------------------------- +def scale_to_cm(svg,px_per_cm = 37.79531157367762334497): + from svgelements import Matrix + + scale = 1 / px_per_cm + svg *= Matrix.scale(scale) + + return svg + +# -------------------------------------------------------------------- +def shift_to_centre(svg): + from svgelements import Matrix + + llx,lly,urx,ury = get_bb(svg) + svg *= Matrix.translate(-urx/2,-ury/2) + svg *= Matrix.scale(1,-1) + svg.reify() + svg.render() + return svg + +# -------------------------------------------------------------------- +def flipy(svg): + from svgelements import Matrix + + llx,lly,urx,ury = get_bb(svg) + svg *= Matrix.translate(-llx,-lly) + svg *= Matrix.scale(1,-1) + svg.reify() + svg.render() + llx,lly,urx,ury = get_bb(svg) + svg *= Matrix.translate(0,-lly) + return svg + +# ==================================================================== +def get_paths(svg): + '''Read in paths from the SVG image + + This will recurse down groups for path operations + + Returns + ------- + paths : list + List of svg.path.Path objects + ''' + from svgelements import Path, Group + from svg.path import parse_path + + paths = [] + + for e in svg: + if isinstance(e,Path): + print('Parse path',file=stderr) + p = parse_path(e.d()) + paths.append(p) + if isinstance(e,Group): + print('Parse group',file=stderr) + paths.append(get_paths(e)) + + return paths + +# ==================================================================== +def tikz_point(e,f): + '''Ouput a point + + Parameters + ---------- + e : complex + The point + f : str + Floating point format + + Return + ------ + coord : str + The point formatted for Tikz + ''' + return f'({e.real:{f}},{e.imag:{f}})' + +# -------------------------------------------------------------------- +def tikz_move(e,f): + '''Output a move-to operation + + Parameters + ---------- + e : complex + The point to move to + f : str + Floating point format + + Return + ------ + coord : str + The point formatted for Tikz + ''' + return tikz_point(e.start,f) + +# -------------------------------------------------------------------- +def tikz_line(e,f): + '''Output a line-to operation + + Parameters + ---------- + e : complex + The point to draw line to + f : str + Floating point format + + Return + ------ + line : str + The line-to operation to point + ''' + return '-- '+tikz_point(e.end,f) + +# -------------------------------------------------------------------- +def tikz_curve(e,f): + '''Output a curve-to operation + + Parameters + ---------- + e : curve operation (3 complex numbers) + The control points (2 of them) and the point to draw curve to + f : str + Floating point format + + Return + ------ + curve : str + The curve-to operation to point + ''' + return \ + '.. controls '+tikz_point(e.control1,f) + \ + ' and ' +tikz_point(e.control2,f) + \ + ' ..' +tikz_point(e.end,f) + +# -------------------------------------------------------------------- +def tikz_close(e,f): + '''Ouput a close (or cycle) operation + ''' + return '-- cycle' + +# ==================================================================== +def path_to_tikz(path,f='8.5f'): + '''Convert a svt.path.Path to a TikZ path + + Parameters + ---------- + path : svg.path.Path + Path to convert + f : str + floating point format to use + + Returns + ------- + code : list + List of Tikz path operations as strings + ''' + from svg.path import Line, Move, Close, CubicBezier, Path + + code = [] + for e in path: + if isinstance(e, Move): code.append(tikz_move(e, f)) + elif isinstance(e, Line): code.append(tikz_line(e, f)) + elif isinstance(e, Close): code.append(tikz_close(e,f)) + elif isinstance(e, CubicBezier): code.append(tikz_curve(e,f)) + elif isinstance(e, Path): code.extend(path_to_tikz(e,f)) + else: + print(f'Unknown type: {type(e)}',file=stderr) + + return code + +# ==================================================================== +def doc_header(output=stdout): + '''Prinout put standalone document header + ''' + print(r'''% +\documentclass{standalone} +\usepackage{tikz} +\begin{document}%''',file=output) + +# -------------------------------------------------------------------- +def doc_footer(output=stdout): + '''Prinout put standalone document footer + ''' + print(r'''% +\end{document}''',file=output) + +# -------------------------------------------------------------------- +def path_to_pic(path,name,output,format): + '''Output a Tikz pic definition from the path + + Parameters + ---------- + path : Path + The path to convert + name : str + The name of the pic + output : File + Output file + format : str + Floating point format + ''' + print(fr'''\tikzset{{% + {name}/.pic={{% + \path[pic actions]''',file=output,end='\n ') + + code = path_to_tikz(path,format) + print('\n '.join(code),file=output) + print(' ;\n }',file=output) + print('}%',file=output) + +# ==================================================================== + +# ==================================================================== +def doit(input='soldier_side.svg', + centre=True, + unit=True, + output=stdout, + standalone=False, + format='8.5f'): + svg = open_svg(input) + orig_bb = get_bb(svg) + + if centre or unit: + svg = flush_left(svg) + if unit: + svg = scale_unit(svg) + else: + svg = scale_to_cm(svg) + if centre: + svg = shift_to_centre(svg) + else: + svg = flipy(svg) + new_bb = get_bb(svg) + + paths = get_paths(svg) + + if standalone: + doc_header(output) + print(f'% Original bounding box: ({orig_bb[0]},{orig_bb[1]}) ({orig_bb[2]},{orig_bb[3]})', + file=output) + print(f'% New bounding box: ({new_bb[0]},{new_bb[1]}) ({new_bb[2]},{new_bb[3]})', + file=output) + pics = [] + for i, path in enumerate(paths): + name = f'pic_{i:03d}' + path_to_pic(path,name,output,format) + pics.append(name) + + if standalone: + print(r'\begin{tikzpicture}%',file=output) + x = 0 + y = 0 + for i, name in enumerate(pics): + if x > 10: + x = 0 + y += 2 + + print(fr' \pic[draw,fill=red] at ({x},{y}) {{{name}}};%', + file=output) + x += 2 + + print(r'\end{tikzpicture}%',file=output) + doc_footer(output) + +# ==================================================================== +def test(svgfile='soldier_side.svg',tikzfile=stdout,standalone=True): + with open(svgfile,'r') as input: + with open(tikzfile,'w') if isinstance(tikzfile,str) else tikzfile as output: + doit(input=input,output=output,standalone=standalone) + + +# ==================================================================== +if __name__ == '__main__': + from argparse import ArgumentParser, FileType + + ap = ArgumentParser(description='Convert SVG to unit Tikz picture') + ap.add_argument('input',type=FileType('r'),nargs='?',default='soldier_side.svg', + help='Input SVG file') + ap.add_argument('-o','--output',type=FileType('w'),default=None, + help='Output Tikz file') + ap.add_argument('-s','--standalone',action='store_true',default=True, + help='Write standalone document') + ap.add_argument('-p','--picture',action='store_false',dest='standalone', + help='Only write picture') + ap.add_argument('-f','--format',type=str,default='8.5f', + help='Format for coordinates') + ap.add_argument('-O','--original-size',dest='unit',action='store_false', + help='Do no scale paths to unit size') + ap.add_argument('-S','--unit-size',dest='unit',action='store_true', + help='Scale paths to unit size') + ap.add_argument('-Z','--no-centre',dest='centre',action='store_false', + help='Do not centre paths') + ap.add_argument('-C','--centre',dest='centre',action='store_true', + help='Centre paths') + + args = ap.parse_args() + + if args.output is None: + from pathlib import Path + inname = Path(args.input.name) + outname = inname.with_suffix('.tex') + args.output = open(outname,'w') + + + doit(input = args.input, + unit = args.unit, + centre = args.centre, + output = args.output, + standalone = args.standalone, + format = args.format) + + + + + + + diff --git a/macros/latex/contrib/wargame/source/wargame.dtx b/macros/latex/contrib/wargame/source/wargame.dtx index a2e7d06a94..d721befdb6 100644 --- a/macros/latex/contrib/wargame/source/wargame.dtx +++ b/macros/latex/contrib/wargame/source/wargame.dtx @@ -415,27 +415,27 @@ % \tikz{\hex[](r=0,c=0) } % & Clear % & \texttt{} -% & \tikz{\hex[terrain={image=beach}](r=0,c=0) } +% & \tikz{\hex[terrain={image=wargame.beach}](r=0,c=0) } % & Beach -% & \texttt{\{image=beach\}}\\ -% \tikz{\hex[terrain={image=light_woods}](r=0,c=0) } +% & \texttt{\{image=wargame.beach\}}\\ +% \tikz{\hex[terrain={image=wargame.light_woods}](r=0,c=0) } % & Light woods -% & \texttt{\{image=light\_woods\}} -% & \tikz{\hex[terrain={image=woods}](r=0,c=0)} +% & \texttt{\{image=wargame.light\_woods\}} +% & \tikz{\hex[terrain={image=wargame.woods}](r=0,c=0)} % & Woods -% & \texttt{\{image=woods\}}\\ -% \tikz{\hex[terrain={image=rough}](r=0,c=0) } +% & \texttt{\{image=wargame.woods\}}\\ +% \tikz{\hex[terrain={image=wargame.rough}](r=0,c=0) } % & Rough -% & \texttt{\{image=rough\}} -% & \tikz{\hex[terrain={image=swamp}](r=0,c=0) } +% & \texttt{\{image=wargame.rough\}} +% & \tikz{\hex[terrain={image=wargame.swamp}](r=0,c=0) } % & Swamp -% & \texttt{\{image=swamp\}}\\ -% \tikz{\hex[terrain={image=mountains}](r=0,c=0) } +% & \texttt{\{image=wargame.swamp\}}\\ +% \tikz{\hex[terrain={image=wargame.mountains}](r=0,c=0) } % & Mountains -% & \texttt{\{image=mountains\}} +% & \texttt{\{image=wargame.mountains\}} % & \tikz{\hex[fill=blue!40!white](r=0,c=0) } % & Sea -% & \texttt{\{image=sea\}}\\ +% & \texttt{\{image=wargame.sea\}}\\ % \hline % \end{tabular} % \caption{Terrains specified via tile images} diff --git a/macros/latex/contrib/wargame/source/wargame.ins b/macros/latex/contrib/wargame/source/wargame.ins index 0ab9ec5a74..23ec10e251 100644 --- a/macros/latex/contrib/wargame/source/wargame.ins +++ b/macros/latex/contrib/wargame/source/wargame.ins @@ -130,15 +130,15 @@ End: \from{chit/elements.dtx}{chit} \from{chit/misc.dtx} {chit}} % - \file{beach.tex} {\from{hex/tile.dtx}{tile,beach}} - \file{city.tex} {\from{hex/tile.dtx}{tile,city}} - \file{light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}} - \file{mountains.tex} {\from{hex/tile.dtx}{tile,mountains}} - \file{rough.tex} {\from{hex/tile.dtx}{tile,rough}} - \file{swamp.tex} {\from{hex/tile.dtx}{tile,swamp}} - \file{town.tex} {\from{hex/tile.dtx}{tile,town}} - \file{village.tex} {\from{hex/tile.dtx}{tile,village}} - \file{woods.tex} {\from{hex/tile.dtx}{tile,woods}} + \file{wargame.beach.tex} {\from{hex/tile.dtx}{tile,beach}} + \file{wargame.city.tex} {\from{hex/tile.dtx}{tile,city}} + \file{wargame.light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}} + \file{wargame.mountains.tex} {\from{hex/tile.dtx}{tile,mountains}} + \file{wargame.rough.tex} {\from{hex/tile.dtx}{tile,rough}} + \file{wargame.swamp.tex} {\from{hex/tile.dtx}{tile,swamp}} + \file{wargame.town.tex} {\from{hex/tile.dtx}{tile,town}} + \file{wargame.village.tex} {\from{hex/tile.dtx}{tile,village}} + \file{wargame.woods.tex} {\from{hex/tile.dtx}{tile,woods}} % \file{testmap.tex} {\from{tests/map.dtx}{testmap}} \file{testchits.tex} {\from{tests/chits.dtx}{testchits}} diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog index 9bfa086af1..00d6409a36 100644 --- a/support/TeX4ht/source/ChangeLog +++ b/support/TeX4ht/source/ChangeLog @@ -1,3 +1,13 @@ +2022-09-26 Michal Hoftich + + * tex4ht-fonts-modern.tex ( + ./tex4ht.dir/texmf/tex4ht/ht-fonts/unicode/mathkerncmssi/mathkerncmssi.htf + ): added support for the Sansmathaccent font. + + * tex4ht-4ht.tex (usepackage.4ht, + lua-widow-control-hooks.4ht): added support for the + Lua-widow-control package. + 2022-09-22 Michal Hoftich * tex4ht-html4.tex (html4.4ht): use CSS grid for description list diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex index 899fcbe89f..e85b3ce283 100644 --- a/support/TeX4ht/source/tex4ht-4ht.tex +++ b/support/TeX4ht/source/tex4ht-4ht.tex @@ -1,4 +1,4 @@ -% $Id: tex4ht-4ht.tex 1196 2022-09-20 15:05:23Z michal_h21 $ +% $Id: tex4ht-4ht.tex 1199 2022-09-26 13:25:22Z michal_h21 $ % tex tex4ht-4ht or ht tex tex4ht-4ht % % Copyright 2009-2022 TeX Users Group @@ -4886,6 +4886,33 @@ PDF mode, it is safest thing to do to just disable the package. \endinput >>> \AddFile{9}{pdfx-hooks} + +%%%%%%%%%%%%%%%%% +\Section{lua-widow-control} +%%%%%%%%%%%%%%%%% + +The lua-widow-control package uses LuaTeX hooks to remove windows and orphans +on pages. We need to disable it, as it interferes with TeX4ht and produces +a fatal error. + +\<<< +\Configure{PackageHooks}{lua-widow-control.sty}{lua-widow-control-hooks.4ht} +>>> + +\<<< +% lua-widow-control-hooks.4ht (|version), generated from |jobname.tex +% Copyright 2022 TeX Users Group +| +\:dontusepackage{lua-widow-control} +% provide dummy definition of package's commands +\NewDocumentCommand \lwcsetup {m} {} +\NewDocumentCommand \lwcemergencystretch { } {} +\def\lwcenable{} +\def\lwcdisable{} +\endinput +>>> \AddFile{9}{lua-widow-control-hooks} + + %%%%%%%%%%%%%%%%% \Section{animate.sty} %%%%%%%%%%%%%%%%% diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index 819d6d1536..1aeef1f29f 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -47,12 +47,8 @@ $mirrors = { 'https://cran.asia/tex/' => 1, 'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1, 'https://lab.uklee.pe.kr/tex-archive/' => 1, - 'https://mirror.kakao.com/CTAN/' => 1, 'https://mirror.navercorp.com/CTAN/' => 1, }, - 'Philippines' => { - 'http://mirror.rise.ph/ctan/' => 1, - }, 'Singapore' => { 'https://download.nus.edu.sg/mirror/ctan/' => 1, }, diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index 9004c00621..7c48421945 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/2022 -depend revision/64513 +depend revision/64524 name 00texlive.image category TLCore -revision 64513 +revision 64522 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 @@ -2994,6 +2994,7 @@ runfiles size=12921 tlpkg/tlpsrc/ndsu-thesis-2022.tlpsrc tlpkg/tlpsrc/ndsu-thesis.tlpsrc tlpkg/tlpsrc/needspace.tlpsrc + tlpkg/tlpsrc/neo-euler.tlpsrc tlpkg/tlpsrc/nestquot.tlpsrc tlpkg/tlpsrc/neuralnetwork.tlpsrc tlpkg/tlpsrc/nevelok.tlpsrc @@ -4430,6 +4431,7 @@ runfiles size=12921 tlpkg/tlpsrc/wadalab.tlpsrc tlpkg/tlpsrc/wallcalendar.tlpsrc tlpkg/tlpsrc/wallpaper.tlpsrc + tlpkg/tlpsrc/wargame.tlpsrc tlpkg/tlpsrc/warning.tlpsrc tlpkg/tlpsrc/warpcol.tlpsrc tlpkg/tlpsrc/was.tlpsrc @@ -4641,7 +4643,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 64500 +revision 64515 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 @@ -68164,7 +68166,7 @@ containerchecksum 5bd74e1a434549cf31ce31777e9a32f90baa14148e6658633945508a46dbf6 name collection-fontsextra category Collection -revision 63936 +revision 64517 shortdesc Additional fonts relocated 1 depend aboensis @@ -68406,6 +68408,7 @@ depend mnsymbol depend montserrat depend mpfonts depend mweights +depend neo-euler depend newcomputermodern depend newpx depend newtx @@ -68510,8 +68513,8 @@ depend yfonts-otf depend yfonts-t1 depend yinit-otf depend zlmtt -containersize 1964 -containerchecksum e5d20e1256263de45f630e1148aec621985903531345202ea891fc6f05098cc78e617b5420594b394c3053ea7a09e25627d520e9f397e7ded5c923ff8fe6be37 +containersize 1972 +containerchecksum 42530318883c31f40511798429f4a1089949ab69f8b5d8eefaa3208421f8e1e08bd9fc5804260eff4893ad8b24194b7729dbdef1e2dc74237e9c21cac230e606 name collection-fontsrecommended category Collection @@ -68625,7 +68628,7 @@ containerchecksum 6c7f0a1829789edea6a42d45f13f482abc0aa1ecc66b0ba4b70197efff349d name collection-games category Collection -revision 64021 +revision 64522 shortdesc Games typesetting relocated 1 longdesc Setups for typesetting various games, including chess. @@ -68670,10 +68673,11 @@ depend skaknew depend soup depend sudoku depend sudokubundle +depend wargame depend xq depend xskak -containersize 556 -containerchecksum 99344c6c2cb8242280bbfe32379ef516f978969ce178e1260104a113dd94a994733462ceba619cfa422c738f6df25a898619246e45e9992f69ef6b87b8b4c48c +containersize 564 +containerchecksum 78f2b6f1c60ef6bf53f02c12b1a774039079d88d6c9d30994d0e4240f5ec13cc59a39463b5158fa41a89a63de497db19b64501aae9c30eebe38ed2b63973cc71 name collection-humanities category Collection @@ -219658,6 +219662,41 @@ catalogue-license lppl catalogue-topics layout catalogue-version 1.3d +name neo-euler +category Package +revision 64517 +shortdesc OpenType version of Hermann Zapf's Euler maths font +relocated 1 +longdesc Neo-Euler.otf is an OpenType version of Hermann Zapf's Euler +longdesc maths font. It is the continuation of the Euler project +longdesc initiated by Khaled Hosny in 2009 and abandoned in 2016. A +longdesc style file neo-euler.sty is provided as a replacement of the +longdesc eulervm package for LuaLaTeX and XeLaTeX users. Provides a +longdesc setup for using the AMS neo-euler family of fonts for +longdesc mathematics in LaTeX documents. "The underlying philosophy of +longdesc Zapf's neo-euler design was to capture the flavour of +longdesc mathematics as it might be written by a mathematician with +longdesc excellent handwriting." The neo-euler package is based on +longdesc Knuth's macros for the book 'Concrete Mathematics'. The text +longdesc fonts for the Concrete book are supported by the beton package. +containersize 225304 +containerchecksum 08522f38e439d277aa1c4604fa40e5cd2088c4774a6767dffd891100b47b08c35ce03d0aa7f43e29b975db8e4146d1e20e3f593c915684682d8207f890979af2 +doccontainersize 1542988 +doccontainerchecksum af61fb818b51f9f2c106074b5ad896cab5ae90e050975ff26f3dd02a7b209cff88c3a47dac6901fd08e72910c772a3b80e5b3f283b2663726b549f9c01d0b1b6 +docfiles size=399 + RELOC/doc/fonts/neo-euler/Neo-Euler.ltx + RELOC/doc/fonts/neo-euler/Neo-Euler.pdf details="Package documentation" + RELOC/doc/fonts/neo-euler/README.md details="Readme" + RELOC/doc/fonts/neo-euler/unimath-euler.ltx + RELOC/doc/fonts/neo-euler/unimath-euler.pdf +runfiles size=110 + RELOC/fonts/opentype/public/neo-euler/Neo-Euler.otf + RELOC/tex/latex/neo-euler/neo-euler.sty +catalogue-ctan /fonts/neo-euler +catalogue-license ofl lppl1.3 +catalogue-topics font font-otf font-maths +catalogue-version 0.20 + name nestquot category Package revision 27323 @@ -240004,7 +240043,7 @@ catalogue-version 0.12 name pdfmanagement-testphase category Package -revision 64186 +revision 64521 shortdesc LaTeX PDF management testphase bundle relocated 1 longdesc This is a temporary package, which is used during a test phase @@ -240017,11 +240056,11 @@ longdesc allow users and package authors to safely test the code. At a longdesc later stage it will be integrated into the LaTeX kernel (or in longdesc parts into permanent support packages), and the current longdesc testphase bundle will be removed. -containersize 73168 -containerchecksum 240defbeee1db6249e71cc80e0473b6e9760cb160818195a7fa31ec8de70b45604fbb13812ba25b202277746090e37346312b2ac59c19b4cf9b638bcf1810919 -doccontainersize 8604632 -doccontainerchecksum 5200df7cd9a2904f9a90ebdeac4d0e2ba52a296e0134da8a555e994493a6d4ebf1a726641d8e05eda43fab2a8641758247061b26d800366fecef035ccd4b3e77 -docfiles size=2783 +containersize 76696 +containerchecksum f520e397271b6139f54b8308b926c4f4897a8917114e115736a4ea6c321b2f4f34399659494d42242b3d67ef103f1647f6a113dddc667bd10edbf378a057ae50 +doccontainersize 8723252 +doccontainerchecksum 8de7714cca7aee6726f9bc611e0a0906f339a4145dd783d45c6c337d892017f208a6023fe077dd5b8a9f9b3ee96c76cbd21d46e5cf50e8128b55ecf1fe55bf4e +docfiles size=2862 RELOC/doc/latex/pdfmanagement-testphase/CHANGELOG.md RELOC/doc/latex/pdfmanagement-testphase/README.md details="Readme" RELOC/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf @@ -240044,9 +240083,9 @@ docfiles size=2783 RELOC/doc/latex/pdfmanagement-testphase/output-patches-tmp-ltx.pdf RELOC/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf RELOC/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf details="Package documentation" -srccontainersize 127480 -srccontainerchecksum f7d6dff60692041a688be94fcac3c1e6ccfb596623b5ba6b29fbe523bc9adca899d3493c3e22c2b432d56308105c32c8212eb6b8dcd9fd6bf41b1356c100b1f1 -srcfiles size=184 +srccontainersize 137740 +srccontainerchecksum 9ad5720f0080a87f24ce572f07c20cef8e7eb7b0fde2bffd9d777a733badbe334c2cf45940f69e014695235030d9864126e485d2293bdd95c036bff044469e8f +srcfiles size=197 RELOC/source/latex/pdfmanagement-testphase/hyperref-generic.dtx RELOC/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx RELOC/source/latex/pdfmanagement-testphase/l3pdfannot.dtx @@ -240068,13 +240107,12 @@ srcfiles size=184 RELOC/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx RELOC/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx RELOC/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.ins -runfiles size=137 +runfiles size=145 RELOC/tex/latex/pdfmanagement-testphase/color-ltx.sty RELOC/tex/latex/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty RELOC/tex/latex/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty RELOC/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def RELOC/tex/latex/pdfmanagement-testphase/hyperref-colorschemes.def - RELOC/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty RELOC/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def RELOC/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def RELOC/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def @@ -240097,7 +240135,7 @@ catalogue-contact-repository https://github.com/latex3/pdfresources catalogue-ctan /macros/latex/contrib/pdfmanagement-testphase catalogue-license lppl1.3c catalogue-topics latex-devel pdf-feat -catalogue-version 0.95r +catalogue-version 0.95s name pdfmarginpar category Package @@ -296819,7 +296857,7 @@ binfiles arch=x86_64-solaris size=1 name tex4ht category Package -revision 64479 +revision 64524 shortdesc Convert (La)TeX to HTML/XML longdesc A converter from TeX and LaTeX to SGML-based formats such as longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a @@ -296840,10 +296878,10 @@ longdesc files from them is nontrivial, and generally done with the longdesc Makefile in development, from which the TeX4ht package in TeX longdesc Live is updated. depend tex4ht.ARCH -containersize 953092 -containerchecksum 1c088c1e54a032f0181f5d70939e22f4628a4c2205689ee888467bff120b540d7034d1bd8988cdac0de9047f7466b8ec6fb73b52b83a44f88a6a5a4d420890b5 +containersize 944260 +containerchecksum 3f59fdf1421795bed6f12ed55c054826a3dd7de58a97f3746dcdb3324b6fed9831748a5144f529223af12034fca6aad4dd244dffb7c10dd3298e9bc14803fbfc doccontainersize 136384 -doccontainerchecksum 15017ab018bde6db4945509ce1424404e2b396747208375888da8652c2e0903c70a5bd9a010bcefd2f20aeeb165657c2b4c23730001358dca59f69306d30c260 +doccontainerchecksum f727029c9e6e7f00878d812bbe7b7f347457b5cd9ea9fe551003de27096a12e5e320049bfa28e935463f8355e596102aff87e08d5cb29de1c18eb2123e687e2d docfiles size=260 texmf-dist/doc/generic/tex4ht/Makefile texmf-dist/doc/generic/tex4ht/README details="Readme" @@ -296915,8 +296953,8 @@ docfiles size=260 texmf-dist/doc/generic/tex4ht/mn56.html texmf-dist/doc/generic/tex4ht/mn5x.png texmf-dist/doc/generic/tex4ht/mn6x.png -srccontainersize 1275916 -srccontainerchecksum e09fe0369e21705cb1b5b1b5a620ddc3aa4a840941ad505ccf720a1bf9181fafa02ae3fb340b303ca4efc0adc968f96ee400f19c0bbff1a613954449ae72d4a3 +srccontainersize 1268744 +srccontainerchecksum 6b033fcdb93d10999d481c38eefc66f7e4ab027edce44abe5a46676ebf26a5ec6431638262e067b7b489fecdbf7ef6c3b7eb78da82ca85016c2fb7e5b87a48c1 srcfiles size=3868 texmf-dist/source/generic/tex4ht/ChangeLog texmf-dist/source/generic/tex4ht/Makefile @@ -296993,7 +297031,7 @@ srcfiles size=3868 texmf-dist/source/generic/tex4ht/update-htfonts texmf-dist/source/generic/tex4ht/wripro.tex texmf-dist/source/generic/tex4ht/xtpipes.tex -runfiles size=11188 +runfiles size=11191 texmf-dist/scripts/tex4ht/ht.sh texmf-dist/scripts/tex4ht/htcontext.sh texmf-dist/scripts/tex4ht/htcopy.pl @@ -297276,6 +297314,7 @@ runfiles size=11188 texmf-dist/tex/generic/tex4ht/ltugproc-a.4ht texmf-dist/tex/generic/tex4ht/ltugproc.4ht texmf-dist/tex/generic/tex4ht/ltxguide.4ht + texmf-dist/tex/generic/tex4ht/lua-widow-control-hooks.4ht texmf-dist/tex/generic/tex4ht/luatexja-hooks.4ht texmf-dist/tex/generic/tex4ht/m-tex4ht.tex texmf-dist/tex/generic/tex4ht/magyar.4ht @@ -305140,6 +305179,7 @@ runfiles size=11188 texmf-dist/tex4ht/ht-fonts/unicode/marvosym/fmvr8x.htf texmf-dist/tex4ht/ht-fonts/unicode/math/rsfs.htf texmf-dist/tex4ht/ht-fonts/unicode/mathdesign/mdbchr7v.htf + texmf-dist/tex4ht/ht-fonts/unicode/mathkerncmssi/mathkerncmssi.htf texmf-dist/tex4ht/ht-fonts/unicode/mathtime/blex-bs.htf texmf-dist/tex4ht/ht-fonts/unicode/mathtime/blmi-bs.htf texmf-dist/tex4ht/ht-fonts/unicode/mathtime/blsy-bs.htf @@ -307560,7 +307600,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 64501 +revision 64516 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. @@ -307568,10 +307608,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 113692 -containerchecksum a07e1ac44e1e4cb7b273e6ac97eee6dd4f825f1a1c0194fc31d7a66bbbf9795bd8b4a172c73aac42eaf9c1c915053c57d10f538ebccaf975afd00950c4d06905 -doccontainersize 421296 -doccontainerchecksum 25f07728b8cde5bd05801844a06eca1436e68dbed78e657fd162a05bea9fa0080c014758dc927c0c1ff260940251a0b769e47431aa21a1e5d7e6e7679775c194 +containersize 113664 +containerchecksum 0d44b8c919c493cc13776f935dd7846d030fe7e6d79699d6ec017ab3b98a78895fbe2bbaa9d69958afc113631dad12f71207e4d6df7888d5a3d5c2f816d26b4c +doccontainersize 421352 +doccontainerchecksum 80fa4be3a84b4c18c7c696cb75a1ef9ce7d347cbc5b966a1070931b48b015efa659765aec2dccd9c1b9eb8d22ca1f50d8443c7e846ff663f752813c006d6ef69 docfiles size=522 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 @@ -311758,7 +311798,7 @@ catalogue-version 0.11b name theanodidot category Package -revision 54512 +revision 64518 shortdesc TheanoDidot fonts with LaTeX support relocated 1 longdesc This package provides the TheanoDidot font designed by Alexey @@ -311778,10 +311818,10 @@ longdesc designer. The strong clear forms of this alphabet display longdesc objective, rational characteristics and are representative of longdesc the time and philosophy of the Enlightenment. execute addMap TheanoDidot.map -containersize 377204 -containerchecksum daeb092b73d0a9aac15c917aa72bee060fdf879aae0c2df9b391822f765983f0c048b1a15643a3aa7075e3c5a51eeabdb06ebf3b568930d7edb8e64bbf8f473c -doccontainersize 44204 -doccontainerchecksum 77c32df3bf56f8d38f27823eca098c968b203fb1ca2e4682f76a4071821952631b0187893f4636879808903e262bd2b01b53a50b517cc7098011d9f0262739d0 +containersize 377196 +containerchecksum f7c8f9506516c52ef1714e0abbf594f1f6be8492aced3f502a7f49c2a1b12c69b6c57c01300f71f582639f42001c3ece2bad4f9b4ff2b1a1266c3e36e9bd0d91 +doccontainersize 44216 +doccontainerchecksum 0396291a9213e2b80607572a2313801a6a93f4ca2f54889a4c18e8330ffe9f057b856ff957d58d61ddc2828838c6db9e45e26cf611ff88ee80f3b2073668ed64 docfiles size=14 RELOC/doc/fonts/theanodidot/README details="Readme" RELOC/doc/fonts/theanodidot/SILOpenFontLicense.txt @@ -311857,7 +311897,7 @@ catalogue-topics font font-body font-serif font-proportional font-greek font-mul name theanomodern category Package -revision 54512 +revision 64520 shortdesc Theano Modern fonts with LaTeX support relocated 1 longdesc This package provides the TheanoModern font designed by Alexey @@ -311868,10 +311908,10 @@ longdesc no italic variants. The package is named after Theano, a famous longdesc Ancient Greek woman philosopher, who was first a student of longdesc Pythagoras, and supposedly became his wife. execute addMap TheanoModern.map -containersize 401128 -containerchecksum a306f5b0145c1304157403de3a1ba0e0c350b1cb2bf467c5fbc5a0f4427622029c1c37b6b139f4e0fcdd145f30a979fe821353eb0782a0fdbaac6d614d041b78 -doccontainersize 33260 -doccontainerchecksum c2181c14b43a5a9670ed13e9f2828c4effabaf06a9377789c3510072c779251e3d857bbbc5655bd0285cd7f05b23c0a669292f4ef5667dfb35ae89ea70cd838a +containersize 401120 +containerchecksum c940c73df2143395fc4f2887e0273850787cda96cf586b0a2067ae39efdcde999338eb7826fac9af5e97bca978bb309b0478e1dcda43cae0a0b3266430d3348b +doccontainersize 33272 +doccontainerchecksum 934ad9a47609277dc1a10bd20f55f0ca01b6f1167a574ee8609352d94f4aff6305db9ca0e3ca5b83cad1f1eac74e5227fa92acd65df9de3f91abcb653f60d21e docfiles size=12 RELOC/doc/fonts/theanomodern/README details="Readme" RELOC/doc/fonts/theanomodern/SILOpenFontLicense.txt @@ -311946,7 +311986,7 @@ catalogue-topics font font-body font-greek font-multilingual font-serif font-pro name theanooldstyle category Package -revision 54512 +revision 64519 shortdesc Theano OldStyle fonts with LaTeX support relocated 1 longdesc This package provides the Theano OldStyle font designed by @@ -311957,10 +311997,10 @@ longdesc no italic variants. The package is named after Theano, a famous longdesc Ancient Greek woman philosopher, who was first a student of longdesc Pythagoras, and supposedly became his wife. execute addMap TheanoOldStyle.map -containersize 493064 -containerchecksum b8890a2f8af2700c042d1953fbf8c8cf0d499d7458985476bba4a1ad83c9b4c6ec9f8d6f30986b57ca532b0b41208ce07d4d76687f52fa8863da75cc39f24d24 +containersize 493056 +containerchecksum b2df891fef113bcd50ba63cea16942738a9c8665a1644187401ba471e53c2f35070c8a339c1281e4d679dae39e22497de92d854ab311720903e676dd7e7b7413 doccontainersize 34680 -doccontainerchecksum ceb00e62d2e9adeab0244ba58b052fcc0a068f7afd8e3936767909b8377da11c8178eaa9015d1d84dd95cc4b5c63c01654e032855b707c03197b63c9e2097d55 +doccontainerchecksum cb896fd78684c8c21ae5579da4b510636336e4959c0943577657aa90d2d843415eaaa2eb42e7d1cc031f6a50044a7702c7d01abb8af7dabd4b6132545c799a07 docfiles size=12 RELOC/doc/fonts/theanooldstyle/README details="Readme" RELOC/doc/fonts/theanooldstyle/SILOpenFontLicense.txt @@ -340327,6 +340367,127 @@ catalogue-license lppl catalogue-topics layout-page catalogue-version 1.10 +name wargame +category Package +revision 64522 +shortdesc A LaTeX package to prepare hex'n'counter wargames +relocated 1 +longdesc This package can help make classic Hex'n'Counter wargames using +longdesc LaTeX. The package provide tools for generating Hex maps and +longdesc boards Counters for units, markers, and so on Counter sheets +longdesc Order of Battle charts Illustrations in the rules using the +longdesc defined maps and counters The result will often be a PDF (or +longdesc set of PDFs) that contain everything one will need for a game +longdesc (rules, charts, boards, counter sheets). The package uses NATO +longdesc App6 symbology for units. The package uses NATO App6 symbology +longdesc for units. The package uses TikZ for most things. The package +longdesc support exporting the game to a VASSAL module See also the +longdesc README.md file for more, and of course the documentation +longdesc (including the tutorial in tutorial/game.pdf). +containersize 194216 +containerchecksum 4533cea1d27de88d445e1798b60031c4476a1d602522c224d55a0d6a819d42848c42c3b9ef85afe6481269226073d47382768fb422418be21030ae02428c468e +doccontainersize 2352972 +doccontainerchecksum b137b187b219ad516eadab9b369831dca12042b76bef315c205ce28ee8818c53cbd3529d1cffd5d9744a14000d85da5b17a8b96763ff1ab24408e5134fcf402b +docfiles size=644 + RELOC/doc/latex/wargame/README.md details="Readme" + RELOC/doc/latex/wargame/compat.pdf + RELOC/doc/latex/wargame/symbols.pdf + RELOC/doc/latex/wargame/tutorial/Makefile + RELOC/doc/latex/wargame/tutorial/README.md details="Readme" + RELOC/doc/latex/wargame/tutorial/export.tex + RELOC/doc/latex/wargame/tutorial/game.pdf + RELOC/doc/latex/wargame/tutorial/game.sty + RELOC/doc/latex/wargame/tutorial/game.tex + RELOC/doc/latex/wargame/tutorial/patch.py + RELOC/doc/latex/wargame/wargame.pdf details="Package documentation" +srccontainersize 153572 +srccontainerchecksum c97603d1af2381ded87cda539505c13279e495a76fb0e02d034cd239eee5f88b5850d90bb3b742766593bf1ea510a7c8fd301861aa82d860fdee5dfcfe80c816 +srcfiles size=281 + RELOC/source/latex/wargame/Makefile + RELOC/source/latex/wargame/chit/core.dtx + RELOC/source/latex/wargame/chit/elements.dtx + RELOC/source/latex/wargame/chit/misc.dtx + RELOC/source/latex/wargame/chit/shape.dtx + RELOC/source/latex/wargame/hex/board.dtx + RELOC/source/latex/wargame/hex/coord.dtx + RELOC/source/latex/wargame/hex/core.dtx + RELOC/source/latex/wargame/hex/extra.dtx + RELOC/source/latex/wargame/hex/labels.dtx + RELOC/source/latex/wargame/hex/paths.dtx + RELOC/source/latex/wargame/hex/ridges.dtx + RELOC/source/latex/wargame/hex/shape.dtx + RELOC/source/latex/wargame/hex/terrain.dtx + RELOC/source/latex/wargame/hex/terrain/beach.dtx + RELOC/source/latex/wargame/hex/terrain/city.dtx + RELOC/source/latex/wargame/hex/terrain/light_woods.dtx + RELOC/source/latex/wargame/hex/terrain/mountain.dtx + RELOC/source/latex/wargame/hex/terrain/mountains.dtx + RELOC/source/latex/wargame/hex/terrain/rough.dtx + RELOC/source/latex/wargame/hex/terrain/swamp.dtx + RELOC/source/latex/wargame/hex/terrain/town.dtx + RELOC/source/latex/wargame/hex/terrain/tree.dtx + RELOC/source/latex/wargame/hex/terrain/village.dtx + RELOC/source/latex/wargame/hex/terrain/woods.dtx + RELOC/source/latex/wargame/hex/tile.dtx + RELOC/source/latex/wargame/hex/towns.dtx + RELOC/source/latex/wargame/natoapp6c/compat/activity.dtx + RELOC/source/latex/wargame/natoapp6c/compat/air.dtx + RELOC/source/latex/wargame/natoapp6c/compat/equipment.dtx + RELOC/source/latex/wargame/natoapp6c/compat/installation.dtx + RELOC/source/latex/wargame/natoapp6c/compat/land.dtx + RELOC/source/latex/wargame/natoapp6c/compat/missile.dtx + RELOC/source/latex/wargame/natoapp6c/compat/seamine.dtx + RELOC/source/latex/wargame/natoapp6c/compat/seasurface.dtx + RELOC/source/latex/wargame/natoapp6c/compat/space.dtx + RELOC/source/latex/wargame/natoapp6c/compat/subsurface.dtx + RELOC/source/latex/wargame/natoapp6c/core.dtx + RELOC/source/latex/wargame/natoapp6c/echelon.dtx + RELOC/source/latex/wargame/natoapp6c/frames/base.dtx + RELOC/source/latex/wargame/natoapp6c/frames/friendly.dtx + RELOC/source/latex/wargame/natoapp6c/frames/hostile.dtx + RELOC/source/latex/wargame/natoapp6c/frames/neutral.dtx + RELOC/source/latex/wargame/natoapp6c/frames/unknown.dtx + RELOC/source/latex/wargame/natoapp6c/list.dtx + RELOC/source/latex/wargame/natoapp6c/shape.dtx + RELOC/source/latex/wargame/natoapp6c/symbols.dtx + RELOC/source/latex/wargame/natoapp6c/text.dtx + RELOC/source/latex/wargame/natoapp6c/util.dtx + RELOC/source/latex/wargame/natoapp6c/weaponry.dtx + RELOC/source/latex/wargame/package.dtx + RELOC/source/latex/wargame/tests/chits.dtx + RELOC/source/latex/wargame/tests/map.dtx + RELOC/source/latex/wargame/tests/test.tex + RELOC/source/latex/wargame/util/core.dtx + RELOC/source/latex/wargame/utils/wgexport.py + RELOC/source/latex/wargame/utils/wgsvg2tikz.py + RELOC/source/latex/wargame/wargame.dtx + RELOC/source/latex/wargame/wargame.ins +runfiles size=215 + RELOC/tex/latex/wargame/tikzlibrarywargame.chit.code.tex + RELOC/tex/latex/wargame/tikzlibrarywargame.hex.code.tex + RELOC/tex/latex/wargame/tikzlibrarywargame.natoapp6c.code.tex + RELOC/tex/latex/wargame/tikzlibrarywargame.util.code.tex + RELOC/tex/latex/wargame/wargame.beach.pdf + RELOC/tex/latex/wargame/wargame.city.pdf + RELOC/tex/latex/wargame/wargame.light_woods.pdf + RELOC/tex/latex/wargame/wargame.mountains.pdf + RELOC/tex/latex/wargame/wargame.rough.pdf + RELOC/tex/latex/wargame/wargame.sty + RELOC/tex/latex/wargame/wargame.swamp.pdf + RELOC/tex/latex/wargame/wargame.town.pdf + RELOC/tex/latex/wargame/wargame.village.pdf + RELOC/tex/latex/wargame/wargame.woods.pdf + RELOC/tex/latex/wargame/wgexport.cls + RELOC/tex/latex/wargame/wgexport.py + RELOC/tex/latex/wargame/wgsvg2tikz.py +catalogue-contact-home https://gitlab.com/wargames_tex/wargame_tex +catalogue-contact-repository https://gitlab.com/wargames_tex/wargame_tex +catalogue-contact-support https://gitlab.com/wargames_tex/wargame_tex +catalogue-ctan /macros/latex/contrib/wargame +catalogue-license cc-by-nc-4 +catalogue-topics pgf-tikz games symbol-supp +catalogue-version 0.3.2 + name warning category Package revision 22028 diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index d6ffcad99e..afbc1b7106 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -03647c0d9e41172bcbd681e9c3b0ffa4 texlive.tlpdb +82b2f11b4a67882e8fabe5a412a4f4ba texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index f28a5b0501..a158b09dbd 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -134af228964e3c1d4f466032d420f8905098333ba40522b1aa48310b7e45589d0f91fae25d7d84bc62156ce99d32aaf832fd572257d6c91ecfa9f1583455769e texlive.tlpdb +9232ee25673d03f2c7216c86cf4be4985b668e930e532e2e57ffaec7331c367e8a4c7ef36ecdbba333889fdd46a2e028459f3aba14bbc754eeb96dcff47c8405 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index 6dd74e8db2..d287ffba18 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc @@ -1,10 +1,10 @@ -----BEGIN PGP SIGNATURE----- -iQEcBAEBCgAGBQJjMOnrAAoJEEzhh34ZQ4xwMpYH/AxU7/ci0YCCYzjjP6g78Lpp -HEt4/Kz6B7DZqJP4HreLJPJ06n2uQd4FIhngM/O72DUCR3q1AwbwdZ32PxIUSU7y -RTTbsi5cCyJ5pN/EPmgAX1D0ClxxqK3+y6T6TIeXlD/Pra8DHrzYKs31YUfi58Ww -fmATblaMAItCMmwxl8lM5YRwMGlCzoK0dlcu40pZuK6Ql/8alwutbayX4ML/eH84 -Ol74Dj7a+6Odap2dIQoPl+kLcfkrEUUxcgzeE9sRlgnO6O0mhT7AKWsCKKji8Z2z -KCDziAJO4sMWw9m2zIkhiL1n7E8Wqo2pOMp97cSFdCLlMvfR4nyHozf2NmwhE48= -=S3Hj +iQEcBAEBCgAGBQJjMjtrAAoJEEzhh34ZQ4xw/z4H/R6J0JZ2r84qF5o4dtnYlr2X +yHhZDZ1yXOzzYY0Fu4XG8b4HjkhOtUILVykX48QechLAxx16slwBYQk22vGwUC2+ +DXq1Zr7umzkDtWFN3iLWPLf1L58aV60m0CYgYB1ceBnlr4AsZ0wmb2Hr5YrUO5DP +6mOOxlsyLmD4N+Sb1/wNbEjAzeYO+4ow6xxOnjbsjFG+HvkL735PcB+V5fuP1cbb +jZRZEZZ1mGtZczaVOyQYOlDX+0B+1ZynP1qOA73//Jcnk3T49qOhPVHkDOlmgeSr +NXvoCuO1VS9dtfapv+ESLIS6Fhku0E+dBzA81qWREfF3C6jF8mrLo/QUpQVZyHU= +=H7Qg -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 8861e44772..f1a8d9b81b 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini index 21913eaab4..468e266c43 100644 --- a/systems/win32/miktex/tm/packages/next/pr.ini +++ b/systems/win32/miktex/tm/packages/next/pr.ini @@ -1,13 +1,13 @@ [repository] -date=1664136985 +date=1664223388 lastupd=miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-x64-2.9 miktex-cjkutils-bin-x64-2.9 miktex-console-bin-x64-2.9 miktex-curl-bin-x64-2.9 miktex-cweb-bin-x64-2.9 miktex-devnag-bin-x64-2.9 miktex-doc miktex-dvicopy-bin-x64-2.9 miktex-dvipdfmx-bin-x64-2.9 miktex-dvipng-bin-x64-2.9 miktex-dvips-bin-x64-2.9 -lstdigest=e79924c583a63b8741c02114f1f3621c +lstdigest=91e091aa0850a4775492bf9d4932a76b numpkg=6004 relstate=next -version=8303 +version=8304 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: L0q/0jI1nmY4k0JebvTKOJuWLSM0kUAu2GmduirbPPK4HwQcswZZt7dhntlzwA5AuBqh4ES/a2yhsOxj9TZVzKdzrYonFpVmQL59u5QbD1NXTofNrJipd22Xuw3fzuAkN27/JyBDR4NScjMF5PleTVRwKpnlTGPZZgSqxur8nQP+BHSIK9rrRCsoCA+oCMHRYFl1jDS2q6LhcgpHosxNYrDUnCYbs5g6s8ltcISt4qzzpFRxQvRExX9CW3hPgSaWYpkRhMv3JpIrO+mWQfzPhGZrP9CEAqQ9tLf6jo7qDpnGSI2UrHC8f4Ogm3UUOqS+PlDlLuOCZ00Ap6M07yJIXQ== +;;;; signature/miktex: vg1YGPkZJrgXMsQIPvseIkM73nmFspD3mCtc8j8GGpMiUtSaAE1ee0H0W7BuTmzYvhODltlmjLK/hx4XG1xMr+75gtKxdFC9W3sMHoiy8InD5sqNyfSDE+5Ag9T9hH2RwAfFOc6EwENWtzziMILMGGtlATKpnpPgU7qLGr8ILXAmD6tcfLsOYxPUgs3tXu9f8GC/o2DP7VUR/cOSMYj2O8CivcOeePp0SOjZhnatB3yi6exJZ3YVYCGQFqAZJJd+fqiQjSqXdJ3nkbgY7VDRN7rV1/5TLHSsUqoVyfH2tGY8Z9JXwVs2ANJG5tqhgC21KNEZum4iyGico79QL1W1sQ== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini index fc7e626433..b3c0295e9a 100644 --- a/systems/win32/miktex/tm/packages/pr.ini +++ b/systems/win32/miktex/tm/packages/pr.ini @@ -1,13 +1,13 @@ [repository] -date=1664136697 +date=1664223094 lastupd=abspos abspos__doc abspos__source alegreya alegreya__doc animate animate__doc asmeconf asmeconf__doc asmeconf__source atkinson atkinson__doc babel babel__doc babel__source beamer beamer__doc beamertheme-tcolorbox beamertheme-tcolorbox__doc beamertheme-tcolorbox__source -lstdigest=af5c065d056c81202a6d378512600995 +lstdigest=1e9a987f516f1b70dfb6a18df8cda6e5 numpkg=6004 relstate=stable -version=8303 +version=8304 ;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows. ;;;;-----BEGIN MIKTEX SIGNATURE----- -;;;; signature/miktex: LrnAn/ylGA85CyGGEVKlxR4f8ce0YC5EVebjy4S/pfAj0TNo/u/j4J4XouzFNd7xiyCSpt49n6GFY2zbzuUmuHyJOngxGqNQtRFrTyVHO5Nauvs1YME6Rcm2/JYYlLXAVtIxSHVE4xA9eonUWfR/N+ddEPEH3QkjRjkSA9XHxmrFADSgenr50agJQgLAriqijCM6UjqMupxZOA1t/ZAtAassrdU0a4JWP5LUaEigT9OKQSuEaYQHArsKDLuBVJPBj3y17L/FlTnO3SrWwvYfWnKGUvl0uTKG08Eb5sSldeceudVRP/qjUMw2gypBql+zB3LCCwlRbLbW1k++OamI4Q== +;;;; signature/miktex: ucm3ZPko1b3HksPBT7KuUXaRZIasrkbXYbylqpC3r2x2Z+WNywcSnmdMQYb/bASSRJ0w3FlChAxSacL3jcmlQDa5SoZrAIf/1xgQJIani6uPy8uSeCCTg7dzJjx9uQUa+B+HpojFM8W5qfIkbh/Cf1Dzg6x0XIS9XCan+e9UJnF2/jo9WKxPKaMFJQhas7uqNt7SzyfC9jiHZCa8dnObA9iSC8vzs18hkbR3EWJWCfelwf6SFDwrVhk7QKEg3n1HMtY1wQe5+dGkDrZiuh927DJWTK2yTjx79LFIXjIIqEzsJHUm5WnHDWYB6qXbeqYKwmJXmM37gukXaelGshgiww== ;;;;-----END MIKTEX SIGNATURE----- diff --git a/timestamp b/timestamp index 432b234311..73b9b7d8be 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: -2022-09-26-02-02 +2022-09-27-02-02 -- cgit v1.2.3