summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname860
-rw-r--r--FILES.byname.gzbin2483843 -> 2484003 bytes
-rw-r--r--FILES.last07days454
-rw-r--r--biblio/ctan-bibdata/ctan.bib36
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3624853 -> 3626862 bytes
-rw-r--r--macros/latex-dev/base/README.md2
-rw-r--r--macros/latex-dev/base/alltt.pdfbin223831 -> 223831 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin264112 -> 264112 bytes
-rw-r--r--macros/latex-dev/base/changes.txt77
-rw-r--r--macros/latex-dev/base/classes.pdfbin560611 -> 560326 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin414419 -> 414419 bytes
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292160 -> 292160 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin257314 -> 257314 bytes
-rw-r--r--macros/latex-dev/base/doc-code.pdfbin1077527 -> 1075110 bytes
-rw-r--r--macros/latex-dev/base/doc.dtx244
-rw-r--r--macros/latex-dev/base/doc.pdfbin755064 -> 755547 bytes
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin504553 -> 504178 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1318126 -> 1318126 bytes
-rw-r--r--macros/latex-dev/base/exscale.pdfbin204711 -> 204711 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin287733 -> 287733 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin517838 -> 517838 bytes
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin161713 -> 161713 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin221211 -> 221211 bytes
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin318204 -> 318204 bytes
-rw-r--r--macros/latex-dev/base/lamport-manual.pdfbin170878 -> 170878 bytes
-rw-r--r--macros/latex-dev/base/latexrelease.dtx11
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin281906 -> 282115 bytes
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin200760 -> 200760 bytes
-rw-r--r--macros/latex-dev/base/lb2.pdfbin252140 -> 252140 bytes
-rw-r--r--macros/latex-dev/base/letter.pdfbin337630 -> 337430 bytes
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin215684 -> 215684 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin132382 -> 132382 bytes
-rw-r--r--macros/latex-dev/base/ltclass.dtx23
-rw-r--r--macros/latex-dev/base/ltcmd.dtx46
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin719104 -> 719408 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin478606 -> 478686 bytes
-rw-r--r--macros/latex-dev/base/ltdefns.dtx226
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin803024 -> 803060 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin547895 -> 547926 bytes
-rw-r--r--macros/latex-dev/base/ltfinal.dtx34
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1091409 -> 1091429 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin701468 -> 701473 bytes
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin325457 -> 324910 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-code.pdfbin715524 -> 715658 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-doc.pdfbin585896 -> 586024 bytes
-rw-r--r--macros/latex-dev/base/ltmiscen.dtx10
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1243036 -> 1255282 bytes
-rw-r--r--macros/latex-dev/base/ltnews.tex2
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin161518 -> 161518 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin159792 -> 159792 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin159332 -> 159332 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin152525 -> 152525 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin174494 -> 174494 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142849 -> 142849 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin137811 -> 137811 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155053 -> 155053 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin129570 -> 129570 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin169416 -> 169416 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin111948 -> 111948 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin156551 -> 156551 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin182225 -> 182225 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin170473 -> 170473 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130309 -> 130309 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin138073 -> 138073 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166228 -> 166228 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin38033 -> 38033 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin230028 -> 230028 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin318548 -> 318548 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin244867 -> 244867 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin317773 -> 317773 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin286591 -> 286591 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265279 -> 265279 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin204935 -> 204935 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379462 -> 379462 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin250592 -> 250592 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin376643 -> 376643 bytes
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin455107 -> 455107 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin511909 -> 511909 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526323 -> 526323 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546160 -> 546160 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin522412 -> 522412 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.pdfbin508044 -> 508044 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.pdfbin563089 -> 563089 bytes
-rw-r--r--macros/latex-dev/base/ltnews36.pdfbin517577 -> 517565 bytes
-rw-r--r--macros/latex-dev/base/ltnews36.tex9
-rw-r--r--macros/latex-dev/base/ltnews37.pdfbin0 -> 408962 bytes
-rw-r--r--macros/latex-dev/base/ltnews37.tex378
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin667097 -> 667129 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin559976 -> 560008 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin818741 -> 820928 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin563518 -> 565931 bytes
-rw-r--r--macros/latex-dev/base/ltshipout.dtx51
-rw-r--r--macros/latex-dev/base/ltspace.dtx16
-rw-r--r--macros/latex-dev/base/ltvers.dtx31
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219349 -> 219349 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.dtx11
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin242645 -> 243286 bytes
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin165821 -> 165821 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin257804 -> 257804 bytes
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin211180 -> 211180 bytes
-rw-r--r--macros/latex-dev/base/proc.pdfbin227059 -> 227059 bytes
-rw-r--r--macros/latex-dev/base/slides.pdfbin375518 -> 375518 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin234191 -> 234191 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin5769593 -> 5789493 bytes
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin189704 -> 189819 bytes
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin290615 -> 290615 bytes
-rw-r--r--macros/latex-dev/base/tulm.pdfbin162772 -> 162772 bytes
-rw-r--r--macros/latex-dev/base/usrguide-historic.pdfbin438515 -> 438515 bytes
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin473980 -> 474808 bytes
-rw-r--r--macros/latex-dev/base/usrguide.tex25
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin353237 -> 353428 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146198 -> 146198 bytes
-rw-r--r--macros/latex-dev/required/firstaid/changes.txt10
-rw-r--r--macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx40
-rw-r--r--macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdfbin268310 -> 271476 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/README4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdfbin407139 -> 407279 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex12
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx61
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx2
-rw-r--r--macros/latex/contrib/ppt-slides/DEPENDS.txt13
-rw-r--r--macros/latex/contrib/ppt-slides/LICENSE.txt21
-rw-r--r--macros/latex/contrib/ppt-slides/README.md9
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.dtx662
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.ins55
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.pdfbin229579 -> 885857 bytes
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.sty227
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.tex262
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex1
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin397454 -> 397760 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty107
-rw-r--r--macros/latex/contrib/semantex/semantex.tex62
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.lua620
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.sty2
-rw-r--r--macros/luatex/generic/pdfextra/examples/pdfextra-example.pdfbin385350 -> 385337 bytes
-rw-r--r--macros/luatex/generic/pdfextra/pdfextra-doc.pdfbin245952 -> 232911 bytes
-rw-r--r--macros/luatex/generic/pdfextra/pdfextra.opm20
-rw-r--r--macros/luatex/generic/pdfextra/pdfextra.tex30
-rw-r--r--macros/optex/README11
-rw-r--r--macros/optex/base/alloc.opm5
-rw-r--r--macros/optex/base/basic-macros.opm22
-rw-r--r--macros/optex/base/bib-simple.opm49
-rw-r--r--macros/optex/base/cite-bib.opm2
-rw-r--r--macros/optex/base/doc.opm34
-rw-r--r--macros/optex/base/f-heros.opm17
-rw-r--r--macros/optex/base/f-iwona.opm26
-rw-r--r--macros/optex/base/f-kurier.opm26
-rw-r--r--macros/optex/base/f-lato.opm34
-rw-r--r--macros/optex/base/fams-ini.opm19
-rw-r--r--macros/optex/base/fnotes.opm4
-rw-r--r--macros/optex/base/fonts-catalog.opm2
-rw-r--r--macros/optex/base/fonts-resize.opm72
-rw-r--r--macros/optex/base/fonts-select.opm25
-rw-r--r--macros/optex/base/graphics.opm12
-rw-r--r--macros/optex/base/hi-syntax.opm20
-rw-r--r--macros/optex/base/hyperlinks.opm6
-rw-r--r--macros/optex/base/if-macros.opm63
-rw-r--r--macros/optex/base/lang-data.opm24
-rw-r--r--macros/optex/base/lang-decl.opm16
-rw-r--r--macros/optex/base/languages.opm7
-rw-r--r--macros/optex/base/makeindex.opm6
-rw-r--r--macros/optex/base/math-preload.opm63
-rw-r--r--macros/optex/base/more-macros.opm119
-rw-r--r--macros/optex/base/multicolumns.opm7
-rw-r--r--macros/optex/base/optex.ini6
-rw-r--r--macros/optex/base/optex.lua107
-rw-r--r--macros/optex/base/others.opm8
-rw-r--r--macros/optex/base/output.opm7
-rw-r--r--macros/optex/base/pdfuni-string.opm12
-rw-r--r--macros/optex/base/plain-macros.opm19
-rw-r--r--macros/optex/base/prefixed.opm178
-rw-r--r--macros/optex/base/ref-file.opm2
-rw-r--r--macros/optex/base/references.opm6
-rw-r--r--macros/optex/base/sections.opm27
-rw-r--r--macros/optex/base/table.opm14
-rw-r--r--macros/optex/base/unimath-codes.opm65
-rw-r--r--macros/optex/base/unimath-macros.opm (renamed from macros/optex/base/math-unicode.opm)151
-rw-r--r--macros/optex/base/verbatim.opm10
-rw-r--r--macros/optex/doc/mte-doc.tex26
-rw-r--r--macros/optex/doc/optex-doc.pdfbin1437685 -> 1484007 bytes
-rw-r--r--macros/optex/doc/optex-doc.tex2
-rw-r--r--macros/optex/doc/optex-math.tex33
-rw-r--r--macros/optex/doc/optex-techdoc.tex8
-rw-r--r--macros/optex/doc/optex-userdoc.tex32
-rw-r--r--macros/optex/pkg/math.opm639
-rw-r--r--macros/optex/pkg/mte.opm32
-rw-r--r--macros/unicodetex/latex/njuthesis/njuthesis.dtx586
-rw-r--r--macros/unicodetex/latex/njuthesis/njuthesis.pdfbin1200264 -> 1176569 bytes
-rw-r--r--macros/xetex/latex/xduts/xduts.dtx263
-rw-r--r--macros/xetex/latex/xduts/xduts.pdfbin306469 -> 307600 bytes
-rw-r--r--support/TeX4ht/source/ChangeLog6
-rw-r--r--support/TeX4ht/source/tex4ht-4ht.tex6
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl1
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb92
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2431632 -> 2430876 bytes
-rw-r--r--timestamp2
200 files changed, 5393 insertions, 2426 deletions
diff --git a/FILES.byname b/FILES.byname
index 736867116e..381b5b0363 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2035,12 +2035,12 @@
2022/09/23 | 1673 | biblio/citation-style-language/README.md
2022/09/23 | 11958 | biblio/citation-style-language/vancouver.csl
2022/09/23 | 591448 | biblio/citation-style-language.zip
-2022/12/02 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2022/12/03 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2022/12/02 | 2747416 | biblio/ctan-bibdata/ctan.bib
-2022/12/02 | 3624126 | biblio/ctan-bibdata/ctan.pdf
+2022/12/03 | 2747422 | biblio/ctan-bibdata/ctan.bib
+2022/12/03 | 3624853 | biblio/ctan-bibdata/ctan.pdf
2022/10/08 | 1415 | biblio/ctan-bibdata/README
-2022/12/02 | 4017985 | biblio/ctan-bibdata.zip
+2022/12/03 | 4018012 | biblio/ctan-bibdata.zip
2022/02/06 | 3110 | biblio/pbibtex/pbibtex-base/cpp.awk
2022/02/06 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2022/02/06 | 22422 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5414,7 +5414,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/12/02 | 434321 | FILES.last07days
+2022/12/03 | 429952 | 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
@@ -190513,9 +190513,9 @@
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/10/31 | 39023437 | install/macros/latex-dev/latex-base-dev.tds.zip
+2022/12/03 | 39466146 | install/macros/latex-dev/latex-base-dev.tds.zip
2022/10/31 | 2795153 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
-2022/10/31 | 274488 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip
+2022/12/03 | 277960 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip
2022/10/31 | 3109665 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
2022/10/31 | 2303239 | install/macros/latex-dev/required/latex-lab-dev.tds.zip
2022/10/31 | 7339002 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
@@ -210485,13 +210485,13 @@
2019/12/03 | 1387 | macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx
2019/12/03 | 655 | macros/latex/contrib/biblatex-contrib/biblatex-phys/README.md
2019/12/03 | 459931 | macros/latex/contrib/biblatex-contrib/biblatex-phys.zip
-2022/10/24 | 407139 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
-2022/10/24 | 60358 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
-2022/10/24 | 63183 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
-2022/10/24 | 3478 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
-2022/10/24 | 998 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
-2022/10/24 | 8724 | macros/latex/contrib/biblatex-contrib/biblatex-publist/README
-2022/10/24 | 439729 | macros/latex/contrib/biblatex-contrib/biblatex-publist.zip
+2022/12/03 | 407279 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
+2022/12/03 | 60516 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
+2022/12/03 | 63700 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
+2022/12/03 | 3478 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
+2022/12/03 | 998 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
+2022/12/03 | 8827 | macros/latex/contrib/biblatex-contrib/biblatex-publist/README
+2022/12/03 | 439953 | macros/latex/contrib/biblatex-contrib/biblatex-publist.zip
2022/01/09 | 41 | macros/latex/contrib/biblatex-contrib/biblatex-readbbl/Changes
2022/01/09 | 25895 | macros/latex/contrib/biblatex-contrib/biblatex-readbbl/doc/biblatex-readbbl.pdf
2022/01/09 | 5095 | macros/latex/contrib/biblatex-contrib/biblatex-readbbl/doc/biblatex-readbbl.tex
@@ -228509,18 +228509,19 @@
2005/09/04 | 335095 | macros/latex/contrib/ppr-prv/ppr-prv.pdf
2005/09/02 | 4261 | macros/latex/contrib/ppr-prv/README
2005/09/04 | 328544 | macros/latex/contrib/ppr-prv.zip
-2022/09/19 | 174 | macros/latex/contrib/ppt-slides/DEPENDS.txt
-2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark-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-light-mono.tex
-2022/09/19 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light.tex
-2022/09/19 | 229579 | macros/latex/contrib/ppt-slides/ppt-slides.pdf
-2022/09/19 | 5856 | macros/latex/contrib/ppt-slides/ppt-slides.sty
-2022/09/19 | 8372 | macros/latex/contrib/ppt-slides/ppt-slides.tex
-2022/09/19 | 3923 | macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
-2022/09/19 | 1576 | macros/latex/contrib/ppt-slides/README.md
-2022/09/19 | 94352 | macros/latex/contrib/ppt-slides/socrates.jpg
-2022/09/19 | 323429 | macros/latex/contrib/ppt-slides.zip
+2022/12/03 | 272 | macros/latex/contrib/ppt-slides/DEPENDS.txt
+2022/12/03 | 1078 | macros/latex/contrib/ppt-slides/LICENSE.txt
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark-mono.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light-mono.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light.tex
+2022/12/03 | 17914 | macros/latex/contrib/ppt-slides/ppt-slides.dtx
+2022/12/03 | 2640 | macros/latex/contrib/ppt-slides/ppt-slides.ins
+2022/12/03 | 885857 | macros/latex/contrib/ppt-slides/ppt-slides.pdf
+2022/12/03 | 3989 | macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
+2022/12/03 | 1620 | macros/latex/contrib/ppt-slides/README.md
+2022/12/03 | 94352 | macros/latex/contrib/ppt-slides/socrates.jpg
+2022/12/03 | 972411 | macros/latex/contrib/ppt-slides.zip
2007/08/13 | 4545 | macros/latex/contrib/pracjourn/pjsample.ltx
2006/11/16 | 122311 | macros/latex/contrib/pracjourn/pjsample.pdf
2007/08/25 | 50011 | macros/latex/contrib/pracjourn/pracjourn.dtx
@@ -231013,12 +231014,12 @@
2019/12/10 | 537307 | macros/latex/contrib/selinput/selinput.pdf
2019/12/11 | 541126 | macros/latex/contrib/selinput.zip
2022/09/24 | 1660 | macros/latex/contrib/semantex/README.md
-2022/10/04 | 397454 | macros/latex/contrib/semantex/semantex.pdf
-2022/10/04 | 298106 | macros/latex/contrib/semantex/semantex.sty
-2022/09/27 | 181115 | macros/latex/contrib/semantex/semantex.tex
-2022/09/22 | 12270 | macros/latex/contrib/semantex/stripsemantex.lua
-2022/10/04 | 4736 | macros/latex/contrib/semantex/stripsemantex.sty
-2022/10/04 | 454311 | macros/latex/contrib/semantex.zip
+2022/12/03 | 397760 | macros/latex/contrib/semantex/semantex.pdf
+2022/12/03 | 300363 | macros/latex/contrib/semantex/semantex.sty
+2022/12/03 | 182031 | macros/latex/contrib/semantex/semantex.tex
+2022/09/22 | 11960 | macros/latex/contrib/semantex/stripsemantex.lua
+2022/12/03 | 4736 | macros/latex/contrib/semantex/stripsemantex.sty
+2022/12/03 | 455242 | macros/latex/contrib/semantex.zip
2020/01/29 | 1014 | macros/latex/contrib/semantic-markup/README
2020/01/29 | 266707 | macros/latex/contrib/semantic-markup/semantic-markup.pdf
2020/01/29 | 4666 | macros/latex/contrib/semantic-markup/semantic-markup.sty
@@ -238121,288 +238122,290 @@
2022/04/18 | 501158 | macros/latex/contrib/zwpagelayout/zwpagelayout.pdf
2022/04/18 | 36154 | macros/latex/contrib/zwpagelayout/zwpagelayout.sty
2022/04/18 | 69553 | macros/latex/contrib/zwpagelayout/zwpagelayout.tex
-2022/10/31 | 7104 | macros/latex-dev/base/alltt.dtx
-2022/10/31 | 2890 | macros/latex-dev/base/alltt.ins
-2022/10/31 | 223831 | macros/latex-dev/base/alltt.pdf
-2022/10/31 | 3282 | macros/latex-dev/base/bugs.txt
-2022/10/31 | 264112 | macros/latex-dev/base/cfgguide.pdf
-2022/10/31 | 22720 | macros/latex-dev/base/cfgguide.tex
-2022/10/31 | 42708 | macros/latex-dev/base/changes.old.txt
-2022/10/31 | 392105 | macros/latex-dev/base/changes.txt
-2022/10/31 | 156236 | macros/latex-dev/base/classes.dtx
-2022/10/31 | 4087 | macros/latex-dev/base/classes.ins
-2022/10/31 | 560611 | macros/latex-dev/base/classes.pdf
-2022/10/31 | 414419 | macros/latex-dev/base/clsguide.pdf
-2022/10/31 | 69315 | macros/latex-dev/base/clsguide.tex
-2022/10/31 | 5273 | macros/latex-dev/base/cmextra.ins
-2022/10/31 | 44410 | macros/latex-dev/base/cmfonts.fdd
-2022/10/31 | 4324 | macros/latex-dev/base/cmfonts.ins
-2022/10/31 | 292160 | macros/latex-dev/base/cmfonts.pdf
-2022/10/31 | 257314 | macros/latex-dev/base/cyrguide.pdf
-2022/10/31 | 17779 | macros/latex-dev/base/cyrguide.tex
-2022/10/31 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
-2022/10/31 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
-2022/10/31 | 1077527 | macros/latex-dev/base/doc-code.pdf
-2022/10/31 | 96 | macros/latex-dev/base/doc-code.tex
-2022/10/31 | 241167 | macros/latex-dev/base/doc.dtx
-2022/10/31 | 755064 | macros/latex-dev/base/doc.pdf
-2022/10/31 | 170595 | macros/latex-dev/base/docstrip.dtx
-2022/10/31 | 4273 | macros/latex-dev/base/docstrip.ins
-2022/10/31 | 504553 | macros/latex-dev/base/docstrip.pdf
-2022/10/31 | 4390 | macros/latex-dev/base/ec.ins
-2022/10/31 | 1318126 | macros/latex-dev/base/encguide.pdf
-2022/10/31 | 52813 | macros/latex-dev/base/encguide.tex
-2022/10/31 | 7216 | macros/latex-dev/base/exscale.dtx
-2022/10/31 | 3338 | macros/latex-dev/base/exscale.ins
-2022/10/31 | 204711 | macros/latex-dev/base/exscale.pdf
-2022/10/31 | 23516 | macros/latex-dev/base/fix-cm.dtx
-2022/10/31 | 2892 | macros/latex-dev/base/fix-cm.ins
-2022/10/31 | 287733 | macros/latex-dev/base/fix-cm.pdf
-2022/10/31 | 517838 | macros/latex-dev/base/fntguide.pdf
-2022/10/31 | 108231 | macros/latex-dev/base/fntguide.tex
-2022/10/31 | 60321 | macros/latex-dev/base/fontdef.dtx
-2022/10/31 | 9779 | macros/latex-dev/base/format.ins
-2022/10/31 | 5509 | macros/latex-dev/base/graphpap.dtx
-2022/10/31 | 2892 | macros/latex-dev/base/graphpap.ins
-2022/10/31 | 161713 | macros/latex-dev/base/graphpap.pdf
-2022/10/31 | 2705 | macros/latex-dev/base/idx.tex
-2022/10/31 | 18753 | macros/latex-dev/base/ifthen.dtx
-2022/10/31 | 2888 | macros/latex-dev/base/ifthen.ins
-2022/10/31 | 221211 | macros/latex-dev/base/ifthen.pdf
-2022/10/31 | 106904 | macros/latex-dev/base/inputenc.dtx
-2022/10/31 | 5714 | macros/latex-dev/base/inputenc.ins
-2022/10/31 | 318204 | macros/latex-dev/base/inputenc.pdf
-2022/10/31 | 4079 | macros/latex-dev/base/lablst.tex
-2022/10/31 | 13759 | macros/latex-dev/base/lamport-manual.err
-2022/10/31 | 170878 | macros/latex-dev/base/lamport-manual.pdf
-2022/10/31 | 38730 | macros/latex-dev/base/latex209.dtx
-2022/10/31 | 4219 | macros/latex-dev/base/latex209.ins
-2022/10/31 | 44976 | macros/latex-dev/base/latexrelease.dtx
-2022/10/31 | 6047 | macros/latex-dev/base/latexrelease.ins
-2022/10/31 | 281906 | macros/latex-dev/base/latexrelease.pdf
-2022/10/31 | 6709 | macros/latex-dev/base/latexsym.dtx
-2022/10/31 | 5041 | macros/latex-dev/base/latexsym.ins
-2022/10/31 | 200760 | macros/latex-dev/base/latexsym.pdf
-2022/10/31 | 52710 | macros/latex-dev/base/lb2.err
-2022/10/31 | 252140 | macros/latex-dev/base/lb2.pdf
-2022/10/31 | 1279 | macros/latex-dev/base/legal.txt
-2022/10/31 | 63280 | macros/latex-dev/base/letter.dtx
-2022/10/31 | 3372 | macros/latex-dev/base/letter.ins
-2022/10/31 | 337630 | macros/latex-dev/base/letter.pdf
-2022/10/31 | 20652 | macros/latex-dev/base/lgc2.err
-2022/10/31 | 215684 | macros/latex-dev/base/lgc2.pdf
-2022/10/31 | 9068 | macros/latex-dev/base/lppl-1-0.txt
-2022/10/31 | 14341 | macros/latex-dev/base/lppl-1-1.txt
-2022/10/31 | 14421 | macros/latex-dev/base/lppl-1-2.txt
-2022/10/31 | 132382 | macros/latex-dev/base/lppl.pdf
-2022/10/31 | 23386 | macros/latex-dev/base/lppl.tex
-2022/10/31 | 19040 | macros/latex-dev/base/lppl.txt
-2022/10/31 | 4298 | macros/latex-dev/base/ltalloc.dtx
-2022/10/31 | 17389 | macros/latex-dev/base/ltbibl.dtx
-2022/10/31 | 45712 | macros/latex-dev/base/ltboxes.dtx
-2022/10/31 | 143684 | macros/latex-dev/base/ltclass.dtx
-2022/10/31 | 182935 | macros/latex-dev/base/ltcmd.dtx
-2022/10/31 | 719104 | macros/latex-dev/base/ltcmdhooks-code.pdf
-2022/10/31 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
-2022/10/31 | 478606 | macros/latex-dev/base/ltcmdhooks-doc.pdf
-2022/10/31 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
-2022/10/31 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
-2022/10/31 | 9557 | macros/latex-dev/base/ltcntrl.dtx
-2022/10/31 | 24286 | macros/latex-dev/base/ltcounts.dtx
-2022/10/31 | 86388 | macros/latex-dev/base/ltdefns.dtx
-2022/10/31 | 35984 | macros/latex-dev/base/ltdirchk.dtx
-2022/10/31 | 27069 | macros/latex-dev/base/lterror.dtx
-2022/10/31 | 18711 | macros/latex-dev/base/ltexpl.dtx
-2022/10/31 | 803024 | macros/latex-dev/base/ltfilehook-code.pdf
-2022/10/31 | 105 | macros/latex-dev/base/ltfilehook-code.tex
-2022/10/31 | 547895 | macros/latex-dev/base/ltfilehook-doc.pdf
-2022/10/31 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
-2022/10/31 | 67351 | macros/latex-dev/base/ltfilehook.dtx
-2022/10/31 | 58933 | macros/latex-dev/base/ltfiles.dtx
-2022/10/31 | 49192 | macros/latex-dev/base/ltfinal.dtx
-2022/10/31 | 55687 | macros/latex-dev/base/ltfloat.dtx
-2022/10/31 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
-2022/10/31 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
-2022/10/31 | 82481 | macros/latex-dev/base/ltfssbas.dtx
-2022/10/31 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
-2022/10/31 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
-2022/10/31 | 84215 | macros/latex-dev/base/ltfssini.dtx
-2022/10/31 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
-2022/10/31 | 1091409 | macros/latex-dev/base/lthooks-code.pdf
-2022/10/31 | 102 | macros/latex-dev/base/lthooks-code.tex
-2022/10/31 | 701468 | macros/latex-dev/base/lthooks-doc.pdf
-2022/10/31 | 238 | macros/latex-dev/base/lthooks-doc.tex
-2022/10/31 | 211770 | macros/latex-dev/base/lthooks.dtx
-2022/10/31 | 4945 | macros/latex-dev/base/lthyphen.dtx
-2022/10/31 | 5859 | macros/latex-dev/base/ltidxglo.dtx
-2022/10/31 | 19853 | macros/latex-dev/base/ltkeys.dtx
-2022/10/31 | 4757 | macros/latex-dev/base/ltlength.dtx
-2022/10/31 | 36152 | macros/latex-dev/base/ltlists.dtx
-2022/10/31 | 3725 | macros/latex-dev/base/ltlogos.dtx
-2022/10/31 | 74886 | macros/latex-dev/base/ltluatex.dtx
-2022/10/31 | 325457 | macros/latex-dev/base/ltluatex.pdf
-2022/10/31 | 715524 | macros/latex-dev/base/ltmarks-code.pdf
-2022/10/31 | 102 | macros/latex-dev/base/ltmarks-code.tex
-2022/10/31 | 585896 | macros/latex-dev/base/ltmarks-doc.pdf
-2022/10/31 | 238 | macros/latex-dev/base/ltmarks-doc.tex
-2022/10/31 | 63132 | macros/latex-dev/base/ltmarks.dtx
-2022/10/31 | 41493 | macros/latex-dev/base/ltmath.dtx
-2022/10/31 | 6213 | macros/latex-dev/base/ltmeta.dtx
-2022/10/31 | 58745 | macros/latex-dev/base/ltmiscen.dtx
-2022/10/31 | 161518 | macros/latex-dev/base/ltnews01.pdf
-2022/10/31 | 5246 | macros/latex-dev/base/ltnews01.tex
-2022/10/31 | 159792 | macros/latex-dev/base/ltnews02.pdf
-2022/10/31 | 5462 | macros/latex-dev/base/ltnews02.tex
-2022/10/31 | 159332 | macros/latex-dev/base/ltnews03.pdf
-2022/10/31 | 5369 | macros/latex-dev/base/ltnews03.tex
-2022/10/31 | 152525 | macros/latex-dev/base/ltnews04.pdf
-2022/10/31 | 5678 | macros/latex-dev/base/ltnews04.tex
-2022/10/31 | 174494 | macros/latex-dev/base/ltnews05.pdf
-2022/10/31 | 5699 | macros/latex-dev/base/ltnews05.tex
-2022/10/31 | 142849 | macros/latex-dev/base/ltnews06.pdf
-2022/10/31 | 5544 | macros/latex-dev/base/ltnews06.tex
-2022/10/31 | 137811 | macros/latex-dev/base/ltnews07.pdf
-2022/10/31 | 5576 | macros/latex-dev/base/ltnews07.tex
-2022/10/31 | 155053 | macros/latex-dev/base/ltnews08.pdf
-2022/10/31 | 5732 | macros/latex-dev/base/ltnews08.tex
-2022/10/31 | 129570 | macros/latex-dev/base/ltnews09.pdf
-2022/10/31 | 5451 | macros/latex-dev/base/ltnews09.tex
-2022/10/31 | 169416 | macros/latex-dev/base/ltnews10.pdf
-2022/10/31 | 5825 | macros/latex-dev/base/ltnews10.tex
-2022/10/31 | 111948 | macros/latex-dev/base/ltnews11.pdf
-2022/10/31 | 5529 | macros/latex-dev/base/ltnews11.tex
-2022/10/31 | 156551 | macros/latex-dev/base/ltnews12.pdf
-2022/10/31 | 5574 | macros/latex-dev/base/ltnews12.tex
-2022/10/31 | 182225 | macros/latex-dev/base/ltnews13.pdf
-2022/10/31 | 7029 | macros/latex-dev/base/ltnews13.tex
-2022/10/31 | 170473 | macros/latex-dev/base/ltnews14.pdf
-2022/10/31 | 6424 | macros/latex-dev/base/ltnews14.tex
-2022/10/31 | 130309 | macros/latex-dev/base/ltnews15.pdf
-2022/10/31 | 5986 | macros/latex-dev/base/ltnews15.tex
-2022/10/31 | 138073 | macros/latex-dev/base/ltnews16.pdf
-2022/10/31 | 5775 | macros/latex-dev/base/ltnews16.tex
-2022/10/31 | 166228 | macros/latex-dev/base/ltnews17.pdf
-2022/10/31 | 8970 | macros/latex-dev/base/ltnews17.tex
-2022/10/31 | 38033 | macros/latex-dev/base/ltnews18.pdf
-2022/10/31 | 1341 | macros/latex-dev/base/ltnews18.tex
-2022/10/31 | 230028 | macros/latex-dev/base/ltnews19.pdf
-2022/10/31 | 4170 | macros/latex-dev/base/ltnews19.tex
-2022/10/31 | 318548 | macros/latex-dev/base/ltnews20.pdf
-2022/10/31 | 7221 | macros/latex-dev/base/ltnews20.tex
-2022/10/31 | 244867 | macros/latex-dev/base/ltnews21.pdf
-2022/10/31 | 9926 | macros/latex-dev/base/ltnews21.tex
-2022/10/31 | 317773 | macros/latex-dev/base/ltnews22.pdf
-2022/10/31 | 10792 | macros/latex-dev/base/ltnews22.tex
-2022/10/31 | 286591 | macros/latex-dev/base/ltnews23.pdf
-2022/10/31 | 10791 | macros/latex-dev/base/ltnews23.tex
-2022/10/31 | 265279 | macros/latex-dev/base/ltnews24.pdf
-2022/10/31 | 12334 | macros/latex-dev/base/ltnews24.tex
-2022/10/31 | 204935 | macros/latex-dev/base/ltnews25.pdf
-2022/10/31 | 5588 | macros/latex-dev/base/ltnews25.tex
-2022/10/31 | 379462 | macros/latex-dev/base/ltnews26.pdf
-2022/10/31 | 10798 | macros/latex-dev/base/ltnews26.tex
-2022/10/31 | 250592 | macros/latex-dev/base/ltnews27.pdf
-2022/10/31 | 5671 | macros/latex-dev/base/ltnews27.tex
-2022/10/31 | 376643 | macros/latex-dev/base/ltnews28.pdf
-2022/10/31 | 15047 | macros/latex-dev/base/ltnews28.tex
-2022/10/31 | 455107 | macros/latex-dev/base/ltnews29.pdf
-2022/10/31 | 18944 | macros/latex-dev/base/ltnews29.tex
-2022/10/31 | 511909 | macros/latex-dev/base/ltnews30.pdf
-2022/10/31 | 23637 | macros/latex-dev/base/ltnews30.tex
-2022/10/31 | 526323 | macros/latex-dev/base/ltnews31.pdf
-2022/10/31 | 30428 | macros/latex-dev/base/ltnews31.tex
-2022/10/31 | 546160 | macros/latex-dev/base/ltnews32.pdf
-2022/10/31 | 33239 | macros/latex-dev/base/ltnews32.tex
-2022/10/31 | 522412 | macros/latex-dev/base/ltnews33.pdf
-2022/10/31 | 33907 | macros/latex-dev/base/ltnews33.tex
-2022/10/31 | 508044 | macros/latex-dev/base/ltnews34.pdf
-2022/10/31 | 32307 | macros/latex-dev/base/ltnews34.tex
-2022/10/31 | 563089 | macros/latex-dev/base/ltnews35.pdf
-2022/10/31 | 38793 | macros/latex-dev/base/ltnews35.tex
-2022/10/31 | 517577 | macros/latex-dev/base/ltnews36.pdf
-2022/10/31 | 19332 | macros/latex-dev/base/ltnews36.tex
-2022/10/31 | 20469 | macros/latex-dev/base/ltnews.cls
-2022/10/31 | 1243036 | macros/latex-dev/base/ltnews.pdf
-2022/10/31 | 8367 | macros/latex-dev/base/ltnews.tex
-2022/10/31 | 148294 | macros/latex-dev/base/ltoutenc.dtx
-2022/10/31 | 3367 | macros/latex-dev/base/ltoutenc.ins
-2022/10/31 | 178723 | macros/latex-dev/base/ltoutput.dtx
-2022/10/31 | 14091 | macros/latex-dev/base/ltpage.dtx
-2022/10/31 | 2728 | macros/latex-dev/base/ltpageno.dtx
-2022/10/31 | 667097 | macros/latex-dev/base/ltpara-code.pdf
-2022/10/31 | 99 | macros/latex-dev/base/ltpara-code.tex
-2022/10/31 | 559976 | macros/latex-dev/base/ltpara-doc.pdf
-2022/10/31 | 234 | macros/latex-dev/base/ltpara-doc.tex
-2022/10/31 | 51606 | macros/latex-dev/base/ltpara.dtx
-2022/10/31 | 6155 | macros/latex-dev/base/ltpar.dtx
-2022/10/31 | 69002 | macros/latex-dev/base/ltpictur.dtx
-2022/10/31 | 59499 | macros/latex-dev/base/ltplain.dtx
-2022/10/31 | 33946 | macros/latex-dev/base/ltsect.dtx
-2022/10/31 | 818741 | macros/latex-dev/base/ltshipout-code.pdf
-2022/10/31 | 104 | macros/latex-dev/base/ltshipout-code.tex
-2022/10/31 | 563518 | macros/latex-dev/base/ltshipout-doc.pdf
-2022/10/31 | 240 | macros/latex-dev/base/ltshipout-doc.tex
-2022/10/31 | 80052 | macros/latex-dev/base/ltshipout.dtx
-2022/10/31 | 45240 | macros/latex-dev/base/ltspace.dtx
-2022/10/31 | 47896 | macros/latex-dev/base/lttab.dtx
-2022/10/31 | 90660 | macros/latex-dev/base/lttextcomp.dtx
-2022/10/31 | 8731 | macros/latex-dev/base/ltthm.dtx
-2022/10/31 | 14786 | macros/latex-dev/base/ltvers.dtx
-2022/10/31 | 219349 | macros/latex-dev/base/ltx3info.pdf
-2022/10/31 | 18299 | macros/latex-dev/base/ltx3info.tex
-2022/10/31 | 27122 | macros/latex-dev/base/ltxcheck.tex
-2022/10/31 | 22410 | macros/latex-dev/base/ltxdoc.dtx
-2022/10/31 | 242645 | macros/latex-dev/base/ltxdoc.pdf
-2022/10/31 | 7524 | macros/latex-dev/base/ltxguide.cls
-2022/10/31 | 18363 | macros/latex-dev/base/ltxref.dtx
-2022/10/31 | 10601 | macros/latex-dev/base/makeindx.dtx
-2022/10/31 | 3434 | macros/latex-dev/base/makeindx.ins
-2022/10/31 | 165821 | macros/latex-dev/base/makeindx.pdf
-2022/10/31 | 11124 | macros/latex-dev/base/manifest.txt
-2022/10/31 | 1937 | macros/latex-dev/base/minimal.cls
-2022/10/31 | 257804 | macros/latex-dev/base/modguide.pdf
-2022/10/31 | 16497 | macros/latex-dev/base/modguide.tex
-2022/10/31 | 4254 | macros/latex-dev/base/newdc.ins
-2022/10/31 | 6357 | macros/latex-dev/base/newlfont.dtx
-2022/10/31 | 18399 | macros/latex-dev/base/nfssfont.dtx
-2022/10/31 | 2893 | macros/latex-dev/base/nfssfont.ins
-2022/10/31 | 211180 | macros/latex-dev/base/nfssfont.pdf
-2022/10/31 | 3960 | macros/latex-dev/base/olddc.ins
-2022/10/31 | 8626 | macros/latex-dev/base/oldlfont.dtx
-2022/10/31 | 9345 | macros/latex-dev/base/preload.dtx
-2022/10/31 | 13589 | macros/latex-dev/base/proc.dtx
-2022/10/31 | 3401 | macros/latex-dev/base/proc.ins
-2022/10/31 | 227059 | macros/latex-dev/base/proc.pdf
-2022/10/31 | 3100 | macros/latex-dev/base/README.md
-2022/10/31 | 7200 | macros/latex-dev/base/sample2e.tex
-2022/10/31 | 89727 | macros/latex-dev/base/slides.dtx
-2022/10/31 | 6760 | macros/latex-dev/base/slides.ins
-2022/10/31 | 375518 | macros/latex-dev/base/slides.pdf
-2022/10/31 | 15699 | macros/latex-dev/base/slifonts.fdd
-2022/10/31 | 234191 | macros/latex-dev/base/slifonts.pdf
-2022/10/31 | 1694 | macros/latex-dev/base/small2e.tex
-2022/10/31 | 9401 | macros/latex-dev/base/source2edoc.cls
-2022/10/31 | 5769593 | macros/latex-dev/base/source2e.pdf
-2022/10/31 | 15306 | macros/latex-dev/base/source2e.tex
-2022/10/31 | 9395 | macros/latex-dev/base/syntonly.dtx
-2022/10/31 | 2896 | macros/latex-dev/base/syntonly.ins
-2022/10/31 | 189704 | macros/latex-dev/base/syntonly.pdf
-2022/10/31 | 12520 | macros/latex-dev/base/testpage.tex
-2022/10/31 | 172867 | macros/latex-dev/base/tlc2.err
-2022/10/31 | 290615 | macros/latex-dev/base/tlc2.pdf
-2022/10/31 | 12242 | macros/latex-dev/base/tulm.fdd
-2022/10/31 | 3781 | macros/latex-dev/base/tulm.ins
-2022/10/31 | 162772 | macros/latex-dev/base/tulm.pdf
-2022/10/31 | 3181 | macros/latex-dev/base/unpack.ins
-2022/10/31 | 438515 | macros/latex-dev/base/usrguide-historic.pdf
-2022/10/31 | 68732 | macros/latex-dev/base/usrguide-historic.tex
-2022/10/31 | 473980 | macros/latex-dev/base/usrguide.pdf
-2022/10/31 | 50281 | macros/latex-dev/base/usrguide.tex
-2022/10/31 | 92280 | macros/latex-dev/base/utf8ienc.dtx
-2022/10/31 | 353237 | macros/latex-dev/base/utf8ienc.pdf
-2022/10/31 | 10251 | macros/latex-dev/base/webcomp.err
-2022/10/31 | 146198 | macros/latex-dev/base/webcomp.pdf
-2022/11/02 | 38473114 | macros/latex-dev/base.zip
+2022/12/03 | 7104 | macros/latex-dev/base/alltt.dtx
+2022/12/03 | 2890 | macros/latex-dev/base/alltt.ins
+2022/12/03 | 223831 | macros/latex-dev/base/alltt.pdf
+2022/12/03 | 3282 | macros/latex-dev/base/bugs.txt
+2022/12/03 | 264112 | macros/latex-dev/base/cfgguide.pdf
+2022/12/03 | 22720 | macros/latex-dev/base/cfgguide.tex
+2022/12/03 | 42708 | macros/latex-dev/base/changes.old.txt
+2022/12/03 | 394640 | macros/latex-dev/base/changes.txt
+2022/12/03 | 156236 | macros/latex-dev/base/classes.dtx
+2022/12/03 | 4087 | macros/latex-dev/base/classes.ins
+2022/12/03 | 560326 | macros/latex-dev/base/classes.pdf
+2022/12/03 | 414419 | macros/latex-dev/base/clsguide.pdf
+2022/12/03 | 69315 | macros/latex-dev/base/clsguide.tex
+2022/12/03 | 5273 | macros/latex-dev/base/cmextra.ins
+2022/12/03 | 44410 | macros/latex-dev/base/cmfonts.fdd
+2022/12/03 | 4324 | macros/latex-dev/base/cmfonts.ins
+2022/12/03 | 292160 | macros/latex-dev/base/cmfonts.pdf
+2022/12/03 | 257314 | macros/latex-dev/base/cyrguide.pdf
+2022/12/03 | 17779 | macros/latex-dev/base/cyrguide.tex
+2022/12/03 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
+2022/12/03 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
+2022/12/03 | 1075110 | macros/latex-dev/base/doc-code.pdf
+2022/12/03 | 96 | macros/latex-dev/base/doc-code.tex
+2022/12/03 | 242468 | macros/latex-dev/base/doc.dtx
+2022/12/03 | 755547 | macros/latex-dev/base/doc.pdf
+2022/12/03 | 170595 | macros/latex-dev/base/docstrip.dtx
+2022/12/03 | 4273 | macros/latex-dev/base/docstrip.ins
+2022/12/03 | 504178 | macros/latex-dev/base/docstrip.pdf
+2022/12/03 | 4390 | macros/latex-dev/base/ec.ins
+2022/12/03 | 1318126 | macros/latex-dev/base/encguide.pdf
+2022/12/03 | 52813 | macros/latex-dev/base/encguide.tex
+2022/12/03 | 7216 | macros/latex-dev/base/exscale.dtx
+2022/12/03 | 3338 | macros/latex-dev/base/exscale.ins
+2022/12/03 | 204711 | macros/latex-dev/base/exscale.pdf
+2022/12/03 | 23516 | macros/latex-dev/base/fix-cm.dtx
+2022/12/03 | 2892 | macros/latex-dev/base/fix-cm.ins
+2022/12/03 | 287733 | macros/latex-dev/base/fix-cm.pdf
+2022/12/03 | 517838 | macros/latex-dev/base/fntguide.pdf
+2022/12/03 | 108231 | macros/latex-dev/base/fntguide.tex
+2022/12/03 | 60321 | macros/latex-dev/base/fontdef.dtx
+2022/12/03 | 9779 | macros/latex-dev/base/format.ins
+2022/12/03 | 5509 | macros/latex-dev/base/graphpap.dtx
+2022/12/03 | 2892 | macros/latex-dev/base/graphpap.ins
+2022/12/03 | 161713 | macros/latex-dev/base/graphpap.pdf
+2022/12/03 | 2705 | macros/latex-dev/base/idx.tex
+2022/12/03 | 18753 | macros/latex-dev/base/ifthen.dtx
+2022/12/03 | 2888 | macros/latex-dev/base/ifthen.ins
+2022/12/03 | 221211 | macros/latex-dev/base/ifthen.pdf
+2022/12/03 | 106904 | macros/latex-dev/base/inputenc.dtx
+2022/12/03 | 5714 | macros/latex-dev/base/inputenc.ins
+2022/12/03 | 318204 | macros/latex-dev/base/inputenc.pdf
+2022/12/03 | 4079 | macros/latex-dev/base/lablst.tex
+2022/12/03 | 13759 | macros/latex-dev/base/lamport-manual.err
+2022/12/03 | 170878 | macros/latex-dev/base/lamport-manual.pdf
+2022/12/03 | 38730 | macros/latex-dev/base/latex209.dtx
+2022/12/03 | 4219 | macros/latex-dev/base/latex209.ins
+2022/12/03 | 45347 | macros/latex-dev/base/latexrelease.dtx
+2022/12/03 | 6047 | macros/latex-dev/base/latexrelease.ins
+2022/12/03 | 282115 | macros/latex-dev/base/latexrelease.pdf
+2022/12/03 | 6709 | macros/latex-dev/base/latexsym.dtx
+2022/12/03 | 5041 | macros/latex-dev/base/latexsym.ins
+2022/12/03 | 200760 | macros/latex-dev/base/latexsym.pdf
+2022/12/03 | 52710 | macros/latex-dev/base/lb2.err
+2022/12/03 | 252140 | macros/latex-dev/base/lb2.pdf
+2022/12/03 | 1279 | macros/latex-dev/base/legal.txt
+2022/12/03 | 63280 | macros/latex-dev/base/letter.dtx
+2022/12/03 | 3372 | macros/latex-dev/base/letter.ins
+2022/12/03 | 337430 | macros/latex-dev/base/letter.pdf
+2022/12/03 | 20652 | macros/latex-dev/base/lgc2.err
+2022/12/03 | 215684 | macros/latex-dev/base/lgc2.pdf
+2022/12/03 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2022/12/03 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2022/12/03 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2022/12/03 | 132382 | macros/latex-dev/base/lppl.pdf
+2022/12/03 | 23386 | macros/latex-dev/base/lppl.tex
+2022/12/03 | 19040 | macros/latex-dev/base/lppl.txt
+2022/12/03 | 4298 | macros/latex-dev/base/ltalloc.dtx
+2022/12/03 | 17389 | macros/latex-dev/base/ltbibl.dtx
+2022/12/03 | 45712 | macros/latex-dev/base/ltboxes.dtx
+2022/12/03 | 144369 | macros/latex-dev/base/ltclass.dtx
+2022/12/03 | 183578 | macros/latex-dev/base/ltcmd.dtx
+2022/12/03 | 719408 | macros/latex-dev/base/ltcmdhooks-code.pdf
+2022/12/03 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
+2022/12/03 | 478686 | macros/latex-dev/base/ltcmdhooks-doc.pdf
+2022/12/03 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
+2022/12/03 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
+2022/12/03 | 9557 | macros/latex-dev/base/ltcntrl.dtx
+2022/12/03 | 24286 | macros/latex-dev/base/ltcounts.dtx
+2022/12/03 | 92954 | macros/latex-dev/base/ltdefns.dtx
+2022/12/03 | 35984 | macros/latex-dev/base/ltdirchk.dtx
+2022/12/03 | 27069 | macros/latex-dev/base/lterror.dtx
+2022/12/03 | 18711 | macros/latex-dev/base/ltexpl.dtx
+2022/12/03 | 803060 | macros/latex-dev/base/ltfilehook-code.pdf
+2022/12/03 | 105 | macros/latex-dev/base/ltfilehook-code.tex
+2022/12/03 | 547926 | macros/latex-dev/base/ltfilehook-doc.pdf
+2022/12/03 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
+2022/12/03 | 67351 | macros/latex-dev/base/ltfilehook.dtx
+2022/12/03 | 58933 | macros/latex-dev/base/ltfiles.dtx
+2022/12/03 | 50069 | macros/latex-dev/base/ltfinal.dtx
+2022/12/03 | 55687 | macros/latex-dev/base/ltfloat.dtx
+2022/12/03 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
+2022/12/03 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
+2022/12/03 | 82481 | macros/latex-dev/base/ltfssbas.dtx
+2022/12/03 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
+2022/12/03 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
+2022/12/03 | 84215 | macros/latex-dev/base/ltfssini.dtx
+2022/12/03 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
+2022/12/03 | 1091429 | macros/latex-dev/base/lthooks-code.pdf
+2022/12/03 | 102 | macros/latex-dev/base/lthooks-code.tex
+2022/12/03 | 701473 | macros/latex-dev/base/lthooks-doc.pdf
+2022/12/03 | 238 | macros/latex-dev/base/lthooks-doc.tex
+2022/12/03 | 211770 | macros/latex-dev/base/lthooks.dtx
+2022/12/03 | 4945 | macros/latex-dev/base/lthyphen.dtx
+2022/12/03 | 5859 | macros/latex-dev/base/ltidxglo.dtx
+2022/12/03 | 19853 | macros/latex-dev/base/ltkeys.dtx
+2022/12/03 | 4757 | macros/latex-dev/base/ltlength.dtx
+2022/12/03 | 36152 | macros/latex-dev/base/ltlists.dtx
+2022/12/03 | 3725 | macros/latex-dev/base/ltlogos.dtx
+2022/12/03 | 74886 | macros/latex-dev/base/ltluatex.dtx
+2022/12/03 | 324910 | macros/latex-dev/base/ltluatex.pdf
+2022/12/03 | 715658 | macros/latex-dev/base/ltmarks-code.pdf
+2022/12/03 | 102 | macros/latex-dev/base/ltmarks-code.tex
+2022/12/03 | 586024 | macros/latex-dev/base/ltmarks-doc.pdf
+2022/12/03 | 238 | macros/latex-dev/base/ltmarks-doc.tex
+2022/12/03 | 63132 | macros/latex-dev/base/ltmarks.dtx
+2022/12/03 | 41493 | macros/latex-dev/base/ltmath.dtx
+2022/12/03 | 6213 | macros/latex-dev/base/ltmeta.dtx
+2022/12/03 | 59070 | macros/latex-dev/base/ltmiscen.dtx
+2022/12/03 | 161518 | macros/latex-dev/base/ltnews01.pdf
+2022/12/03 | 5246 | macros/latex-dev/base/ltnews01.tex
+2022/12/03 | 159792 | macros/latex-dev/base/ltnews02.pdf
+2022/12/03 | 5462 | macros/latex-dev/base/ltnews02.tex
+2022/12/03 | 159332 | macros/latex-dev/base/ltnews03.pdf
+2022/12/03 | 5369 | macros/latex-dev/base/ltnews03.tex
+2022/12/03 | 152525 | macros/latex-dev/base/ltnews04.pdf
+2022/12/03 | 5678 | macros/latex-dev/base/ltnews04.tex
+2022/12/03 | 174494 | macros/latex-dev/base/ltnews05.pdf
+2022/12/03 | 5699 | macros/latex-dev/base/ltnews05.tex
+2022/12/03 | 142849 | macros/latex-dev/base/ltnews06.pdf
+2022/12/03 | 5544 | macros/latex-dev/base/ltnews06.tex
+2022/12/03 | 137811 | macros/latex-dev/base/ltnews07.pdf
+2022/12/03 | 5576 | macros/latex-dev/base/ltnews07.tex
+2022/12/03 | 155053 | macros/latex-dev/base/ltnews08.pdf
+2022/12/03 | 5732 | macros/latex-dev/base/ltnews08.tex
+2022/12/03 | 129570 | macros/latex-dev/base/ltnews09.pdf
+2022/12/03 | 5451 | macros/latex-dev/base/ltnews09.tex
+2022/12/03 | 169416 | macros/latex-dev/base/ltnews10.pdf
+2022/12/03 | 5825 | macros/latex-dev/base/ltnews10.tex
+2022/12/03 | 111948 | macros/latex-dev/base/ltnews11.pdf
+2022/12/03 | 5529 | macros/latex-dev/base/ltnews11.tex
+2022/12/03 | 156551 | macros/latex-dev/base/ltnews12.pdf
+2022/12/03 | 5574 | macros/latex-dev/base/ltnews12.tex
+2022/12/03 | 182225 | macros/latex-dev/base/ltnews13.pdf
+2022/12/03 | 7029 | macros/latex-dev/base/ltnews13.tex
+2022/12/03 | 170473 | macros/latex-dev/base/ltnews14.pdf
+2022/12/03 | 6424 | macros/latex-dev/base/ltnews14.tex
+2022/12/03 | 130309 | macros/latex-dev/base/ltnews15.pdf
+2022/12/03 | 5986 | macros/latex-dev/base/ltnews15.tex
+2022/12/03 | 138073 | macros/latex-dev/base/ltnews16.pdf
+2022/12/03 | 5775 | macros/latex-dev/base/ltnews16.tex
+2022/12/03 | 166228 | macros/latex-dev/base/ltnews17.pdf
+2022/12/03 | 8970 | macros/latex-dev/base/ltnews17.tex
+2022/12/03 | 38033 | macros/latex-dev/base/ltnews18.pdf
+2022/12/03 | 1341 | macros/latex-dev/base/ltnews18.tex
+2022/12/03 | 230028 | macros/latex-dev/base/ltnews19.pdf
+2022/12/03 | 4170 | macros/latex-dev/base/ltnews19.tex
+2022/12/03 | 318548 | macros/latex-dev/base/ltnews20.pdf
+2022/12/03 | 7221 | macros/latex-dev/base/ltnews20.tex
+2022/12/03 | 244867 | macros/latex-dev/base/ltnews21.pdf
+2022/12/03 | 9926 | macros/latex-dev/base/ltnews21.tex
+2022/12/03 | 317773 | macros/latex-dev/base/ltnews22.pdf
+2022/12/03 | 10792 | macros/latex-dev/base/ltnews22.tex
+2022/12/03 | 286591 | macros/latex-dev/base/ltnews23.pdf
+2022/12/03 | 10791 | macros/latex-dev/base/ltnews23.tex
+2022/12/03 | 265279 | macros/latex-dev/base/ltnews24.pdf
+2022/12/03 | 12334 | macros/latex-dev/base/ltnews24.tex
+2022/12/03 | 204935 | macros/latex-dev/base/ltnews25.pdf
+2022/12/03 | 5588 | macros/latex-dev/base/ltnews25.tex
+2022/12/03 | 379462 | macros/latex-dev/base/ltnews26.pdf
+2022/12/03 | 10798 | macros/latex-dev/base/ltnews26.tex
+2022/12/03 | 250592 | macros/latex-dev/base/ltnews27.pdf
+2022/12/03 | 5671 | macros/latex-dev/base/ltnews27.tex
+2022/12/03 | 376643 | macros/latex-dev/base/ltnews28.pdf
+2022/12/03 | 15047 | macros/latex-dev/base/ltnews28.tex
+2022/12/03 | 455107 | macros/latex-dev/base/ltnews29.pdf
+2022/12/03 | 18944 | macros/latex-dev/base/ltnews29.tex
+2022/12/03 | 511909 | macros/latex-dev/base/ltnews30.pdf
+2022/12/03 | 23637 | macros/latex-dev/base/ltnews30.tex
+2022/12/03 | 526323 | macros/latex-dev/base/ltnews31.pdf
+2022/12/03 | 30428 | macros/latex-dev/base/ltnews31.tex
+2022/12/03 | 546160 | macros/latex-dev/base/ltnews32.pdf
+2022/12/03 | 33239 | macros/latex-dev/base/ltnews32.tex
+2022/12/03 | 522412 | macros/latex-dev/base/ltnews33.pdf
+2022/12/03 | 33907 | macros/latex-dev/base/ltnews33.tex
+2022/12/03 | 508044 | macros/latex-dev/base/ltnews34.pdf
+2022/12/03 | 32307 | macros/latex-dev/base/ltnews34.tex
+2022/12/03 | 563089 | macros/latex-dev/base/ltnews35.pdf
+2022/12/03 | 38793 | macros/latex-dev/base/ltnews35.tex
+2022/12/03 | 517565 | macros/latex-dev/base/ltnews36.pdf
+2022/12/03 | 19329 | macros/latex-dev/base/ltnews36.tex
+2022/12/03 | 408962 | macros/latex-dev/base/ltnews37.pdf
+2022/12/03 | 11852 | macros/latex-dev/base/ltnews37.tex
+2022/12/03 | 20469 | macros/latex-dev/base/ltnews.cls
+2022/12/03 | 1255282 | macros/latex-dev/base/ltnews.pdf
+2022/12/03 | 8367 | macros/latex-dev/base/ltnews.tex
+2022/12/03 | 148294 | macros/latex-dev/base/ltoutenc.dtx
+2022/12/03 | 3367 | macros/latex-dev/base/ltoutenc.ins
+2022/12/03 | 178723 | macros/latex-dev/base/ltoutput.dtx
+2022/12/03 | 14091 | macros/latex-dev/base/ltpage.dtx
+2022/12/03 | 2728 | macros/latex-dev/base/ltpageno.dtx
+2022/12/03 | 667129 | macros/latex-dev/base/ltpara-code.pdf
+2022/12/03 | 99 | macros/latex-dev/base/ltpara-code.tex
+2022/12/03 | 560008 | macros/latex-dev/base/ltpara-doc.pdf
+2022/12/03 | 234 | macros/latex-dev/base/ltpara-doc.tex
+2022/12/03 | 51606 | macros/latex-dev/base/ltpara.dtx
+2022/12/03 | 6155 | macros/latex-dev/base/ltpar.dtx
+2022/12/03 | 69002 | macros/latex-dev/base/ltpictur.dtx
+2022/12/03 | 59499 | macros/latex-dev/base/ltplain.dtx
+2022/12/03 | 33946 | macros/latex-dev/base/ltsect.dtx
+2022/12/03 | 820928 | macros/latex-dev/base/ltshipout-code.pdf
+2022/12/03 | 104 | macros/latex-dev/base/ltshipout-code.tex
+2022/12/03 | 565931 | macros/latex-dev/base/ltshipout-doc.pdf
+2022/12/03 | 240 | macros/latex-dev/base/ltshipout-doc.tex
+2022/12/03 | 81202 | macros/latex-dev/base/ltshipout.dtx
+2022/12/03 | 45754 | macros/latex-dev/base/ltspace.dtx
+2022/12/03 | 47896 | macros/latex-dev/base/lttab.dtx
+2022/12/03 | 90660 | macros/latex-dev/base/lttextcomp.dtx
+2022/12/03 | 8731 | macros/latex-dev/base/ltthm.dtx
+2022/12/03 | 15384 | macros/latex-dev/base/ltvers.dtx
+2022/12/03 | 219349 | macros/latex-dev/base/ltx3info.pdf
+2022/12/03 | 18299 | macros/latex-dev/base/ltx3info.tex
+2022/12/03 | 27122 | macros/latex-dev/base/ltxcheck.tex
+2022/12/03 | 22665 | macros/latex-dev/base/ltxdoc.dtx
+2022/12/03 | 243286 | macros/latex-dev/base/ltxdoc.pdf
+2022/12/03 | 7524 | macros/latex-dev/base/ltxguide.cls
+2022/12/03 | 18363 | macros/latex-dev/base/ltxref.dtx
+2022/12/03 | 10601 | macros/latex-dev/base/makeindx.dtx
+2022/12/03 | 3434 | macros/latex-dev/base/makeindx.ins
+2022/12/03 | 165821 | macros/latex-dev/base/makeindx.pdf
+2022/12/03 | 11124 | macros/latex-dev/base/manifest.txt
+2022/12/03 | 1937 | macros/latex-dev/base/minimal.cls
+2022/12/03 | 257804 | macros/latex-dev/base/modguide.pdf
+2022/12/03 | 16497 | macros/latex-dev/base/modguide.tex
+2022/12/03 | 4254 | macros/latex-dev/base/newdc.ins
+2022/12/03 | 6357 | macros/latex-dev/base/newlfont.dtx
+2022/12/03 | 18399 | macros/latex-dev/base/nfssfont.dtx
+2022/12/03 | 2893 | macros/latex-dev/base/nfssfont.ins
+2022/12/03 | 211180 | macros/latex-dev/base/nfssfont.pdf
+2022/12/03 | 3960 | macros/latex-dev/base/olddc.ins
+2022/12/03 | 8626 | macros/latex-dev/base/oldlfont.dtx
+2022/12/03 | 9345 | macros/latex-dev/base/preload.dtx
+2022/12/03 | 13589 | macros/latex-dev/base/proc.dtx
+2022/12/03 | 3401 | macros/latex-dev/base/proc.ins
+2022/12/03 | 227059 | macros/latex-dev/base/proc.pdf
+2022/12/03 | 3100 | macros/latex-dev/base/README.md
+2022/12/03 | 7200 | macros/latex-dev/base/sample2e.tex
+2022/12/03 | 89727 | macros/latex-dev/base/slides.dtx
+2022/12/03 | 6760 | macros/latex-dev/base/slides.ins
+2022/12/03 | 375518 | macros/latex-dev/base/slides.pdf
+2022/12/03 | 15699 | macros/latex-dev/base/slifonts.fdd
+2022/12/03 | 234191 | macros/latex-dev/base/slifonts.pdf
+2022/12/03 | 1694 | macros/latex-dev/base/small2e.tex
+2022/12/03 | 9401 | macros/latex-dev/base/source2edoc.cls
+2022/12/03 | 5789493 | macros/latex-dev/base/source2e.pdf
+2022/12/03 | 15306 | macros/latex-dev/base/source2e.tex
+2022/12/03 | 9395 | macros/latex-dev/base/syntonly.dtx
+2022/12/03 | 2896 | macros/latex-dev/base/syntonly.ins
+2022/12/03 | 189819 | macros/latex-dev/base/syntonly.pdf
+2022/12/03 | 12520 | macros/latex-dev/base/testpage.tex
+2022/12/03 | 172867 | macros/latex-dev/base/tlc2.err
+2022/12/03 | 290615 | macros/latex-dev/base/tlc2.pdf
+2022/12/03 | 12242 | macros/latex-dev/base/tulm.fdd
+2022/12/03 | 3781 | macros/latex-dev/base/tulm.ins
+2022/12/03 | 162772 | macros/latex-dev/base/tulm.pdf
+2022/12/03 | 3181 | macros/latex-dev/base/unpack.ins
+2022/12/03 | 438515 | macros/latex-dev/base/usrguide-historic.pdf
+2022/12/03 | 68732 | macros/latex-dev/base/usrguide-historic.tex
+2022/12/03 | 474808 | macros/latex-dev/base/usrguide.pdf
+2022/12/03 | 51005 | macros/latex-dev/base/usrguide.tex
+2022/12/03 | 92280 | macros/latex-dev/base/utf8ienc.dtx
+2022/12/03 | 353428 | macros/latex-dev/base/utf8ienc.pdf
+2022/12/03 | 10251 | macros/latex-dev/base/webcomp.err
+2022/12/03 | 146198 | macros/latex-dev/base/webcomp.pdf
+2022/12/03 | 38914585 | macros/latex-dev/base.zip
2022/10/31 | 8663 | macros/latex-dev/required/amsmath/amsbsy.dtx
2022/10/31 | 1505 | macros/latex-dev/required/amsmath/amsbsy.ins
2022/10/31 | 174944 | macros/latex-dev/required/amsmath/amsbsy.pdf
@@ -238441,12 +238444,12 @@
2022/10/31 | 454511 | macros/latex-dev/required/amsmath/testmath.pdf
2022/10/31 | 82371 | macros/latex-dev/required/amsmath/testmath.tex
2022/11/02 | 2762700 | macros/latex-dev/required/amsmath.zip
-2022/10/31 | 4174 | macros/latex-dev/required/firstaid/changes.txt
-2022/10/31 | 2740 | macros/latex-dev/required/firstaid/firstaid.ins
-2022/10/31 | 22445 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
-2022/10/31 | 268310 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
-2022/10/31 | 474 | macros/latex-dev/required/firstaid/README.md
-2022/11/02 | 269550 | macros/latex-dev/required/firstaid.zip
+2022/12/03 | 4607 | macros/latex-dev/required/firstaid/changes.txt
+2022/12/03 | 2740 | macros/latex-dev/required/firstaid/firstaid.ins
+2022/12/03 | 23583 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
+2022/12/03 | 271476 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
+2022/12/03 | 474 | macros/latex-dev/required/firstaid/README.md
+2022/12/03 | 272901 | macros/latex-dev/required/firstaid.zip
2022/10/31 | 15737 | macros/latex-dev/required/graphics/cat.eps
2022/10/31 | 35660 | macros/latex-dev/required/graphics/changes.txt
2022/10/31 | 32194 | macros/latex-dev/required/graphics/color.dtx
@@ -239623,18 +239626,18 @@
2020/10/23 | 281887 | macros/luatex/generic/nodetree/nodetree.pdf
2020/10/23 | 4029 | macros/luatex/generic/nodetree/README.md
2020/10/23 | 289509 | macros/luatex/generic/nodetree.zip
-2021/09/17 | 7235 | macros/luatex/generic/pdfextra/examples/pdfextra-example-latex.tex
-2021/09/17 | 58592 | macros/luatex/generic/pdfextra/examples/pdfextra-example-part.prc
-2021/09/17 | 385350 | macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
-2021/09/17 | 9600 | macros/luatex/generic/pdfextra/examples/pdfextra-example.tex
-2021/09/17 | 662 | macros/luatex/generic/pdfextra/LICENSE
-2021/09/17 | 245952 | macros/luatex/generic/pdfextra/pdfextra-doc.pdf
-2021/09/17 | 33962 | macros/luatex/generic/pdfextra/pdfextra-doc.tex
-2021/09/17 | 68819 | macros/luatex/generic/pdfextra/pdfextra.opm
-2021/09/17 | 69 | macros/luatex/generic/pdfextra/pdfextra.sty
-2021/09/17 | 9358 | macros/luatex/generic/pdfextra/pdfextra.tex
-2021/09/17 | 1101 | macros/luatex/generic/pdfextra/README.md
-2021/09/18 | 714993 | macros/luatex/generic/pdfextra.zip
+2022/12/03 | 7235 | macros/luatex/generic/pdfextra/examples/pdfextra-example-latex.tex
+2022/12/03 | 58592 | macros/luatex/generic/pdfextra/examples/pdfextra-example-part.prc
+2022/12/03 | 385337 | macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
+2022/12/03 | 9600 | macros/luatex/generic/pdfextra/examples/pdfextra-example.tex
+2022/12/03 | 662 | macros/luatex/generic/pdfextra/LICENSE
+2022/12/03 | 232911 | macros/luatex/generic/pdfextra/pdfextra-doc.pdf
+2022/12/03 | 33962 | macros/luatex/generic/pdfextra/pdfextra-doc.tex
+2022/12/03 | 69143 | macros/luatex/generic/pdfextra/pdfextra.opm
+2022/12/03 | 69 | macros/luatex/generic/pdfextra/pdfextra.sty
+2022/12/03 | 9729 | macros/luatex/generic/pdfextra/pdfextra.tex
+2022/12/03 | 1101 | macros/luatex/generic/pdfextra/README.md
+2022/12/03 | 702657 | macros/luatex/generic/pdfextra.zip
2022/10/24 | 25612 | macros/luatex/generic/penlight/penlightextras.lua
2022/10/24 | 425636 | macros/luatex/generic/penlight/penlight.lua
2022/10/24 | 59499 | macros/luatex/generic/penlight/penlight.pdf
@@ -241506,15 +241509,15 @@
2007/07/13 | 9394 | macros/omega/latex/contrib/tamil-omega/yudit/Tamil2.my
2007/07/13 | 11462 | macros/omega/latex/contrib/tamil-omega/yudit/yudit.properties
2007/12/12 | 900761 | macros/omega/latex/contrib/tamil-omega.zip
-2022/06/10 | 6916 | macros/optex/base/alloc.opm
-2022/02/21 | 5439 | macros/optex/base/basic-macros.opm
-2022/05/12 | 33518 | macros/optex/base/bib-iso690.opm
-2022/05/12 | 5870 | macros/optex/base/bib-simple.opm
-2021/05/16 | 13887 | macros/optex/base/cite-bib.opm
+2022/11/21 | 6838 | macros/optex/base/alloc.opm
+2022/11/22 | 6115 | macros/optex/base/basic-macros.opm
+2022/11/23 | 33518 | macros/optex/base/bib-iso690.opm
+2022/10/10 | 5941 | macros/optex/base/bib-simple.opm
+2022/11/04 | 13879 | macros/optex/base/cite-bib.opm
2022/03/07 | 20216 | macros/optex/base/colors.opm
-2022/07/01 | 15245 | macros/optex/base/doc.opm
+2022/11/25 | 15450 | macros/optex/base/doc.opm
2021/04/22 | 657 | macros/optex/base/f-adventor.opm
-2022/07/11 | 10575 | macros/optex/base/fams-ini.opm
+2022/12/01 | 11276 | macros/optex/base/fams-ini.opm
2021/04/22 | 1156 | macros/optex/base/f-antt.opm
2022/05/02 | 652 | macros/optex/base/f-baskervald.opm
2021/04/22 | 665 | macros/optex/base/f-baskerville.opm
@@ -241526,9 +241529,12 @@
2021/05/21 | 959 | macros/optex/base/f-erewhon.opm
2021/04/22 | 882 | macros/optex/base/f-garamondl.opm
2021/04/22 | 635 | macros/optex/base/f-gfsbodoni.opm
-2022/05/14 | 11274 | macros/optex/base/f-heros.opm
+2022/11/19 | 10733 | macros/optex/base/f-heros.opm
+2022/11/29 | 1058 | macros/optex/base/f-iwona.opm
2021/01/07 | 1201 | macros/optex/base/f-kerkis.opm
2021/04/27 | 1468 | macros/optex/base/f-kpfonts.opm
+2022/11/29 | 1054 | macros/optex/base/f-kurier.opm
+2022/10/18 | 1408 | macros/optex/base/f-lato.opm
2021/04/27 | 2393 | macros/optex/base/f-libertine.opm
2021/04/22 | 2167 | macros/optex/base/f-libertine-s.opm
2021/04/27 | 1527 | macros/optex/base/f-libertinus.opm
@@ -241538,12 +241544,12 @@
2021/04/22 | 1200 | macros/optex/base/f-merriweather.opm
2022/07/11 | 1423 | macros/optex/base/f-montserrat.opm
2021/04/27 | 1337 | macros/optex/base/f-newcm.opm
-2022/01/19 | 9000 | macros/optex/base/fnotes.opm
-2022/07/11 | 4601 | macros/optex/base/fonts-catalog.opm
+2022/10/29 | 9000 | macros/optex/base/fnotes.opm
+2022/11/04 | 4594 | macros/optex/base/fonts-catalog.opm
2022/02/22 | 9448 | macros/optex/base/fonts-opmac.opm
2022/02/12 | 2423 | macros/optex/base/fonts-preload.opm
-2022/02/22 | 13849 | macros/optex/base/fonts-resize.opm
-2022/03/06 | 39961 | macros/optex/base/fonts-select.opm
+2022/11/08 | 15673 | macros/optex/base/fonts-resize.opm
+2022/12/01 | 40299 | macros/optex/base/fonts-select.opm
2022/05/22 | 893 | macros/optex/base/f-overlock.opm
2021/04/22 | 694 | macros/optex/base/f-pagella.opm
2021/04/22 | 1515 | macros/optex/base/f-poltawski.opm
@@ -241556,53 +241562,53 @@
2021/04/22 | 684 | macros/optex/base/f-termes.opm
2021/04/22 | 762 | macros/optex/base/f-xcharter.opm
2022/06/03 | 742 | macros/optex/base/f-xits.opm
-2022/03/06 | 20440 | macros/optex/base/graphics.opm
+2022/11/06 | 20551 | macros/optex/base/graphics.opm
2021/01/07 | 2741 | macros/optex/base/hisyntax-c.opm
2022/05/12 | 1109 | macros/optex/base/hisyntax-html.opm
-2022/02/11 | 2916 | macros/optex/base/hisyntax-lua.opm
-2022/05/12 | 9673 | macros/optex/base/hi-syntax.opm
+2022/11/17 | 2916 | macros/optex/base/hisyntax-lua.opm
+2022/10/29 | 9673 | macros/optex/base/hi-syntax.opm
2021/07/16 | 3014 | macros/optex/base/hisyntax-python.opm
2021/01/07 | 1566 | macros/optex/base/hisyntax-tex.opm
-2021/08/31 | 9966 | macros/optex/base/hyperlinks.opm
-2022/06/28 | 12575 | macros/optex/base/if-macros.opm
+2022/10/29 | 9966 | macros/optex/base/hyperlinks.opm
+2022/12/02 | 15374 | macros/optex/base/if-macros.opm
2022/02/28 | 3269 | macros/optex/base/keyval.opm
-2022/06/28 | 6663 | macros/optex/base/lang-data.opm
-2022/06/28 | 16033 | macros/optex/base/lang-decl.opm
-2022/02/19 | 7290 | macros/optex/base/languages.opm
+2022/10/11 | 7206 | macros/optex/base/lang-data.opm
+2022/10/11 | 16512 | macros/optex/base/lang-decl.opm
+2022/11/18 | 7314 | macros/optex/base/languages.opm
2021/03/10 | 5218 | macros/optex/base/lists.opm
2021/01/11 | 2377 | macros/optex/base/logos.opm
2021/04/06 | 7398 | macros/optex/base/luatex-ini.opm
-2022/07/01 | 24552 | macros/optex/base/makeindex.opm
+2022/10/29 | 24552 | macros/optex/base/makeindex.opm
2021/07/18 | 6490 | macros/optex/base/maketoc.opm
2021/03/15 | 3770 | macros/optex/base/margins.opm
2021/04/20 | 13569 | macros/optex/base/mathclass.opm
-2021/09/15 | 44605 | macros/optex/base/math-macros.opm
-2022/07/22 | 10719 | macros/optex/base/math-preload.opm
-2022/07/22 | 14925 | macros/optex/base/math-unicode.opm
-2022/05/24 | 12468 | macros/optex/base/more-macros.opm
-2022/05/05 | 6328 | macros/optex/base/multicolumns.opm
-2022/08/04 | 4124 | macros/optex/base/optex.ini
-2022/03/10 | 26533 | macros/optex/base/optex.lua
-2022/05/04 | 8280 | macros/optex/base/others.opm
-2021/02/15 | 4624 | macros/optex/base/outlines.opm
-2022/03/07 | 11274 | macros/optex/base/output.opm
+2022/09/04 | 44605 | macros/optex/base/math-macros.opm
+2022/12/01 | 11215 | macros/optex/base/math-preload.opm
+2022/11/25 | 17241 | macros/optex/base/more-macros.opm
+2022/11/26 | 6505 | macros/optex/base/multicolumns.opm
+2022/12/02 | 4074 | macros/optex/base/optex.ini
+2022/11/17 | 28297 | macros/optex/base/optex.lua
+2022/10/29 | 8280 | macros/optex/base/others.opm
+2022/11/25 | 4624 | macros/optex/base/outlines.opm
+2022/10/22 | 11366 | macros/optex/base/output.opm
2022/07/22 | 26032 | macros/optex/base/parameters.opm
-2022/07/20 | 5518 | macros/optex/base/pdfuni-string.opm
-2022/02/19 | 14535 | macros/optex/base/plain-macros.opm
-2022/01/13 | 13736 | macros/optex/base/prefixed.opm
+2022/10/29 | 5518 | macros/optex/base/pdfuni-string.opm
+2022/10/14 | 14785 | macros/optex/base/plain-macros.opm
+2022/11/25 | 17087 | macros/optex/base/prefixed.opm
2022/06/09 | 2309 | macros/optex/base/print-unimath.opm
-2022/02/01 | 5290 | macros/optex/base/references.opm
-2022/02/05 | 6776 | macros/optex/base/ref-file.opm
-2022/08/02 | 21126 | macros/optex/base/sections.opm
+2022/10/29 | 5290 | macros/optex/base/references.opm
+2022/08/30 | 6782 | macros/optex/base/ref-file.opm
+2022/11/13 | 21886 | macros/optex/base/sections.opm
2022/05/12 | 13008 | macros/optex/base/slides.opm
2022/01/13 | 2754 | macros/optex/base/styles.opm
-2022/05/03 | 27870 | macros/optex/base/table.opm
+2022/10/29 | 27870 | macros/optex/base/table.opm
2022/02/05 | 122830 | macros/optex/base/uni-lcuc.opm
-2022/07/20 | 20634 | macros/optex/base/unimath-codes.opm
+2022/11/20 | 21540 | macros/optex/base/unimath-codes.opm
+2022/12/01 | 17793 | macros/optex/base/unimath-macros.opm
2022/02/08 | 241449 | macros/optex/base/unimath-table.opm
2022/02/08 | 16053 | macros/optex/base/usebib.opm
-2022/04/23 | 17666 | macros/optex/base/verbatim.opm
-2022/05/10 | 9599 | macros/optex/demo/op-biblist.bib
+2022/10/29 | 17666 | macros/optex/base/verbatim.opm
+2022/09/17 | 9599 | macros/optex/demo/op-biblist.bib
2022/01/22 | 3498 | macros/optex/demo/op-demo.tex
2021/01/07 | 1192 | macros/optex/demo/op-letter-cs.tex
2021/01/07 | 573 | macros/optex/demo/op-letter-en.tex
@@ -241610,25 +241616,25 @@
2020/05/16 | 512984 | macros/optex/demo/op-ring.png
2020/05/17 | 62385 | macros/optex/demo/op-slides-bg.png
2021/04/13 | 10355 | macros/optex/demo/op-slides.tex
-2021/05/27 | 518 | macros/optex/doc/mte-doc.tex
2022/01/13 | 34625 | macros/optex/doc/omls.tex
2020/05/16 | 1460 | macros/optex/doc/optex.1
-2022/08/04 | 1437685 | macros/optex/doc/optex-doc.pdf
-2022/08/04 | 4482 | macros/optex/doc/optex-doc.tex
-2022/06/22 | 70332 | macros/optex/doc/optex-math.tex
-2022/04/22 | 8441 | macros/optex/doc/optex-techdoc.tex
-2022/07/11 | 88853 | macros/optex/doc/optex-userdoc.tex
+2022/12/02 | 1484007 | macros/optex/doc/optex-doc.pdf
+2022/12/02 | 4482 | macros/optex/doc/optex-doc.tex
+2022/11/19 | 70805 | macros/optex/doc/optex-math.tex
+2022/11/22 | 8487 | macros/optex/doc/optex-techdoc.tex
+2022/11/29 | 89762 | macros/optex/doc/optex-userdoc.tex
2021/05/02 | 1949 | macros/optex/pkg/emoji.opm
+2022/11/26 | 27612 | macros/optex/pkg/math.opm
2022/03/05 | 327 | macros/optex/pkg/minim-mp.opm
2022/03/06 | 7513 | macros/optex/pkg/minim.opm
2022/03/06 | 3196 | macros/optex/pkg/minim-pdf.opm
-2021/05/27 | 21561 | macros/optex/pkg/mte.opm
+2022/11/21 | 22083 | macros/optex/pkg/mte.opm
2022/02/19 | 1282 | macros/optex/pkg/plain-at.opm
2020/11/11 | 85045 | macros/optex/pkg/qrcode.opm
2022/03/18 | 5084 | macros/optex/pkg/tikz.opm
2021/05/02 | 7597 | macros/optex/pkg/vlna.opm
-2022/08/04 | 8011 | macros/optex/README
-2022/08/04 | 2425056 | macros/optex.zip
+2022/12/02 | 8637 | macros/optex/README
+2022/12/03 | 2488994 | macros/optex.zip
2022/01/06 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
2022/01/06 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
2022/01/06 | 4608 | macros/pdftex/mptopdf/scripts/context/stubs/mswin/mptopdf.exe
@@ -249119,12 +249125,12 @@
2020/09/29 | 211 | macros/unicodetex/latex/lilyglyphs/tex/README-tex
2020/09/29 | 49 | macros/unicodetex/latex/lilyglyphs/VERSION
2020/09/29 | 2283370 | macros/unicodetex/latex/lilyglyphs.zip
-2022/10/23 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE
-2022/10/23 | 298140 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
-2022/10/23 | 3094 | macros/unicodetex/latex/njuthesis/njuthesis.ins
-2022/10/23 | 1200264 | macros/unicodetex/latex/njuthesis/njuthesis.pdf
-2022/10/23 | 1077 | macros/unicodetex/latex/njuthesis/README.md
-2022/10/23 | 1266830 | macros/unicodetex/latex/njuthesis.zip
+2022/12/03 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE
+2022/12/03 | 300296 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
+2022/12/03 | 3094 | macros/unicodetex/latex/njuthesis/njuthesis.ins
+2022/12/03 | 1176569 | macros/unicodetex/latex/njuthesis/njuthesis.pdf
+2022/12/03 | 1077 | macros/unicodetex/latex/njuthesis/README.md
+2022/12/03 | 1244739 | macros/unicodetex/latex/njuthesis.zip
2021/08/05 | 269 | macros/unicodetex/latex/nwafuthesis/build.sh
2021/08/05 | 263 | macros/unicodetex/latex/nwafuthesis/build-win.bat
2021/08/05 | 218987 | macros/unicodetex/latex/nwafuthesis/logo/building.jpg
@@ -250116,12 +250122,12 @@
2011/05/07 | 5176 | macros/xetex/latex/unisugar/unisugar.sty
2011/05/07 | 25480 | macros/xetex/latex/unisugar/unisugar.tex
2011/05/08 | 495308 | macros/xetex/latex/unisugar.zip
-2022/12/01 | 3125 | macros/xetex/latex/xduts/README.md
-2022/12/01 | 881135 | macros/xetex/latex/xduts/xdulogo.pdf
-2022/12/01 | 245152 | macros/xetex/latex/xduts/xduts.dtx
-2022/12/01 | 1111 | macros/xetex/latex/xduts/xduts.ins
-2022/12/01 | 306469 | macros/xetex/latex/xduts/xduts.pdf
-2022/12/01 | 1231367 | macros/xetex/latex/xduts.zip
+2022/12/03 | 3125 | macros/xetex/latex/xduts/README.md
+2022/12/03 | 881135 | macros/xetex/latex/xduts/xdulogo.pdf
+2022/12/03 | 250660 | macros/xetex/latex/xduts/xduts.dtx
+2022/12/03 | 1111 | macros/xetex/latex/xduts/xduts.ins
+2022/12/03 | 307600 | macros/xetex/latex/xduts/xduts.pdf
+2022/12/03 | 1233271 | macros/xetex/latex/xduts.zip
2017/08/03 | 11999 | macros/xetex/latex/xechangebar/cbtest1.tex
2017/08/03 | 338 | macros/xetex/latex/xechangebar/README
2017/08/03 | 35213 | macros/xetex/latex/xechangebar/xechangebar.sty
@@ -279885,7 +279891,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2022/12/01 | 210493 | support/TeX4ht/source/ChangeLog
+2022/12/02 | 210677 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -279897,7 +279903,7 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2022/11/28 | 1143935 | support/TeX4ht/source/tex4ht-4ht.tex
+2022/12/02 | 1144061 | support/TeX4ht/source/tex4ht-4ht.tex
2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex
2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex
2022/06/05 | 21307 | support/TeX4ht/source/tex4ht-cond4ht.tex
@@ -286417,8 +286423,8 @@
2022/07/29 | 106972 | systems/texlive/tlnet/archive/csassignments.doc.r63992.tar.xz
2022/07/29 | 3884 | systems/texlive/tlnet/archive/csassignments.r63992.tar.xz
2022/07/29 | 8200 | systems/texlive/tlnet/archive/csassignments.source.r63992.tar.xz
-2022/11/30 | 282672 | systems/texlive/tlnet/archive/csbulletin.doc.r65146.tar.xz
-2022/11/30 | 12032 | systems/texlive/tlnet/archive/csbulletin.r65146.tar.xz
+2022/12/03 | 282532 | systems/texlive/tlnet/archive/csbulletin.doc.r65168.tar.xz
+2022/12/03 | 12932 | systems/texlive/tlnet/archive/csbulletin.r65168.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/cslatex.aarch64-linux.r46208.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/cslatex.amd64-freebsd.r16472.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/cslatex.amd64-netbsd.r30191.tar.xz
@@ -286615,9 +286621,9 @@
2019/02/28 | 5132 | systems/texlive/tlnet/archive/cv4tw.r34577.tar.xz
2019/02/28 | 52576 | systems/texlive/tlnet/archive/cv.doc.r15878.tar.xz
2019/02/28 | 832 | systems/texlive/tlnet/archive/cv.r15878.tar.xz
-2022/11/11 | 490640 | systems/texlive/tlnet/archive/cvss.doc.r64985.tar.xz
-2022/11/11 | 3572 | systems/texlive/tlnet/archive/cvss.r64985.tar.xz
-2022/11/11 | 7364 | systems/texlive/tlnet/archive/cvss.source.r64985.tar.xz
+2022/12/03 | 574872 | systems/texlive/tlnet/archive/cvss.doc.r65169.tar.xz
+2022/12/03 | 3320 | systems/texlive/tlnet/archive/cvss.r65169.tar.xz
+2022/12/03 | 7376 | systems/texlive/tlnet/archive/cvss.source.r65169.tar.xz
2022/03/06 | 147572 | systems/texlive/tlnet/archive/cweb.aarch64-linux.r62457.tar.xz
2022/03/05 | 177496 | systems/texlive/tlnet/archive/cweb.amd64-freebsd.r62391.tar.xz
2022/03/05 | 147656 | systems/texlive/tlnet/archive/cweb.amd64-netbsd.r62430.tar.xz
@@ -288136,9 +288142,9 @@
2019/02/28 | 4768 | systems/texlive/tlnet/archive/feynmp-auto.source.r30223.tar.xz
2022/07/21 | 13508 | systems/texlive/tlnet/archive/feyn.r63945.tar.xz
2022/07/21 | 16364 | systems/texlive/tlnet/archive/feyn.source.r63945.tar.xz
-2022/11/29 | 545792 | systems/texlive/tlnet/archive/ffcode.doc.r65132.tar.xz
-2022/11/29 | 2176 | systems/texlive/tlnet/archive/ffcode.r65132.tar.xz
-2022/11/29 | 4980 | systems/texlive/tlnet/archive/ffcode.source.r65132.tar.xz
+2022/12/03 | 545808 | systems/texlive/tlnet/archive/ffcode.doc.r65170.tar.xz
+2022/12/03 | 2180 | systems/texlive/tlnet/archive/ffcode.r65170.tar.xz
+2022/12/03 | 5016 | systems/texlive/tlnet/archive/ffcode.source.r65170.tar.xz
2019/02/28 | 381912 | systems/texlive/tlnet/archive/ffslides.doc.r38895.tar.xz
2019/02/28 | 4952 | systems/texlive/tlnet/archive/ffslides.r38895.tar.xz
2019/02/28 | 137820 | systems/texlive/tlnet/archive/fge.doc.r37628.tar.xz
@@ -294552,8 +294558,8 @@
2019/02/28 | 292656 | systems/texlive/tlnet/archive/simplecv.doc.r35537.tar.xz
2019/02/28 | 2112 | systems/texlive/tlnet/archive/simplecv.r35537.tar.xz
2019/02/28 | 5844 | systems/texlive/tlnet/archive/simplecv.source.r35537.tar.xz
-2022/11/26 | 1985216 | systems/texlive/tlnet/archive/simpleicons.doc.r65102.tar.xz
-2022/11/26 | 2704520 | systems/texlive/tlnet/archive/simpleicons.r65102.tar.xz
+2022/12/03 | 1986672 | systems/texlive/tlnet/archive/simpleicons.doc.r65167.tar.xz
+2022/12/03 | 2707528 | systems/texlive/tlnet/archive/simpleicons.r65167.tar.xz
2019/02/28 | 224844 | systems/texlive/tlnet/archive/simpleinvoice.doc.r45673.tar.xz
2019/02/28 | 2420 | systems/texlive/tlnet/archive/simpleinvoice.r45673.tar.xz
2022/10/03 | 130940 | systems/texlive/tlnet/archive/simplekv.doc.r64578.tar.xz
@@ -295239,14 +295245,14 @@
2022/02/27 | 108804 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r62206.tar.xz
2022/02/27 | 87364 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r62220.tar.xz
2022/04/21 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r63092.tar.xz
-2022/12/02 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r65162.tar.xz
+2022/12/03 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r65171.tar.xz
2022/03/01 | 58328 | systems/texlive/tlnet/archive/tex4ht.i386-cygwin.r62282.tar.xz
2022/02/27 | 93760 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r62206.tar.xz
2022/02/27 | 91280 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r62210.tar.xz
2022/02/27 | 76200 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r62220.tar.xz
2022/02/27 | 83964 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r62206.tar.xz
-2022/12/02 | 974276 | systems/texlive/tlnet/archive/tex4ht.r65162.tar.xz
-2022/12/02 | 1302008 | systems/texlive/tlnet/archive/tex4ht.source.r65162.tar.xz
+2022/12/03 | 974364 | systems/texlive/tlnet/archive/tex4ht.r65171.tar.xz
+2022/12/03 | 1285060 | systems/texlive/tlnet/archive/tex4ht.source.r65171.tar.xz
2022/02/28 | 184748 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r62258.tar.xz
2022/02/27 | 57768 | systems/texlive/tlnet/archive/tex4ht.win32.r62199.tar.xz
2022/03/01 | 58016 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r62279.tar.xz
@@ -295500,7 +295506,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/12/02 | 423300 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65156.tar.xz
+2022/12/03 | 423444 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65164.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
@@ -295524,7 +295530,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/12/02 | 113688 | systems/texlive/tlnet/archive/texlive-scripts.r65156.tar.xz
+2022/12/03 | 113704 | systems/texlive/tlnet/archive/texlive-scripts.r65164.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2022/11/29 | 36264 | systems/texlive/tlnet/archive/texlive-scripts.win32.r65128.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -297375,16 +297381,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/12/02 | 5834818 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/12/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/12/03 | 5834544 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/12/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/12/03 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/12/02 | 20436150 | systems/texlive/tlnet/install-tl-windows.exe
-2022/12/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/12/02 | 25518533 | systems/texlive/tlnet/install-tl.zip
-2022/12/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/12/03 | 20435502 | systems/texlive/tlnet/install-tl-windows.exe
+2022/12/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/12/03 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/12/03 | 25518541 | systems/texlive/tlnet/install-tl.zip
+2022/12/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/12/03 | 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
@@ -297394,7 +297400,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/10/09 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/12/01 | 7335 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/12/02 | 7382 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/10/13 | 225403 | 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
@@ -297437,12 +297443,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2022/12/02 | 17879212 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/12/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/12/03 | 17879282 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/12/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/12/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/12/02 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/12/02 | 2431632 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/12/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/12/03 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/12/03 | 2430876 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/10/04 | 42404 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -307542,7 +307548,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/12/03 | 186 | timestamp
+2022/12/04 | 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
diff --git a/FILES.byname.gz b/FILES.byname.gz
index cba957ac6b..25ab251969 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index b61067a4de..6ca9f03fb8 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,8 +1,383 @@
-2022/12/02 | 974276 | systems/texlive/tlnet/archive/tex4ht.r65162.tar.xz
+2022/12/03 | 99 | macros/latex-dev/base/ltpara-code.tex
+2022/12/03 | 998 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
+2022/12/03 | 9926 | macros/latex-dev/base/ltnews21.tex
+2022/12/03 | 9779 | macros/latex-dev/base/format.ins
+2022/12/03 | 974364 | systems/texlive/tlnet/archive/tex4ht.r65171.tar.xz
+2022/12/03 | 9729 | macros/luatex/generic/pdfextra/pdfextra.tex
+2022/12/03 | 972411 | macros/latex/contrib/ppt-slides.zip
+2022/12/03 | 96 | macros/latex-dev/base/doc-code.tex
+2022/12/03 | 9600 | macros/luatex/generic/pdfextra/examples/pdfextra-example.tex
+2022/12/03 | 9557 | macros/latex-dev/base/ltcntrl.dtx
+2022/12/03 | 94352 | macros/latex/contrib/ppt-slides/socrates.jpg
+2022/12/03 | 9401 | macros/latex-dev/base/source2edoc.cls
+2022/12/03 | 9395 | macros/latex-dev/base/syntonly.dtx
+2022/12/03 | 9345 | macros/latex-dev/base/preload.dtx
+2022/12/03 | 92954 | macros/latex-dev/base/ltdefns.dtx
+2022/12/03 | 92280 | macros/latex-dev/base/utf8ienc.dtx
+2022/12/03 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2022/12/03 | 90660 | macros/latex-dev/base/lttextcomp.dtx
+2022/12/03 | 89727 | macros/latex-dev/base/slides.dtx
+2022/12/03 | 8970 | macros/latex-dev/base/ltnews17.tex
+2022/12/03 | 885857 | macros/latex/contrib/ppt-slides/ppt-slides.pdf
+2022/12/03 | 8827 | macros/latex/contrib/biblatex-contrib/biblatex-publist/README
+2022/12/03 | 881135 | macros/xetex/latex/xduts/xdulogo.pdf
+2022/12/03 | 8731 | macros/latex-dev/base/ltthm.dtx
+2022/12/03 | 8626 | macros/latex-dev/base/oldlfont.dtx
+2022/12/03 | 84215 | macros/latex-dev/base/ltfssini.dtx
+2022/12/03 | 8367 | macros/latex-dev/base/ltnews.tex
+2022/12/03 | 82481 | macros/latex-dev/base/ltfssbas.dtx
+2022/12/03 | 820928 | macros/latex-dev/base/ltshipout-code.pdf
+2022/12/03 | 81202 | macros/latex-dev/base/ltshipout.dtx
+2022/12/03 | 803060 | macros/latex-dev/base/ltfilehook-code.pdf
+2022/12/03 | 755547 | macros/latex-dev/base/doc.pdf
+2022/12/03 | 7524 | macros/latex-dev/base/ltxguide.cls
+2022/12/03 | 75111 | macros/latex-dev/base/ltfssdcl.dtx
+2022/12/03 | 74886 | macros/latex-dev/base/ltluatex.dtx
+2022/12/03 | 7376 | systems/texlive/tlnet/archive/cvss.source.r65169.tar.xz
+2022/12/03 | 72475 | macros/latex-dev/base/ltfsstrc.dtx
+2022/12/03 | 7235 | macros/luatex/generic/pdfextra/examples/pdfextra-example-latex.tex
+2022/12/03 | 7221 | macros/latex-dev/base/ltnews20.tex
+2022/12/03 | 7216 | macros/latex-dev/base/exscale.dtx
+2022/12/03 | 7200 | macros/latex-dev/base/sample2e.tex
+2022/12/03 | 719408 | macros/latex-dev/base/ltcmdhooks-code.pdf
+2022/12/03 | 715658 | macros/latex-dev/base/ltmarks-code.pdf
+2022/12/03 | 7104 | macros/latex-dev/base/alltt.dtx
+2022/12/03 | 7029 | macros/latex-dev/base/ltnews13.tex
+2022/12/03 | 702657 | macros/luatex/generic/pdfextra.zip
+2022/12/03 | 701473 | macros/latex-dev/base/lthooks-doc.pdf
+2022/12/03 | 69 | macros/luatex/generic/pdfextra/pdfextra.sty
+2022/12/03 | 69315 | macros/latex-dev/base/clsguide.tex
+2022/12/03 | 69143 | macros/luatex/generic/pdfextra/pdfextra.opm
+2022/12/03 | 69002 | macros/latex-dev/base/ltpictur.dtx
+2022/12/03 | 68732 | macros/latex-dev/base/usrguide-historic.tex
+2022/12/03 | 6760 | macros/latex-dev/base/slides.ins
+2022/12/03 | 67351 | macros/latex-dev/base/ltfilehook.dtx
+2022/12/03 | 6709 | macros/latex-dev/base/latexsym.dtx
+2022/12/03 | 667129 | macros/latex-dev/base/ltpara-code.pdf
+2022/12/03 | 662 | macros/luatex/generic/pdfextra/LICENSE
+2022/12/03 | 6424 | macros/latex-dev/base/ltnews14.tex
+2022/12/03 | 63700 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
+2022/12/03 | 6357 | macros/latex-dev/base/newlfont.dtx
+2022/12/03 | 63280 | macros/latex-dev/base/letter.dtx
+2022/12/03 | 63132 | macros/latex-dev/base/ltmarks.dtx
+2022/12/03 | 6213 | macros/latex-dev/base/ltmeta.dtx
+2022/12/03 | 6155 | macros/latex-dev/base/ltpar.dtx
+2022/12/03 | 60516 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
+2022/12/03 | 6047 | macros/latex-dev/base/latexrelease.ins
+2022/12/03 | 60321 | macros/latex-dev/base/fontdef.dtx
+2022/12/03 | 5986 | macros/latex-dev/base/ltnews15.tex
+2022/12/03 | 59499 | macros/latex-dev/base/ltplain.dtx
+2022/12/03 | 59070 | macros/latex-dev/base/ltmiscen.dtx
+2022/12/03 | 58933 | macros/latex-dev/base/ltfiles.dtx
+2022/12/03 | 586024 | macros/latex-dev/base/ltmarks-doc.pdf
+2022/12/03 | 5859 | macros/latex-dev/base/ltidxglo.dtx
+2022/12/03 | 58592 | macros/luatex/generic/pdfextra/examples/pdfextra-example-part.prc
+2022/12/03 | 58551 | macros/latex-dev/base/ltfssaxes.dtx
+2022/12/03 | 5834544 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/12/03 | 5825 | macros/latex-dev/base/ltnews10.tex
+2022/12/03 | 5789493 | macros/latex-dev/base/source2e.pdf
+2022/12/03 | 5775 | macros/latex-dev/base/ltnews16.tex
+2022/12/03 | 574872 | systems/texlive/tlnet/archive/cvss.doc.r65169.tar.xz
+2022/12/03 | 5732 | macros/latex-dev/base/ltnews08.tex
+2022/12/03 | 5714 | macros/latex-dev/base/inputenc.ins
+2022/12/03 | 5699 | macros/latex-dev/base/ltnews05.tex
+2022/12/03 | 5678 | macros/latex-dev/base/ltnews04.tex
+2022/12/03 | 5671 | macros/latex-dev/base/ltnews27.tex
+2022/12/03 | 565931 | macros/latex-dev/base/ltshipout-doc.pdf
+2022/12/03 | 563089 | macros/latex-dev/base/ltnews35.pdf
+2022/12/03 | 560326 | macros/latex-dev/base/classes.pdf
+2022/12/03 | 560008 | macros/latex-dev/base/ltpara-doc.pdf
+2022/12/03 | 5588 | macros/latex-dev/base/ltnews25.tex
+2022/12/03 | 5576 | macros/latex-dev/base/ltnews07.tex
+2022/12/03 | 5574 | macros/latex-dev/base/ltnews12.tex
+2022/12/03 | 55687 | macros/latex-dev/base/ltfloat.dtx
+2022/12/03 | 5544 | macros/latex-dev/base/ltnews06.tex
+2022/12/03 | 5529 | macros/latex-dev/base/ltnews11.tex
+2022/12/03 | 5509 | macros/latex-dev/base/graphpap.dtx
+2022/12/03 | 547926 | macros/latex-dev/base/ltfilehook-doc.pdf
+2022/12/03 | 5462 | macros/latex-dev/base/ltnews02.tex
+2022/12/03 | 546160 | macros/latex-dev/base/ltnews32.pdf
+2022/12/03 | 545808 | systems/texlive/tlnet/archive/ffcode.doc.r65170.tar.xz
+2022/12/03 | 5451 | macros/latex-dev/base/ltnews09.tex
+2022/12/03 | 5369 | macros/latex-dev/base/ltnews03.tex
+2022/12/03 | 53025 | macros/latex-dev/base/ltcmdhooks.dtx
+2022/12/03 | 52813 | macros/latex-dev/base/encguide.tex
+2022/12/03 | 5273 | macros/latex-dev/base/cmextra.ins
+2022/12/03 | 52710 | macros/latex-dev/base/lb2.err
+2022/12/03 | 526323 | macros/latex-dev/base/ltnews31.pdf
+2022/12/03 | 5246 | macros/latex-dev/base/ltnews01.tex
+2022/12/03 | 522412 | macros/latex-dev/base/ltnews33.pdf
+2022/12/03 | 517838 | macros/latex-dev/base/fntguide.pdf
+2022/12/03 | 517565 | macros/latex-dev/base/ltnews36.pdf
+2022/12/03 | 51606 | macros/latex-dev/base/ltpara.dtx
+2022/12/03 | 511909 | macros/latex-dev/base/ltnews30.pdf
+2022/12/03 | 51005 | macros/latex-dev/base/usrguide.tex
+2022/12/03 | 508044 | macros/latex-dev/base/ltnews34.pdf
+2022/12/03 | 5041 | macros/latex-dev/base/latexsym.ins
+2022/12/03 | 504178 | macros/latex-dev/base/docstrip.pdf
+2022/12/03 | 5016 | systems/texlive/tlnet/archive/ffcode.source.r65170.tar.xz
+2022/12/03 | 50069 | macros/latex-dev/base/ltfinal.dtx
+2022/12/03 | 4945 | macros/latex-dev/base/lthyphen.dtx
+2022/12/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/12/03 | 47896 | macros/latex-dev/base/lttab.dtx
+2022/12/03 | 478686 | macros/latex-dev/base/ltcmdhooks-doc.pdf
+2022/12/03 | 4757 | macros/latex-dev/base/ltlength.dtx
+2022/12/03 | 474 | macros/latex-dev/required/firstaid/README.md
+2022/12/03 | 474808 | macros/latex-dev/base/usrguide.pdf
+2022/12/03 | 4736 | macros/latex/contrib/semantex/stripsemantex.sty
+2022/12/03 | 4607 | macros/latex-dev/required/firstaid/changes.txt
+2022/12/03 | 45754 | macros/latex-dev/base/ltspace.dtx
+2022/12/03 | 45712 | macros/latex-dev/base/ltboxes.dtx
+2022/12/03 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/12/03 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/12/03 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/12/03 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/12/03 | 455242 | macros/latex/contrib/semantex.zip
+2022/12/03 | 455107 | macros/latex-dev/base/ltnews29.pdf
+2022/12/03 | 45347 | macros/latex-dev/base/latexrelease.dtx
+2022/12/03 | 44410 | macros/latex-dev/base/cmfonts.fdd
+2022/12/03 | 439953 | macros/latex/contrib/biblatex-contrib/biblatex-publist.zip
+2022/12/03 | 4390 | macros/latex-dev/base/ec.ins
+2022/12/03 | 438515 | macros/latex-dev/base/usrguide-historic.pdf
+2022/12/03 | 4324 | macros/latex-dev/base/cmfonts.ins
+2022/12/03 | 4298 | macros/latex-dev/base/ltalloc.dtx
+2022/12/03 | 4273 | macros/latex-dev/base/docstrip.ins
+2022/12/03 | 42708 | macros/latex-dev/base/changes.old.txt
+2022/12/03 | 4254 | macros/latex-dev/base/newdc.ins
+2022/12/03 | 423444 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65164.tar.xz
+2022/12/03 | 4219 | macros/latex-dev/base/latex209.ins
+2022/12/03 | 4170 | macros/latex-dev/base/ltnews19.tex
+2022/12/03 | 41493 | macros/latex-dev/base/ltmath.dtx
+2022/12/03 | 414419 | macros/latex-dev/base/clsguide.pdf
+2022/12/03 | 408962 | macros/latex-dev/base/ltnews37.pdf
+2022/12/03 | 4087 | macros/latex-dev/base/classes.ins
+2022/12/03 | 4079 | macros/latex-dev/base/lablst.tex
+2022/12/03 | 407279 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
+2022/12/03 | 4018012 | biblio/ctan-bibdata.zip
+2022/12/03 | 3989 | macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
+2022/12/03 | 397760 | macros/latex/contrib/semantex/semantex.pdf
+2022/12/03 | 3960 | macros/latex-dev/base/olddc.ins
+2022/12/03 | 39466146 | install/macros/latex-dev/latex-base-dev.tds.zip
+2022/12/03 | 394640 | macros/latex-dev/base/changes.txt
+2022/12/03 | 38914585 | macros/latex-dev/base.zip
+2022/12/03 | 38793 | macros/latex-dev/base/ltnews35.tex
+2022/12/03 | 38730 | macros/latex-dev/base/latex209.dtx
+2022/12/03 | 385337 | macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
+2022/12/03 | 38033 | macros/latex-dev/base/ltnews18.pdf
+2022/12/03 | 379462 | macros/latex-dev/base/ltnews26.pdf
+2022/12/03 | 3781 | macros/latex-dev/base/tulm.ins
+2022/12/03 | 376643 | macros/latex-dev/base/ltnews28.pdf
+2022/12/03 | 375518 | macros/latex-dev/base/slides.pdf
+2022/12/03 | 3725 | macros/latex-dev/base/ltlogos.dtx
+2022/12/03 | 3624853 | biblio/ctan-bibdata/ctan.pdf
+2022/12/03 | 36152 | macros/latex-dev/base/ltlists.dtx
+2022/12/03 | 35984 | macros/latex-dev/base/ltdirchk.dtx
+2022/12/03 | 353428 | macros/latex-dev/base/utf8ienc.pdf
+2022/12/03 | 3478 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
+2022/12/03 | 3434 | macros/latex-dev/base/makeindx.ins
+2022/12/03 | 3401 | macros/latex-dev/base/proc.ins
+2022/12/03 | 33962 | macros/luatex/generic/pdfextra/pdfextra-doc.tex
+2022/12/03 | 33946 | macros/latex-dev/base/ltsect.dtx
+2022/12/03 | 33907 | macros/latex-dev/base/ltnews33.tex
+2022/12/03 | 337430 | macros/latex-dev/base/letter.pdf
+2022/12/03 | 3372 | macros/latex-dev/base/letter.ins
+2022/12/03 | 3367 | macros/latex-dev/base/ltoutenc.ins
+2022/12/03 | 3338 | macros/latex-dev/base/exscale.ins
+2022/12/03 | 33239 | macros/latex-dev/base/ltnews32.tex
+2022/12/03 | 3320 | systems/texlive/tlnet/archive/cvss.r65169.tar.xz
+2022/12/03 | 3282 | macros/latex-dev/base/bugs.txt
+2022/12/03 | 324910 | macros/latex-dev/base/ltluatex.pdf
+2022/12/03 | 32307 | macros/latex-dev/base/ltnews34.tex
+2022/12/03 | 318548 | macros/latex-dev/base/ltnews20.pdf
+2022/12/03 | 318204 | macros/latex-dev/base/inputenc.pdf
+2022/12/03 | 3181 | macros/latex-dev/base/unpack.ins
+2022/12/03 | 317773 | macros/latex-dev/base/ltnews22.pdf
+2022/12/03 | 3125 | macros/xetex/latex/xduts/README.md
+2022/12/03 | 3100 | macros/latex-dev/base/README.md
+2022/12/03 | 3094 | macros/unicodetex/latex/njuthesis/njuthesis.ins
+2022/12/03 | 307600 | macros/xetex/latex/xduts/xduts.pdf
+2022/12/03 | 30499 | macros/latex-dev/base/doc-2021-06-01.sty
+2022/12/03 | 30428 | macros/latex-dev/base/ltnews31.tex
+2022/12/03 | 300363 | macros/latex/contrib/semantex/semantex.sty
+2022/12/03 | 300296 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
+2022/12/03 | 29965 | macros/latex-dev/base/doc-2016-02-15.sty
+2022/12/03 | 29267 | macros/latex-dev/base/ltfntcmd.dtx
+2022/12/03 | 292160 | macros/latex-dev/base/cmfonts.pdf
+2022/12/03 | 290615 | macros/latex-dev/base/tlc2.pdf
+2022/12/03 | 2896 | macros/latex-dev/base/syntonly.ins
+2022/12/03 | 2893 | macros/latex-dev/base/nfssfont.ins
+2022/12/03 | 2892 | macros/latex-dev/base/graphpap.ins
+2022/12/03 | 2892 | macros/latex-dev/base/fix-cm.ins
+2022/12/03 | 2890 | macros/latex-dev/base/alltt.ins
+2022/12/03 | 2888 | macros/latex-dev/base/ifthen.ins
+2022/12/03 | 287733 | macros/latex-dev/base/fix-cm.pdf
+2022/12/03 | 286591 | macros/latex-dev/base/ltnews23.pdf
+2022/12/03 | 282532 | systems/texlive/tlnet/archive/csbulletin.doc.r65168.tar.xz
+2022/12/03 | 282115 | macros/latex-dev/base/latexrelease.pdf
+2022/12/03 | 277960 | install/macros/latex-dev/required/latex-firstaid-dev.tds.zip
+2022/12/03 | 2747422 | biblio/ctan-bibdata/ctan.bib
+2022/12/03 | 2740 | macros/latex-dev/required/firstaid/firstaid.ins
+2022/12/03 | 272 | macros/latex/contrib/ppt-slides/DEPENDS.txt
+2022/12/03 | 272901 | macros/latex-dev/required/firstaid.zip
+2022/12/03 | 2728 | macros/latex-dev/base/ltpageno.dtx
+2022/12/03 | 271476 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
+2022/12/03 | 27122 | macros/latex-dev/base/ltxcheck.tex
+2022/12/03 | 2707528 | systems/texlive/tlnet/archive/simpleicons.r65167.tar.xz
+2022/12/03 | 27069 | macros/latex-dev/base/lterror.dtx
+2022/12/03 | 2705 | macros/latex-dev/base/idx.tex
+2022/12/03 | 265279 | macros/latex-dev/base/ltnews24.pdf
+2022/12/03 | 264112 | macros/latex-dev/base/cfgguide.pdf
+2022/12/03 | 2640 | macros/latex/contrib/ppt-slides/ppt-slides.ins
+2022/12/03 | 257804 | macros/latex-dev/base/modguide.pdf
+2022/12/03 | 257314 | macros/latex-dev/base/cyrguide.pdf
+2022/12/03 | 25518541 | systems/texlive/tlnet/install-tl.zip
+2022/12/03 | 252140 | macros/latex-dev/base/lb2.pdf
+2022/12/03 | 250660 | macros/xetex/latex/xduts/xduts.dtx
+2022/12/03 | 250592 | macros/latex-dev/base/ltnews27.pdf
+2022/12/03 | 2488994 | macros/optex.zip
+2022/12/03 | 244867 | macros/latex-dev/base/ltnews21.pdf
+2022/12/03 | 243286 | macros/latex-dev/base/ltxdoc.pdf
+2022/12/03 | 2430876 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/12/03 | 24286 | macros/latex-dev/base/ltcounts.dtx
+2022/12/03 | 242468 | macros/latex-dev/base/doc.dtx
+2022/12/03 | 241 | macros/latex-dev/base/ltfilehook-doc.tex
+2022/12/03 | 240 | macros/latex-dev/base/ltshipout-doc.tex
+2022/12/03 | 238 | macros/latex-dev/base/ltmarks-doc.tex
+2022/12/03 | 238 | macros/latex-dev/base/lthooks-doc.tex
+2022/12/03 | 238 | macros/latex-dev/base/ltcmdhooks-doc.tex
+2022/12/03 | 23637 | macros/latex-dev/base/ltnews30.tex
+2022/12/03 | 23583 | macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
+2022/12/03 | 23516 | macros/latex-dev/base/fix-cm.dtx
+2022/12/03 | 234 | macros/latex-dev/base/ltpara-doc.tex
+2022/12/03 | 234191 | macros/latex-dev/base/slifonts.pdf
+2022/12/03 | 23386 | macros/latex-dev/base/lppl.tex
+2022/12/03 | 232911 | macros/luatex/generic/pdfextra/pdfextra-doc.pdf
+2022/12/03 | 230028 | macros/latex-dev/base/ltnews19.pdf
+2022/12/03 | 22720 | macros/latex-dev/base/cfgguide.tex
+2022/12/03 | 227059 | macros/latex-dev/base/proc.pdf
+2022/12/03 | 22665 | macros/latex-dev/base/ltxdoc.dtx
+2022/12/03 | 223831 | macros/latex-dev/base/alltt.pdf
+2022/12/03 | 221211 | macros/latex-dev/base/ifthen.pdf
+2022/12/03 | 219349 | macros/latex-dev/base/ltx3info.pdf
+2022/12/03 | 2180 | systems/texlive/tlnet/archive/ffcode.r65170.tar.xz
+2022/12/03 | 215684 | macros/latex-dev/base/lgc2.pdf
+2022/12/03 | 211770 | macros/latex-dev/base/lthooks.dtx
+2022/12/03 | 211180 | macros/latex-dev/base/nfssfont.pdf
+2022/12/03 | 20652 | macros/latex-dev/base/lgc2.err
+2022/12/03 | 204935 | macros/latex-dev/base/ltnews25.pdf
+2022/12/03 | 204711 | macros/latex-dev/base/exscale.pdf
+2022/12/03 | 20469 | macros/latex-dev/base/ltnews.cls
+2022/12/03 | 20435502 | systems/texlive/tlnet/install-tl-windows.exe
+2022/12/03 | 200760 | macros/latex-dev/base/latexsym.pdf
+2022/12/03 | 1986672 | systems/texlive/tlnet/archive/simpleicons.doc.r65167.tar.xz
+2022/12/03 | 19853 | macros/latex-dev/base/ltkeys.dtx
+2022/12/03 | 1937 | macros/latex-dev/base/minimal.cls
+2022/12/03 | 19329 | macros/latex-dev/base/ltnews36.tex
+2022/12/03 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE
+2022/12/03 | 19040 | macros/latex-dev/base/lppl.txt
+2022/12/03 | 189819 | macros/latex-dev/base/syntonly.pdf
+2022/12/03 | 18944 | macros/latex-dev/base/ltnews29.tex
+2022/12/03 | 18753 | macros/latex-dev/base/ifthen.dtx
+2022/12/03 | 18711 | macros/latex-dev/base/ltexpl.dtx
+2022/12/03 | 18399 | macros/latex-dev/base/nfssfont.dtx
+2022/12/03 | 18363 | macros/latex-dev/base/ltxref.dtx
+2022/12/03 | 183578 | macros/latex-dev/base/ltcmd.dtx
+2022/12/03 | 18299 | macros/latex-dev/base/ltx3info.tex
+2022/12/03 | 182225 | macros/latex-dev/base/ltnews13.pdf
+2022/12/03 | 182031 | macros/latex/contrib/semantex/semantex.tex
+2022/12/03 | 17914 | macros/latex/contrib/ppt-slides/ppt-slides.dtx
+2022/12/03 | 17879282 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/12/03 | 178723 | macros/latex-dev/base/ltoutput.dtx
+2022/12/03 | 17779 | macros/latex-dev/base/cyrguide.tex
+2022/12/03 | 174494 | macros/latex-dev/base/ltnews05.pdf
+2022/12/03 | 17389 | macros/latex-dev/base/ltbibl.dtx
+2022/12/03 | 172867 | macros/latex-dev/base/tlc2.err
+2022/12/03 | 170878 | macros/latex-dev/base/lamport-manual.pdf
+2022/12/03 | 170595 | macros/latex-dev/base/docstrip.dtx
+2022/12/03 | 170473 | macros/latex-dev/base/ltnews14.pdf
+2022/12/03 | 1694 | macros/latex-dev/base/small2e.tex
+2022/12/03 | 169416 | macros/latex-dev/base/ltnews10.pdf
+2022/12/03 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2022/12/03 | 166228 | macros/latex-dev/base/ltnews17.pdf
+2022/12/03 | 165821 | macros/latex-dev/base/makeindx.pdf
+2022/12/03 | 16497 | macros/latex-dev/base/modguide.tex
+2022/12/03 | 162772 | macros/latex-dev/base/tulm.pdf
+2022/12/03 | 1620 | macros/latex/contrib/ppt-slides/README.md
+2022/12/03 | 161713 | macros/latex-dev/base/graphpap.pdf
+2022/12/03 | 161518 | macros/latex-dev/base/ltnews01.pdf
+2022/12/03 | 159792 | macros/latex-dev/base/ltnews02.pdf
+2022/12/03 | 159332 | macros/latex-dev/base/ltnews03.pdf
+2022/12/03 | 15699 | macros/latex-dev/base/slifonts.fdd
+2022/12/03 | 156551 | macros/latex-dev/base/ltnews12.pdf
+2022/12/03 | 156236 | macros/latex-dev/base/classes.dtx
+2022/12/03 | 155053 | macros/latex-dev/base/ltnews08.pdf
+2022/12/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/12/03 | 15384 | macros/latex-dev/base/ltvers.dtx
+2022/12/03 | 15306 | macros/latex-dev/base/source2e.tex
+2022/12/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/12/03 | 152525 | macros/latex-dev/base/ltnews04.pdf
+2022/12/03 | 15047 | macros/latex-dev/base/ltnews28.tex
+2022/12/03 | 148294 | macros/latex-dev/base/ltoutenc.dtx
+2022/12/03 | 146198 | macros/latex-dev/base/webcomp.pdf
+2022/12/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/12/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/12/03 | 144369 | macros/latex-dev/base/ltclass.dtx
+2022/12/03 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2022/12/03 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2022/12/03 | 142849 | macros/latex-dev/base/ltnews06.pdf
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-light-mono.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark.tex
+2022/12/03 | 1420 | macros/latex/contrib/ppt-slides/ppt-schemes/ppt-dark-mono.tex
+2022/12/03 | 14091 | macros/latex-dev/base/ltpage.dtx
+2022/12/03 | 138073 | macros/latex-dev/base/ltnews16.pdf
+2022/12/03 | 137811 | macros/latex-dev/base/ltnews07.pdf
+2022/12/03 | 13759 | macros/latex-dev/base/lamport-manual.err
+2022/12/03 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r65171.tar.xz
+2022/12/03 | 13589 | macros/latex-dev/base/proc.dtx
+2022/12/03 | 1341 | macros/latex-dev/base/ltnews18.tex
+2022/12/03 | 132382 | macros/latex-dev/base/lppl.pdf
+2022/12/03 | 1318126 | macros/latex-dev/base/encguide.pdf
+2022/12/03 | 130309 | macros/latex-dev/base/ltnews15.pdf
+2022/12/03 | 129570 | macros/latex-dev/base/ltnews09.pdf
+2022/12/03 | 12932 | systems/texlive/tlnet/archive/csbulletin.r65168.tar.xz
+2022/12/03 | 1285060 | systems/texlive/tlnet/archive/tex4ht.source.r65171.tar.xz
+2022/12/03 | 1279 | macros/latex-dev/base/legal.txt
+2022/12/03 | 1255282 | macros/latex-dev/base/ltnews.pdf
+2022/12/03 | 12520 | macros/latex-dev/base/testpage.tex
+2022/12/03 | 1244739 | macros/unicodetex/latex/njuthesis.zip
+2022/12/03 | 12334 | macros/latex-dev/base/ltnews24.tex
+2022/12/03 | 1233271 | macros/xetex/latex/xduts.zip
+2022/12/03 | 12242 | macros/latex-dev/base/tulm.fdd
+2022/12/03 | 11852 | macros/latex-dev/base/ltnews37.tex
+2022/12/03 | 1176569 | macros/unicodetex/latex/njuthesis/njuthesis.pdf
+2022/12/03 | 113704 | systems/texlive/tlnet/archive/texlive-scripts.r65164.tar.xz
+2022/12/03 | 111948 | macros/latex-dev/base/ltnews11.pdf
+2022/12/03 | 11124 | macros/latex-dev/base/manifest.txt
+2022/12/03 | 1111 | macros/xetex/latex/xduts/xduts.ins
+2022/12/03 | 1101 | macros/luatex/generic/pdfextra/README.md
+2022/12/03 | 1091429 | macros/latex-dev/base/lthooks-code.pdf
+2022/12/03 | 108231 | macros/latex-dev/base/fntguide.tex
+2022/12/03 | 10798 | macros/latex-dev/base/ltnews26.tex
+2022/12/03 | 10792 | macros/latex-dev/base/ltnews22.tex
+2022/12/03 | 10791 | macros/latex-dev/base/ltnews23.tex
+2022/12/03 | 1078 | macros/latex/contrib/ppt-slides/LICENSE.txt
+2022/12/03 | 1077 | macros/unicodetex/latex/njuthesis/README.md
+2022/12/03 | 1075110 | macros/latex-dev/base/doc-code.pdf
+2022/12/03 | 106904 | macros/latex-dev/base/inputenc.dtx
+2022/12/03 | 10601 | macros/latex-dev/base/makeindx.dtx
+2022/12/03 | 105 | macros/latex-dev/base/ltfilehook-code.tex
+2022/12/03 | 104 | macros/latex-dev/base/ltshipout-code.tex
+2022/12/03 | 103 | macros/latex-dev/base/ltcmdhooks-code.tex
+2022/12/03 | 10370 | macros/latex-dev/base/ltfsscmp.dtx
+2022/12/03 | 102 | macros/latex-dev/base/ltmarks-code.tex
+2022/12/03 | 102 | macros/latex-dev/base/lthooks-code.tex
+2022/12/03 | 10251 | macros/latex-dev/base/webcomp.err
2022/12/02 | 914 | systems/win32/miktex/tm/packages/pr.ini
2022/12/02 | 88422 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
2022/12/02 | 8829 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2022/12/02 | 874 | macros/latex/contrib/csbulletin/tex/csbulobalka.cls
+2022/12/02 | 8637 | macros/optex/README
2022/12/02 | 848323 | systems/win32/miktex/tm/packages/fvextra__doc.tar.lzma
2022/12/02 | 845388 | systems/texlive/tlnet/archive/fvextra.doc.r65158.tar.xz
2022/12/02 | 828008 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
@@ -14,6 +389,7 @@
2022/12/02 | 750060 | systems/win32/miktex/tm/packages/next/files.csv.lzma
2022/12/02 | 74433 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2022/12/02 | 73952 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/12/02 | 7382 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/12/02 | 73354 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
2022/12/02 | 7274 | macros/latex/contrib/csbulletin/doc/csbulletin.tex
2022/12/02 | 72746 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
@@ -34,7 +410,6 @@
2022/12/02 | 609 | macros/latex/contrib/csbulletin/README
2022/12/02 | 600295 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2022/12/02 | 58530 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/12/02 | 5834818 | systems/texlive/tlnet/install-tl-unx.tar.gz
2022/12/02 | 582949 | macros/latex/contrib/cvss.zip
2022/12/02 | 57810 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
2022/12/02 | 57421 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
@@ -54,25 +429,20 @@
2022/12/02 | 525236 | systems/win32/miktex/tm/packages/xduts.tar.lzma
2022/12/02 | 521608 | systems/texlive/tlnet/archive/xduts.r65160.tar.xz
2022/12/02 | 4935967 | fonts/simpleicons.zip
-2022/12/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/12/02 | 48980 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2022/12/02 | 4864 | systems/texlive/tlnet/archive/ukbill.r65159.tar.xz
2022/12/02 | 48193 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2022/12/02 | 473023 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
2022/12/02 | 45782 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/12/02 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/12/02 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/12/02 | 4482 | macros/optex/doc/optex-doc.tex
2022/12/02 | 44061 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
2022/12/02 | 43896 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2022/12/02 | 43700 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
2022/12/02 | 424 | macros/latex/contrib/csbulletin/doc/example.bib
2022/12/02 | 42465 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/12/02 | 423300 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65156.tar.xz
2022/12/02 | 41733 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2022/12/02 | 40 | macros/latex/contrib/ffcode/DEPENDS.txt
-2022/12/02 | 4017985 | biblio/ctan-bibdata.zip
+2022/12/02 | 4074 | macros/optex/base/optex.ini
2022/12/02 | 39859 | systems/win32/miktex/tm/packages/xduts__source.tar.lzma
2022/12/02 | 395125 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2022/12/02 | 39448 | systems/texlive/tlnet/archive/xduts.source.r65160.tar.xz
@@ -80,7 +450,6 @@
2022/12/02 | 3739 | macros/latex/contrib/csbulletin/tex/csbulacronym.sty
2022/12/02 | 37393 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2022/12/02 | 37094 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/12/02 | 3624126 | biblio/ctan-bibdata/ctan.pdf
2022/12/02 | 35322 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
2022/12/02 | 352468 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
2022/12/02 | 35199 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
@@ -107,7 +476,6 @@
2022/12/02 | 27735 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2022/12/02 | 276383 | macros/latex/contrib/csbulletin/doc/csbulletin.pdf
2022/12/02 | 274 | fonts/simpleicons/tex/usimpleiconsOneZero.fd
-2022/12/02 | 2747416 | biblio/ctan-bibdata/ctan.bib
2022/12/02 | 2746 | fonts/simpleicons/enc/simpleiconsFour.enc
2022/12/02 | 271445 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2022/12/02 | 2673 | fonts/simpleicons/enc/simpleiconsSix.enc
@@ -122,7 +490,6 @@
2022/12/02 | 259 | fonts/simpleicons/tex/usimpleiconsFour.fd
2022/12/02 | 259 | fonts/simpleicons/tex/usimpleiconsFive.fd
2022/12/02 | 2572 | fonts/simpleicons/enc/simpleiconsNine.enc
-2022/12/02 | 25518533 | systems/texlive/tlnet/install-tl.zip
2022/12/02 | 254 | fonts/simpleicons/tex/usimpleiconsTwo.fd
2022/12/02 | 254 | fonts/simpleicons/tex/usimpleiconsSix.fd
2022/12/02 | 254 | fonts/simpleicons/tex/usimpleiconsOne.fd
@@ -130,7 +497,6 @@
2022/12/02 | 2516 | fonts/simpleicons/enc/simpleiconsThree.enc
2022/12/02 | 247510 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
2022/12/02 | 245706 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/12/02 | 2431632 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/12/02 | 2425 | fonts/simpleicons/enc/simpleiconsFive.enc
2022/12/02 | 24079 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2022/12/02 | 24045 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
@@ -140,8 +506,8 @@
2022/12/02 | 216580 | fonts/simpleicons/tex/simpleiconsglyphs-pdftex.tex
2022/12/02 | 214176 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2022/12/02 | 212537 | fonts/simpleicons/tex/simpleiconsglyphs-xeluatex.tex
+2022/12/02 | 210677 | support/TeX4ht/source/ChangeLog
2022/12/02 | 209064 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/12/02 | 20436150 | systems/texlive/tlnet/install-tl-windows.exe
2022/12/02 | 203598 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
2022/12/02 | 1999817 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2022/12/02 | 1977178 | fonts/simpleicons/doc/simpleicons.pdf
@@ -157,33 +523,27 @@
2022/12/02 | 18357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2022/12/02 | 181554 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
2022/12/02 | 18029 | macros/latex/contrib/csbulletin/tex/csbulletin.cls
-2022/12/02 | 17879212 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2022/12/02 | 175401 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2022/12/02 | 1746421 | fonts/simpleicons/type1/SimpleIcons.pfb
2022/12/02 | 17445 | macros/latex/contrib/csbulletin/tex/csbulobalka.sty
2022/12/02 | 173437 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/12/02 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/12/02 | 1664 | systems/texlive/tlnet/archive/collection-publishers.r65159.tar.xz
2022/12/02 | 1627957 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2022/12/02 | 1627740 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2022/12/02 | 1559 | fonts/simpleicons/tex/simpleicons.sty
2022/12/02 | 155964 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2022/12/02 | 15538 | macros/plain/graphics/miniltx.tex
-2022/12/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/12/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/12/02 | 15374 | macros/optex/base/if-macros.opm
2022/12/02 | 1515 | macros/latex/contrib/cvss/README.md
2022/12/02 | 1514697 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/12/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/12/02 | 1484007 | macros/optex/doc/optex-doc.pdf
2022/12/02 | 1456952 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/12/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2022/12/02 | 14461 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2022/12/02 | 140617 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2022/12/02 | 1376 | macros/latex/contrib/ffcode/README.md
-2022/12/02 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r65162.tar.xz
2022/12/02 | 136101 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2022/12/02 | 1337466 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2022/12/02 | 13057 | macros/plain/graphics.zip
-2022/12/02 | 1302008 | systems/texlive/tlnet/archive/tex4ht.source.r65162.tar.xz
2022/12/02 | 128551 | fonts/simpleicons/doc/bindings.tex
2022/12/02 | 12507 | systems/win32/miktex/tm/packages/fvextra.tar.lzma
2022/12/02 | 12448 | macros/latex/contrib/cvss/cvss.ins
@@ -202,7 +562,7 @@
2022/12/02 | 1166540 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
2022/12/02 | 115796 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2022/12/02 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/12/02 | 113688 | systems/texlive/tlnet/archive/texlive-scripts.r65156.tar.xz
+2022/12/02 | 1144061 | support/TeX4ht/source/tex4ht-4ht.tex
2022/12/02 | 113211 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2022/12/02 | 1126 | macros/latex/contrib/csbulletin/tex/csbulv1.cls
2022/12/02 | 1119 | fonts/simpleicons/map/simpleicons.map
@@ -223,7 +583,6 @@
2022/12/01 | 89924 | systems/texlive/tlnet/archive/lutabulartools.doc.r65153.tar.xz
2022/12/01 | 884180 | systems/win32/miktex/tm/packages/babel__doc.tar.lzma
2022/12/01 | 883760 | systems/texlive/tlnet/archive/babel.doc.r65152.tar.xz
-2022/12/01 | 881135 | macros/xetex/latex/xduts/xdulogo.pdf
2022/12/01 | 8771 | systems/win32/miktex/tm/packages/lutabulartools.tar.lzma
2022/12/01 | 867095 | macros/latex/contrib/fvextra/fvextra.pdf
2022/12/01 | 85276 | macros/latex/contrib/ukbill/immigration-bill.pdf
@@ -232,7 +591,6 @@
2022/12/01 | 82790 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
2022/12/01 | 79915 | systems/win32/miktex/tm/packages/graph35__source.tar.lzma
2022/12/01 | 7490 | systems/win32/miktex/tm/packages/docshots__source.tar.lzma
-2022/12/01 | 7335 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/12/01 | 722784 | systems/win32/miktex/tm/packages/babel__source.tar.lzma
2022/12/01 | 722612 | systems/win32/miktex/tm/packages/polyglossia__doc.tar.lzma
2022/12/01 | 722056 | systems/texlive/tlnet/archive/babel.source.r65152.tar.xz
@@ -249,6 +607,7 @@
2022/12/01 | 5100 | systems/texlive/tlnet/archive/kdpcover.source.r65150.tar.xz
2022/12/01 | 498613 | systems/win32/miktex/tm/packages/piton__doc.tar.lzma
2022/12/01 | 46473 | systems/win32/miktex/tm/packages/bangorexam.tar.lzma
+2022/12/01 | 40299 | macros/optex/base/fonts-select.opm
2022/12/01 | 3863 | systems/win32/miktex/tm/packages/csbulletin__source.tar.lzma
2022/12/01 | 38481904 | macros/latex/base.zip
2022/12/01 | 369424 | systems/win32/miktex/tm/packages/kdpcover__doc.tar.lzma
@@ -256,15 +615,12 @@
2022/12/01 | 35322 | systems/win32/miktex/tm/packages/piton__source.tar.lzma
2022/12/01 | 338807 | systems/win32/miktex/tm/packages/docshots__doc.tar.lzma
2022/12/01 | 3358376 | systems/texlive/tlnet/archive/circuit-macros.doc.r65149.tar.xz
-2022/12/01 | 3125 | macros/xetex/latex/xduts/README.md
-2022/12/01 | 306469 | macros/xetex/latex/xduts/xduts.pdf
2022/12/01 | 2982 | systems/win32/miktex/tm/packages/docshots.tar.lzma
2022/12/01 | 293752 | systems/win32/miktex/tm/packages/bangorexam__doc.tar.lzma
2022/12/01 | 290073 | macros/latex/contrib/fvextra/fvextra.dtx
2022/12/01 | 2837 | systems/win32/miktex/tm/packages/kdpcover.tar.lzma
2022/12/01 | 281426 | systems/win32/miktex/tm/packages/csbulletin__doc.tar.lzma
2022/12/01 | 26297 | macros/latex/contrib/ukbill/ukbill-documentation.tex
-2022/12/01 | 245152 | macros/xetex/latex/xduts/xduts.dtx
2022/12/01 | 24261 | systems/win32/miktex/tm/packages/proflycee.tar.lzma
2022/12/01 | 24132 | systems/texlive/tlnet/archive/proflycee.r65151.tar.xz
2022/12/01 | 2349 | macros/latex/contrib/fvextra/fvextra.ins
@@ -273,7 +629,6 @@
2022/12/01 | 22324 | systems/win32/miktex/tm/packages/graph35.tar.lzma
2022/12/01 | 2176227 | systems/win32/miktex/tm/packages/graph35__doc.tar.lzma
2022/12/01 | 21394 | systems/win32/miktex/tm/packages/mathfont.tar.lzma
-2022/12/01 | 210493 | support/TeX4ht/source/ChangeLog
2022/12/01 | 20461 | macros/latex/contrib/ukbill/immigration-bill.tex
2022/12/01 | 200868 | systems/win32/miktex/tm/packages/pstricks__source.tar.lzma
2022/12/01 | 198558 | systems/win32/miktex/tm/packages/babel.tar.lzma
@@ -281,6 +636,7 @@
2022/12/01 | 19589 | macros/latex/contrib/ukbill/ukbill.cls
2022/12/01 | 194880 | systems/texlive/tlnet/archive/babel.r65152.tar.xz
2022/12/01 | 17861 | CTAN.sites
+2022/12/01 | 17793 | macros/optex/base/unimath-macros.opm
2022/12/01 | 162562 | systems/win32/miktex/tm/packages/polyglossia__source.tar.lzma
2022/12/01 | 15483 | systems/win32/miktex/tm/packages/eolang__source.tar.lzma
2022/12/01 | 152649 | systems/win32/miktex/tm/packages/proflycee__source.tar.lzma
@@ -290,10 +646,10 @@
2022/12/01 | 1455576 | systems/texlive/tlnet/archive/proflycee.doc.r65151.tar.xz
2022/12/01 | 1303357 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma
2022/12/01 | 123284 | systems/win32/miktex/tm/packages/polyglossia.tar.lzma
-2022/12/01 | 1231367 | macros/xetex/latex/xduts.zip
2022/12/01 | 12299 | systems/win32/miktex/tm/packages/csbulletin.tar.lzma
2022/12/01 | 115565639 | macros/context/latest/cont-tmf.zip
-2022/12/01 | 1111 | macros/xetex/latex/xduts/xduts.ins
+2022/12/01 | 11276 | macros/optex/base/fams-ini.opm
+2022/12/01 | 11215 | macros/optex/base/math-preload.opm
2022/12/01 | 10991268 | systems/win32/miktex/tm/packages/pstricks__doc.tar.lzma
2022/11/30 | 99 | macros/latex/base/ltpara-code.tex
2022/11/30 | 997241 | macros/latex/contrib/mathfont.zip
@@ -1853,7 +2209,6 @@
2022/11/30 | 28385 | macros/texinfo/texinfo/tp/t/results/html_tests/check_htmlxref_ignore_ref_top_up.pl
2022/11/30 | 2830 | macros/texinfo/texinfo/tp/t/results/columnfractions/good.pl
2022/11/30 | 28296 | macros/texinfo/texinfo/tp/t/results/macro/macro_in_index_commands.pl
-2022/11/30 | 282672 | systems/texlive/tlnet/archive/csbulletin.doc.r65146.tar.xz
2022/11/30 | 281906 | macros/latex/base/latexrelease.pdf
2022/11/30 | 2818 | macros/texinfo/texinfo/tp/t/results/invalid_nestings/recursive_copying.pl
2022/11/30 | 281772 | macros/texinfo/texinfo/tp/t/results/sectioning/section_in_unnumbered_info.pl
@@ -2773,7 +3128,6 @@
2022/11/30 | 12074 | macros/texinfo/texinfo/tp/t/results/sectioning/nodes_before_after_top.pl
2022/11/30 | 120684 | macros/texinfo/texinfo/tp/t/results/indices/encoding_index_utf8.pl
2022/11/30 | 12033 | macros/texinfo/texinfo/tp/t/results/invalid_nestings/itemx_in_itemize_enumerate_in_table.pl
-2022/11/30 | 12032 | systems/texlive/tlnet/archive/csbulletin.r65146.tar.xz
2022/11/30 | 119 | macros/texinfo/texinfo/tp/t/input_files/simplest.texi
2022/11/30 | 119975 | macros/texinfo/texinfo/tp/t/results/indices/encoding_index_ascii.pl
2022/11/30 | 11988 | macros/texinfo/texinfo/tp/init/html32.pm
@@ -3237,6 +3591,7 @@
2022/11/30 | 0 | macros/texinfo/texinfo/tp/tests/contents/res_parser/contents_at_begin/contents_at_begin.1
2022/11/30 | 0 | macros/texinfo/texinfo/tp/tests/contents/res_parser/contents_and_parts/contents_and_parts.2
2022/11/30 | 0 | macros/texinfo/texinfo/tp/tests/contents/res_parser/contents_and_parts/contents_and_parts.1
+2022/11/29 | 89762 | macros/optex/doc/optex-userdoc.tex
2022/11/29 | 8304 | systems/texlive/tlnet/archive/jlreq.source.r65119.tar.xz
2022/11/29 | 7494 | macros/latex/contrib/bangorexam/README.txt
2022/11/29 | 67440 | graphics/graph35/graph35.dtx
@@ -3244,12 +3599,10 @@
2022/11/29 | 613175 | macros/luatex/latex/piton.zip
2022/11/29 | 592 | graphics/graph35/CHANGELOG.md
2022/11/29 | 569782 | macros/unicodetex/latex/polyglossia.zip
-2022/11/29 | 545792 | systems/texlive/tlnet/archive/ffcode.doc.r65132.tar.xz
2022/11/29 | 535776 | systems/texlive/tlnet/archive/lt3rawobjects.doc.r65121.tar.xz
2022/11/29 | 529503 | macros/luatex/latex/piton/piton.pdf
2022/11/29 | 526972 | systems/texlive/tlnet/archive/jlreq.doc.r65119.tar.xz
2022/11/29 | 52505 | macros/latex/contrib/eolang/eolang.dtx
-2022/11/29 | 4980 | systems/texlive/tlnet/archive/ffcode.source.r65132.tar.xz
2022/11/29 | 47687 | macros/latex/contrib/eolang/cactus.pdf
2022/11/29 | 425068 | systems/texlive/tlnet/archive/pagecolor.doc.r65120.tar.xz
2022/11/29 | 41465 | macros/luatex/latex/piton/piton-french.tex
@@ -3271,7 +3624,6 @@
2022/11/29 | 231693 | graphics/graph35/sources.zip
2022/11/29 | 2294 | graphics/graph35/graph35.ins
2022/11/29 | 218501 | graphics/graph35/graph35-pixelart.sty
-2022/11/29 | 2176 | systems/texlive/tlnet/archive/ffcode.r65132.tar.xz
2022/11/29 | 21764 | macros/latex/contrib/docshots/docshots.dtx
2022/11/29 | 21682 | graphics/graph35/graph35-en.tex
2022/11/29 | 1942 | macros/unicodetex/latex/polyglossia/README.md
@@ -3299,6 +3651,8 @@
2022/11/29 | 10894788 | systems/texlive/tlnet/archive/profcollege.doc.r65122.tar.xz
2022/11/29 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
2022/11/29 | 1083 | macros/latex/contrib/docshots/LICENSE.txt
+2022/11/29 | 1058 | macros/optex/base/f-iwona.opm
+2022/11/29 | 1054 | macros/optex/base/f-kurier.opm
2022/11/29 | 10411 | macros/luatex/generic/lutabulartools/lutabulartools.sty
2022/11/29 | 1013494 | macros/unicodetex/latex/polyglossia/polyglossia.dtx
2022/11/29 | 10044 | systems/texlive/tlnet/archive/lt3rawobjects.source.r65121.tar.xz
@@ -3747,7 +4101,6 @@
2022/11/28 | 1149 | graphics/circuit_macros/doc/ResistorsMan.m4
2022/11/28 | 1147 | graphics/circuit_macros/examples/Resistors.m4
2022/11/28 | 11440 | graphics/circuit_macros/examples/ics.m4
-2022/11/28 | 1143935 | support/TeX4ht/source/tex4ht-4ht.tex
2022/11/28 | 113485 | graphics/circuit_macros/examples/dpv/paletteDPV.svg
2022/11/28 | 1132 | graphics/circuit_macros/examples/Headers.m4
2022/11/28 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
@@ -4322,30 +4675,3 @@
2022/11/27 | 0 | macros/texinfo/texinfo/tp/tests/many_input_files/different_languages_gen_master_menu_res/different_languages_gen_master_menu.2
2022/11/27 | 0 | macros/texinfo/texinfo/tp/tests/many_input_files/different_encodings_res/stdout_different_encodings.out
2022/11/27 | 0 | macros/texinfo/texinfo/tp/tests/many_input_files/different_encodings_res/different_encodings.2
-2022/11/26 | 9452788 | macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
-2022/11/26 | 883135 | systems/win32/miktex/tm/packages/achemso__doc.tar.lzma
-2022/11/26 | 880816 | systems/texlive/tlnet/archive/achemso.doc.r65103.tar.xz
-2022/11/26 | 67988 | macros/latex/contrib/profcollege/metapost/PfCObjets.mp
-2022/11/26 | 61325 | macros/xetex/plain/unimath-plain-xetex.zip
-2022/11/26 | 5545988 | systems/texlive/tlnet/archive/bib2gls.doc.r65104.tar.xz
-2022/11/26 | 5489110 | systems/win32/miktex/tm/packages/bib2gls__doc.tar.lzma
-2022/11/26 | 47677 | macros/xetex/plain/unimath-plain-xetex/doc/unimath-plain-xetex-doc.pdf
-2022/11/26 | 40885 | macros/xetex/plain/unimath-plain-xetex/tex/unimath-plain-alphafams.tex
-2022/11/26 | 40881 | macros/latex/contrib/profcollege/metapost/PfCGeometrie.mp
-2022/11/26 | 31899 | systems/win32/miktex/tm/packages/achemso__source.tar.lzma
-2022/11/26 | 31496 | systems/texlive/tlnet/archive/achemso.source.r65103.tar.xz
-2022/11/26 | 2729312 | systems/win32/miktex/tm/packages/simpleicons.tar.lzma
-2022/11/26 | 2704520 | systems/texlive/tlnet/archive/simpleicons.r65102.tar.xz
-2022/11/26 | 2269245 | macros/latex/contrib/profcollege/doc/ProfCollege-doc.zip
-2022/11/26 | 20418 | macros/xetex/plain/unimath-plain-xetex/tex/unimath-plain-xetex.tex
-2022/11/26 | 1991266 | systems/win32/miktex/tm/packages/simpleicons__doc.tar.lzma
-2022/11/26 | 1985216 | systems/texlive/tlnet/archive/simpleicons.doc.r65102.tar.xz
-2022/11/26 | 19684 | systems/win32/miktex/tm/packages/achemso.tar.lzma
-2022/11/26 | 19300 | systems/texlive/tlnet/archive/achemso.r65103.tar.xz
-2022/11/26 | 1831440 | systems/texlive/tlnet/archive/bib2gls.r65104.tar.xz
-2022/11/26 | 1830661 | systems/win32/miktex/tm/packages/bib2gls.tar.lzma
-2022/11/26 | 17881 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma
-2022/11/26 | 1725803 | systems/win32/miktex/tm/packages/bib2gls__source.tar.lzma
-2022/11/26 | 1723124 | systems/texlive/tlnet/archive/bib2gls.source.r65104.tar.xz
-2022/11/26 | 11407 | macros/xetex/plain/unimath-plain-xetex/doc/unimath-plain-xetex-doc.tex
-2022/11/26 | 1037252 | macros/latex/contrib/profcollege/latex/ProfCollege.sty
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index d492e6bd43..846f6f830a 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 03-12-2022, 02:03:57
+%% created at 04-12-2022, 02:01:26
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -7623,8 +7623,8 @@
title = {The \texttt{biblatex-publist} package},
subtitle = {Bib\LaTeX{} bibliography support for publication lists},
author = {Jürgen Spitzmüller},
- date = {2022-10-24},
- version = {2.0},
+ date = {2022-12-03},
+ version = {2.1},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/biblatex-contrib/biblatex-publist},
url = {https://ctan.org/pkg/biblatex-publist},
@@ -36601,8 +36601,8 @@
title = {The \texttt{latex-base-dev} package},
subtitle = {Development pre-release of the \LaTeX{} kernel},
author = {{The \LaTeX{} Project Team}},
- date = {2022-11-02},
- version = {2023-05-01 pre-release 0},
+ date = {2022-12-03},
+ version = {2023-06-01 pre-release 1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex-dev/base},
url = {https://ctan.org/pkg/latex-base-dev},
@@ -36762,8 +36762,8 @@
title = {The \texttt{latex-firstaid-dev} package},
subtitle = {Development pre-release of the \LaTeX{} firstaid package},
author = {{The \LaTeX{} Project Team}},
- date = {2022-11-02},
- version = {1.0u},
+ date = {2022-12-03},
+ version = {1.0w},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex-dev/required/firstaid},
url = {https://ctan.org/pkg/latex-firstaid-dev},
@@ -47620,7 +47620,7 @@
subtitle = {\LaTeX{} thesis template for Nanjing University},
author = {Yichen Zhao and Yu Xiong},
date = {2019-01-01},
- version = {1.1.0},
+ version = {1.1.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/njuthesis},
url = {https://ctan.org/pkg/njuthesis},
@@ -49131,8 +49131,8 @@
title = {The \texttt{OpTeX} package},
subtitle = {LuaTeX format based on Plain \TeX{} and OPmac},
author = {Petr Olšák},
- date = {2022-08-04},
- version = {1.08},
+ date = {2022-12-03},
+ version = {1.09},
license = {pd},
mirror = {https://mirror.ctan.org/macros/optex},
url = {https://ctan.org/pkg/optex},
@@ -50729,8 +50729,8 @@
title = {The \texttt{pdfextra} package},
subtitle = {Extra PDF features for (Op)TeX},
author = {Michal Vlasák},
- date = {2021-09-20},
- version = {0.2},
+ date = {2022-12-03},
+ version = {0.3},
license = {other-free},
mirror = {https://mirror.ctan.org/macros/luatex/generic/pdfextra},
url = {https://ctan.org/pkg/pdfextra},
@@ -53286,8 +53286,8 @@
title = {The \texttt{ppt-slides} package},
subtitle = {Good-looking slide decks à la PowerPoint (PPT)},
author = {Yegor Bugayenko},
- date = {2022-09-19},
- version = {0.1.5},
+ date = {2022-12-03},
+ version = {0.2.0},
license = {mit},
mirror = {https://mirror.ctan.org/macros/latex/contrib/ppt-slides},
url = {https://ctan.org/pkg/ppt-slides},
@@ -60068,8 +60068,8 @@
title = {The \texttt{SemanTeX} package},
subtitle = {Semantic, keyval-based mathematics},
author = {Sebastian Ørsted},
- date = {2022-10-04},
- version = {0.522},
+ date = {2022-12-03},
+ version = {0.523},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/semantex},
url = {https://ctan.org/pkg/semantex},
@@ -75089,8 +75089,8 @@
title = {The \texttt{xduts} package},
subtitle = {Xidian University \TeX{} Suite},
author = {{Unknown}},
- date = {2022-12-01},
- version = {2.18.1.1},
+ date = {2022-12-03},
+ version = {3.1.0.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/xetex/latex/xduts},
url = {https://ctan.org/pkg/xduts},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index 53b1b9746c..f0fb5e510a 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 8fb5e8e894..343bb1b759 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2023-05-01 pre-release 0
+Release 2023-06-01 pre-release 1
Overview
--------
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index 35b709a563..e8d8da01e4 100644
--- a/macros/latex-dev/base/alltt.pdf
+++ b/macros/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf
index 3a048a4bfc..d574da1576 100644
--- a/macros/latex-dev/base/cfgguide.pdf
+++ b/macros/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 0ae9b55c03..468b66433b 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -8,7 +8,82 @@ are not part of the distribution.
================================================================================
All changes above are only part of the development branch for the next release.
-================================================================================
+================================================================================
+
+
+2022-11-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltdefns.dtx (subsubsection{Copying robust commands}):
+ Added \NewEnvironmentCopy, \RenewEnvironmentCopy, and \DeclareEnvironmentCopy (gh/963)
+ Also added \ShowEnvironment.
+
+2022-11-16 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltclass.dtx:
+ Introduce key 'nowarn' on filecontents (gh/958)
+ Do not show "current dir" in message (gh/917)
+
+2022-11-14 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latexrelease.dtx (subsection{Ignoring \texttt{\string_new} errors when rolling back}):
+ Silence \cs{NewMarkClass} in rollback (gh/955)
+
+2022-11-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * doc.dtx:
+ Redefinitions of \verb removed as no longer needed (gh/953)
+
+ Redefinitions of \@verbatim changed to match the kernel
+ definition (gh/953)
+
+2022-11-08 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltshipout.dtx:
+ Add a shipout hook to be executed just before we
+ actually do the shipout (gh/920)
+
+2022-11-07 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltvers.dtx (section{Version Identification}):
+ Store release data in \LaTeXReleaseInfo for reuse at the end of
+ the .log file (gh/944)
+
+ * ltmiscen.dtx (subsection{Environments}): Add to a hook in
+ \end{document} to (re)display the LaTeX release information (gh/944)
+
+2022-11-03 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * doc.dtx: correctly handle \<space> and allow it to be excluded
+ from the index (gh/943)
+
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2022-11-01 PL1 Release
+#########################
+
+2022-11-28 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltspace.dtx (subsection{Horizontal space (and breaks)}):
+ We use a private register instead of a group with \hspace in case it
+ starts the paragraph.
+ Otherwise \everypar and friends will be executed inside a group (gh/967)
+
+2022-11-28 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltxdoc.dtx:
+ Revert using \detokenize in \cs (gh/962)
+ Eventually we will need to sync with the code in l3doc but for now
+ we stay with the simpler definition from doc.sty.
+
+
+2022-11-30 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltfinal.dtx:
+ Set \oe and \OE equal in case changing to allow detection
+ by babel
#########################
# 2022-11-01 Release
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index 0f3e7a5cce..30f8f4f5c0 100644
--- a/macros/latex-dev/base/classes.pdf
+++ b/macros/latex-dev/base/classes.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf
index f164e9b482..709334dd02 100644
--- a/macros/latex-dev/base/clsguide.pdf
+++ b/macros/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index 9293df614a..255f6af9ad 100644
--- a/macros/latex-dev/base/cmfonts.pdf
+++ b/macros/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf
index ad43e0b7f1..eb8b6a1618 100644
--- a/macros/latex-dev/base/cyrguide.pdf
+++ b/macros/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf
index 5da305cde9..5d573b35df 100644
--- a/macros/latex-dev/base/doc-code.pdf
+++ b/macros/latex-dev/base/doc-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc.dtx b/macros/latex-dev/base/doc.dtx
index d137038d63..a2c95694ae 100644
--- a/macros/latex-dev/base/doc.dtx
+++ b/macros/latex-dev/base/doc.dtx
@@ -45,7 +45,7 @@
%<+package>
%<+package>\ProvidesPackage{doc}
%<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb> [2022/07/03 v3.0k
+%<+package|shortvrb> [2022/11/13 v3.0m
%<+package|shortvrb> Standard LaTeX documentation package V3 (FMi)]
%\catcode`\<=12
%
@@ -82,6 +82,8 @@
% \changes{v1.9a}{1993/12/02}{Upgrade for LaTeX2e}
% \changes{v1.9d}{1993/12/20}{Protected changes entry.}
% \changes{v1.0p}{1994/05/21}{Use new error commands}
+% \changes{v3.0m}{2022/11/13}{Redefinitions of \cs{verb} removed as
+% no longer needed (gh/953)}
%
%
% \hyphenation{make-index}
@@ -1208,7 +1210,7 @@
% not to exceed this limit when describing the change. The actual
% entry consists of the \meta{version}, the |\actualchar|, the current
% macro name, a colon, the |\levelchar|, and, finally, the \meta{text}.
-% The result is a glossaryentry for the \meta{version}, with the name of
+% The result is a glossary entry for the \meta{version}, with the name of
% the current macro as subitem. Outside the |macro| environment, the
% text |\generalname| is used instead of the macro name. When
% referring to macros in change descriptions it is conventional to use
@@ -1216,6 +1218,13 @@
% and using up valuable characters in the entry with old \prg{makeindex}
% versions.
%
+% Note that in the history listing, the entry is shown with the page number
+% that corresponds to its place in the source, e.g., general changes put at the
+% very beginning of the file will show up with page number ``1'', change entries
+% placed elsewhere might have different numbers (not necessarily always
+% very useful unless you are careful).
+%
+%
% \changes{v1.7a}{1992/02/26}{Description of \cs{RecordChanges} etc.
% added
% to interface section.} \DescribeInterfaceMacro\RecordChanges To cause the
@@ -1824,8 +1833,8 @@
% July 1989.
% \bibitem{art:docstrip} \textsc{Frank Mittelbach, Denys Duchier and
% Johannes Braams}.
-% \newblock \texttt{docstrip.dtx} (to appear).
-% \newblock The file is part of the DOC package.
+% \newblock \texttt{docstrip.dtx}.
+% \newblock The file is part of core \LaTeX{}.
% \bibitem{book:Raspe} \textsc{R. E. Raspe} (*1737, \dag 1797).
% \newblock Baron Münchhausens narrative of his marvelous
% travels and campaigns in Russia.
@@ -2686,12 +2695,16 @@
% first lines are copied literally from \texttt{latex.tex}.
% \changes{v1.7i}{1992/07/12}{Added \cs{@@par} to clear possible
% \cs{parshape}.}
+% \changes{v3.0m}{2022/11/13}{Redefinitions of \cs{@verbatim} changed
+% to match the kernel definition (gh/953)}
% \begin{macrocode}
-\def\@verbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
- \leftskip\@totalleftmargin\rightskip\z@
- \parindent\z@\parfillskip\@flushglue\parskip\z@
- \@@par
- \@tempswafalse
+\def\@verbatim{\trivlist \item\relax
+ \if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin\rightskip\z@
+ \parindent\z@\parfillskip\@flushglue\parskip\z@
+ \language\l@nohyphenation
+ \@@par
+ \@tempswafalse
% \end{macrocode}
% |\@verbatim| sets |^^M|, the end of line character, to
% be equal to |\par|. This control sequence is redefined
@@ -2699,8 +2712,13 @@
% \changes{v1.7c}{1992/03/24}{Added \cs{interlinepenalty} to
% \cs{par} from verbatim.sty}
% \begin{macrocode}
- \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par
- \penalty\interlinepenalty
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi
% \end{macrocode}
% We add a control sequence |\check@percent| to the definition
% of |\par| whose task it is to check for a percent character.
@@ -2713,9 +2731,10 @@
% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim,
% which handles more ligatures.}
% \begin{macrocode}
- \obeylines
- \let\do\do@noligs \verbatim@nolig@list
- \let\do\@makeother \dospecials}
+ \let\do\@makeother \dospecials
+ \obeylines \verbatim@font \@noligs
+ \everypar \expandafter{\the\everypar \unpenalty}%
+}
% \end{macrocode}
% \end{macro}
%
@@ -2744,83 +2763,12 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{imacro}{\verb}
-% \changes{v1.7a}{1992/02/27}{Now warns about newlines (from
-% newdoc with `@noligs added).}
-% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX \cs{verb}}
-% We re-define |\verb| to check for newlines in its argument since a
-% missing delimiter is difficult to detect in \DOC{} source.
-% The code is the same as in \texttt{latex.tex} of September 19, 1993.
-% Perhaps there should be a font-changing
-% hook rather than just using |\ttfamily|, but if so it probably should be
-% different from |\MacroFont| since that normally includes |\small|
-% and would look wrong inline.
-% \changes{v1.7a}{1992/02/28}{Added math mode check (from verbatim.sty)}
-% \begin{macrocode}
-\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
- \bgroup \let\do\do@noligs \verbatim@nolig@list
- \ttfamily \verb@eol@error \let\do\@makeother \dospecials
- \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
-% \end{macrocode}
-% \end{imacro}
-%
-% \begin{macro}{\verb@balance@group}
-% \begin{macro}{\verb@egroup}
-% \begin{macro}{\verb@eol@error}
-% \changes{v1.8b}{1993/09/21}{Renamed \cs{verb@err} to
-% \cs{verb@eol@error}, as in new LaTeX verbatim.}
-% \begin{macrocode}
-\let\verb@balance@group\@empty
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\begingroup
- \obeylines%
- \gdef\verb@eol@error{\obeylines%
- \def^^M{\verb@egroup\@latex@error{%
- \noexpand\verb command ended by end of line}\@ehc}}%
-\endgroup
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@sverb}
-% \changes{v1.7a}{1992/02/27}{Added for \cs{verb} change.}
-% \changes{v1.7a}{1992/02/28}{Now same as in verbatim.sty.}
-% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim,
-% which has better error trapping.}
-% See \cite{art:verbatim} for commentary.
-% \changes{v2.1j}{2019/11/03}{Use the kernel definition, no change needed (gh/205)}
-% \begin{macrocode}
-%\def\@sverb#1{%
-% \catcode`#1\active \lccode`\~`#1%
-% \gdef\verb@balance@group{\verb@egroup
-% \@latex@error{Illegal use of \noexpand\verb command}\@ehc}%
-% \aftergroup\verb@balance@group
-% \lowercase{\let~\verb@egroup}}
-% \end{macrocode}
-% \end{macro}
-%
%
-% \begin{macro}{\verbatim@nolig@list}
-% \begin{macro}{\do@noligs}
-% These macros replace the old |\@noligs| mechanism by an
-% extensible version to allow more ligatures to be added.
-% \begin{macrocode}
-\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
-\def\do@noligs#1{%
- \catcode`#1\active
- \begingroup
- \lccode`\~=`#1\relax
- \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% In the early versions of the package it also redefined \cs{verb}
+% because that didn't include the useful test for \enquote{newline} in
+% the verbatim text. This is nowadays part of \LaTeX{} so we do not
+% redefine it any longer (the original code is still kept in the file
+% after \cs{endinput} to keep the long history intact).
%
% \begin{tcounter}{\macro@cnt}
% \label{page:macro} The \env{macro} environment is implemented as
@@ -3147,9 +3095,6 @@
%
% \begin{macro}{\short@macro}
%
-% \fmi{this needs cleaning up too, the results in the index are
-% currently wrong for cases like `\cs{ }' and the like.}
-%
% \changes{v1.5c}{1989/04/27}{Corrected bad bug by putting the
% scan@allowedfalse macro before printing
% the argument.}
@@ -3164,17 +3109,14 @@
% done by the |\ifnot@excluded| macro which assumes that the
% macro name is saved in |\macro@namepart|. The character
% mustn't be stored with a special category code or exclusion from
-% the index won't work, so we employ the case-changing trick used
-% elsewhere. Since the argument might be an active character,
-% |\string| is used to normalize it.
+% the index won't work, so we we use \cs{string} to normalize it
+% the same way it is done in \cs{DoNotIndex}, i.e. everything ends up catcode 12
+% except for the space character.
% \changes{v2.0e}{1998/12/28}{Correctly use the case-changing trick.}
+% \changes{v3.0l}{2022/11/03}{No longer using the case-changing trick.}
% \begin{macrocode}
-\begingroup
-\catcode`\&=12
-\gdef\short@macro#1{\begingroup
- \uccode`\&=\expandafter`\string#1%
- \uppercase{\def\x{\def\macro@namepart{&}}}%
- \expandafter\endgroup\x
+\def\short@macro#1{%
+ \edef\macro@namepart{\string#1}%
% \end{macrocode}
% Any indexing is then delegated to
% |\maybe@index@short@macro|. Depending on the actual character seen,
@@ -3197,7 +3139,6 @@
% cross-referencing is globally disabled.
% \begin{macrocode}
\scan@allowedtrue }
-\endgroup
% \end{macrocode}
% \end{macro}
%
@@ -3441,7 +3382,6 @@
\def \ShowIndexingState {
\__doc_trace:x{Show~ doc~ indexing~ state:}
\seq_show:N \l__doc_donotindex_seq
-% \tl_analysis_show:N\l__doc_donotindex_seq
\prop_show:N \g__doc_idxtype_prop
}
% \end{macrocode}
@@ -3637,10 +3577,12 @@
% \begin{macro}{\maybe@index@short@macro}
% \begin{macro}{\__doc_maybe_index_short:o}
% Single character macros are handled similarly but there the
-% indexing is done by \cs{SpecialShortIndex}.
+% indexing is done by \cs{SpecialShortIndex} and it is simpler
+% because we know that the argument contains a string token not letters.
+% \changes{v3.0l}{2022/11/03}{We know the argument expands to a single string token}
% \begin{macrocode}
\cs_new:Npn \__doc_maybe_index_short:o #1 {
- \exp_args:Nf \__doc_maybe_index_aux:nN { \tl_to_str:o {#1} }
+ \exp_args:No \__doc_maybe_index_aux:nN #1
\SpecialShortIndex
}
\cs_set_eq:NN \maybe@index@short@macro \__doc_maybe_index_short:o
@@ -3715,7 +3657,12 @@
{\cs_to_str:N \^^M } {\def\reserved@a{ \string \space \actualchar }
\def\reserved@b { \space }
\let\reserved@c \@empty }
- { } {\def\reserved@a{ \string \space \actualchar }
+% \end{macrocode}
+% With the fix for
+% \verb*=\ = we now have to look for a real space to handle that command sequence.
+% \changes{v3.0l}{2022/11/03}{look for the right token}
+% \begin{macrocode}
+ { ~ } {\def\reserved@a{ \string \space \actualchar }
\def\reserved@b { \space }
\let\reserved@c \@empty }
{\c_left_brace_str} { \def\reserved@a{ \bgroup \actualchar }
@@ -6256,6 +6203,89 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% \section{Code no longer used}
+%
+% \begin{imacro}{\verb}
+% \changes{v1.7a}{1992/02/27}{Now warns about newlines (from
+% newdoc with `@noligs added).}
+% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX \cs{verb}}
+% We re-define |\verb| to check for newlines in its argument since a
+% missing delimiter is difficult to detect in \DOC{} source.
+% The code is the same as in \texttt{latex.tex} of September 19, 1993.
+% Perhaps there should be a font-changing
+% hook rather than just using |\ttfamily|, but if so it probably should be
+% different from |\MacroFont| since that normally includes |\small|
+% and would look wrong inline.
+% \changes{v1.7a}{1992/02/28}{Added math mode check (from verbatim.sty)}
+% \begin{macrocode}
+%\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+% \bgroup \let\do\do@noligs \verbatim@nolig@list
+% \ttfamily \verb@eol@error \let\do\@makeother \dospecials
+% \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
+% \end{macrocode}
+% \end{imacro}
+%
+% \begin{macro}{\verb@balance@group}
+% \begin{macro}{\verb@egroup}
+% \begin{macro}{\verb@eol@error}
+% \changes{v1.8b}{1993/09/21}{Renamed \cs{verb@err} to
+% \cs{verb@eol@error}, as in new LaTeX verbatim.}
+% \begin{macrocode}
+%\let\verb@balance@group\@empty
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\begingroup
+% \obeylines%
+% \gdef\verb@eol@error{\obeylines%
+% \def^^M{\verb@egroup\@latex@error{%
+% \noexpand\verb command ended by end of line}\@ehc}}%
+%\endgroup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@sverb}
+% \changes{v1.7a}{1992/02/27}{Added for \cs{verb} change.}
+% \changes{v1.7a}{1992/02/28}{Now same as in verbatim.sty.}
+% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim,
+% which has better error trapping.}
+% See \cite{art:verbatim} for commentary.
+% \changes{v2.1j}{2019/11/03}{Use the kernel definition, no change needed (gh/205)}
+% \begin{macrocode}
+%\def\@sverb#1{%
+% \catcode`#1\active \lccode`\~`#1%
+% \gdef\verb@balance@group{\verb@egroup
+% \@latex@error{Illegal use of \noexpand\verb command}\@ehc}%
+% \aftergroup\verb@balance@group
+% \lowercase{\let~\verb@egroup}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\verbatim@nolig@list}
+% \begin{macro}{\do@noligs}
+% These macros replace the old |\@noligs| mechanism by an
+% extensible version to allow more ligatures to be added.
+% \begin{macrocode}
+%\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
+%\def\do@noligs#1{%
+% \catcode`#1\active
+% \begingroup
+% \lccode`\~`#1\relax
+% \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
^^A Needed for emacs
^^A
diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf
index ba56cfe561..cce65ca48d 100644
--- a/macros/latex-dev/base/doc.pdf
+++ b/macros/latex-dev/base/doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index f3ef8b3fc3..661da9efd5 100644
--- a/macros/latex-dev/base/docstrip.pdf
+++ b/macros/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index 255563550b..07fc3f5113 100644
--- a/macros/latex-dev/base/encguide.pdf
+++ b/macros/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index 38a778e1b6..a5f1195be7 100644
--- a/macros/latex-dev/base/exscale.pdf
+++ b/macros/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index 90892c6caa..0f14974f3a 100644
--- a/macros/latex-dev/base/fix-cm.pdf
+++ b/macros/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf
index d0644e8279..b2e74d07e7 100644
--- a/macros/latex-dev/base/fntguide.pdf
+++ b/macros/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index bc70a0cf14..3f3b067639 100644
--- a/macros/latex-dev/base/graphpap.pdf
+++ b/macros/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index 35f52dca6e..1702b8105b 100644
--- a/macros/latex-dev/base/ifthen.pdf
+++ b/macros/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index 90f5aac0cb..dce32355a2 100644
--- a/macros/latex-dev/base/inputenc.pdf
+++ b/macros/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf
index f18b52c99e..e0895befef 100644
--- a/macros/latex-dev/base/lamport-manual.pdf
+++ b/macros/latex-dev/base/lamport-manual.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexrelease.dtx b/macros/latex-dev/base/latexrelease.dtx
index 294007553d..132a2548e4 100644
--- a/macros/latex-dev/base/latexrelease.dtx
+++ b/macros/latex-dev/base/latexrelease.dtx
@@ -40,7 +40,7 @@
%<*latexrelease>
% \fi
% \ProvidesFile{latexrelease.dtx}
- [2022/02/28 v1.0o LaTeX release emulation and tests
+ [2022/11/14 v1.0p LaTeX release emulation and tests
(including releases up to \latexreleaseversion)]
% \iffalse
%</latexrelease>
@@ -746,8 +746,12 @@ of this package available from CTAN}
%
% Finally, redirect the error thrown by \cs{NewHook} to nowhere so it
% can be safely reused (the hook isn't redeclared if it already exists).
+% The same happens for \cs{NewMarkClass}.
+% \changes{v1.0p}{2022/11/14}
+% {Silence \cs{NewMarkClass} in rollback (gh/955)}
% \begin{macrocode}
\msg_redirect_name:nnn { hooks } { exists } { none }
+\msg_redirect_name:nnn { mark } { class-already-defined }{ none }
% \end{macrocode}
%
% Now a one-off for |ltcmd.dtx|: we need to make \cs{NewDocumentCommand}
@@ -799,9 +803,12 @@ of this package available from CTAN}
\tl_clear:N \l_@@_restores_tl
% \end{macrocode}
%
-% And restore the hook error message.
+% And restore the silenced error messages.
+% \changes{v1.0p}{2022/11/14}
+% {Unsilence \cs{NewMarkClass} error message after rollback (gh/955)}
% \begin{macrocode}
\msg_redirect_name:nnn { hooks } { exists } { }
+\msg_redirect_name:nnn { mark } { class-already-defined } { }
% \end{macrocode}
%
% \begin{macrocode}
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index 35b2875861..a0111a19a8 100644
--- a/macros/latex-dev/base/latexrelease.pdf
+++ b/macros/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index 0abf36f12f..b9d8779f70 100644
--- a/macros/latex-dev/base/latexsym.pdf
+++ b/macros/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index 394252b206..0c85e7c769 100644
--- a/macros/latex-dev/base/lb2.pdf
+++ b/macros/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index 08b5b52d86..46adfcc798 100644
--- a/macros/latex-dev/base/letter.pdf
+++ b/macros/latex-dev/base/letter.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index bc13c55acb..c60439b2de 100644
--- a/macros/latex-dev/base/lgc2.pdf
+++ b/macros/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf
index 1240d11e78..ecb66844e2 100644
--- a/macros/latex-dev/base/lppl.pdf
+++ b/macros/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index a525b6f573..63c42f6cd0 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2022/10/22 v1.5e LaTeX Kernel (Class & Package Interface)]
+ [2022/11/16 v1.5f LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -2813,6 +2813,7 @@
% unknown option.
% \changes{v1.3h}{2020/01/28}{Allow spaces in option string and display
% only unknown options not the whole option list (gh/256)}
+% \changes{v1.5f}{2022/11/16}{Introduce key 'nowarn' on filecontents (gh/958)}
% \begin{macrocode}
\def\filec@ntents@opt[#1]{%
\edef\@fortmp{\zap@space#1 \@empty}%
@@ -2821,7 +2822,7 @@
\csname filec@ntents@\reserved@a\endcsname
\else
\@latex@error{Unknown filecontents option \reserved@a}%
- {Valid options are force (or overwrite), nosearch, noheader}%
+ {Valid options are force (or overwrite), nosearch, noheader, nowarn}%
\fi}%
\filec@ntents
}
@@ -2849,6 +2850,18 @@
\let\filec@ntents@checkdir\@empty
\def\filec@ntents@where{exists on the system}
% \end{macrocode}
+% Option \texttt{nowarn} does not show any warning on the terminal
+% but still writes it to the \texttt{.log}.
+% \changes{v1.5f}{2022/11/16}{Introduce key 'nowarn' on filecontents (gh/958)}
+% \begin{macrocode}
+\def\filec@ntents@nowarn{%
+ \let\filec@ntents@warning\@latex@note@no@line
+}
+% \end{macrocode}
+% By default we show terminal warnings.
+% \begin{macrocode}
+\let\filec@ntents@warning\@latex@warning@no@line
+% \end{macrocode}
%
% \begin{macrocode}
\begingroup%
@@ -2925,6 +2938,8 @@
% on the terminal.
% \changes{v1.3g}{2020/01/27}{Fix typo in error message}
% \changes{v1.3j}{2020/02/20}{Fix missing quotes around file name (gh/284)}
+% \changes{v1.5f}{2022/11/16}{Introduce key 'nowarn' on filecontents (gh/958)}
+% \changes{v1.5f}{2022/11/16}{Do not show "current dir" in message (gh/917)}
% \begin{macrocode}
\ch@ck7\reserved@c\write\relax%
\if@filesw% % Foul ... trying to overwrite \jobname!
@@ -2932,8 +2947,8 @@
write to the file you are reading from!\MessageBreak%
Data is written to screen instead.}%
\else%
- \@latex@warning@no@line%
- {Writing or overwriting file `\@currdir\@curr@file'}%
+ \filec@ntents@warning%
+ {Writing or overwriting file `\@curr@file'}%
\immediate\openout\reserved@c\q@curr@file\relax%
\fi%
\fi%
diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx
index 14d6756f5c..30a1908c47 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.1a}
-\def\ltcmddate{2022-08-16}
+\def\ltcmdversion{v1.1b}
+\def\ltcmddate{2022-11-29}
% \end{macrocode}
%
%<*driver>
@@ -2401,21 +2401,28 @@
% \@@_show_command:NnNNwN,
% \@@_show_expandable:N,
% \@@_show_expandable:NnNNNNnN,
-% \@@_show_command_aux:nNNn,
+% \@@_show_command_aux:NnNNn,
% \@@_show_environment:N,
+% \@@_show:x,
% }
% These commands just expand the command once to reveal its innards,
% then pass the type of command, the control sequence, the signature,
-% and the code macro to \cs{@@_show_command_aux:nNNn}.
+% and the code macro to \cs{@@_show_command_aux:NnNNn}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_show_command:N #1
{ \exp_after:wN \@@_show_command:NnNNwN #1 \q_@@ #1 }
\cs_new_protected:Npn \@@_show_command:NnNNwN #1 #2 #3 #4 #5 \q_@@ #6
- { \@@_show_command_aux:nNNn { document~command } #6 #4 {#2} }
+ {
+ \@@_show_command_aux:NnNNn \tl_show:x
+ { document~command } #6 #4 {#2}
+ }
\cs_new_protected:Npn \@@_show_expandable:N #1
{ \exp_after:wN \@@_show_expandable:NnNNNNnN #1 #1 }
\cs_new_protected:Npn \@@_show_expandable:NnNNNNnN #1 #2 #3 #4 #5 #6 #7 #8
- { \@@_show_command_aux:nNNn { expandable~document~command } #8 #5 {#2} }
+ {
+ \@@_show_command_aux:NnNNn \tl_show:x
+ { expandable~document~command } #8 #5 {#2}
+ }
% \end{macrocode}
%
% Now just print everything in the required format. The auxiliary
@@ -2423,27 +2430,31 @@
% \cs{l_@@_tmpa_tl}, so we ust use that here:
% \changes{v1.0j}{2021/13/31}
% {Make \cs{ShowCommand} stop for interaction}
+% \changes{v1.1b}{2022/11/30}
+% {Don't stop for the \cs{begin} part of an environment}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_command_aux:nNNn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_show_command_aux:NnNNn #1 #2 #3 #4 #5
{
- \@@_split_signature:n {#4}
- \tl_show:x
+ \@@_split_signature:n {#5}
+ #1
{
- \token_to_str:N #2 = #1: \iow_newline:
+ \token_to_str:N #3 = #2: \iow_newline:
\tl_use:N \l_@@_tmpa_tl
- -> \cs_replacement_spec:N #3
+ -> \cs_replacement_spec:N #4
}
}
% \end{macrocode}
%
% We can reuse most of the above to show an environment, except that
% we need to ensure that the proper \cs[no-index]{environment~\ldots}
-% are passed to \cs{@@_show_command_aux:nNNn}. Additionally, when
+% are passed to \cs{@@_show_command_aux:NnNNn}. Additionally, when
% |\ShowCommand\foo| is used (if |foo| is an environment), we show
% |\endfoo| as well, and when |\ShowCommand\endfoo| is used, change
% that to |\ShowCommand\foo| and do the same.
% \changes{v1.0j}{2021/13/31}
% {Make \cs{ShowCommand} stop for interaction}
+% \changes{v1.1b}{2022/11/30}
+% {Don't stop for the \cs{begin} part of an environment}
% \begin{macrocode}
\cs_new_protected:Npn \@@_show_environment:N #1
{
@@ -2459,12 +2470,14 @@
{
\use:x
{
- \@@_show_command_aux:nNNn { document~environment }
+ \@@_show_command_aux:NnNNn \@@_show:x { document~environment }
{ \exp_not:N \begin {#3} }
\exp_not:c { environment~ #3 ~ code }
{#2}
}
}
+\cs_new_protected:Npn \@@_show:x #1
+ { \iow_term:x { > ~ #1 . \iow_newline: } }
\cs_new_protected:Npn \@@_show_environment_end:N #1
{
\exp_args:NNx \@@_check_end:Nn \l_@@_tmpa_tl { \cs_to_str:N #1 }
@@ -2473,10 +2486,15 @@
% \end{macrocode}
%
% And, of course, add \cs{__kernel_cmd_if_xparse:NTF} and
-% \cs{@@_show:N} to \cs{@showcommandlisthook}:
+% \cs{@@_show:N} to \cs{@showcommandlisthook} and to
+% \cs{@showenvironmentlisthook} (\cs{@@_show:N} takes care of the
+% environment case as well, so both entries are identical):
+% \changes{v1.1b}{2022-11-29}{Add \cs{@showenvironmentlisthook}}
% \begin{macrocode}
\tl_gput_right:Nn \@showcommandlisthook
{ { \__kernel_cmd_if_xparse:NTF \@@_show:N } }
+\tl_gput_right:Nn \@showenvironmentlisthook
+ { { \__kernel_cmd_if_xparse:NTF \@@_show:N } }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index 654c4f6a2d..b324da26c9 100644
--- a/macros/latex-dev/base/ltcmdhooks-code.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf
index a036d2e748..42222eb416 100644
--- a/macros/latex-dev/base/ltcmdhooks-doc.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index bd820e7cf2..c604bd9620 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltdefns.dtx}
- [2022/05/22 v1.5r LaTeX Kernel (definition commands)]
+ [2022/11/24 v1.5s LaTeX Kernel (definition commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltdefns.dtx}
@@ -784,7 +784,9 @@
% not take arguments. (but may contain |\par|s)
%
% Make sure that an attempt to define a `graf' or `group' environment
-% fails.
+% fails by temporarily letting the undefined \verb=\...= (begin code) to
+% the definition of \verb=\end...= and as a result we get an error if that
+% has a definition.
% \begin{macrocode}
\long\def\@newenv#1#2#3#4{%
\@ifundefined{#1}%
@@ -1641,6 +1643,7 @@
% \end{macrocode}
%
% \begin{macro}{\declare@commandcopy}
+% \begin{macro}{\declare@commandcopy@do}
% Start by checking if the command is already defined. The proper action is
% taken by each specific command above. If all's good, then
% \cs{robust@command@act} is called with the proper arguments as described
@@ -1650,11 +1653,14 @@
\long\def\declare@commandcopy#1#2#3#4{%
\edef\reserved@a{\@expl@cs@to@str@@N#3}%
\@ifundefined\reserved@a{#1}{#2}%
- {\robust@command@act
- \@declarecommandcopylisthook#4%
- \declare@commandcopy@let{#3#4}}}
+ {\declare@commandcopy@do{#3}{#4}}}
+\long\def\declare@commandcopy@do#1#2{%
+ \robust@command@act
+ \@declarecommandcopylisthook#2%
+ \declare@commandcopy@let{#1#2}}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@declarecommandcopylisthook}
% The initial definition of \cs{@declarecommandcopylisthook} contains the
@@ -1694,6 +1700,64 @@
% \end{macro}
%
%
+% \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023-06-01}{\DeclareEnvironmentCopy}
+%<latexrelease> {Add \NewEnvironmentCopy, \RenewEnvironmentCopy, and \DeclareEnvironmentCopy}%
+%<*2ekernel|latexrelease>
+% \end{macrocode}
+%
+% \begin{macro}{\NewEnvironmentCopy}
+% \begin{macro}{\RenewEnvironmentCopy}
+% \begin{macro}{\DeclareEnvironmentCopy}
+% If \verb=\#1= or \verb=\end#1= already exist one gets an error
+% message talking about the problematical command (not the
+% environment).
+% The remainder of the \LaTeX{} run is probably badly
+% broken and it is unlikely that continuing it gives
+% reasonable results.
+% \changes{v1.5s}{2022/11/24}{Add \cs{NewEnvironmentCopy},
+% \cs{RenewEnvironmentCopy}, and \cs{DeclareEnvironmentCopy} (gh/963)}
+% \begin{macrocode}
+\def\NewEnvironmentCopy{%
+ \declare@environmentcopy
+ {\@firstofone}%
+ {\@firstoftwo\@notdefinable}}
+\def\RenewEnvironmentCopy{%
+ \declare@environmentcopy
+ {\@latex@error{Environment \reserved@a\space undefined}\@ehc
+ \@firstofone}%
+ {\@firstofone}}
+\def\DeclareEnvironmentCopy{%
+ \declare@environmentcopy
+ {\@firstofone}%
+ {\@firstofone}}
+\long\def\declare@environmentcopy#1#2#3#4{%
+ \edef\reserved@a{\@ifundefined{#3}{end#3}{#3}}%
+ \@ifundefined\reserved@a
+ {\def\reserved@a{#3}#1}%
+ {\def\reserved@a{#3}#2}%
+ {\ExpandArgs{cc}\declare@commandcopy@do{#3}{#4}%
+ \ExpandArgs{cc}\declare@commandcopy@do{end#3}{end#4}}}
+% \end{macrocode}
+%
+% Now the rollback code.
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000-00-00}{\DeclareEnvironmentCopy}
+%<latexrelease> {Undefine \NewEnvironmentCopy, \RenewEnvironmentCopy, and \DeclareEnvironmentCopy}%
+%<latexrelease>\let\NewEnvironmentCopy\@undefined
+%<latexrelease>\let\RenewEnvironmentCopy\@undefined
+%<latexrelease>\let\DeclareEnvironmentCopy\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
% \subsubsection{Showing robust commands}
%
% \begin{macro}{\ShowCommand}
@@ -1747,7 +1811,6 @@
% \end{macrocode}
% \end{macro}
%
-%
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2020-10-01}{\@if@DeclareRobustCommand}
@@ -1836,6 +1899,7 @@
%
% \begin{macro}{\@show@DeclareRobustCommand}
% \begin{macro}{\show@kernel@robust@command}
+% \begin{macro}{\@show@macro}
% Showing the command is pretty simple. This command prints the top-level
% expansion as \TeX's \cs{show} would, but with |robust macro:| rather than
% just |macro:|, then a blank line and then \cs{show} the inner command.
@@ -1863,12 +1927,14 @@
\robust@command@chk@safe#1%
{\@if@newcommand#1%
{\@show@newcommand}%
- {\show}}%
- {\show}%
+ {\@show@macro}}%
+ {\@show@macro}%
#1}
+\let\@show@macro\show
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \end{macro}
%
@@ -1931,7 +1997,7 @@
\typeout{->\@expl@cs@replacement@spec@@N#1.^^J}%
\expandafter\@show@newcommand@aux
\csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname
- \expandafter{#1}}
+ \expandafter{#1}\@show@tokens}
% \end{macrocode}
%
% For a macro defined with, say, |\newcommand\foo[1][opt]{bar}|, it will
@@ -1946,20 +2012,28 @@
% \end{verbatim}
% If the command was defined with \cs{DeclareRobustCommand}, then another pair
% of lines show the top-level expansion \verb*|\protect \foo |.
-%
-% The extra gymnastics with \cs{showtokens} ensures that \cs{showtokens}
-% itself, and the internals of this macro aren't showed in the context lines.
% \begin{macrocode}
-\long\def\@show@newcommand@aux#1#2{%
+\long\def\@show@newcommand@aux#1#2#3{%
\typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:}%
- \edef\reserved@a{%
- default \string##1=\expandafter\detokenize\@gobblethree#2.^^J%
- \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}%
- \showtokens\expandafter\expandafter\expandafter{\expandafter\reserved@a}}
+ #3{default \string##1=\expandafter\detokenize\@gobblethree#2.^^J%
+ \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@show@tokens}
+% This macro prints the contents of the token list (macro) |#1| using
+% \cs{showtokens}. The \cs{expandafter} gymnastics ensures that
+% \cs{showtokens} itself, and the internals of this macro aren't
+% showed in the context lines.
+% \begin{macrocode}
+\long\def\@show@tokens#1{%
+ \edef\reserved@a{#1}%
+ \showtokens\expandafter
+ \expandafter\expandafter{\expandafter\reserved@a}}
+% \end{macrocode}
+% \end{macro}
+%
% Now the rollback code.
% \begin{macrocode}
%</2ekernel|latexrelease>
@@ -1985,6 +2059,124 @@
% \end{macro}
%
%
+% \subsubsection{Showing environments}
+%
+% \begin{macro}{\ShowEnvironment}
+% \changes{v1.5s}{2022/11/24}{Added \cs{ShowEnvironment}}
+%
+% \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2023-06-01}{\ShowEnvironment}
+%<latexrelease> {Add \ShowEnvironment}%
+%<*2ekernel|latexrelease>
+% \end{macrocode}
+%
+% \cs{ShowEnvironment} is quite similar to \cs{ShowCommand}. We will
+% pass the environment \meta{env} around as the macro
+% \cs[no-index]{env}, because \cs{robust@command@act} expects a single
+% token.
+% \begin{macrocode}
+\def\ShowEnvironment#1{%
+ \expandafter\@show@environment\csname #1\endcsname}
+\long\def\@show@environment#1{%
+ \robust@command@act
+ \@showenvironmentlisthook#1%
+ \@show@normalenv#1}
+% \end{macrocode}
+%
+% \begin{macro}{\@showenvironmentlisthook}
+% This is similar to \cs{@showcommandlisthook}, but uses the dedicated
+% versions for environments.
+% \begin{macrocode}
+\def\@showenvironmentlisthook{%
+ {\@if@DeclareRobustCommand \@show@DeclareRobustCommand@env}%
+ {\@if@newcommand \@show@newcommand@env}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@show@newcommand@env}
+% \begin{macro}{\@show@DeclareRobustCommand@env}
+% These are similar to the command versions below, except they say
+% \enquote{environment} and call \cs{@show@environment@end} to print
+% the \cs{end} part.
+% \begin{macrocode}
+\long\def\@show@newcommand@env#1{%
+ \@show@environment@begin#1%
+ \expandafter\@show@newcommand@aux
+ \csname\@backslashchar\@expl@cs@to@str@@N#1\expandafter\endcsname
+ \expandafter{#1}\@show@typeout
+ \@show@environment@end#1}
+\long\def\@show@DeclareRobustCommand@env#1{%
+ \@show@environment@begin#1%
+ \begingroup
+ \let\@show@tokens\@show@typeout
+ \let\@show@macro\@show@nonstop
+ \expandafter\show@kernel@robust@command
+ \csname\@expl@cs@to@str@@N#1 \endcsname
+ \endgroup
+ \@show@environment@end#1}
+\long\def\@show@environment@begin#1{%
+ \typeout{> \string\begin{\@expl@cs@to@str@@N#1}=environment:}%
+ \typeout{\@expl@cs@argument@spec@@N#1->%
+ \@expl@cs@replacement@spec@@N#1.^^J}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@show@normalenv}
+% \begin{macro}{\@show@environment@end}
+% A \enquote{normal} environment is straightforward.
+% \cs{@show@environment@end} needs to check if the \cs{end} part is
+% defined and show it accordingly, otherwise the output would show
+% gibberish.
+% \begin{macrocode}
+\long\def\@show@normalenv#1{%
+ \@show@environment@begin#1%
+ \@show@environment@end#1}
+\long\def\@show@environment@end#1{%
+ \expandafter\@show@environment@end@aux
+ \csname end\@expl@cs@to@str@@N#1\endcsname#1}
+\long\def\@show@environment@end@aux#1#2{%
+ \@show@tokens{\string\end{\@expl@cs@to@str@@N#2}%
+ \ifx\relax#1=undefined%
+ \else:^^J\@expl@cs@argument@spec@@N#1->%
+ \@expl@cs@replacement@spec@@N#1%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@show@nonstop}
+% \begin{macro}{\@show@typeout}
+% And here some auxiliaries:
+% \begin{description}
+% \item[\cs{@show@nonstop}] same output as \cs{show}, but doesn't
+% stop for interaction;
+% \item[\cs{@show@typeout}] same output as \cs{showtokens}, but
+% doesn't stop for interaction.
+% \end{description}
+% \begin{macrocode}
+\def\@show@nonstop#1{%
+ \typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:^^J%
+ \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1.}}
+\def\@show@typeout#1{\typeout{> #1.^^J}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now the rollback code.
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000-00-00}{\ShowEnvironment}
+%<latexrelease> {Undefine \ShowEnvironment}%
+%<latexrelease>\let\ShowEnvironment\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+%
+%
% \subsection{Internal defining commands}
%
% These commands are used internally to define other \LaTeX{}
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index 24cc0545ec..e031f84227 100644
--- a/macros/latex-dev/base/ltfilehook-code.pdf
+++ b/macros/latex-dev/base/ltfilehook-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf
index 65e8fade02..ddc060fcc0 100644
--- a/macros/latex-dev/base/ltfilehook-doc.pdf
+++ b/macros/latex-dev/base/ltfilehook-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx
index 7f4bef3bcc..a19ffa8305 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/10/26 v2.2x LaTeX Kernel (Final Settings)]
+ [2022/11/30 v2.2y LaTeX Kernel (Final Settings)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfinal.dtx}
@@ -1151,9 +1151,7 @@
\cs_set_protected:Npn \reserved@a #1
{
\cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V }
- \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2
- { \exp_not:N \@@text@case@aux { \str_lowercase:n {#1} } {##1} {##2} }
- \ExpandArgs { cnx } \NewExpandableDocumentCommand
+ \ExpandArgs { cnx } \NewExpandableDocumentCommand
{ Make#1case }
{ O{} +m }
{ \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} }
@@ -1162,6 +1160,34 @@
\reserved@a { Lower }
\reserved@a { Title }
% \end{macrocode}
+% \changes{v2.2y}{2022/11/30}{Set \cs{oe}/\cs{OE} equal to act as a marker for \pkg{babel}}
+% Currently, \pkg{babel} uses the equivalence of \cs{oe} and \cs{OE} to force casing of
+% some material, most notably in \cs{today}. To enable that to work, we have to set those
+% commands equal even though the current case changing code does not work using this
+% approach.
+% \begin{macrocode}
+\cs_new_protected:cpn { MakeLowercase \c_space_tl \c_space_tl \c_space_tl } [#1] #2
+ {
+ \let \kernel@saved@OE \OE
+ \let \OE \oe
+ \@@text@case@aux { lower } {#1} {#2}
+ \let \OE \kernel@saved@OE
+ }
+\cs_new_protected:cpn { MakeUppercase \c_space_tl \c_space_tl \c_space_tl } [#1] #2
+ {
+ \let \kernel@saved@oe \oe
+ \let \oe \OE
+ \@@text@case@aux { upper } {#1} {#2}
+ \let \oe \kernel@saved@oe
+ }
+\cs_new_protected:cpn { MakeTitlecase \c_space_tl \c_space_tl \c_space_tl } [#1] #2
+ {
+ \let \kernel@saved@oe \oe
+ \let \oe \OE
+ \@@text@case@aux { title } {#1} {#2}
+ \let \oe \kernel@saved@oe
+ }
+% \end{macrocode}
%
% \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}}
% \changes{v2.2u}{2022/06/30}{Add \cs{AddToNoCaseChangeList}}
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index 9a8066d7e5..4b4b85023e 100644
--- a/macros/latex-dev/base/lthooks-code.pdf
+++ b/macros/latex-dev/base/lthooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf
index 0fd3ab67ac..17e5d3a514 100644
--- a/macros/latex-dev/base/lthooks-doc.pdf
+++ b/macros/latex-dev/base/lthooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 19a3267767..c99840f04b 100644
--- a/macros/latex-dev/base/ltluatex.pdf
+++ b/macros/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-code.pdf b/macros/latex-dev/base/ltmarks-code.pdf
index 4e28cba0f7..3204fd93a2 100644
--- a/macros/latex-dev/base/ltmarks-code.pdf
+++ b/macros/latex-dev/base/ltmarks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-doc.pdf b/macros/latex-dev/base/ltmarks-doc.pdf
index 9ee6c42916..1203c72f0e 100644
--- a/macros/latex-dev/base/ltmarks-doc.pdf
+++ b/macros/latex-dev/base/ltmarks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmiscen.dtx b/macros/latex-dev/base/ltmiscen.dtx
index b7b2bf5e31..69a7ac6963 100644
--- a/macros/latex-dev/base/ltmiscen.dtx
+++ b/macros/latex-dev/base/ltmiscen.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltmiscen.dtx}
- [2021/06/05 v1.1z LaTeX Kernel (Misc. Environments)]
+ [2022/11/06 v1.2a LaTeX Kernel (Misc. Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltmiscen.dtx}
@@ -270,9 +270,17 @@
% This is one of the few places where we already add data and rules
% to a hook already in the kernel.
% \changes{v1.0w}{1994/11/30}{(DPC) Use \cs{@dofilelist}}
+% \changes{v1.2a}{2022/11/06}{Repeat release info at the end (gh/944)}
% \begin{macrocode}
\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings}
+\AddToHook{enddocument/info}[kernel/release]{%
+ \let\show@release@info\wlog
+ \show@release@info{ ***********}%
+ \the\LaTeXReleaseInfo
+ \show@release@info{ ***********}}
+
+\DeclareHookRule{enddocument/info}{kernel/release}{before}{kernel/filelist}
\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 7074281150..3185ce2fc0 100644
--- a/macros/latex-dev/base/ltnews.pdf
+++ b/macros/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews.tex b/macros/latex-dev/base/ltnews.tex
index 8d45f77cda..9a8de244c2 100644
--- a/macros/latex-dev/base/ltnews.tex
+++ b/macros/latex-dev/base/ltnews.tex
@@ -40,7 +40,7 @@
\ProvidesFile{ltnews.tex}%
[2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)]
-\providecommand*{\lastissue}{36}
+\providecommand*{\lastissue}{37}
\InputIfFileExists{ltnews-lastissue.cfg}{}{}
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 8f5c23193e..8bc64afa46 100644
--- a/macros/latex-dev/base/ltnews01.pdf
+++ b/macros/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index 332a568c99..6410f6c49a 100644
--- a/macros/latex-dev/base/ltnews02.pdf
+++ b/macros/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index 10dcd6dabb..e6faf40788 100644
--- a/macros/latex-dev/base/ltnews03.pdf
+++ b/macros/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index 140ae9bfc0..fdea7fa928 100644
--- a/macros/latex-dev/base/ltnews04.pdf
+++ b/macros/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index b533e823d3..f45d499a6a 100644
--- a/macros/latex-dev/base/ltnews05.pdf
+++ b/macros/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index ab0e8e6b0a..8fa7fd39ab 100644
--- a/macros/latex-dev/base/ltnews06.pdf
+++ b/macros/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index b572c2afbb..deb8285b1d 100644
--- a/macros/latex-dev/base/ltnews07.pdf
+++ b/macros/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index cfe3a2e383..2127ebe3a2 100644
--- a/macros/latex-dev/base/ltnews08.pdf
+++ b/macros/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index e0d106d0f6..d731efbd39 100644
--- a/macros/latex-dev/base/ltnews09.pdf
+++ b/macros/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 4c9e88504a..5d2967891b 100644
--- a/macros/latex-dev/base/ltnews10.pdf
+++ b/macros/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index 8f61d02d4d..364f3ab434 100644
--- a/macros/latex-dev/base/ltnews11.pdf
+++ b/macros/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index 10deb7706e..7cccdcc6a4 100644
--- a/macros/latex-dev/base/ltnews12.pdf
+++ b/macros/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index 098589bd93..5aa1175b0c 100644
--- a/macros/latex-dev/base/ltnews13.pdf
+++ b/macros/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index 9c3dc54f14..02063e4e90 100644
--- a/macros/latex-dev/base/ltnews14.pdf
+++ b/macros/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index 7678526dbc..1ff4a5662e 100644
--- a/macros/latex-dev/base/ltnews15.pdf
+++ b/macros/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index e81dd332d6..04f5796d12 100644
--- a/macros/latex-dev/base/ltnews16.pdf
+++ b/macros/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index a3bf39bcf2..a601da8823 100644
--- a/macros/latex-dev/base/ltnews17.pdf
+++ b/macros/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index e754202b75..89350a011c 100644
--- a/macros/latex-dev/base/ltnews18.pdf
+++ b/macros/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index 3288407f59..aa27ba08dc 100644
--- a/macros/latex-dev/base/ltnews19.pdf
+++ b/macros/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index dd66d032cd..402394cc48 100644
--- a/macros/latex-dev/base/ltnews20.pdf
+++ b/macros/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index 18b01c53e1..e4ea9cc255 100644
--- a/macros/latex-dev/base/ltnews21.pdf
+++ b/macros/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf
index fa05f6a59f..5ee6bfc24d 100644
--- a/macros/latex-dev/base/ltnews22.pdf
+++ b/macros/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index fa67d7822e..c2caca4c16 100644
--- a/macros/latex-dev/base/ltnews23.pdf
+++ b/macros/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index a991678ddd..3c5ede15d2 100644
--- a/macros/latex-dev/base/ltnews24.pdf
+++ b/macros/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index 52aef54c0c..885993792d 100644
--- a/macros/latex-dev/base/ltnews25.pdf
+++ b/macros/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index 09e49e79ae..299a726a8e 100644
--- a/macros/latex-dev/base/ltnews26.pdf
+++ b/macros/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index fa8a5fcf11..cc8f3e4896 100644
--- a/macros/latex-dev/base/ltnews27.pdf
+++ b/macros/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index ac868bf0ed..9366cf0426 100644
--- a/macros/latex-dev/base/ltnews28.pdf
+++ b/macros/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index 80a19569bf..8dbbb56102 100644
--- a/macros/latex-dev/base/ltnews29.pdf
+++ b/macros/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index 68d5d8afb1..7a217b657a 100644
--- a/macros/latex-dev/base/ltnews30.pdf
+++ b/macros/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf
index 54e5e2a830..c4a8f385eb 100644
--- a/macros/latex-dev/base/ltnews31.pdf
+++ b/macros/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index 17264132fc..2e8fc1b80b 100644
--- a/macros/latex-dev/base/ltnews32.pdf
+++ b/macros/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf
index d91676a1c0..05ed870d0b 100644
--- a/macros/latex-dev/base/ltnews33.pdf
+++ b/macros/latex-dev/base/ltnews33.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews34.pdf b/macros/latex-dev/base/ltnews34.pdf
index 9074b39850..5648f3e89e 100644
--- a/macros/latex-dev/base/ltnews34.pdf
+++ b/macros/latex-dev/base/ltnews34.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf
index bffff429ce..2bab979d1a 100644
--- a/macros/latex-dev/base/ltnews35.pdf
+++ b/macros/latex-dev/base/ltnews35.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf
index bd3fd8be10..575e2b9feb 100644
--- a/macros/latex-dev/base/ltnews36.pdf
+++ b/macros/latex-dev/base/ltnews36.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews36.tex b/macros/latex-dev/base/ltnews36.tex
index d6df801db2..b3f66564cb 100644
--- a/macros/latex-dev/base/ltnews36.tex
+++ b/macros/latex-dev/base/ltnews36.tex
@@ -262,10 +262,11 @@ will give the expected result: {\fontfamily{cmr}
\bfseries
\textsc{\textsl{Bold Slanted Small Caps}}; \textsc{\textit{Bold Italic Small Caps}}}.
-Given that the Computer Modern fonts in \texttt{T1} do not have real italic small caps but only
-slanted small caps, the latter is substituted for the former, which is
-why above both work but you see no difference between the two (and in the log you get a
-substitution warning for the \cs{textit}\cs{textsc} shape combination).
+Given that the Computer Modern fonts in \texttt{T1} do not have real
+italic small caps but only slanted small caps, the latter is
+substituted for the former. This is why both work in the above, but
+there is no difference between the two (and you get a substitution
+warning for the \cs{textit}\cs{textsc} shape combination).
%
\githubissue{782}
diff --git a/macros/latex-dev/base/ltnews37.pdf b/macros/latex-dev/base/ltnews37.pdf
new file mode 100644
index 0000000000..a9216f04fd
--- /dev/null
+++ b/macros/latex-dev/base/ltnews37.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews37.tex b/macros/latex-dev/base/ltnews37.tex
new file mode 100644
index 0000000000..4ce8fcccc9
--- /dev/null
+++ b/macros/latex-dev/base/ltnews37.tex
@@ -0,0 +1,378 @@
+% \iffalse meta-comment
+%
+% Copyright 2021-2023
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -——————————————
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: ltnews37.tex
+%
+% This is issue 37 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%% Maybe needed only for Chris' inadequate system:
+\providecommand\Dash {\unskip \textemdash}
+
+%% NOTE: Chris' preferred hyphens!
+%%\showhyphens{parameters}
+%% \hyphenation{because parameters parameter}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+\usepackage{color}
+
+\providecommand\hook[1]{\texttt{#1}}
+
+\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
+\providecommand\option[1]{\texttt{#1}}
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
+
+
+\providecommand\eTeX{\hologo{eTeX}}
+\providecommand\XeTeX{\hologo{XeTeX}}
+\providecommand\LuaTeX{\hologo{LuaTeX}}
+\providecommand\pdfTeX{\hologo{pdfTeX}}
+\providecommand\MiKTeX{\hologo{MiKTeX}}
+\providecommand\CTAN{\textsc{ctan}}
+\providecommand\TL{\TeX\,Live}
+\providecommand\githubissue[2][]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
+ {github issue#1 #2}%
+ )}%
+ \par\smallskip}
+%% But Chris has to mostly disable \href for his TEXPAD app:
+%% \def\href #1{} % Only For Chris' deficient TeX engine
+
+% simple solution right now (just link to the first issue if there are more)
+\def\getfirstgithubissue#1 #2\relax{#1}
+
+\providecommand\sxissue[1]{\ifhmode\unskip
+ \else
+ % githubissue preceding
+ \vskip-\smallskipamount
+ \vskip-\parskip
+ \fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}
+
+\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
+ {gnats issue #1/#2}%
+ )}%
+ \par}
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\acro[1]{\textsc{#1}}
+
+\vbadness=1400 % accept slightly empty columns
+
+
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+ \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+ {-1em}{\@subheadingfont\colonize}%
+}
+\providecommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace % for document layout fixes
+
+% Undo ltnews's \verbatim@font with active < and >
+\makeatletter
+\def\verbatim@font{%
+ \normalsize\ttfamily}
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{June}
+\publicationyear{2023 --- DRAFT version for upcoming release}
+
+\publicationissue{37}
+
+\begin{document}
+
+\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB
+
+\maketitle
+{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
+\tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+
+\medskip
+
+
+\section{Introduction}
+
+
+\section{New or improved commands}
+
+
+
+\subsection{Providing copy and show functions for environments}
+
+To copy a command definition we have introduced \cs{NewCommandCopy} in
+2022. This even allows you to copy commands that consist of several internal
+components, such as robust commands or those with a complex signature.
+To do the same with environments, e.g., to define the environment
+\env{myitemize} to be equivalent to \env{itemize}, you can now write
+\begin{verbatim}
+ \NewEnvironmentCopy{myitemize}{itemize}
+\end{verbatim}
+There are also \cs{Renew...}\ and \cs{Declare...}, which may be useful
+depending on the circumstances.
+
+In addition, we offer a \cs{ShowEnvironment} command, which displays the
+\cs{begin} and \cs{end} code of the environment passed as an
+argument. E.g., \verb=\ShowEnvironment{center}= results in the
+following output:
+\begin{verbatim}
+ > \begin{center}=environment:
+ > ->\trivlist \centering \item \relax .
+ <recently read> }
+ l. ...\ShowEnvironment{center}
+ > \end{center}:
+ > ->\endtrivlist .
+ <recently read> }
+ l. ...\ShowEnvironment{center}
+\end{verbatim}
+%
+\githubissue{963}
+
+
+
+
+\section{Code improvements}
+
+\subsection{\pkg{doc}: Index \texttt{\textbackslash\textvisiblespace} correctly}
+
+\emph{to write}
+%
+\githubissue{943}
+
+
+\subsection{\pkg{doc}: Support the \pkg{upquote} package}
+
+The default quote and backquote characters in typewriter fonts are
+typographical quotes, e.g., the input
+\begin{verbatim}
+ \verb*/`prog 'my input'`/
+\end{verbatim}
+ is rendered as \verb*/`prog 'my input'`/ and not as
+%
+\begingroup % code to mimic upquote.sty
+\catcode`'=\active
+\catcode``=\active
+\makeatletter
+\g@addto@macro\@noligs
+ {\let'\textquotesingle
+ \let`\textasciigrave
+ \ifx\encodingdefault\upquote@OTone
+ \ifx\ttdefault\upquote@cmtt
+ \def'{\char13 }%
+ \def`{\char18 }%
+ \fi\fi}
+\endgroup
+%
+\verb*/`prog 'my input'`/ as preferred by many programmers.
+
+This can be adjusted, for example, with the \pkg{upquote} package,
+which results in the second output. However, for historical reasons
+\pkg{doc} had its own definition of \cs{verb} and \env{verbatim} and
+as a consequence the two packages did not cooperate. This has now
+been fixed and loading \pkg{upquote} together with \pkg{doc} has the
+desired effect.
+%
+\githubissue{953}
+
+
+\subsection{New key for \env{filecontents}}
+
+The \env{filecontents} environment warns on the terminal if a file
+gets overwritten even if that is intentional,
+e.g., when you write a temporary file over and over again. To make
+the warning less noisy in this case we added a new \texttt{nowarn} key
+that redirects the overwriting warning to the transcript file. We
+think that some record of the action is still required to help with
+debugging, thus it is not completely silenced. The warning that
+nothing gets written, because the file aready exists (and the
+\texttt{force} key was not used), is not altered and still shows up on
+the terminal.
+%
+\githubissue{958}
+
+
+
+\subsection{A further hook for shipping out pages}
+
+Since October 2020 the shipout process offers a number of hooks to
+adjust what is happening before, during, and after the
+\cs{shipout}. For example, with the \hook{shipout/before} hook, packages
+can reset code they have altered (e.g., \cs{catcode}s during
+verbatim-like processing) and with \hook{shipout/background} and
+\hook{shipout/foreground} material can be added to the pages.
+Details are given in \cite{37:ltshipout-doc}. However, what was
+missing was a hook that allows a package writer to manipulate the
+completed page (with foreground and background attached) just before
+the actual shipout happens.
+
+For this we now provide the additional hook \hook{shipout}. One
+use case (sometimes needed in print production) is to mirror the
+whole page via \cs{reflectbox} including all the extra data that may
+have been added into the fore- or background.
+%
+\githubissue{920}
+
+
+
+\subsection{Displaying release information in the \texttt{.log}}
+
+\LaTeX{} displays its release information at the very beginning of the
+\LaTeX{} run on the terminal and also writes it to the transcript file
+if that is already opened at this point. While this is normally true,
+it is not the case if the \LaTeX{} run was started passing additional
+\TeX{} code on the command line, e.g.,
+\begin{verbatim}
+pdflatex '\PassOptionsToClass{11pt}{article}
+ \input{myarticle}'
+\end{verbatim}
+In this case the release information is displayed when
+\cs{PassOptionsToClass} is processed but the transcript file is only
+opened when the output file name is known, i.e., after \cs{input} has
+been seen, and as a result the release information is only shown on
+the terminal.
+
+To account for this scenario, we now repeat the release information
+also at the very end of the transcript file where we can be sure that
+it is open and ready to receive material.
+%
+\githubissue{944}
+
+
+
+
+
+\section{Bug fixes}
+
+\subsection{Incompatibility between \pkg{doc} and \pkg{unicode-math}}
+
+The \pkg{unicode-math} package alters the catcode of \verb=|= but does
+not adjust its value for use in \pkg{doc}, with the result that
+\enquote{or} module, i.e., $\langle A | B \rangle$ are displayed in a
+strange way. This is now fixed with some firstaid code that will
+eventually be moved into \pkg{unicode-math}.
+%
+\githubissue{820}
+
+
+\subsection{A fix for \cs{hspace}}
+
+The change to \cs{hspace}, done in 2020 to make it \pkg{calc} aware,
+had the unfortunate side effect that starting a paragraph with
+\cs{hspace} would result in the execution of \cs{everypar} inside a
+group (i.e., any local changes would immediately be revoked, breaking,
+for example, \pkg{wrapfig} in that special situation).
+%
+This got fixed with the 2022-11 PL1 hotfix, so was already corrected in
+the previous release, but only now documented in a newletter.
+%
+\githubissue{967}
+
+
+
+\section{Changes to packages in the \pkg{amsmath} category}
+
+\section{Changes to packages in the \pkg{graphics} category}
+
+\section{Changes to packages in the \pkg{tools} category}
+
+
+%\medskip
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{37:ltshipout-doc} Frank Mittelbach, \LaTeX{}~Project~Team:
+ \emph{The \texttt{\upshape ltshipout} documentation}.\\
+ Run \texttt{texdoc} \texttt{ltshipout-doc} to view.
+
+%\bibitem{37:blueprint} Frank Mittelbach and Chris Rowley:
+% \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
+% \url{https://latex-project.org/publications/indexbyyear/2020/}
+
+%\bibitem{37:source2e}
+% \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+% \url{https://latex-project.org/help/documentation/}
+
+%\bibitem{37: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{37:ltnews32} \LaTeX{} Project Team:
+% \emph{\LaTeXe{} news 32}.\\
+% \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
+%
+%\bibitem{37:ltnews34} \LaTeX{} Project Team:
+% \emph{\LaTeXe{} news 34}.\\
+% \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf}
+%
+%\bibitem{37:ltnews35} \LaTeX{} Project Team:
+% \emph{\LaTeXe{} news 35}.\\
+% \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf}
+%
+%\bibitem{37:fntguide} \LaTeX{} Project Team:
+% \emph{\LaTeXe{} font selection}.\\
+% \url{https://latex-project.org/help/documentation/}
+%
+%\bibitem{37:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
+% \emph{The \texttt{\upshape ltfilehook} documentation}.\\
+% Run \texttt{texdoc} \texttt{ltfilehook-doc} to view.
+\end{thebibliography}
+
+
+
+\end{document}
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index 0fbaccad7a..0537eb4ec9 100644
--- a/macros/latex-dev/base/ltpara-code.pdf
+++ b/macros/latex-dev/base/ltpara-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf
index 847135c79c..bbd4a35c70 100644
--- a/macros/latex-dev/base/ltpara-doc.pdf
+++ b/macros/latex-dev/base/ltpara-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf
index b05e3da93d..5c4df6d628 100644
--- a/macros/latex-dev/base/ltshipout-code.pdf
+++ b/macros/latex-dev/base/ltshipout-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf
index 61d3c87b9f..6d28fe7faf 100644
--- a/macros/latex-dev/base/ltshipout-doc.pdf
+++ b/macros/latex-dev/base/ltshipout-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout.dtx b/macros/latex-dev/base/ltshipout.dtx
index ae29c1acad..7aa07f754b 100644
--- a/macros/latex-dev/base/ltshipout.dtx
+++ b/macros/latex-dev/base/ltshipout.dtx
@@ -32,8 +32,8 @@
%%% From File: ltshipout.dtx
%
% \begin{macrocode}
-\providecommand\ltshipoutversion{v1.0m}
-\providecommand\ltshipoutdate{2022/08/26}
+\providecommand\ltshipoutversion{v1.0n}
+\providecommand\ltshipoutdate{2022/11/08}
% \end{macrocode}
%
%<*driver>
@@ -75,7 +75,7 @@
% \providecommand\pkg[1]{\texttt{#1}}
%
%
-% \title{The \texttt{ltshipout} package\thanks{This package has version
+% \title{The \texttt{ltshipout} documentation\thanks{This file has version
% \ltshipoutversion\ dated \ltshipoutdate, \copyright\ \LaTeX\
% Project.}}
%
@@ -241,6 +241,18 @@
% But being placed after the main box content it will be typeset
% later and thus overprints it (i.e., is in the foreground).
%
+% \item[\hook{shipout}]
+% This hook is executed after foreground and/or background
+% material has been added, i.e., just in front of the actual
+% shipout operation. Its purpose is to allow manipulation of the
+% finalized box (stored in \cs{ShipoutBox}) with the extra
+% material also in place (which is not yet the case in
+% \hook{shipout/before}).
+%
+% It cannot be used to cancel the shipout operation via
+% \cs{DiscardShipoutBox} (that has
+% to happen in \hook{shipout/before}, if desired!
+%
%
% \item[\hook{shipout/firstpage}]
%
@@ -296,7 +308,7 @@
% actual shipout. It is even run if there was a
% \cs{DiscardShipoutBox} request in the document.
%
-% The other hooks (except \hook{shipout/after}) are added inside
+% The other hooks (except \hook{shipout} and \hook{shipout/after}) are added inside
% hboxes to the box being shipped out in the following order:
% \begin{center}
% \begin{tabular}{ll}
@@ -307,9 +319,13 @@
% \hook{shipout/lastpage} & only on the last page \\
% \end{tabular}
% \end{center}
-% If any of the hooks has no code then that particular no box is
+% If any of the hooks has no code then the corresponding box is
% added at that point.
%
+% Once the (page) box has got the above extra content it can
+% again be manipulated using the \hook{shipout} hook and then
+% is shipped out for real.
+%
% Once the (page) box has been shipped out the \hook{shipout/after}
% hook is called (while you are still inside the output routine). It
% is not called if the shipout box was discarded.
@@ -381,13 +397,16 @@
%
% \fmi{Once we have a new mark mechanism available we can improve
% on that and make sure that the declaration applies to the page
-% that contains it.}
+% that contains it --- not done (yet)}
+%
+% \cs{DiscardShipoutBox} cannot be used in any of the \hook{shipout/...}
+% hooks other than \hook{shipout/before}.
% \end{function}
%
% In the \pkg{atbegshi} package there are a number of additional
% commands for use inside the \hook{shipout/before} hook. They
% should normally not be needed any more as one can instead simply
-% add code to the hooks \hook{shipout/before},
+% add code to the hooks \hook{shipout/before}, \hook{shipout},
% \hook{shipout/background} or
% \hook{shipout/foreground}.\footnote{If that assumption turns out to
% be wrong it would be trivial to change them to public functions
@@ -401,7 +420,9 @@
%
% \begin{variable}{pre_shipout_filter}
% Under Lua\TeX{} the \texttt{pre\_shipout\_filter} Lua callback is
-% provided which gets called immediately before the shipout primitive gets invoked.
+% provided which gets called directly after the
+% \hook{shipout} hook, immediately before the shipout
+% primitive gets invoked.
% The signature is
% \begin{verbatim}
% function(<node> head)
@@ -1014,15 +1035,20 @@
\_@@_add_foreground_box:n
{ \UseHook{shipout/lastpage}
\@kernel@after@shipout@lastpage }
- \bool_gset_true:N \g_@@_lastpage_handled_bool
% \end{macrocode}
% We record that we have handled the \hook{shipout/lastpage} hook
% but only if we really did.
% \changes{v1.0m}{2022/05/08}{Handle case where shipout/lastpage is
% run too early (gh/813)}
% \begin{macrocode}
+ \bool_gset_true:N \g_@@_lastpage_handled_bool
}
}
+% \end{macrocode}
+%
+% \changes{v1.0n}{2022/11/08}{Add shipout hook (gh/920)}
+% \begin{macrocode}
+ \hook_use:n {shipout}
\@@_finalize_box:
% \end{macrocode}
% Finally we run the actual \TeX{} primitive for shipout. As that will
@@ -1116,13 +1142,14 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{shipout/before,shipout/after,
+% \begin{macro}{shipout/before,shipout,shipout/after,
% shipout/foreground,shipout/background,
-% shipout/firstpage,
-% shipout/lastpage}
+% shipout/firstpage,shipout/lastpage}
% Declaring all hooks for the shipout code.
+% \changes{v1.0n}{2022/11/08}{Add shipout hook (gh/920)}
% \begin{macrocode}
\hook_new:n{shipout/before}
+\hook_new:n{shipout}
\hook_new:n{shipout/after}
\hook_new:n{shipout/foreground}
\hook_new:n{shipout/background}
diff --git a/macros/latex-dev/base/ltspace.dtx b/macros/latex-dev/base/ltspace.dtx
index feb82730ec..30bda278fb 100644
--- a/macros/latex-dev/base/ltspace.dtx
+++ b/macros/latex-dev/base/ltspace.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltspace.dtx}
- [2020/05/06 v1.3n LaTeX Kernel (spacing)]
+ [2022/11/28 v1.3o LaTeX Kernel (spacing)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltspace.dtx}
@@ -438,12 +438,13 @@
% \cs{setlength}. This way the \texttt{calc} package can operate on
% the argument value.
% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
+% \changes{v1.3o}{2022/11/28}{Support calc syntax without a group (gh/967)}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
%<latexrelease>\IncludeInRelease{2020/10/01}%
%<latexrelease> {\@vspace@calcify}{Add calc support}%
-\def\@vspace@calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup}
+\def\@vspace@calcify#1{\setlength\sp@ce@skip{#1}\vskip\sp@ce@skip}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
@@ -1261,12 +1262,21 @@
% {(RmS) Removed superfluous \cs{leavevmode} in \cs{@hspace} and
% \cs{@hspacer}, as suggested by CAR.}
% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
+% \changes{v1.3o}{2022/11/28}{Support calc syntax correctly (gh/967)}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
%<latexrelease>\IncludeInRelease{2020/10/01}%
%<latexrelease> {\@hspace}{Support calc with \hspace}%
-\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup}
+% \end{macrocode}
+% We use a private register to calculate the space (if \pkg{calc} is used). Previously
+% we used a group but that results in
+% \cs{everypar} etc.\ being executed inside the group if the \cs{hspace} starts a paragraph.
+% This is a bug fix so
+% we do not provide rollback to the incorrect intermediate version.
+% \begin{macrocode}
+\newskip\sp@ce@skip
+\def\@hspace#1{\setlength\sp@ce@skip{#1}\hskip\sp@ce@skip}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index a170ce98e1..eae29f0f01 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltvers.dtx}
- [2022/02/28 v1.1i LaTeX Kernel (Version Info)]
+ [2022/11/06 v1.1j LaTeX Kernel (Version Info)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltvers.dtx}
@@ -112,10 +112,10 @@
%</2ekernel>
%<latexrelease>\edef\latexreleaseversion
%<*2ekernel|latexrelease>
- {2023-05-01}
+ {2023-06-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-0}
+\def\patch@level{-1}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
@@ -178,20 +178,33 @@
% by a loader (\texttt{.ini} file)}
% \changes{v1.0v}{2015/08/23}{Allow negative patchlevel for pre-release}
% \changes{v1.1e}{2020/01/31}{Allow for upcoming format as pre-release 0}
+% \changes{v1.1j}{2022/11/06}{Repeat release info at the end (gh/944)}
+%
+% We store release info in the toks \cs{LaTeXReleaseInfo} to be
+% used in \cs{everyjob} but also when \verb=\end{document}= is
+% executed.
+% Instead of using \cs{typeout} we use \cs{show@release@info} so
+% that we can write to the log only by changing that to \cs{wlog}.
+% \begin{macrocode}
+\newtoks\LaTeXReleaseInfo
+\everyjob\expandafter{\the\everyjob\the\LaTeXReleaseInfo}
+\let\show@release@info\typeout
+% \end{macrocode}
+%
% \begin{macrocode}
\ifnum0\ifnum\patch@level=0 \ifx\development@branch@name\@empty 1\fi\fi>0 %
- \everyjob\expandafter{\the\everyjob
- \typeout{\fmtname\space <\fmtversion>}}
+ \LaTeXReleaseInfo\expandafter{\the\LaTeXReleaseInfo
+ \show@release@info{\fmtname\space <\fmtversion>}}
\immediate
\write16{\fmtname \space<\fmtversion>}
\else\ifnum\patch@level>0
- \everyjob\expandafter{\the\everyjob
- \typeout{\fmtname\space <\fmtversion> patch level \patch@level}}
+ \LaTeXReleaseInfo\expandafter{\the\LaTeXReleaseInfo
+ \show@release@info{\fmtname\space <\fmtversion> patch level \patch@level}}
\immediate
\write16{\fmtname\space <\fmtversion> patch level \patch@level}
\else
- \everyjob\expandafter{\the\everyjob
- \typeout{\fmtname\space <\fmtversion>
+ \LaTeXReleaseInfo\expandafter{\the\LaTeXReleaseInfo
+ \show@release@info{\fmtname\space <\fmtversion>
pre-release-\number-\patch@level\space
\ifx\development@branch@name\@undefined \else
\ifx\development@branch@name\@empty \else
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index fd0ac95b4c..122feaff59 100644
--- a/macros/latex-dev/base/ltx3info.pdf
+++ b/macros/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxdoc.dtx b/macros/latex-dev/base/ltxdoc.dtx
index 46c324c590..6863349be3 100644
--- a/macros/latex-dev/base/ltxdoc.dtx
+++ b/macros/latex-dev/base/ltxdoc.dtx
@@ -30,7 +30,7 @@
%
%<class>\NeedsTeXFormat{LaTeX2e}
%<class>\ProvidesClass{ltxdoc}
-%<class> [2022/06/22 v2.1h Standard LaTeX documentation class]
+%<class> [2022/06/22 v2.1i Standard LaTeX documentation class]
%
%<*driver>
\documentclass{ltxdoc}
@@ -633,12 +633,15 @@ Bug reports can be opened (category \texttt{#1}) at\\%
%
% \changes{v2.1f}{2022/06/03}{define \cs{pkg} and other commands}
% \changes{v2.1f}{2022/06/03}{allow \_ in macro names}
-% Some feaures from l3doc.cls
+% Some features from l3doc.cls
% \changes{v2.1g}{2022/06/14}{define \cs{pkg} but delay until begin document}
+% \changes{v2.1i}{2022/11/28}{Revert 2.1f and not use \cs{detokenize} for now (gh/962)}
+% Eventually, \cs{cs} should get the definition from \pkg{l3doc} but for now we
+% revert to the simple one from \pkg{doc}.
% \begin{macrocode}
-\DeclareRobustCommand\cs[1]{\texttt{\bslash\detokenize{#1}}}%
+%\DeclareRobustCommand\cs[1]{\texttt{\bslash #1}}% -- def in doc.sty
\AtBeginDocument{%
- \renewcommand\PrintMacroName[1]{\MacroFont\detokenize{#1}}%
+% \renewcommand\PrintMacroName[1]{\MacroFont\string #1\ }% -- def in doc.sty
% \end{macrocode}
% We provide those delated in case somebody has loaded \texttt{csquotes}
% or makes some definitions in the preamble.
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index aff4835ebb..0e75ce008e 100644
--- a/macros/latex-dev/base/ltxdoc.pdf
+++ b/macros/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index 07c7f3aa06..8ebcab2ea6 100644
--- a/macros/latex-dev/base/makeindx.pdf
+++ b/macros/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index f818b299ac..0778d8eb49 100644
--- a/macros/latex-dev/base/modguide.pdf
+++ b/macros/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index fd2dcfb5cc..601fa1592e 100644
--- a/macros/latex-dev/base/nfssfont.pdf
+++ b/macros/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index 2005fa583b..97cc3e82c8 100644
--- a/macros/latex-dev/base/proc.pdf
+++ b/macros/latex-dev/base/proc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index 002f38d707..c18411078c 100644
--- a/macros/latex-dev/base/slides.pdf
+++ b/macros/latex-dev/base/slides.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf
index b73bb5a036..8115e6ae86 100644
--- a/macros/latex-dev/base/slifonts.pdf
+++ b/macros/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf
index 42f74b42cd..d956472b5d 100644
--- a/macros/latex-dev/base/source2e.pdf
+++ b/macros/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index fd876bf802..ef69d1da2e 100644
--- a/macros/latex-dev/base/syntonly.pdf
+++ b/macros/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index 2d3d123d1f..067c94c0c6 100644
--- a/macros/latex-dev/base/tlc2.pdf
+++ b/macros/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index d57694c1d0..57ead84747 100644
--- a/macros/latex-dev/base/tulm.pdf
+++ b/macros/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf
index 325eac0a87..a390a49de9 100644
--- a/macros/latex-dev/base/usrguide-historic.pdf
+++ b/macros/latex-dev/base/usrguide-historic.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index 52c0370645..263df7df63 100644
--- a/macros/latex-dev/base/usrguide.pdf
+++ b/macros/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex
index 32e12a1397..7234ac821c 100644
--- a/macros/latex-dev/base/usrguide.tex
+++ b/macros/latex-dev/base/usrguide.tex
@@ -865,7 +865,7 @@ specification then an error is issued.
-\section{Copying and showing (robust) commands}
+\section{Copying and showing (robust) commands and environments}
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
@@ -911,9 +911,6 @@ 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}
@@ -926,6 +923,26 @@ 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}
+ |\NewEnvironmentCopy| \arg{env} \arg{existing-env} \\
+ |\RenewEnvironmentCopy| \arg{env} \arg{existing-env} \\
+ |\DeclareEnvironmentCopy| \arg{env} \arg{existing-env}
+\end{decl}
+
+This copies the definition for environment \meta{existing-env} to
+\meta{env} (both the beginning and end code), i.e., it is simply
+applying \cs{NewCommandCopy} twice to the internal commands that
+define an environment, i.e., \cs{}\meta{env} and \cs{end}\meta{env}.
+The differences between \cs{New...}, \cs{Renew...}, and
+\cs{Declare...} are the usual ones.
+
+\begin{decl}
+ |\ShowEnvironment| \arg{env}
+\end{decl}
+This displays the meaning of the begin end end code for environment \meta{env}.
+
+
+
\section[Preconstructing command names \\ (or otherwise expanding arguments)]
{Preconstructing command names (or otherwise expanding arguments)}
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index 5bbc4da5f0..4459986064 100644
--- a/macros/latex-dev/base/utf8ienc.pdf
+++ b/macros/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf
index 45d2350e67..1bf17cd5bd 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ
diff --git a/macros/latex-dev/required/firstaid/changes.txt b/macros/latex-dev/required/firstaid/changes.txt
index 3c6cb992c8..31e2439734 100644
--- a/macros/latex-dev/required/firstaid/changes.txt
+++ b/macros/latex-dev/required/firstaid/changes.txt
@@ -1,3 +1,13 @@
+2022-11-28 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx (subsection{the songs package first aid}):
+ A first aid for songs after a change to \obeylines
+
+2022-11-04 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx (subsection{The unicode-math package first aid}):
+ A first aid for unicode-math used together with the doc package.
+
2022-10-27 Joseph Wright <Joseph.Wright@latex-project.org>
* latex2e-first-aid-for-external-files.dtx:
diff --git a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
index 9bc4969b2c..0d9ce67bca 100644
--- a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
+++ b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
@@ -111,8 +111,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-\def\LaTeXFirstAidDate{2022/10/29}
-\def\LaTeXFirstAidVersion{v1.0u}
+\def\LaTeXFirstAidDate{2022/11/28}
+\def\LaTeXFirstAidVersion{v1.0w}
% \end{macrocode}
%
% \begin{macrocode}
@@ -353,6 +353,20 @@
% \end{macrocode}
%
%
+% \subsection{The \pkg{unicode-math} package first aid}
+%
+% If \pkg{unicode-math} is used together with \pkg{doc} there is a
+% problem because it changes the mathcodes without adjusting the
+% use in \pkg{doc} that assume standard settings. Could be fixed on
+% either side, but as \pkg{unicode-math} is derivating from the
+% standard, the right place is probably a fix in this package. For
+% now we do it here. See github/820.
+% \begin{macrocode}
+\AddToHook{package/unicode-math/after}{%
+ \AddToHook{cmd/mod@math@codes/after}{\mathcode`\|=28796 }}
+% \end{macrocode}
+%
+%
%
%
% \subsection{The \pkg{pgfpages} and \pkg{pgfmorepages} first aid}
@@ -411,13 +425,27 @@
\AddToHook{file/babel.sty/before}[firstaid]{\def\BabelCaseHack{}}
% \end{macrocode}
%
-% \begin{macrocode}
-%</kernel>
-% \end{macrocode}
-%
%
+% \subsection{The \pkg{songs} package first aid}
%
+% The songs package uses \cs{obeylines} and redefines \cs{par} for special effect.
+% this no longer works in LaTeX 2022-06-01 (gh issue 367). The following
+% fixes at least one failure.
+% \begin{macrocode}
+\AddToHook{file/songs.sty/after}[firstaid]{%
+ \FirstAidNeededT{songs}{sty}{2018/09/12 v3.1 Songs package}%
+ {%
+ \renewcommand\SB@obeylines{%
+ \let\obeyedline\SB@par%
+ \obeylines%
+ \let\@par\SB@@par%
+ }}%
+}
+% \end{macrocode}
%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
%
% \subsection{The \pkg{everysel} package first aid}
%
diff --git a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
index 9e850e5264..b525f8eea8 100644
--- a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
+++ b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
index 0d42209e43..0704ccf202 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
@@ -46,6 +46,10 @@ instructions.
== CHANGES ==
+* V. 2.1 (2022-12-03)
+ - Honor \mkbibname* (#41).
+ - Fix reverse numbering without refsections (#42).
+
* V. 2.0 (2022-10-24):
- Provide \ExecutePublistOptions to change (most) biblatex-publist options
on the fly.
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
index cd40d546e2..7f970ec9e8 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
index f5e91bf716..59220efca2 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
@@ -113,7 +113,7 @@
\thanks{Please report issues via \protect\url{https://github.com/jspitz/biblatex-publist}.}%
}
-\date{Version 2.0, 2022/10/24}
+\date{Version 2.1, 2022/12/03}
\maketitle
\begin{abstract}
@@ -256,7 +256,7 @@ As opposed to the macro, however, the options do not provide for multiple author
\item [{\joption{plauthorhandling{[}=omit|highlight{]}}}] default: \emph{omit}.
-By default, the publist author (as defined with \jmacro{plauthor}) is omitted from
+By default, the publist author (as defined with \jcsmacro{plauthorname}) is omitted from
the author or editor list. If you use the option \joption{plauthorhandling=highlight},
it is highlighted instead (set in bold face by default; see sec.~\ref{sec:auxmacros} how to change that).
@@ -284,7 +284,7 @@ on the left side in one-sided documents (via \jfcsmacro{reversemarginpar}).
If this is \texttt{true}, the extradate marker (a, b etc.) is also appended to pubstates if there are multiple
indentical pubstates; e.\,g., \emph{Forthcoming(a)}, \emph{Forthcoming(b)}.
-\item [{\joption{plsorting{[}=sorting scheme{]}}}] default: \emph{ydt}.
+\item [{\joption{plsorting=<sorting scheme>}}] default: \emph{ydt}.
This option works like the \joption{sorting} option you know from \bibltx. It is provided since \bpl\ sets its
own sorting schemes (differently depending on \joption{plauthorhandling}) and thus overrides any setting made
@@ -910,6 +910,12 @@ refsection.
\begin{description}
+ \item [{V. 2.1 (2022/12/03):}]~
+ \begin{itemize}
+ \item Honor \jfcsmacro{mkbibname*}.
+ \item Fix reverse numbering without refsections.
+ \end{itemize}
+
\item [{V. 2.0 (2022/10/24):}]~
\begin{itemize}
\item Provide \jcsmacro{ExecutePublistOptions} to change (most) \bpl\ options
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
index ab5d84b08a..85e14d2693 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
@@ -25,8 +25,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.0}
-\def\bpl@rdate{2022/10/24}
+\def\bpl@version{2.1}
+\def\bpl@rdate{2022/12/03}
\ProvidesFile{publist.bbx}[\bpl@rdate\space v.\bpl@version\space
biblatex bibliography style (JSP)]
@@ -734,6 +734,7 @@
\newcounter{plnumgroup}
\setcounter{plnumgroup}{0}
\newbool{newsection}
+\booltrue{newsection}
\newbool{needbpxrerun}
\newbool{plnumgroup}
\def\resetplnumgroup{}
@@ -766,7 +767,7 @@
\defbibenvironment{bibliography}
{%
\addtolength{\labelnumberwidth}{\extralabelnumberwidth}%
- \setcounter{bplsecitems}{0}%
+ \ifbool{newsection}{\setcounter{bplsecitems}{0}}{}%
\ifcsundef{bpl@savesecitems:\theplnumgroup}{%
\csnumgdef{bpl@savesecitems:\theplnumgroup}{0}%
}{}%
@@ -1196,20 +1197,20 @@
\plauthorhl{%
\if@givenfirst% given name first
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
+ {\ifdefvoid{\namepartgiveni}{}{\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\mkbibnamegiven{\namepartgiven}\addspace}}%
\ifdefvoid{\namepartprefix}%
{}%
- {\namepartprefix\addspace}%
- \namepartfamily%
+ {\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\else% family name first
\ifdefvoid{\namepartprefix}%
{}%
- {\namepartprefix\addspace}%
- \namepartfamily%
+ {\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\namepartgiven\isdot\addspace}}%
+ {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiven}\isdot\addspace}}%
\fi
}%
\ifnumequal{\value{listcount}}{\value{liststop}}{}{\usebibmacro{bpl:name:andothers}}%
@@ -1217,20 +1218,20 @@
\ifnumgreater{\value{listcount}}{\value{realliststop}}{}{%
\if@givenfirst% given name first
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
+ {\ifdefvoid{\namepartgiveni}{}{\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\mkbibnamegiven{\namepartgiven}\addspace}}%
\ifdefvoid{\namepartprefix}%
{}%
- {\namepartprefix\addspace}%
- \namepartfamily%
+ {\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\else% family name first
\ifdefvoid{\namepartprefix}%
{}%
- {\namepartprefix\addspace}%
- \namepartfamily%
+ {\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\namepartgiven\isdot\addspace}}%
+ {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiven}\isdot\addspace}}%
\fi
}%
\usebibmacro{bpl:name:andothers}%
@@ -1270,9 +1271,9 @@
}%
\ifnumgreater{\value{listcount}}{\value{realliststop}}{}{%
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
- \ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
+ {\ifdefvoid{\namepartgiveni}{}{\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\mkbibnamegiven{\namepartgiven}\addspace}}%
+ \ifdefvoid{\namepartprefix}{}{\mkbibnameprefix{\namepartprefix}\addspace}%
\global\togglefalse{plauthorprecedes}%
\namepartfamily%
}%
@@ -1296,16 +1297,16 @@
\DeclareNameFormat{bookauthor}{%
\if@givenfirst% given name first
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
- \ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
- \namepartfamily%
+ {\ifdefvoid{\namepartgiveni}{}{\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\mkbibnamegiven{\namepartgiven}\addspace}}%
+ \ifdefvoid{\namepartprefix}{}{\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\else% family name first
- \ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
- \namepartfamily%
+ \ifdefvoid{\namepartprefix}{}{\mkbibnameprefix{\namepartprefix}\addspace}%
+ \mkbibnamefamily{\namepartfamily}%
\ifgiveninits
- {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\namepartgiveni\addspace}}%
- {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\namepartgiven\isdot\addspace}}%
+ {\ifdefvoid{\namepartgiveni}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiveni}\addspace}}%
+ {\ifdefvoid{\namepartgiven}{}{\revsdnamepunct\addspace\mkbibnamegiven{\namepartgiven}\isdot\addspace}}%
\fi
\ifthenelse{\value{listcount}<\value{liststop}}
{\ifnumless{\value{listcount}}{\value{liststop}-1}%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
index 3aaaedacf7..0bb41b4d71 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
@@ -26,8 +26,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.0}
-\def\bpl@rdate{2022/10/24}
+\def\bpl@version{2.1}
+\def\bpl@rdate{2022/12/03}
\ProvidesFile{publist.cbx}[\bpl@rdate\space v.\bpl@version\space
biblatex citation style (JSP)]
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
index afffa069cb..2cf23eaab8 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
@@ -1,5 +1,5 @@
% publist.dbx, biblatex data model specification for the biblatex-publist
-% package, version 2.0 (2022/10/24).
+% package, version 2.1 (2022/12/03).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/ppt-slides/DEPENDS.txt b/macros/latex/contrib/ppt-slides/DEPENDS.txt
index db184dd263..74961c7a1d 100644
--- a/macros/latex/contrib/ppt-slides/DEPENDS.txt
+++ b/macros/latex/contrib/ppt-slides/DEPENDS.txt
@@ -1,13 +1,20 @@
hard pgfopts
hard xcolor
-hard ifthen
hard href-ul
hard pagecolor
hard varwidth
hard qrcode
-hard tikz
+hard pgf
hard tikzpagenodes
hard enumitem
hard crumbs
-hard tabularx
hard seqsplit
+hard hardwrap
+hard ifoddpage
+hard textpos
+hard anyfontsize
+hard fontsize
+hard changepage
+hard soul
+hard lastpage
+hard titling \ No newline at end of file
diff --git a/macros/latex/contrib/ppt-slides/LICENSE.txt b/macros/latex/contrib/ppt-slides/LICENSE.txt
new file mode 100644
index 0000000000..463e7d252d
--- /dev/null
+++ b/macros/latex/contrib/ppt-slides/LICENSE.txt
@@ -0,0 +1,21 @@
+(The MIT License)
+
+Copyright (c) 2022 Yegor Bugayenko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the 'Software'), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/latex/contrib/ppt-slides/README.md b/macros/latex/contrib/ppt-slides/README.md
index 9543ebc462..46758695fc 100644
--- a/macros/latex/contrib/ppt-slides/README.md
+++ b/macros/latex/contrib/ppt-slides/README.md
@@ -25,11 +25,10 @@ and then use in preamble:
\end{document}
```
-The full example and all commands are available in
-[`ppt-slides.tex`](https://github.com/yegor256/ppt-slides/blob/master/ppt-slides.tex) file.
+Otherwise, you can download [`ppt-slides.sty`](https://raw.githubusercontent.com/yegor256/ppt-slides/gh-pages/ppt-slides/ppt-slides.sty) and add to your project.
-If you want to contribute yourself, make a fork, create a branch,
-then run `make` in root directory.
+If you want to contribute yourself, make a fork, then create a branch,
+then run `l3build ctan` in the root directory.
It should compile everything without errors. If not, submit an issue and wait.
-Otherwise, make your changes and then run `make` again. If the build is
+Otherwise, make your changes and then run `l3build ctan` again. If the build is
still clean, submit a pull request.
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.dtx b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
new file mode 100644
index 0000000000..5f21146d16
--- /dev/null
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
@@ -0,0 +1,662 @@
+% \iffalse meta-comment
+% (The MIT License)
+%
+% Copyright (c) 2021-2022 Yegor Bugayenko
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the 'Software'), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all
+% copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+% \fi
+
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+
+% \GetFileInfo{ppt-slies.dtx}
+% \DoNotIndex{\endgroup,\begingroup,\let,\else,\s,\n,\r,\\,\1,\fi}
+
+% \iffalse
+%<*driver>
+\ProvidesFile{ppt-slides.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{ppt-slides}
+%<*package>
+[2022-12-03 0.2.0 Slide Decks a la Power Point]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[tt=false, type1=true]{libertine}
+\usepackage{microtype}
+\AddToHook{env/verbatim/begin}{\microtypesetup{protrusion=false}}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage[runs=2,dtx,margin=0,small]{docshots}
+\usepackage{href-ul}
+\PageIndex
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{ppt-slides.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+
+% \title{|ppt-slides|: \LaTeX{} Package for \\ Slide Decks \`{a} la Power Point\thanks{The sources are in GitHub at \href{https://github.com/yegor256/ppt-slides}{yegor256/ppt-slides}}}
+% \author{Yegor Bugayenko \\ \texttt{yegor256@gmail.com}}
+% \date{\filedate, \fileversion}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This package helps you render slide decks in PowerPoint\texttrademark{} style:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% \pptMiddle{\pptTitle{Hello, world!}{How are you?}}
+% \end{document}
+% \end{docshot}
+
+% It is recommended to use this package together with
+% \href{https://github.com/yegor256/clicks}{clicks}:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \usepackage[static]{clicks}
+% \begin{document}
+% We help you make slide decks in \LaTeX:
+% \plick{\pptBanner{Making Slides Is Easy}}
+% \plick{Just use this package...}
+% \plush{together with 'clicks' package.}
+% They will look similar to what PowerPoint can
+% make, but with the precision of \LaTeX. We
+% recommend using us together with ``clicks.''
+% \end{document}
+% \end{docshot}
+
+% \section{Layout}
+
+% \DescribeMacro{\pptToc}
+% \DescribeMacro{\pptChapter}
+% First, split your story into chapters:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{clicks}
+\usepackage[template,scheme=light]{ppt-slides}
+\begin{document}
+\pptToc
+\plush{\pptChapter{About Me}}
+...
+\plush{\pptChapter[Idea]{My Idea Is Novel}}
+...
+\plush{\pptChapter[FAQ]{Discussion \& Questions}}
+...
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+% |\pptToc| will render the table of contents in an interactive ``clickable'' format.
+% Thanks to the use of \href{https://github.com/yegor256/crumbs}{crumbs}, there will
+% be a navigation at the top left corner.
+
+% \DescribeMacro{\pptSection}
+% Then, put sections inside chapters:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\begin{document}
+\pptToc
+\plush{\pptChapter{About Me}}
+\plush{\pptSection[Student]{I'm a Student}}
+...
+\plush{\pptSection[Athlete]{Also, I'm an Athlete}}
+...
+\plush{\pptChapter[Idea]{My Idea Is Novel}}
+\plush{\pptSection{Novelty}}
+\plush{\pptSection{Impact}}
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+% The |\pptChapter| and |\pptSection| commands used together will render
+% nice two-level nagivation menu at the top left corner.
+
+% \DescribeMacro{\pptLeft}
+% \DescribeMacro{\pptRight}
+% You can place the title of the presentation and your name at the bottom
+% of each slide, on the left and on the right respectively:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{clicks}
+\usepackage[template,scheme=light]{ppt-slides}
+\pptLeft{How Did I Spend Last Summer}
+\pptRight{Yegor Bugayenko}
+\begin{document}
+...
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+% If you don't use the |\pptLeft| or |\pptRight| commands, nothing will
+% be printed at the bottom.
+
+% \section{Commands}
+
+% \DescribeMacro{\pptPic}
+% You can add an image to the slide (the first argument is the width
+% of the image in relation to |\textwidth|,
+% while the second one is the path of it):
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% \pptPic{0.2}{socrates.jpg} \\
+% This is Socrates, a Greek philosopher.
+% \end{document}
+% \end{docshot}
+
+% \DescribeMacro{\pptHeader}
+% You can add a piece of code to the slide (we recommend using \href{https://github.com/yegor256/ffcode}{ffcode}):
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \usepackage{ffcode}
+% \begin{document}
+% \pptHeader{This is How You Print to Console:}
+% \begin{ffcode}
+% void main(char** args) {
+% printf("Hello, world!");
+% }
+% \end{ffcode}
+% \end{document}
+% \end{docshot}
+% Don't use |\plick| or |\plush|, they won't work with code snippets.
+% The |\pptHeader| command prints a header similar to what the |\pptSection| command prints, but
+% doesn't start a new section.
+
+% \DescribeMacro{\pptQuote}
+% \DescribeMacro{\pptBanner}
+% You can put a quote next to the image, by using the |\pptQuote| command:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% \pptBanner{My Favorite Quote}
+% \pptQuote{socrates.jpg}{The only true wisdom
+% is in knowing you know nothing}{Socrates}
+% \end{document}
+% \end{docshot}
+
+% \DescribeMacro{\pptThought}
+% For an interesting thought in the middle of the slide, use |\pptThought|:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% \pptThought{Socrates said that the only true
+% wisdom is in knowing you know nothing. Was he
+% a wise man?...}
+% \end{document}
+% \end{docshot}
+
+% \DescribeMacro{\pptQR}
+% Sometimes it's convenient to show a QR code to your audience instead of
+% a URL, since it's easier to use --- they can scan it:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% Check my blog post by this link: \\
+% \pptQR{https://www.yegor256.com}
+% \end{document}
+% \end{docshot}
+% The code will look like this, thanks to \href{https://ctan.org/pkg/qrcode}{qrcode} package that
+% we use behind the scene.
+
+% \DescribeMacro{pptWide}
+% \DescribeMacro{pptWideOne}
+% Sometimes you need your slide content to take all visible horizontal space:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[template,scheme=dark]{ppt-slides}
+% \begin{document}
+% \begin{pptWideOne}
+% This paragraph is too long for some reasons,
+% that's why must take all visible horizontal
+% space, while normally the content has a wide
+% margin on the left side of the page.
+% \end{pptWideOne}
+% \end{document}
+% \end{docshot}
+% You can also use |\begin{pptWide}{X}|,
+% where |X| is the number of columns to render.
+
+% \section{Package Options}
+
+% \DescribeMacro{template}
+% You start with a template for your slide deck:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage[template=9x6]{ppt-slides}
+\begin{document}
+...
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+% There is only one template, which is used by default: |9x6|. If you don't
+% specify the name, it will be used. If you don't use the |template| option at all,
+% the default |article| will be rendered, which is not what you want.
+
+% \DescribeMacro{scheme}
+% You can choose a color scheme for your slides, using the |scheme| option
+% of the package:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\usepackage[template,scheme=light]{ppt-slides}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+% There are a few out-of-the-box schemes available: |light|, |dark|,
+% |light-mono|, and |dark-mono|. You can design your own, using
+% |ppt-light.tex| file as an example:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\usepackage[template,scheme=/usr/local/my-colors.tex]{ppt-slides}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+
+% \DescribeMacro{directory}
+% You can change the location of the templates and schemes by means of the |directory| package option:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\usepackage[directory=/tmp,template=foo]{ppt-slides}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+
+% \DescribeMacro{nominutes}
+% By default, if you render your slide deck in non-static mode (the |static| option for the ``clicks'' package),
+% there will be minutes tracking in the right top corner of each slide. You can turn this off
+% by using the |nominutes| option of the package:
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\usepackage[nominutes]{ppt-slides}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+
+% \StopEventually{}
+
+% \section{Implementation}
+% \changes{0.0.1}{2022/09/11}{First draft.}
+% \changes{0.1.4}{2022/09/15}{The \texttt{nominutes} package option added.}
+% \changes{0.1.5}{2022/09/19}{The default directory fixed.}
+% \changes{0.2.0}{2022/12/03}{We migrated to the \texttt{ltxdoc} format and \texttt{.dtx} file.}
+
+% First, we parse the package options:
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\makeatletter
+\pgfkeys{
+ /ppt-slides/.is family,
+ /ppt-slides,
+ template/.estore in = \ppt@template,
+ template/.default = 9x6,
+ scheme/.estore in = \ppt@scheme,
+ directory/.estore in = \ppt@directory,
+ directory/.default = ,
+ nominutes/.estore in = \ppt@nominutes,
+ directory
+}
+\ProcessPgfPackageOptions{/ppt-slides}
+\makeatother
+% \end{macrocode}
+
+% Then, we include the template:
+% \begin{macrocode}
+\makeatletter\ifdefined\ppt@template
+ \input{\ppt@directory ppt-templates/ppt-\ppt@template.tex}
+\else
+ \message{^^Jppt: No template is loaded, because
+ the 'template' option is not specified}
+\fi\makeatother
+% \end{macrocode}
+
+% Then, we include the scheme:
+% \begin{macrocode}
+\makeatletter\ifdefined\ppt@scheme
+ \RequirePackage{xcolor}
+ \input{\ppt@directory ppt-schemes/ppt-\ppt@scheme.tex}
+\else
+ \message{^^Jppt: No color scheme is loaded, because
+ the 'scheme' option is not specified}
+\fi\makeatother
+% \end{macrocode}
+
+% Then, we include a few packages:
+% \begin{macrocode}
+\RequirePackage{ifthen} % for if/then/else in LaTeX
+\RequirePackage{href-ul} % for nice hyperlinks
+\RequirePackage{pagecolor} % to change page color
+\RequirePackage{varwidth} % for pptWide
+\RequirePackage{qrcode} % to print QR codes
+\RequirePackage{tikz} % for drawings in TOC
+ \usetikzlibrary{calc} % for positioning of pinned boxes
+\RequirePackage{tikzpagenodes} % for pptPin
+\RequirePackage[inline]{enumitem} % for lists in crumbs
+\RequirePackage{crumbs} % for crumbs
+% \end{macrocode}
+
+% \begin{macro}{\pptMiddle}
+% Then, we define the |\pptMiddle| command:
+% \begin{macrocode}
+\newcommand\pptMiddle[1]{%
+ \vspace*{\fill}#1\vspace*{\fill}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptBanner}
+% Then, we define the |\pptBanner| command:
+% \begin{macrocode}
+\newcommand\pptBanner[2][green]{%
+ \par%
+ {\setlength{\fboxsep}{6pt}%
+ \colorbox{#1}{\color{\thepagecolor}\large #2}}
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptChapter}
+% Then, we define the |\pptChapter| command:
+% \begin{macrocode}
+\newcommand\pptChapter[2][]{%
+ \crumbection[#1]{#2}%
+ \pptMiddle{%
+ {\large\ttfamily Chapter \#\the\value{section}:}%
+ \newline%
+ \rotatebox{1}{\pptBanner[blue]{\LARGE#2}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptSection}
+% Then, we define the |\pptSection| command:
+% \begin{macrocode}
+\newcommand\pptSection[2][]{%
+ \subcrumbection[#1]{#2}%
+ \pptHeader{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptHeader}
+% Then, we define the |\pptHeader| command:
+% \begin{macrocode}
+\newcommand\pptHeader[1]{%
+ \vspace*{-0.75in}\hspace*{-0.5in}%
+ \rotatebox{1}{\pptBanner[orange]{\Large #1}}\vspace*{0.15in}%
+ \par%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptTitle}
+% Then, we define the |\pptTitle| command:
+% \begin{macrocode}
+\newcommand\pptTitle[2]{%
+ {\pptBanner{\Huge #1}}%
+ {\pptBanner{\large #2}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptToc}
+% Then, we define the |\pptToc| command:
+% \begin{macrocode}
+\newcommand*\pptTOC{}
+\newcommand\pptToc[1][]{%
+ \renewcommand*\pptTOC{}%
+ \print{%
+ \def\param{#1}%
+ \ifx\param\empty\else%
+ \pptBanner{#1}%
+ \fi%
+ \tikz{%
+ \node (z) {%
+ \begin{varwidth}{\textwidth}%
+ \ifx\pptTOC\empty\else%
+ \begin{itemize}[label={}]
+ \pptTOC
+ \end{itemize}
+ \fi%
+ \end{varwidth}%
+ };%
+ \path [draw=blue,line width=4pt] (z.north west) -- (z.south west);%
+ }%
+ }%
+ \begin{@empty}%
+ \renewcommand\crumb[2]{%
+ \ifx\pptTOC\empty\else\ifdefined\click\click[0]\fi\fi
+ \gappto\pptTOC{\item ##2}
+ }
+ \crumbs
+ \end{@empty}%
+ \ifdefined\flush\flush[1]\fi%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptQuote}
+% Then, we define the |\pptQuote| command:
+% \begin{macrocode}
+\RequirePackage{tabularx}
+\newcommand\pptQuote[3]{%
+ \begin{tabularx}{\columnwidth}{c>{\raggedright\arraybackslash}X}%
+ \raisebox{\dimexpr-\height+\ht\strutbox}{\pptPic{0.25}{#1}}%
+ &%
+ ``#2''%
+ \def\param{#3}%
+ \ifx\param\empty\else%
+ \newline\newline%
+ \small%
+ --- #3%
+ \fi%
+ \\%
+ \end{tabularx}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptPic}
+% Then, we define the |\pptPic| command:
+% \begin{macrocode}
+\newcommand\pptPic[2]{%
+ {%
+ \setlength{\fboxsep}{0pt}%
+ \setlength{\fboxrule}{1pt}%
+ \fcolorbox{gray}{white}{%
+ \includegraphics[width=#1\columnwidth]{#2}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptPin}
+% Then, we define the |\pptPin| command:
+% \begin{macrocode}
+\newcommand\pptPin[2][right]{%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \ifthenelse{\equal{#1}{left}}%
+ {%
+ \node[anchor=north east] at
+ ($(current page text area.north west) - (24pt, 18pt)$) {%
+ \begin{minipage}{0.25\textwidth}%
+ \raggedleft #2%
+ \end{minipage}%
+ };%
+ }%
+ {%
+ \node[anchor=north east] at (current page text area.north east) {%
+ \begin{minipage}{0.25\textwidth}%
+ \raggedright #2%
+ \end{minipage}%
+ };%
+ }%
+ \end{tikzpicture}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptThought}
+% Then, we define the |\pptThought| command:
+% \begin{macrocode}
+\newcommand\pptThought[1]{%
+ \pptMiddle{%
+ \tikz{%
+ \node [inner sep=18pt] (z) {%
+ \begin{varwidth}{0.8\textwidth}
+ \Large
+ #1
+ \end{varwidth}
+ };
+ \path [draw=green,line width=8pt] (z.north west) -- (z.south west);
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptSnippet}
+% Then, we define the |\pptSnippet| command:
+% \begin{macrocode}
+\newcommand\pptSnippet[2][\small]{%
+ \begin{samepage}%
+ #1\verbatiminput{#2}%
+ \end{samepage}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptQR}
+% Then, we define the |\pptQR| command:
+% \begin{macrocode}
+\newcommand\pptQR[2][2in]{%
+ \tikz{%
+ \node[draw=white]{%
+ \href{#2}{%
+ \qrcode[height=#1]{#2}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\pptPinQR}
+% Then, we define the |\pptPinQR| command:
+% \begin{macrocode}
+\RequirePackage{seqsplit}
+\newcommand\pptPinQR[2][right]{%
+ \pptPin[#1]{%
+ \begin{minipage}{1.4in}%
+ \raggedleft%
+ \pptQR[1in]{#2}%
+ \\[3pt]
+ \ttfamily\fontsize{8pt}{10pt}\selectfont%
+ \seqsplit{#2} \href{#2}{$\rightarrow$}%
+ \\
+ \end{minipage}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{pptWide}
+% Finally, we define the |pptWide| and |pptWideOne| environments:
+% \begin{macrocode}
+\newenvironment{pptWideOne}
+ {\begin{adjustwidth}{-2in}{-1in}}
+ {\end{adjustwidth}}
+\newenvironment{pptWide}[1]
+ {\begin{pptWideOne}\begin{multicols}{#1}}
+ {\end{multicols}\end{pptWideOne}}
+% \end{macrocode}
+% \end{macro}
+
+\endinput
+
+% \Finale
+
+% \clearpage
+% \printbibliography
+% \clearpage
+
+% \PrintChanges
+% \clearpage
+% \PrintIndex
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.ins b/macros/latex/contrib/ppt-slides/ppt-slides.ins
new file mode 100644
index 0000000000..5dfdeca0b5
--- /dev/null
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.ins
@@ -0,0 +1,55 @@
+%% (The MIT License)
+%%
+%% Copyright (c) 2021-2022 Yegor Bugayenko
+%%
+%% Permission is hereby granted, free of charge, to any person obtaining a copy
+%% of this software and associated documentation files (the 'Software'), to deal
+%% in the Software without restriction, including without limitation the rights
+%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+%% copies of the Software, and to permit persons to whom the Software is
+%% furnished to do so, subject to the following conditions:
+%%
+%% The above copyright notice and this permission notice shall be included in all
+%% copies or substantial portions of the Software.
+%%
+%% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+%% SOFTWARE.
+
+\input docstrip.tex
+\keepsilent
+\usedir{macros/latex/contrib/ppt-slides}
+\preamble
+(The MIT License)
+
+Copyright (c) 2021-2022 Yegor Bugayenko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the 'Software'), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+\endpreamble
+\generate{\file{ppt-slides.sty}{\from{ppt-slides.dtx}{package}}}
+\obeyspaces
+\Msg{To finish the installation you have to move the ".sty"}
+\Msg{file into a directory searched by TeX. To produce the}
+\Msg{documentation run the file ".dtx" through LaTeX. If any}
+\Msg{questions, submit a new GitHub issue.}
+\endbatchfile
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.pdf b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
index 3b357352bf..c256214d9b 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.pdf
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
Binary files differ
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.sty b/macros/latex/contrib/ppt-slides/ppt-slides.sty
deleted file mode 100644
index beb1e866d2..0000000000
--- a/macros/latex/contrib/ppt-slides/ppt-slides.sty
+++ /dev/null
@@ -1,227 +0,0 @@
-% (The MIT License)
-%
-% Copyright (c) 2022 Yegor Bugayenko
-%
-% Permission is hereby granted, free of charge, to any person obtaining a copy
-% of this software and associated documentation files (the 'Software'), to deal
-% in the Software without restriction, including without limitation the rights
-% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-% copies of the Software, and to permit persons to whom the Software is
-% furnished to do so, subject to the following conditions:
-%
-% The above copyright notice and this permission notice shall be included in all
-% copies or substantial portions of the Software.
-%
-% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-% SOFTWARE.
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ppt-slides}[2022/09/19 0.1.5 Slide Decks à la Power Point]
-
-\RequirePackage{pgfopts}
-\makeatletter
-\pgfkeys{
- /ppt-slides/.is family,
- /ppt-slides,
- template/.estore in = \ppt@template,
- template/.default = 9x6,
- scheme/.estore in = \ppt@scheme,
- directory/.estore in = \ppt@directory,
- directory/.default = ,
- nominutes/.estore in = \ppt@nominutes,
- directory
-}
-\ProcessPgfOptions*
-\makeatother
-
-\makeatletter\ifdefined\ppt@template
- \input{\ppt@directory ppt-templates/ppt-\ppt@template.tex}
-\else
- \message{^^Jppt: No template is loaded, because 'template' option is not specified}
-\fi\makeatother
-
-\makeatletter\ifdefined\ppt@scheme
- \RequirePackage{xcolor}
- \input{\ppt@directory ppt-schemes/ppt-\ppt@scheme.tex}
-\else
- \message{^^Jppt: No color scheme is loaded, because 'scheme' option is not specified}
-\fi\makeatother
-
-\RequirePackage{ifthen} % for if/then/else in LaTeX
-\RequirePackage{href-ul} % for nice hyperlinks
-\RequirePackage{pagecolor} % to change page color
-\RequirePackage{varwidth} % for pptWide
-\RequirePackage{qrcode} % to print QR codes
-\RequirePackage{tikz} % for drawings in TOC
-\RequirePackage{tikzpagenodes} % for pptPin
-\RequirePackage[inline]{enumitem} % for lists in crumbs
-\RequirePackage{crumbs} % for crumbs
-
-\newcommand\pptMiddle[1]{%
- \vspace*{\fill}#1\vspace*{\fill}%
-}
-
-\newcommand\pptBanner[2][green]{%
- \par
- {\setlength{\fboxsep}{6pt}\colorbox{#1}{\color{\thepagecolor}\large #2}}
- \par
-}
-
-\newcommand\pptChapter[2][]{%
- \crumbection[#1]{#2}%
- \pptMiddle{%
- {\large\ttfamily Chapter \#\the\value{section}:}%
- \newline%
- \rotatebox{1}{\pptBanner[blue]{\LARGE#2}}%
- }%
-}
-
-\newcommand\pptSection[2][]{%
- \subcrumbection[#1]{#2}%
- \pptHeader{#2}%
-}
-
-\newcommand\pptHeader[1]{%
- \vspace*{-0.75in}\hspace*{-0.5in}%
- \rotatebox{1}{\pptBanner[orange]{\Large #1}}\vspace*{0.15in}%
- \par%
-}
-
-\newcommand\pptTitle[2]{%
- {\pptBanner{\Huge #1}}%
- {\pptBanner{\large #2}}%
-}
-
-\newcommand*\pptTOC{}
-\newcommand\pptToc[1][]{%
- \renewcommand*\pptTOC{}%
- \print{%
- \def\param{#1}%
- \ifx\param\empty\else%
- \pptBanner{#1}%
- \fi%
- \tikz{%
- \node (z) {%
- \begin{varwidth}{\textwidth}%
- \ifx\pptTOC\empty\else%
- \begin{itemize}[label={}]
- \pptTOC
- \end{itemize}
- \fi%
- \end{varwidth}%
- };%
- \path [draw=blue,line width=4pt] (z.north west) -- (z.south west);%
- }%
- }%
- \begin{@empty}%
- \renewcommand\crumb[2]{%
- \ifx\pptTOC\empty\else\ifdefined\click\click[0]\fi\fi
- \gappto\pptTOC{\item ##2}
- }
- \crumbs
- \end{@empty}%
- \ifdefined\flush\flush[1]\fi%
-}
-
-\RequirePackage{tabularx}
-\newcommand\pptQuote[3]{%
- \begin{tabularx}{\columnwidth}{c>{\raggedright\arraybackslash}X}%
- \raisebox{\dimexpr-\height+\ht\strutbox}{\pptPic{0.25}{#1}}%
- &%
- ``#2''%
- \def\param{#3}%
- \ifx\param\empty\else%
- \newline\newline%
- \small%
- --- #3
- \fi%
- \\%
- \end{tabularx}%
-}
-
-\newcommand\pptPic[2]{%
- {%
- \setlength{\fboxsep}{0pt}%
- \setlength{\fboxrule}{1pt}%
- \fcolorbox{gray}{white}{%
- \includegraphics[width=#1\columnwidth]{#2}%
- }%
- }%
-}
-
-\newcommand\pptPin[2][right]{%
- \begin{tikzpicture}[remember picture,overlay]%
- \ifthenelse{\equal{#1}{left}}
- {
- \node[anchor=north east] at ($(current page text area.north west) - (24pt, 18pt)$) {%
- \begin{minipage}{0.25\textwidth}%
- \raggedleft #2
- \end{minipage}%
- };
- }
- {
- \node[anchor=north east] at (current page text area.north east) {%
- \begin{minipage}{0.25\textwidth}%
- \raggedright #2
- \end{minipage}%
- };%
- }
- \end{tikzpicture}%
-}
-
-\newcommand\pptThought[1]{%
- \pptMiddle{%
- \tikz{%
- \node [inner sep=18pt] (z) {%
- \begin{varwidth}{0.8\textwidth}
- \Large
- #1
- \end{varwidth}
- };
- \path [draw=green,line width=8pt] (z.north west) -- (z.south west);
- }
- }
-}
-
-\newcommand\pptSnippet[2][\small]{%
- \begin{samepage}%
- #1\verbatiminput{#2}%
- \end{samepage}%
-}
-
-\newcommand\pptQR[2][2in]{%
- \tikz{%
- \node[draw=white]{%
- \href{#2}{%
- \qrcode[height=#1]{#2}%
- }%
- }%
- }
-}
-
-\RequirePackage{seqsplit}
-\newcommand\pptPinQR[2][right]{%
- \pptPin[#1]{%
- \begin{minipage}{1.4in}%
- \raggedleft%
- \pptQR[1in]{#2}%
- \\[3pt]
- \ttfamily\fontsize{8pt}{10pt}\selectfont\seqsplit{#2} \href{#2}{$\rightarrow$}
- \\
- \end{minipage}%
- }%
-}
-
-\newenvironment{pptWideOne}
- {\begin{adjustwidth}{-2in}{-1in}}
- {\end{adjustwidth}}
-\newenvironment{pptWide}[1]
- {\begin{pptWideOne}\begin{multicols}{#1}}
- {\end{multicols}\end{pptWideOne}}
-
-\endinput
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.tex b/macros/latex/contrib/ppt-slides/ppt-slides.tex
deleted file mode 100644
index 5be0b6029f..0000000000
--- a/macros/latex/contrib/ppt-slides/ppt-slides.tex
+++ /dev/null
@@ -1,262 +0,0 @@
-% (The MIT License)
-%
-% Copyright (c) 2022 Yegor Bugayenko
-%
-% Permission is hereby granted, free of charge, to any person obtaining a copy
-% of this software and associated documentation files (the 'Software'), to deal
-% in the Software without restriction, including without limitation the rights
-% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-% copies of the Software, and to permit persons to whom the Software is
-% furnished to do so, subject to the following conditions:
-%
-% The above copyright notice and this permission notice shall be included in all
-% copies or substantial portions of the Software.
-%
-% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-% SOFTWARE.
-
-\documentclass{article}
-\usepackage[increment]{crumbs}
-\usepackage[static]{clicks}
-\usepackage[template,scheme=dark]{ppt-slides}
-\usepackage[nonumbers]{ffcode}
-\usepackage{titling}
-\usepackage{textcomp}
-\title{\LaTeX{} Package for Slide Decks \`a la PowerPoint\texttrademark}
-\author{Yegor Bugayenko}
-\date{0.1.5 2022/09/19}
-\pptLeft{\thetitle}
-\pptRight{\href{https://github.com/yegor256}{@yegor256}}
-
-\begin{document}
-
-\plush{
- \pptMiddle{
- \pptTitle{ppt-slides}{\thetitle}\par
- {\scshape Made by \href{https://www.yegor256.com}{\theauthor}}\par
- \thedate
- }
-}
-
-\clearpage
-This package helps you make slide decks in \LaTeX:
-\begin{ffcode*}{fontsize=\small}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template,scheme=dark]{ppt-slides}
-\begin{document}
-\plick{\pptBanner{Making Slides Is Easy}}
-\plick{Just use this package...}
-\plush{together with 'clicks' package.}
-\end{document}
-\end{ffcode*}
-They will look similar to what PowerPoint\texttrademark{} can make,
-but with the precision of \LaTeX. We recommend to use this package
-together with \href{https://github.com/yegor256/clicks}{clicks}.
-
-\clearpage
-\pptToc[Table of Contents]
-
-\clearpage
-\plush{\pptChapter[Layout]{Scaffolding and Layout}}
-
-\clearpage
-\pptSection{Template}
-You start with a template for your slide deck:
-\begin{ffcode*}{fontsize=\scriptsize}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template=9x6]{ppt-slides}
-\begin{document}
-...
-\end{document}
-\end{ffcode*}
-There is only one template, which is used by default: \ff{9x6}. If you don't
-specify the name, it will be used. If you don't use \ff{template} option at all,
-the default \ff{article} will be rendered, which is not what you want.
-
-\clearpage
-\pptSection[Scheme]{Color Schemes}
-You can choose a color scheme for your slides, using \ff{scheme} option
-of the package:
-\begin{ffcode*}{fontsize=\scriptsize}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template,scheme=light]{ppt-slides}
-\begin{document}
-...
-\end{document}
-\end{ffcode*}
-There are a few out-of-the-box schemes available: \ff{light}, \ff{dark},
-\ff{light-mono}, and \ff{dark-mono}. You can design your own, using
-\ff{ppt-light.text} file as an example:
-{\scriptsize\begin{ffcode}
-\usepackage[template,scheme=/usr/local/my-colors.tex]{ppt-slides}
-\end{ffcode}
-}
-
-\clearpage
-\pptSection{Chapters}
-First, split your story into Chapters:
-\begin{ffcode*}{fontsize=\scriptsize}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template,scheme=light]{ppt-slides}
-\begin{document}
-\pptToc
-\plush{\pptChapter{About Me}}
-...
-\plush{\pptChapter[Idea]{My Idea Is Novel}}
-...
-\plush{\pptChapter[FAQ]{Discussion \& Questions}}
-...
-\end{document}
-\end{ffcode*}
-\ff{\char`\\pptToc} will render the table of contents in an interactive ``clickable'' format.
-Thanks to the use of \href{https://github.com/yegor256/crumbs}{crumbs}, there will
-be a navigation at the top left corner.
-
-\clearpage
-\pptSection{Sections}
-Put Sections inside Chapters:
-\begin{ffcode*}{fontsize=\scriptsize}
-\begin{document}
-\pptToc
-\plush{\pptChapter{About Me}}
-\plush{\pptSection[Student]{I'm a Student}}
-...
-\plush{\pptSection[Athlete]{Also, I'm an Athlete}}
-...
-\plush{\pptChapter[Idea]{My Idea Is Novel}}
-\plush{\pptSection{Novelty}}
-\plush{\pptSection{Impact}}
-\end{document}
-\end{ffcode*}
-\ff{\char`\\pptChapter} and \ff{\char`\\pptSection} used together will render
-nice two-level nagivation menu at the top left corner.
-
-\clearpage
-\pptSection[Signatures]{Signatures at the Bottom of Each Page}
-You can place the title of the presentation and your name at the bottom
-of each slide, on the left and on the right respectively:
-\begin{ffcode*}{fontsize=\scriptsize}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template,scheme=light]{ppt-slides}
-\pptLeft{How Did I Spend Last Summer}
-\pptRight{Yegor Bugayenko}
-\begin{document}
-...
-\end{document}
-\end{ffcode*}
-If you don't use \ff{\char`\\pptLeft} or \ff{\char`\\pptRight}, nothing will
-be printed at the bottom.
-
-\clearpage
-\pptSection[Minutes]{Tracking Minutes}
-By default, if you render your slide deck in non-static mode (option \ff{static} for clicks package),
-there will be minutes tracking in the right top corner of each slide. You can turn this off
-by using \ff{nominutes} option of the package:
-\begin{ffcode*}{fontsize=\small}
-\documentclass{article}
-\usepackage{clicks}
-\usepackage[template,scheme=light,nominutes]{ppt-slides}
-\begin{document}
-...
-\end{document}
-\end{ffcode*}
-
-\clearpage
-\pptSection[Wide]{Wide Slides}
-Sometimes you need your slide content to take all visible horizontal space:
-\begin{ffcode*}{fontsize=\scriptsize}
-\begin{document}
-\begin{pptWideOne}
-This paragraph is too long for some reasons,
-that's why must take all visible horizontal space.
-\end{pptWideOne}
-\end{document}
-\end{ffcode*}
-\begin{pptWideOne}
-This paragraph is too long for some reasons, that's why must take all visible horizontal space.
-\end{pptWideOne}
-You can also use \ff{\char`\\begin\char`\{pptWide\char`\}\char`\{X\char`\}},
-where \ff{X} is the number of columns to render.
-
-\clearpage
-\plush{\pptChapter[Elements]{Content Elements}}
-
-\clearpage
-\pptSection{Images}
-You can add an image to the slide (the first argument is the width
-of the image in relation to \ff{\char`\\textwidth},
-while the second one is the path of it):
-\begin{ffcode*}{fontsize=\scriptsize}
-\begin{document}
-\plush{\pptPic{0.2}{socrates.jpg}}
-\end{document}
-\end{ffcode*}
-\pptPic{0.2}{socrates.jpg}
-
-\clearpage
-\pptSection[Snippets]{Code Snippets}
-You can add a piece of code to the slide (we recommend using \href{https://github.com/yegor256/ffcode}{ffcode}):
-{\scriptsize
-\begin{verbatim}
-\begin{document}
-\clearpage
-\pptHeader{This is How You Print to Console:}
-\begin{ffcode}
-System.out.println("Hello, world!");
-\end{ffcode}
-\end{document}
-\end{verbatim}
-}
-Don't use \ff{\char`\\plick} or \ff{\char`\\plush}, they won't work with code snippets.
-
-\ff{\char`\\pptHeader} prints a header similar to what \ff{\char`\\pptSection} prints, but
-doesn't start a new section.
-
-\clearpage
-\pptSection{Quotes}
-\pptQuote{socrates.jpg}{The only true wisdom is in knowing you know nothing}{Socrates}
-\begin{ffcode*}{fontsize=\scriptsize}
-\begin{document}
-\plush{\pptQuote{socrates.jpg}
- {The only true wisdom is in knowing you know nothing}{Socrates}}
-\end{document}
-\end{ffcode*}
-
-\clearpage
-\pptSection{Thoughts}
-\plush{\pptThought{Socrates said that the only true wisdom is in knowing you know nothing. Was he a wise man?... By the way, I'm using \ff{\char`\\pptThought} in this slide.}}
-
-\clearpage
-\pptSection[QR]{QR Codes}
-Sometimes it's convenient to show a QR code to your audience instead of
-a URL, since it's easier to use --- they can scan it:
-\begin{ffcode*}{fontsize=\scriptsize}
-\begin{document}
-\plick{Check my blog post by this link:}
-\plush{\pptQR{https://www.yegor256.com}}
-\end{document}
-\end{ffcode*}
-The code will look like this, thanks to \href{https://ctan.org/pkg/qrcode}{qrcode} package that
-we use behind the scene:\par
-\pptQR[1in]{https://www.yegor256.com}
-
-\clearpage
-\plush{
- \crumbection{Sources}
- \pptMiddle{
- More details about this package you can find\\
- in \href{https://github.com/yegor256/ppt-slides}{yegor256/ppt-slides} GitHub repository.
- }
-}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex b/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
index 3c7afa2bb2..10cf2a6f8d 100644
--- a/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
+++ b/macros/latex/contrib/ppt-slides/ppt-templates/ppt-9x6.tex
@@ -26,6 +26,7 @@
\TPGrid{16}{16}
\RequirePackage[tt=false,type1=true]{libertine} % the font we use
\RequirePackage{microtype} % just to make rendering smooth
+\AddToHook{env/verbatim/begin}{\microtypesetup{protrusion=false}}
\RequirePackage{anyfontsize} % to support all sizes
\RequirePackage{multicol} % for pptWide environment
\RequirePackage[fontsize=24pt]{fontsize} % to make fonts larger
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 64e0bae6cf..62ad68d435 100644
--- a/macros/latex/contrib/semantex/semantex.pdf
+++ b/macros/latex/contrib/semantex/semantex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semantex/semantex.sty b/macros/latex/contrib/semantex/semantex.sty
index 1937f4e5c4..0543e3c030 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse,l3keys2e,leftindex,semtex}
-\ProvidesExplPackage{semantex}{2022/10/04}{0.522}{}
+\ProvidesExplPackage{semantex}{2022/12/03}{0.523}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -10,7 +10,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\tl_set:Nn\SemantexVersion{0.522}
+\tl_set:Nn\SemantexVersion{0.523}
\cs_set_eq:NN \semantex_keyval_parse:NNn \keyval_parse:NNn
\cs_set:Npn \semantex_singlekey_parse:Nn#1#2 { \clist_map_function:nN { #2 } #1 }
@@ -7072,6 +7072,7 @@
{dots}{sep~i~dots},
{...}{dots},
{slot}{sep~i~slot},
+ {---}{slot},
{*}{sep~d~*},
{**}{sep~d~**},
},
@@ -7101,12 +7102,14 @@
data~provide=pre~arg,
data~provide=post~arg,
define~keys={
- {arg~dots}{set~arg~keys={...}},
- {arg~...}{set~arg~keys={dots}},
+ {arg~dots}{set~arg~keys={dots}},
+ {arg~...}{set~arg~keys={...}},
{comma~arg~dots}{set~arg~keys={comma~dots}},
{comma~arg~...}{set~arg~keys={comma~...}},
{arg~slot}{set~arg~keys={slot}},
+ {arg~---}{set~arg~keys={---}},
{comma~arg~slot}{set~arg~keys={comma~slot}},
+ {comma~arg~---}{set~arg~keys={comma~---}},
{clear~arg}{ execute={
\semantex_data_tl_clear:nn { ##1 } { arg }
\semantex_data_int_clear:nn { ##1 } { number~of~arguments }
@@ -7303,8 +7306,9 @@
{sep~arg}{set~arg~keys={sep={#1}}},
{comma~arg}{set~arg~keys={comma={#1}}},
{arg~dots~with~other~sep}{set~arg~keys={dots~with~other~sep={#1}}},
- {arg~...~with~other~sep}{set~arg~keys={dots~with~other~sep={#1}}},
+ {arg~...~with~other~sep}{set~arg~keys={...~with~other~sep={#1}}},
{arg~slot~with~other~sep}{set~arg~keys={slot~with~other~sep={#1}}},
+ {arg~---~with~other~sep}{set~arg~keys={---~with~other~sep={#1}}},
},
define~keys[2]={
{arg~with~other~sep}{set~arg~keys={other~sep={#1}{#2}}},
@@ -7380,8 +7384,11 @@
data~provide=post~upper,
define~keys={
{upper~slot}{ set~keys~x={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {upper~---}{upper~slot},
{sep~upper~slot}{ set~keys~x={ sep~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {sep~upper~---}{sep~upper~slot},
{comma~upper~slot}{ set~keys~x={ comma~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {comma~upper~---}{comma~upper~slot},
{upper~dots}{ set~keys~x={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~dots } } },
{upper~...}{upper~dots},
{sep~upper~dots}{ set~keys~x={ sep~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~dots } } },
@@ -7503,6 +7510,15 @@
}
},
},
+ {upper~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upper~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } }
+ }
+ },
+ },
{set~upper~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { upper~dots } { #1 } },
},
@@ -7567,8 +7583,11 @@
data~provide=post~lower,
define~keys={
{lower~slot}{ set~keys~x={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {lower~---}{lower~slot},
{sep~lower~slot}{ set~keys~x={ sep~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {sep~lower~---}{sep~lower~slot},
{comma~lower~slot}{ set~keys~x={ comma~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {comma~lower~---}{comma~lower~slot},
{lower~dots}{ set~keys~x={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~dots } } },
{lower~...}{lower~dots},
{sep~lower~dots}{ set~keys~x={ sep~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~dots } } },
@@ -7689,6 +7708,15 @@
}
},
},
+ {lower~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lower~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } }
+ }
+ },
+ },
{set~lower~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { lower~dots } { #1 } },
},
@@ -7753,8 +7781,11 @@
data~provide=post~upper~left,
define~keys={
{upper~left~slot}{ set~keys~x={ upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {upper~left~---}{upper~left~slot},
{sep~upper~left~slot}{ set~keys~x={ sep~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {sep~upper~left~---}{sep~upper~left~slot},
{comma~upper~left~slot}{ set~keys~x={ comma~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {comma~upper~left~---}{comma~upper~left~slot},
{upper~left~dots}{ set~keys~x={ upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~dots } } },
{upper~left~...}{upper~left~dots},
{sep~upper~left~dots}{ set~keys~x={ sep~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~dots } } },
@@ -7875,6 +7906,15 @@
}
},
},
+ {upper~left~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upper~left~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } }
+ }
+ },
+ },
{set~upper~left~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { upper~left~dots } { #1 } },
},
@@ -7939,8 +7979,11 @@
data~provide=post~lower~left,
define~keys={
{lower~left~slot}{ set~keys~x={ lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {lower~left~---}{lower~left~slot},
{sep~lower~left~slot}{ set~keys~x={ sep~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {sep~lower~left~---}{sep~lower~left~slot},
{comma~lower~left~slot}{ set~keys~x={ comma~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {comma~lower~left~---}{comma~lower~left~slot},
{lower~left~dots}{ set~keys~x={ lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~dots } } },
{lower~left~...}{lower~left~dots},
{sep~lower~left~dots}{ set~keys~x={ sep~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~dots } } },
@@ -8061,6 +8104,15 @@
}
},
},
+ {lower~left~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lower~left~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } },
+ }
+ },
+ },
{set~lower~left~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { lower~left~dots } { #1 } },
},
@@ -8124,16 +8176,19 @@
{ upper~slot }
{ lower~slot },
},
+ {d~---}{d~slot},
{sep~d~slot}{
bool~if~TF={upper~grading}
{ sep~upper~slot }
{ sep~lower~slot },
},
+ {sep~d~---}{sep~d~slot},
{comma~d~slot}{
bool~if~TF={upper~grading}
{ comma~upper~slot }
{ comma~lower~slot },
},
+ {comma~d~---}{comma~d~slot},
{d~dots}{
bool~if~TF={upper~grading}
{ upper~dots }
@@ -8283,6 +8338,15 @@
lower~slot~with~other~sep={#1},
},
},
+ {d~---~with~other~sep}{
+ bool~if~TF={upper~grading}
+ {
+ upper~---~with~other~sep={#1},
+ }
+ {
+ lower~---~with~other~sep={#1},
+ },
+ },
{set~d~dots}{
bool~if~TF={upper~grading}
{
@@ -8302,7 +8366,13 @@
},
},
{d~...~with~other~sep}{
- d~dots~with~other~sep={#1},
+ bool~if~TF={upper~grading}
+ {
+ upper~...~with~other~sep={#1},
+ }
+ {
+ lower~...~with~other~sep={#1},
+ },
},
{d~*~with~other~sep}{
bool~if~TF={upper~grading}
@@ -8369,16 +8439,19 @@
{ lower~slot }
{ upper~slot },
},
+ {i~---}{i~slot},
{sep~i~slot}{
bool~if~TF={upper~grading}
{ sep~lower~slot }
{ sep~upper~slot },
},
+ {sep~i~---}{sep~i~slot},
{comma~i~slot}{
bool~if~TF={upper~grading}
{ comma~lower~slot }
{ comma~upper~slot },
},
+ {comma~i~---}{comma~i~slot},
{i~dots}{
bool~if~TF={upper~grading}
{ lower~dots }
@@ -8527,6 +8600,15 @@
upper~slot~with~other~sep={#1},
},
},
+ {i~---~with~other~sep}{
+ bool~if~TF={upper~grading}
+ {
+ lower~---~with~other~sep={#1},
+ }
+ {
+ upper~---~with~other~sep={#1},
+ },
+ },
{set~i~dots}{
bool~if~TF={upper~grading}
{
@@ -8546,7 +8628,13 @@
},
},
{i~...~with~other~sep}{
- i~dots~with~other~sep={#1},
+ bool~if~TF={upper~grading}
+ {
+ lower~...~with~other~sep={#1},
+ }
+ {
+ upper~...~with~other~sep={#1},
+ },
},
{i~*~with~other~sep}{
bool~if~TF={upper~grading}
@@ -8712,7 +8800,6 @@
{set~arg~without~keyval~x}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{arg~without~keyval~set~x}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{default}{sep={#1}},
- {...~with~other~sep}{dots~with~other~sep={#1}},
{sep}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { next~arg~with~sep }
@@ -8752,6 +8839,7 @@
}
},
},
+ {...~with~other~sep}{dots~with~other~sep={#1}},
{slot~with~other~sep}{
execute={
\semantex_arg_valuekey:nnx { ##1 } { other~sep }
@@ -8761,6 +8849,7 @@
}
},
},
+ {---~with~other~sep}{slot~with~other~sep={#1}},
},
define~arg~keys={
{dots}{
@@ -8789,6 +8878,7 @@
}
},
},
+ {---}{slot},
{comma~slot}{
execute={
\semantex_arg_valuekey:nnx { ##1 } { comma }
@@ -8797,6 +8887,7 @@
}
},
},
+ {comma~---}{comma~slot},
},
define~arg~keys[2]={
{other~sep}{
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index 08587d1ad8..5868300ec0 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -1952,7 +1952,7 @@ on \( \vn \)~elements.
]
\NewObject\MyVar\inner[left par=\langle, right par=\rangle]
-In this chapter, se show how to define delimiter commands like \( \norm{slot} \) and~\( \inner{slot,slot} \).
+In this chapter, se show how to define delimiter commands like \( \norm{---} \) and~\( \inner{---,---} \).
This is easy to do via the keys \lstinline!left par! and~\lstinline!right par!:
\begin{lstlisting}
\NewObject\MyVar\norm[left par=\lVert, right par=\rVert]
@@ -1962,10 +1962,10 @@ Indeed:
\begin{LTXexample}
$\norm{\va}$,
$\inner{\va,\vb}$,
-$\inner{slot,slot}$
+$\inner{---,---}$
\end{LTXexample}
In the case where you want to use different kinds of
-norms, say \( \norm[2]{slot} \) or~\( \norm[\infty]{slot} \),
+norms, say \( \norm[2]{---} \) or~\( \norm[\infty]{---} \),
you can use the key~\mylst!output options={$\<options\>$}!.
This allows you to pass the~\<options\> to the output class
(in this case,~\lstinline!\MyVar!):
@@ -3706,12 +3706,12 @@ In the following sections, we include the full list.
Adds a double bullet to the \lstinline!d!-index.
\item
- \mylst!slot!
+ \mylst!---!, \mylst!slot!
Adds a slot to the \lstinline!i!-index.
\item
- \mylst!dots!, \mylst!...!
+ \mylst!...!, \mylst!dots!
Adds three dots to the \lstinline!i!-index.
@@ -4034,33 +4034,35 @@ In the following sections, we include the full list.
argument by the \<separator\>.
\item
+ \mylst!arg --- with other sep={$\<separator\>$}!,
\mylst!arg slot with other sep={$\<separator\>$}!
Adds a slot to the argument, separated from any previous
argument by the \<separator\>.
\item
- \mylst!arg dots!, \mylst!arg ...!
+ \mylst!arg ...!, \mylst!arg dots!
Adds three dots to the argument,
separated from any previous arguments
by the standard separator.
\item
- \mylst!comma arg dots!, \mylst!comma arg ...!
+ \mylst!comma arg ...!, \mylst!comma arg dots!
Adds three dots to the argument,
separated from any previous arguments
by a comma.
\item
- \mylst!arg slot!
+ \mylst!arg ---!, \mylst!arg slot!
Adds a slot to the argument,
separated from any previous arguments
by the standard separator.
\item
+ \mylst!comma arg ---!,
\mylst!comma arg slot!
Adds a slot to the argument,
@@ -4156,12 +4158,14 @@ In the following sections, we include the full list.
any prevous upper index by~\<separator\>.
\item
+ \mylst!upper ---!,
\mylst!upper slot!
Adds a slot to the upper index,
with no separator from any previous upper index.
\item
+ \mylst!sep upper ---!,
\mylst!sep upper slot!
Adds a slot to the upper index,
@@ -4169,6 +4173,7 @@ In the following sections, we include the full list.
index by the default separator.
\item
+ \mylst!comma upper ---!,
\mylst!comma upper slot!
Adds a slot to the upper index,
@@ -4182,6 +4187,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!upper --- with other sep={$\<separator\>$}!,\\
\mylst!upper slot with other sep={$\<separator\>$}!
@@ -4364,20 +4370,20 @@ In the following sections, we include the full list.
any prevous lower index by~\<separator\>.
\item
- \mylst!lower slot!
+ \mylst!lower ---!, \mylst!lower slot!
Adds a slot to the lower index,
with no separator from any previous lower index.
\item
- \mylst!sep lower slot!
+ \mylst!sep lower ---!, \mylst!sep lower slot!
Adds a slot to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!comma lower slot!
+ \mylst!comma lower ---!, \mylst!comma lower slot!
Adds a slot to the lower index,
separated from any previous lower
@@ -4390,6 +4396,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!lower --- with other sep={$\<separator\>$}!,\\
\mylst!lower slot with other sep={$\<separator\>$}!
@@ -4572,20 +4579,20 @@ In the following sections, we include the full list.
any prevous upper left index by~\<separator\>.
\item
- \mylst!upper left slot!
+ \mylst!upper left ---!, \mylst!upper left slot!
Adds a slot to the upper left index,
with no separator from any previous upper left index.
\item
- \mylst!sep upper left slot!
+ \mylst!sep upper left ---!, \mylst!sep upper left slot!
Adds a slot to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!comma upper left slot!
+ \mylst!comma upper left ---!, \mylst!comma upper left slot!
Adds a slot to the upper left index,
separated from any previous upper left
@@ -4598,6 +4605,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!upper left --- with other sep={$\<separator\>$}!,\\
\mylst!upper left slot with other sep={$\<separator\>$}!
@@ -4780,20 +4788,20 @@ In the following sections, we include the full list.
any prevous lower left index by~\<separator\>.
\item
- \mylst!lower left slot!
+ \mylst!lower left ---!, \mylst!lower left slot!
Adds a slot to the lower left index,
with no separator from any previous lower left index.
\item
- \mylst!sep lower left slot!
+ \mylst!sep lower left ---!, \mylst!sep lower left slot!
Adds a slot to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!comma lower left slot!
+ \mylst!comma lower left ---!, \mylst!comma lower left slot!
Adds a slot to the lower left index,
separated from any previous lower left
@@ -4806,6 +4814,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!lower left --- with other sep={$\<separator\>$}!,\\
\mylst!lower left slot with other sep={$\<separator\>$}!
@@ -4988,20 +4997,20 @@ In the following sections, we include the full list.
any prevous \lstinline!d!-index by~\<separator\>.
\item
- \mylst!d slot!
+ \mylst!d ---!, \mylst!d slot!
Adds a slot to the \lstinline!d!-index,
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sep d slot!
+ \mylst!sep d ---!, \mylst!sep d slot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!comma d slot!
+ \mylst!comma d ---!, \mylst!comma d slot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -5014,6 +5023,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!d --- with other sep={$\<separator\>$}!,
\mylst!d slot with other sep={$\<separator\>$}!
Adds a slot to the \lstinline!d!-index, separated
@@ -5195,20 +5205,20 @@ In the following sections, we include the full list.
any prevous \lstinline!i!-index by~\<separator\>.
\item
- \mylst!i slot!
+ \mylst!i ---!, \mylst!i slot!
Adds a slot to the \lstinline!i!-index,
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!sep i slot!
+ \mylst!sep i ---!, \mylst!sep i slot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
by the default separator.
\item
- \mylst!comma i slot!
+ \mylst!comma i ---!, \mylst!comma i slot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
@@ -5221,6 +5231,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!i --- with other sep={$\<separator\>$}!,
\mylst!i slot with other sep={$\<separator\>$}!
@@ -5445,14 +5456,14 @@ These are the predefined keys that work inside the argument.
by a comma.
\item
- \mylst!slot!
+ \mylst!---!, \mylst!slot!
Adds a slot to the argument,
separated from any previous argument
by the default separator.
\item
- \mylst!comma slot!
+ \mylst!comma ---!, \mylst!comma slot!
Adds a slot to the argument,
separated from any previous argument
@@ -5480,6 +5491,7 @@ These are the predefined keys that work inside the argument.
by~\<separator\>.
\item
+ \mylst!--- with other sep={$\<separator\>$}!,
\mylst!slot with other sep={$\<separator\>$}!
Adds a slot to the argument, separated
diff --git a/macros/latex/contrib/semantex/stripsemantex.lua b/macros/latex/contrib/semantex/stripsemantex.lua
index d0eb5d1963..30d4c58be6 100644
--- a/macros/latex/contrib/semantex/stripsemantex.lua
+++ b/macros/latex/contrib/semantex/stripsemantex.lua
@@ -1,311 +1,311 @@
--- aliases for protected environments
-local assert, io_open
- = assert, io.open
-
--- load the ltn12 module
-local ltn12 = require("ltn12")
-
--- No more global accesses after this point
-if _VERSION == "Lua 5.2" then _ENV = nil end
-
--- copy a file
-copy_file = function(path_src, path_dst)
- ltn12.pump.all(
- ltn12.source.file(assert(io_open(path_src, "rb"))),
- ltn12.sink.file(assert(io_open(path_dst, "wb")))
- )
-end
-
-openFile = function(file)
- f = io.open(file, "r")
- filecontent = f:read("*all")
- local beginDocPosition = filecontent:find('\\begin{document}')
- if not beginDocPosition then
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
- \endgroup]] )
- return
- end
- precontent = filecontent:sub(1,beginDocPosition-1)
- content = filecontent:sub(beginDocPosition,-1)
- f:close()
-end
-
-closeFile = function(file)
- f = io.open(file, "w")
- f:write(precontent .. content)
- f:close()
-end
-
-removeStricttexFormatting = function(str)
- -- We do this in case the package "stricttex" was used
- str = str:gsub('numberZERO','0')
- str = str:gsub('numberONE','1')
- str = str:gsub('numberTWO','2')
- str = str:gsub('numberTHREE','3')
- str = str:gsub('numberFOUR','4')
- str = str:gsub('numberFIVE','5')
- str = str:gsub('numberSIX','6')
- str = str:gsub('numberSEVEN','7')
- str = str:gsub('numberEIGHT','8')
- str = str:gsub('numberNINE','9')
- str = str:gsub('symbolPRIME','\'')
- return str
-end
-
-addIDsToRegisters = function(str)
- str = removeStricttexFormatting(str)
- content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
- -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
- -- which stricttex allows.
- -- Because of this choice, there will be an issue if you use stricttex and let
- -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
- -- So simply *don't do that*.
-end
-
-removeSuperfluousIDs = function()
- local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- while p do
- content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
- p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- end
- content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
- content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
- content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
- content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
- content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
- content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
- content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
- content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
-end
-
-addNumbersToIDs = function()
- local n = 0
- local p,q = string.find(content,'\\SemantexID{}')
- while q do
- n = n + 1
- content = content:sub(1,q-1) .. n .. content:sub(q,-1)
- p, q = string.find(content,'\\SemantexID{}')
- end
-end
-
-semantexIDluacommand = function(id, source, output)
- local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
-
- while p do
- content = content:sub(1,p-1) .. content:sub(q+1,-1)
-
- source = source:gsub('%s+', '')
-
- -- We do this in case the package "stricttex" was used
- source = removeStricttexFormatting(source)
-
- -- This is because #1's in the code becomes ##1
- -- in the .semtex file.
- source = source:gsub('#(%d)', '%1')
-
- local length = source:len()
-
- local i = 1
-
- local s
-
- while i <= length do
- s = content:sub(p,p)
- if s == source:sub(i,i) then
- content = content:sub(1 , p-1) .. content:sub(p+1, -1)
- i = i + 1
- elseif s:match('%s') then
- content = content:sub(1, p-1) .. content:sub(p+1, -1)
- elseif s == '%' then
- content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
- elseif s == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = content:sub(p+q,p+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- elseif e == '%' then
- content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
- q = q - 1
- end
- end
- content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
- elseif s == '<' and content:sub(p+1,p+2) == '[>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif s == '<' and content:sub(p+1,p+2) == ']>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif source:sub(i,i) == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = source:sub(i+q,i+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- -- there is no chance that the source contains an unescaped %, so we do not
- -- check for this
- end
- end
- source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
- length = source:len()
- else
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
- \endgroup]] )
- break
- end
- end
-
-
- output = output:gsub('%s*\\sp {', '^{')
- output = output:gsub('%s*\\sb {', '_{')
- output = output:gsub('\\mathopen \\big ', '\\bigl')
- output = output:gsub('\\mathclose \\big ', '\\bigr')
- output = output:gsub('\\mathopen \\Big ', '\\Bigl')
- output = output:gsub('\\mathclose \\Big ', '\\Bigr')
- output = output:gsub('\\mathopen \\bigg ', '\\biggl')
- output = output:gsub('\\mathclose \\bigg ', '\\biggr')
- output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
- output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
- output = output:gsub('\\mathopen %(', '(')
- output = output:gsub('\\mathclose %)', ')')
- output = output:gsub('\\mathopen %[', '[')
- output = output:gsub('\\mathclose %]', ']')
- output = output:gsub('\\mathopen \\{', '\\{')
- output = output:gsub('\\mathclose \\}', '\\}')
- output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
- output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
- output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
- output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
- output = output:gsub('\\mathopen \\langle', '\\langle')
- output = output:gsub('\\mathclose \\rangle', '\\rangle')
- output = output:gsub('\\mathopen \\lvert', '\\lvert')
- output = output:gsub('\\mathclose \\rvert', '\\rvert')
- output = output:gsub('\\mathopen \\vert', '\\lvert')
- output = output:gsub('\\mathclose \\vert', '\\rvert')
- output = output:gsub('\\mathopen \\lVert', '\\lVert')
- output = output:gsub('\\mathclose \\rVert', '\\rVert')
- output = output:gsub('\\mathopen \\Vert', '\\lVert')
- output = output:gsub('\\mathclose \\Vert', '\\rVert')
- output = output:gsub('%^{\\prime }', '\'')
- output = output:gsub('%^{\\prime \\prime }', '\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
-
- output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
- output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
- output = output:gsub(',',', ')
- output = output:gsub('%s+$', '')
-
-
- -- We now check whether the string we add will follow right
- -- after a control sequence, causing it to be interpreted
- -- as part of that control sequence.
- -- Because we want to allow the user to use stricttex, we
- -- check for alphanumerical control sequences rather than
- -- just alphabetic ones. This could add spaces that
- -- the user might not have intended, but it's a minor issue.
- if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
- content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
- else
- content = content:sub(1,p-1) .. output .. content:sub(p,-1)
- end
- p, q = string.find(content, '\\SemantexID{' .. id .. '}')
- end
-end
-
-stripRemainingSemantexIDs = function()
- content = content:gsub('\\SemantexID{%d+}', '')
-end
-
-removeParenthesisCommands = function()
- content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
- content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
- content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
- content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
- content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
- content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
- content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
- content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
- content = content:gsub('\\SemantexMathOpen{} %(', '(')
- content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
- content = content:gsub('\\SemantexMathOpen{} %[', '[')
- content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
- content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
- content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
- content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
- content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
- content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
- content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
- content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} .%s?', '')
- content = content:gsub('\\SemantexMathClose{} .%s?', '')
- content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
- content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
- content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
- content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
- content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
- content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
- content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
- content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
-end
-
-stripComments = function()
- content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
- content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
- content = content:gsub('%%.-\n%s*', '')
- content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
-end
-
-addSemtexPackageToFile = function()
- content = [[% The following was added by "stripsemantex":
-
-\usepackage{semtex,leftindex,graphicx}
-
-\providecommand\SemantexLeft{%
- \mathopen{}\mathclose\bgroup\left
-}
-
-\providecommand\SemantexRight{%
- \aftergroup\egroup\right
-}
-
-\makeatletter
-\DeclareRobustCommand\SemantexBullet{%
- \mathord{\mathpalette\SemantexBullet@{0.5}}%
-}
-\newcommand\SemantexBullet@[2]{%
- \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
-}
-\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
-\makeatother
-
-]] .. content
+-- aliases for protected environments
+local assert, io_open
+ = assert, io.open
+
+-- load the ltn12 module
+local ltn12 = require("ltn12")
+
+-- No more global accesses after this point
+if _VERSION == "Lua 5.2" then _ENV = nil end
+
+-- copy a file
+copy_file = function(path_src, path_dst)
+ ltn12.pump.all(
+ ltn12.source.file(assert(io_open(path_src, "rb"))),
+ ltn12.sink.file(assert(io_open(path_dst, "wb")))
+ )
+end
+
+openFile = function(file)
+ f = io.open(file, "r")
+ filecontent = f:read("*all")
+ local beginDocPosition = filecontent:find('\\begin{document}')
+ if not beginDocPosition then
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
+ \endgroup]] )
+ return
+ end
+ precontent = filecontent:sub(1,beginDocPosition-1)
+ content = filecontent:sub(beginDocPosition,-1)
+ f:close()
+end
+
+closeFile = function(file)
+ f = io.open(file, "w")
+ f:write(precontent .. content)
+ f:close()
+end
+
+removeStricttexFormatting = function(str)
+ -- We do this in case the package "stricttex" was used
+ str = str:gsub('numberZERO','0')
+ str = str:gsub('numberONE','1')
+ str = str:gsub('numberTWO','2')
+ str = str:gsub('numberTHREE','3')
+ str = str:gsub('numberFOUR','4')
+ str = str:gsub('numberFIVE','5')
+ str = str:gsub('numberSIX','6')
+ str = str:gsub('numberSEVEN','7')
+ str = str:gsub('numberEIGHT','8')
+ str = str:gsub('numberNINE','9')
+ str = str:gsub('symbolPRIME','\'')
+ return str
+end
+
+addIDsToRegisters = function(str)
+ str = removeStricttexFormatting(str)
+ content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
+ -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
+ -- which stricttex allows.
+ -- Because of this choice, there will be an issue if you use stricttex and let
+ -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
+ -- So simply *don't do that*.
+end
+
+removeSuperfluousIDs = function()
+ local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ while p do
+ content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
+ p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ end
+ content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
+ content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
+ content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
+ content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
+ content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
+ content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
+ content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
+ content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
+end
+
+addNumbersToIDs = function()
+ local n = 0
+ local p,q = string.find(content,'\\SemantexID{}')
+ while q do
+ n = n + 1
+ content = content:sub(1,q-1) .. n .. content:sub(q,-1)
+ p, q = string.find(content,'\\SemantexID{}')
+ end
+end
+
+semantexIDluacommand = function(id, source, output)
+ local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+
+ while p do
+ content = content:sub(1,p-1) .. content:sub(q+1,-1)
+
+ source = source:gsub('%s+', '')
+
+ -- We do this in case the package "stricttex" was used
+ source = removeStricttexFormatting(source)
+
+ -- This is because #1's in the code becomes ##1
+ -- in the .semtex file.
+ source = source:gsub('#(%d)', '%1')
+
+ local length = source:len()
+
+ local i = 1
+
+ local s
+
+ while i <= length do
+ s = content:sub(p,p)
+ if s == source:sub(i,i) then
+ content = content:sub(1 , p-1) .. content:sub(p+1, -1)
+ i = i + 1
+ elseif s:match('%s') then
+ content = content:sub(1, p-1) .. content:sub(p+1, -1)
+ elseif s == '%' then
+ content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
+ elseif s == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = content:sub(p+q,p+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ elseif e == '%' then
+ content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
+ q = q - 1
+ end
+ end
+ content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
+ elseif s == '<' and content:sub(p+1,p+2) == '[>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif s == '<' and content:sub(p+1,p+2) == ']>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif source:sub(i,i) == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = source:sub(i+q,i+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ -- there is no chance that the source contains an unescaped %, so we do not
+ -- check for this
+ end
+ end
+ source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
+ length = source:len()
+ else
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
+ \endgroup]] )
+ break
+ end
+ end
+
+
+ output = output:gsub('%s*\\sp {', '^{')
+ output = output:gsub('%s*\\sb {', '_{')
+ output = output:gsub('\\mathopen \\big ', '\\bigl')
+ output = output:gsub('\\mathclose \\big ', '\\bigr')
+ output = output:gsub('\\mathopen \\Big ', '\\Bigl')
+ output = output:gsub('\\mathclose \\Big ', '\\Bigr')
+ output = output:gsub('\\mathopen \\bigg ', '\\biggl')
+ output = output:gsub('\\mathclose \\bigg ', '\\biggr')
+ output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
+ output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
+ output = output:gsub('\\mathopen %(', '(')
+ output = output:gsub('\\mathclose %)', ')')
+ output = output:gsub('\\mathopen %[', '[')
+ output = output:gsub('\\mathclose %]', ']')
+ output = output:gsub('\\mathopen \\{', '\\{')
+ output = output:gsub('\\mathclose \\}', '\\}')
+ output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
+ output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
+ output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
+ output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
+ output = output:gsub('\\mathopen \\langle', '\\langle')
+ output = output:gsub('\\mathclose \\rangle', '\\rangle')
+ output = output:gsub('\\mathopen \\lvert', '\\lvert')
+ output = output:gsub('\\mathclose \\rvert', '\\rvert')
+ output = output:gsub('\\mathopen \\vert', '\\lvert')
+ output = output:gsub('\\mathclose \\vert', '\\rvert')
+ output = output:gsub('\\mathopen \\lVert', '\\lVert')
+ output = output:gsub('\\mathclose \\rVert', '\\rVert')
+ output = output:gsub('\\mathopen \\Vert', '\\lVert')
+ output = output:gsub('\\mathclose \\Vert', '\\rVert')
+ output = output:gsub('%^{\\prime }', '\'')
+ output = output:gsub('%^{\\prime \\prime }', '\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
+
+ output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
+ output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
+ output = output:gsub(',',', ')
+ output = output:gsub('%s+$', '')
+
+
+ -- We now check whether the string we add will follow right
+ -- after a control sequence, causing it to be interpreted
+ -- as part of that control sequence.
+ -- Because we want to allow the user to use stricttex, we
+ -- check for alphanumerical control sequences rather than
+ -- just alphabetic ones. This could add spaces that
+ -- the user might not have intended, but it's a minor issue.
+ if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
+ content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
+ else
+ content = content:sub(1,p-1) .. output .. content:sub(p,-1)
+ end
+ p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+ end
+end
+
+stripRemainingSemantexIDs = function()
+ content = content:gsub('\\SemantexID{%d+}', '')
+end
+
+removeParenthesisCommands = function()
+ content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
+ content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
+ content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
+ content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
+ content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
+ content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
+ content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
+ content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
+ content = content:gsub('\\SemantexMathOpen{} %(', '(')
+ content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
+ content = content:gsub('\\SemantexMathOpen{} %[', '[')
+ content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
+ content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
+ content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
+ content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
+ content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
+ content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} .%s?', '')
+ content = content:gsub('\\SemantexMathClose{} .%s?', '')
+ content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
+ content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
+ content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
+ content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
+ content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
+ content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
+ content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
+ content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
+end
+
+stripComments = function()
+ content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
+ content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
+ content = content:gsub('%%.-\n%s*', '')
+ content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
+end
+
+addSemtexPackageToFile = function()
+ content = [[% The following was added by "stripsemantex":
+
+\usepackage{semtex,leftindex,graphicx}
+
+\providecommand\SemantexLeft{%
+ \mathopen{}\mathclose\bgroup\left
+}
+
+\providecommand\SemantexRight{%
+ \aftergroup\egroup\right
+}
+
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@{0.5}}%
+}
+\newcommand\SemantexBullet@[2]{%
+ \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
+}
+\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
+\makeatother
+
+]] .. content
end \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/stripsemantex.sty b/macros/latex/contrib/semantex/stripsemantex.sty
index 5a98435644..1778ac29ec 100644
--- a/macros/latex/contrib/semantex/stripsemantex.sty
+++ b/macros/latex/contrib/semantex/stripsemantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse}
-\ProvidesExplPackage{stripsemantex}{2022/10/04}{0.522}{}
+\ProvidesExplPackage{stripsemantex}{2022/12/03}{0.523}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
diff --git a/macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf b/macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
index 24ca714a75..1cf1a84dee 100644
--- a/macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
+++ b/macros/luatex/generic/pdfextra/examples/pdfextra-example.pdf
Binary files differ
diff --git a/macros/luatex/generic/pdfextra/pdfextra-doc.pdf b/macros/luatex/generic/pdfextra/pdfextra-doc.pdf
index 9534e46bfa..a05e591fe1 100644
--- a/macros/luatex/generic/pdfextra/pdfextra-doc.pdf
+++ b/macros/luatex/generic/pdfextra/pdfextra-doc.pdf
Binary files differ
diff --git a/macros/luatex/generic/pdfextra/pdfextra.opm b/macros/luatex/generic/pdfextra/pdfextra.opm
index bccf096484..9d47d9c02b 100644
--- a/macros/luatex/generic/pdfextra/pdfextra.opm
+++ b/macros/luatex/generic/pdfextra/pdfextra.opm
@@ -1,5 +1,9 @@
-% vim: tw=80
-\_def\_pdfextra_version{0.2}
+% pdfextra package
+% Michal Vlasák <lahcim8@gmail.com>
+% https://github.com/vlasakm/pdfextra
+% Zero-Clause BSD license
+
+\_def\_pdfextra_version{0.3}
\_codedecl \RM {Extra PDF features (v\_pdfextra_version)}
\_namespace{pdfextra}
@@ -739,7 +743,7 @@
% file attachment
\_def\.embeddedfiles{}
-\_def\.attach[#1]{\.isfiledefined{\.name}\_iftrue
+\_def\.attach[#1]{\.isfiledefined{#1}\_iftrue
\.xaddto\.embeddedfiles{(#1) \.cs{filespec:#1} }\_fi
}
\_nspublic \attach ;
@@ -1724,5 +1728,15 @@
\.mimetype{mp4}{video/mp4}
\.mimetype{webm}{video/webm}
+\.mimetype{tex}{application/x-tex}
+
+
+% more or less legacy formats
+\.mimetype{au}{audio/basic}
+\.mimetype{aiff}{audio/x-aiff}
+\.mimetype{mov}{video/quicktime}
+\.mimetype{mpg}{video/mpeg}
+\.mimetype{wmv}{video/x-ms-wmv}
+
\_endnamespace
\_endcode
diff --git a/macros/luatex/generic/pdfextra/pdfextra.tex b/macros/luatex/generic/pdfextra/pdfextra.tex
index cbbeca0c17..a34a08b5aa 100644
--- a/macros/luatex/generic/pdfextra/pdfextra.tex
+++ b/macros/luatex/generic/pdfextra/pdfextra.tex
@@ -41,6 +41,7 @@
\_else \_resetnamespace{#1}\_fi
}
\_def\_resetnamespace #1{%
+ \_unless \_ifx \_pkglabel\_empty \_endnamespace \_fi
\_ea \_gdef \_csname namesp:#1\_endcsname {}%
\_gdef \_pkglabel{_#1}%
\_directlua{
@@ -156,13 +157,13 @@
\_private \string \newtoks \romannumeral ;
+\_newtoks\_opt
\_def\_optdef#1[#2]{%
- \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_string#1}}{\_cs{_oB:\_string#1}}}%
- \_sdef{_oA:\_string#1}[##1]{\_opt={##1}\_cs{_oB:\_string#1\_nospaceafter}}%
- \_sdef{_oB:\_string#1\_nospaceafter}%
+ \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_csstring#1}}{\_cs{_oB:\_csstring#1}}}%
+ \_sdef{_oA:\_csstring#1}[##1]{\_opt={##1}\_cs{_oB:\_csstring#1\_nospaceafter}}%
+ \_sdef{_oB:\_csstring#1\_nospaceafter}%
}
-\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.}
-\_newtoks\_opt
+\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.\_noexpand}
\_private \noexpand \catcode \toksapp ;
@@ -172,7 +173,7 @@
\_catcode`!=3 \_catcode`?=3
\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB}
\_long\_def\_replacestringsA##1#2{\_tmptoks{##1}\_replacestringsB}%
- \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_toksapp\_tmptoks{#3##1}%
+ \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_tmptoks\_ea{\_the\_tmptoks#3##1}%
\_ea\_replacestringsB\_fi}%
\_ea\_replacestringsA #1?#2!#2%
\_long\_def\_replacestringsA##1?{\_tmptoks{##1}\_edef#1{\_the\_tmptoks}}%
@@ -233,16 +234,23 @@
\_immediate\_openout\_reffile={\_jobname.ref}\_relax
\_gdef\_wref ##1##2{\_write\_reffile{\_bslash\_csstring##1##2}}%
\_immediate\_write\_reffile {\_pcent\_pcent\_space pdfextra - REF file}%
+ \_ifx\_refdecldata\_empty \_else \_refdeclwrite \_fi
\_gdef\_openref{}%
}
\_def\_ewref #1#2{\_edef\_ewrefA{#2}\_ea\_wref\_ea#1\_ea{\_ewrefA}}
\_private \ifnum ;
-\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA}
-\_def\_refdeclA #1{\_egroup\_openref
- \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}%
- \_immediate\_write\_reffile {\_detokenize{#1}}%
+\_def\_refdecldata{}
+\_def\_refdecl{\_bgroup \_catcode`\#=12 \_catcode`\\=12 \_catcode`\ =12 \_refdeclA}
+\_def\_refdeclA#1{\_egroup
+ \_ifx\_refdecldata\_empty\_else \_global\_addto\_refdecldata{^^J}\_fi
+ \_global\_addto\_refdecldata{#1}%
+ \_ifx\_openref\_empty \_refdeclwrite \_fi
+}
+\_def\_refdeclwrite{%
+ \_immediate\_write\_reffile{\_pcent\_space \_string\refdecl:^^J\_detokenize\_ea{\_refdecldata}}%
+ \_gdef\_refdecldata{}%
}
%
@@ -267,7 +275,7 @@
% modified
\_def\_pdfunidef#1#2{%
\_edef\_tmp{#2}%
- \_def#1{\_directlua{
+ \_edef#1{\_directlua{
local str = token.scan_string()
local out = { "<FEFF" }
for _, c in utf8.codes(str) do
diff --git a/macros/optex/README b/macros/optex/README
index 0cd39b8770..f6a86e51d2 100644
--- a/macros/optex/README
+++ b/macros/optex/README
@@ -22,6 +22,17 @@ doc/ ... PDF version of the OpTeX documentation and sources.
History:
+<1.09> Dec 2022:
+ New math.opm package: doing math more comfortable.
+ The math.opm package can be a package template for macro writers.
+ \docgen for printing doucumantation of packages introduced.
+ unimath control sequences are almost all declared by \chardef, no \mathchardef.
+ \casesof, \currfile, \nospaceafter (tools for macro programmers) introduced.
+ \setpos, \posx, \posy moved from OpTeX trick to the format.
+ \sfont, \ufont introduced.
+ More robust \caption parameter.
+ Lato, Kurier, Iwona font families registered.
+ Minor more improvements and bug fixing.
<1.08> Aug 2022:
Sorting rules for German, French, Polish, Hungarian, ... added.
Font files for Montserrat, STIX, XITS, STIXtwo, Overlock added.
diff --git a/macros/optex/base/alloc.opm b/macros/optex/base/alloc.opm
index ae77d3074e..d4f823fec4 100644
--- a/macros/optex/base/alloc.opm
+++ b/macros/optex/base/alloc.opm
@@ -121,10 +121,9 @@
\_doc -----------------------------
A few registers are initialized like in plain\TeX/. We absolutely
don't support the `@`category dance, so `\z@skip`
- `\z@`, `\p@` etc. are not defined in \OpTeX/. If you need such
- control sequences then you can initialize them by `\load[plain-at]`.
+ `\z@`, `\p@` etc. are defined but not recommended in \OpTeX/.
- Only the \`\_zo` and \`\_zoskip` (equivalents to `\z@` and `\z@skip`)
+ The \`\_zo` and \`\_zoskip` (equivalents to `\z@` and `\z@skip`)
are declared here and used in some internal macros of \OpTeX/
for improving speed.
\_cod -----------------------------
diff --git a/macros/optex/base/basic-macros.opm b/macros/optex/base/basic-macros.opm
index 2e8c98d6e3..ae5c833140 100644
--- a/macros/optex/base/basic-macros.opm
+++ b/macros/optex/base/basic-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \sdef {Basic macros for OpTeX <2021-07-20>} % preloaded in format
+\_codedecl \sdef {Basic macros for OpTeX <2022-11-22>} % preloaded in format
\_doc ------------------------------
\`\bgroup`, \`\egroup`, \`\empty`, \`\space`, and \`\null`
@@ -77,11 +77,15 @@
\_public \cs \trycs ;
\_doc ------------------------------
- \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined.
+ \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined.\nl
+ \`\aheadto` `\macro{<text>}` defines `\macro` as `<text>` followed by the
+ original `\macro` body.
\_cod ------------------------------
\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}}
-\_public \addto ;
+\_long\_def \_aheadto #1#2{\_edef#1{\_unexpanded{#2}\_unexpanded\_ea{#1}}}
+
+\_public \addto \aheadto ;
\_doc -----------------------------
\`\incr``<counter>` increases `<counter>` by one globally.
@@ -112,6 +116,15 @@
\_def\_tracingall{\_tracingonline=1 \_loggingall}
\_public \loggingall \tracingall ;
+ \_doc ------------------------
+ The `\optexversion` and `\fmtname` are defined in the `optex.ini` file.
+ Maybe, somebody will need a private version of these macros.
+ We add \`\_banner` used in `\everyjob` and in \~`\docgen`
+ \_cod ------------------------
+
+\_def\_banner {This is OpTeX (Olsak's Plain TeX), version <\_optexversion>}%
+\_private \optexversion \fmtname ;
+
\_doc ------------------------------
\`\_byehook` is used in the \^`\bye` macro.
Write a warning if the user did not load a Unicode Font.
@@ -129,6 +142,9 @@
\_endcode % -------------------------------------
+2022-11-22: \_banner definition moved here
+2022-11-18: \ahead introduced
+2022-10-29: \_fin introduced
2021-07-20: \_unresovedrefs removed from \_byehook
2021-07-18: \_byehook: checking `ref` file consistency added.
2021-05-16: \slet reimplemented (to allow \slet{foo}{undefined}).
diff --git a/macros/optex/base/bib-simple.opm b/macros/optex/base/bib-simple.opm
index fe1730ba67..3af9a1b927 100644
--- a/macros/optex/base/bib-simple.opm
+++ b/macros/optex/base/bib-simple.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_undefined {BIB style (simple) <2022-05-10>} % loaded on demand by \usebib
+\_codedecl \_undefined {BIB style (simple) <2022-10-10>} % loaded on demand by \usebib
\_ifx\_optexbibstyle\_undefined \_errmessage
{This file can be read by: \_string\usebib/? (simple) bibfiles command only}
@@ -36,6 +36,7 @@
}
\_def\_preurl{\_hfil\_break}
+\_def\_Inclause{In:~}
% Non-standard fieldnames:
@@ -56,9 +57,9 @@
\_setbibmark
}
\_sdef{_print:book}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
- \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}%
- \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
+ \_bprinta [edition] {*\_mtext{bib.edition}\ }{}%
\_bprinta [address] {*: }{\_bibwarning}%
\_bprinta [publisher] {*, }{\_bibwarning}%
\_bprinta [year] {*.\ }{\_bibwarning}%
@@ -66,21 +67,21 @@
\_bprintb [url] {\_preurl\_url{##1}. }{}%
}
\_sdef{_print:article}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
- \_bprinta [title] {*.\ }{\_bibwarning}%
- \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}%
- \_bprinta [year] {*, }{}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
+ \_bprinta [title] {*\:\ }{\_bibwarning}%
+ \_bprintb [journal] {{\_em##1}\:\ }{\_bibwarning}%
+ \_bprinta [year] {*\_bprintv[volume,number,pages]{,}{.} }{}%
\_bprinta [volume] {* }{}%
- \_bprinta [number] {(*), }{}%
+ \_bprinta [number] {(*)\_bprintv[pages]{,}{.} }{}%
\_bprinta [pages] {*.\ }{}%
\_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
}
\_sdef{_print:inbook}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
- \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}%
- In:~%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
+ \_Inclause
\_bprinta [!editor] {*,~eds.\ }{}%
- \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprintb [booktitle] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [address] {*: }{\_bibwarning}%
\_bprinta [publisher] {*, }{\_bibwarning}%
\_bprinta [year] {*.\ }{\_bibwarning}%
@@ -92,12 +93,12 @@
\_slet{_print:inproceedings}{_print:inbook}
\_sdef{_print:incolection}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
- \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [crossreff] {In~\_cite[*]. }{%
\_bprinta [booktitle] {*. }{\_bibwarning}%
\_bprinta [!editor] {*,~eds.\ }{\_bibwarning}%
- \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}%
+ \_bprinta [edition] {*\_mtext{bib.edition}\ }{\_bibwarning}%
\_bprinta [address] {*: }{\_bibwarning}%
\_bprinta [publisher] {*, }{\_bibwarning}%
\_bprinta [year] {*.\ }{\_bibwarning}%
@@ -105,9 +106,9 @@
\_bprintb [url] {\_preurl\_url{####1}. }{}}%
}
\_sdef{_print:conference}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
- \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}%
+ \_bprinta [edition] {*\_mtext{bib.edition}\ }{}%
\_bprinta [address] {*: }{\_bibwarning}%
\_bprinta [publisher] {*, }{\_bibwarning}%
\_bprinta [year] {*.\ }{\_bibwarning}%
@@ -115,7 +116,7 @@
\_bprintb [url] {\_preurl\_url{##1}. }{}%
}
\_sdef{_print:thesis}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [type] {*,\ }{\_bibwarning}%
\_bprinta [school] {*.\ }{}%
@@ -124,31 +125,31 @@
\_bprintb [url] {\_preurl\_url{##1}. }{}%
}
\_sdef{_print:proceedings}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [publisher] {*.\ }{%
\_bprinta [organization] {*.\ }{\_bibwarning}}%
}
\_sdef{_print:techreport}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_mtext{bib.techreport}.
\_bprinta [institution] {*.\ }{}%
}
\_sdef{_print:booklet}{%
- \_bprinta [!author] {*\:\ }{\_bibwarning}%
+ \_bprinta [!author] {*.\ }{\_bibwarning}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [howpublished] {*.\ }{\_bibwarning}%
}
\_sdef{_print:manual}{%
- \_bprinta [!author] {*\:\ }{}%
+ \_bprinta [!author] {*.\ }{}%
\_bprintb [title] {{\_em##1}\:\ }{\_bibwarning}%
\_bprinta [year] {*.\ }{}%
\_bprinta [institution] {*.\ }{}%
\_bprintb [url] {\_preurl\_url{##1}. }{}%
}
\_sdef{_print:misc}{%
- \_bprinta [!author] {*\:\ }{}%
+ \_bprinta [!author] {*.\ }{}%
\_bprintb [title] {{\_em##1}\:\ }{}%
\_bprinta [howpublished] {*.\ }{}%
\_bprinta [institution] {*.\ }{}%
diff --git a/macros/optex/base/cite-bib.opm b/macros/optex/base/cite-bib.opm
index adef0eaef8..9dc32a2632 100644
--- a/macros/optex/base/cite-bib.opm
+++ b/macros/optex/base/cite-bib.opm
@@ -232,7 +232,7 @@
\_cod -----------------------------
\_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}%
- \_ea\_tmp\_romannumeral-`\.} % ignore optional space
+ \_nospaceafter\_tmp} % ignore optional space
\_def\_bibA[#1]=#2{\_bibmark={#2}\_bibB[#1]}
\_def\_bibB[#1]{\_par \_bibskip
\_bibgl\_advance\_bibnum by1
diff --git a/macros/optex/base/doc.opm b/macros/optex/base/doc.opm
index bde1dcc848..dc5d037e72 100644
--- a/macros/optex/base/doc.opm
+++ b/macros/optex/base/doc.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \printdoc {Macros for documentation printing <2022-07-01>} % loaded on demand by \load[doc]
+\_codedecl \printdoc {Macros for documentation printing <2022-11-21>} % loaded on demand by \load[doc]
\_doc -----------------------------
General decalarations.
@@ -11,8 +11,10 @@
\_let \mlinkcolor=\Red % main doc. points
\_let \ulinkcolor=\Blue % user doc. points
\_let \fnamecolor=\Brown % file names in listing headers
-\_def \bgverbcolor {\_setcmykcolor{0 0 .3 .03}} % background for listings
-\_hyperlinks \Green \Green
+\_def \bgverbcolor {\_setcmykcolor{0 0 .3 .03}} % background for listings
+\_def \outlinkcolor {\_setcmykcolor{1 0 1 .2}} % green for outerlinks
+\_def \inlinkcolor {\_setcmykcolor{0 1 0 .1}} % magenta for internal links
+\_hyperlinks \inlinkcolor \outlinkcolor
\_enlang
\_enquotes
@@ -39,7 +41,7 @@
\_doc -----------------------------
The listing mode is implemented here. The \`\maxlines`
is maximal lines of code printed in the listing mode.
- The \`\_catcodedot` sets dot as letter in listngs (for package
+ The \code{\\catcode`\\.=11} sets dot as letter in listngs (for package
documentation where `\.foo` sequeces exist).
\_cod -----------------------------
@@ -52,7 +54,7 @@
\_typosize[8/10]
\_let\_printverbline=\_printcodeline
\_ttline=\_inputlineno
- \_setverb \_catcodedot
+ \_setverb \_catcode`\.=11
\_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
\_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt
\_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}%
@@ -74,7 +76,6 @@
\_edef\_Doc{\_asp\_asp\_bslash _doc}
\_bgroup \_lccode`~=`\^^I \_lowercase{\_egroup\_edef\_Doctab{\_noexpand~\_bslash _doc}}
\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode}
-\_def\_catcodedot{\_catcode`\.=11 }
\_doc -----------------------------
The scanner of the control sequences in the listing mode replaces all
@@ -101,16 +102,16 @@
\_def\_processinput{%
\_let\_start=\_relax
\_ea\_replstring\_ea\_tmpb\_ea{\_aspace^^J}{^^J}
- \_addto\_tmpb{\_end}%
+ \_addto\_tmpb{\_fin}%
\_isinlist\_tmpb{\_start^^J}\_iftrue \_advance\_ttline by1\_fi
\_replstring\_tmpb{\_start^^J}{\_start}%
\_replstring\_tmpb{\_start}{}%
- \_replstring\_tmpb{^^J\_end}{\_end}%
- \_replstring\_tmpb{^^J\_end}{}%
- \_replstring\_tmpb{\_end}{}%
+ \_replstring\_tmpb{^^J\_fin}{\_fin}%
+ \_replstring\_tmpb{^^J\_fin}{}%
+ \_replstring\_tmpb{\_fin}{}%
\_ea\_prepareverbdata\_ea\_tmpb\_ea{\_tmpb^^J}%
\_replthis{\_csstring\\}{\_noexpand\_makecs}%
- \_ea\_printverb \_tmpb\_end
+ \_ea\_printverb \_tmpb\_fin
\_par
\_endgroup \_ttskip
\_isnextchar\_par{}{\_noindent}%
@@ -145,7 +146,7 @@
}
\_everytt={\_let\_printverblinenum=\_relax}
-\_long\_def\_endverbprinting#1\_end#2\_end{\_fi\_fi \_global\_maxlines=100000
+\_long\_def\_endverbprinting#1\_fin#2\_fin{\_fi\_fi \_global\_maxlines=100000
\_noindent\_typosize[8/]\_dots etc. (see {\_tt\fnamecolor\docfile})}
\_doc -----------------------------
@@ -206,10 +207,9 @@
catcodes using the `\_afteroad` macro.
\_cod -----------------------------
-\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 \_catcode`\.=11
- \_wlog {doc.opm: catcodes of < and ` activated, catcode of . is letter.}%
+\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13
+ \_wlog {doc.opm: catcodes of < and ` activated.}%
}
-\_catcode`.=11
\_doc -----------------------------
The \code{<something>} will be print as <something>.
@@ -219,7 +219,7 @@
\_catcode`\<=13
\_def<#1>{$\langle\hbox{\it#1\/}\rangle$}
-\_everyintt{\_catcode`\<=13 }
+\_everyintt{\_catcode`\<=13 \_catcode`\.=11 }
\_doc -----------------------------
Main documentation points and hyperlinks to/from it.
@@ -357,6 +357,8 @@ have the same meaning: `\optexdoclink` in this example. And
\endinput
+2022-11-21 magenta color for internal links instead green.
+2022-11-13 \catcode`.=11: only local settings
2022-07-01 \_printii improved, colors declaration part added.
2021-05-15 \_endinput shifted after \_processinput when \_endcode is scanned.
2021-05-14 \_catcodedot, \_Doctab introduced.
diff --git a/macros/optex/base/f-heros.opm b/macros/optex/base/f-heros.opm
index 7848b7f9d2..2531573ca4 100644
--- a/macros/optex/base/f-heros.opm
+++ b/macros/optex/base/f-heros.opm
@@ -21,11 +21,8 @@ Modifiers:^^J
\_ifmathloading
\_loadmath {[FiraMath-Regular]}
- \_addto\_normalmath{\_loadumathfamily 5 {xitsmath-regular}{} }
- \_addto\_boldmath {\_loadumathfamily 5 {xitsmath-bold}{} }
- \_addto\_frak{\_fam5 }\_addto\_cal{\_fam5 } \_public \frak \cal ;
- \_normalmath
- \_wterm{MATH-FONT(5): "[XITSMath-Regular/Bold]" -- used for \_string\cal, \_string\frak}
+ \_addUmathfont \_xits {[XITSMath-Regular]}{} {[XITSMath-Bold]}{} {}
+ \_addto\_frak{\_fam\_xits}\_addto\_cal{\_fam\_xits} \_public \frak \cal ;
% \bf, \bi from FiraMath:
\_let\_bsansvariables=\_bfvariables
\_let\_bsansGreek=\_bfGreek
@@ -34,14 +31,8 @@ Modifiers:^^J
\_let\_bisansvariables=\_bivariables
\_let\_bisansgreek=\_bigreek
% \_resetmathchars <fam-number> <list of \Umathchardef csnames> ;
- \_def\_resetmathchars #1{\_chardef\_mafam=#1\_relax \_xargs \_resetmathcharX}
- \_def\_resetmathcharX#1{\_ea\_resetmathcharY
- \_directlua{tex.print(string.format("\_pcent08X", \_the#1))}#1}
- \_def\_resetmathcharY#1#2#3#4#5#6#7#8#9{%
- \_Umathchardef #9\_numexpr"#3/2\_relax \_mafam "#4#5#6#7#8
- \_Umathcode "#4#5#6#7#8=\_numexpr"#3/2\_relax \_mafam "#4#5#6#7#8 }
- \_resetmathchars 5 \bigtriangleup \bigblacktriangleup \blacktriangle
- \vartriangle \smallblacktriangleright ; % ... etc. you can add more
+ \_mathchars \_xits {\bigtriangleup \bigblacktriangleup \blacktriangle
+ \vartriangle \smallblacktriangleright} % ... etc. you can add more
\_fi
\_endcode
diff --git a/macros/optex/base/f-iwona.opm b/macros/optex/base/f-iwona.opm
new file mode 100644
index 0000000000..702ac6a06a
--- /dev/null
+++ b/macros/optex/base/f-iwona.opm
@@ -0,0 +1,26 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Iwona] \Iwona {Sans serif typeface derived from Kurier}
+ {\caps \cond \light \medium \bolder} {\rm \bf \it \bi} {}
+ {[Iwona-Regular]}
+ {\_def\_fontnamegen{[Iwona\_condV\_weightV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \cond ...... condensed variants^^J
+ \light ..... light (only \rm \it)^^J
+ \medium .... medium (only \rm \it)^^J
+ \bolder .... heavy (only \rm \it)
+}}
+
+\_moddef \resetmod {\_fsetV caps={},cond={},weight={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \nocaps {\_fsetV caps={} }
+\_moddef \cond {\_fsetV cond=Cond }
+\_moddef \light {\_fsetV weight=Light \_fvars Regular . Italic . }
+\_moddef \medium {\_fsetV weight=Medium \_fvars Regular . Italic . }
+\_moddef \bolder {\_fsetV weight=Heavy \_fvars Regular . Italic . }
+\_moddef \nocond {\_fsetV cond={} }
+
+\_initfontfamily % new font family must be initialized
diff --git a/macros/optex/base/f-kurier.opm b/macros/optex/base/f-kurier.opm
new file mode 100644
index 0000000000..ca1a6e381e
--- /dev/null
+++ b/macros/optex/base/f-kurier.opm
@@ -0,0 +1,26 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Kurier] \Kurier {Two element sans serif typeface}
+ {\caps \cond \light \medium \bolder} {\rm \bf \it \bi} {}
+ {[Kurier-Regular]}
+ {\_def\_fontnamegen{[Kurier\_condV\_weightV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \cond ...... condensed variants^^J
+ \light ..... light (only \rm \it)^^J
+ \medium .... medium (only \rm \it)^^J
+ \bolder .... heavy (only \rm \it)
+}}
+
+\_moddef \resetmod {\_fsetV caps={},cond={},weight={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \nocaps {\_fsetV caps={} }
+\_moddef \cond {\_fsetV cond=Cond }
+\_moddef \light {\_fsetV weight=Light \_fvars Regular . Italic . }
+\_moddef \medium {\_fsetV weight=Medium \_fvars Regular . Italic . }
+\_moddef \bolder {\_fsetV weight=Heavy \_fvars Regular . Italic . }
+\_moddef \nocond {\_fsetV cond={} }
+
+\_initfontfamily % new font family must be initialized
diff --git a/macros/optex/base/f-lato.opm b/macros/optex/base/f-lato.opm
new file mode 100644
index 0000000000..bedb33a8a2
--- /dev/null
+++ b/macros/optex/base/f-lato.opm
@@ -0,0 +1,34 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Lato] \Lato {Geometric grotesk, many weights}
+ {\hair \thin \light \normal \book \bolder} {} {}
+ {[Lato-Regular]}
+ {\_def\_fontnamegen {[Lato-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier: \caps .... Old digits only (caps not provided)^^J%
+Modifiers (face weight):^^J
+ \hair ...... \rm, \it = Hair, \bf, \bi = Normal^^J
+ \thin ...... \rm, \it = Thin, \bf, \bi = Medium^^J
+ \light ..... \rm, \it = Light, \bf, \bi = Semibold^^J
+ \normal .... \rm, \it = Normal, \bf, \bi = Bold^^J
+ \book ...... \rm, \it = Medium, \bf, \bi = Heavy^^J
+ \bolder .... \rm, \it = Semibold, \bf, \bi = Black^^J%
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \hair {\_fvars Hairline Regular HairlineItalic Italic }
+\_moddef \thin {\_fvars Thin Medium ThinItalic MediumItalic }
+\_moddef \light {\_fvars Light Semibold LightItalic SemiboldItalic }
+\_moddef \normal {\_fvars Regular Bold Italic BoldItalic }
+\_moddef \book {\_fvars Medium Heavy MediumItalic HeavyItalic }
+\_moddef \bolder {\_fvars Semibold Black SemiboldItalic BlackItalic }
+
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \nocaps {\_fsetV caps={} }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
diff --git a/macros/optex/base/fams-ini.opm b/macros/optex/base/fams-ini.opm
index ad3ace24f3..505887f46e 100644
--- a/macros/optex/base/fams-ini.opm
+++ b/macros/optex/base/fams-ini.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-% Version <2020-02-28>. Loaded in format and secondly on demand by \fontfam[catalog]
+% Version <2022-10-18>. Loaded in format and secondly on demand by \fontfam[catalog]
\_famtext {Special name for printing a catalog :}
@@ -169,6 +169,23 @@
\caps, \caps\cond: {\rm\bf\it\bi} \caps\ttset: {\rm\bf}
}
+\_famfrom {Malgorzata Budyta, Janusz Marian Nowacki}
+\_faminfo [Kurier] {Two element sans serif typeface} {f-kurier}
+ { -,\cond,\caps,\caps\cond: {\rm\it\bf\bi}
+ \light,\light\cond,\medium,\medium\cond,\bolder,\bolder\cond: {\rm\it}
+ }
+\_faminfo [Iwona] {Sans serif typeface derived from Kurier} {f-iwona}
+ { -,\cond,\caps,\caps\cond: {\rm\it\bf\bi}
+ \light,\light\cond,\medium,\medium\cond,\bolder,\bolder\cond: {\rm\it}
+ }
+
+\_famfrom {tyPoland Lukasz Dziedzic}
+\_faminfo [Lato] {Geometric grotesk, many weights} {f-lato}
+ { \hair: {\rm\it} \thin: {\rm\it} \light: {\rm\it} -: {\rm\it}
+ \book: {\rm\it} \bolder: {\rm\it} -: {\bf\bi}
+ \book: {\bf\bi} \bolder: {\bf\bi}
+ }
+
\_famfrom {Julieta Ulanovsky, http://www.zkysky.com.ar}
\_faminfo [Montserrat] {Inspired from old posters in Montserat in Buenos Aires} {f-montserrat}
{ -,\caps,\alter: {\rm\bf\it\bi} \xlight,\elight,\light,-,\medium,\semibold: {\rm\it}
diff --git a/macros/optex/base/fnotes.opm b/macros/optex/base/fnotes.opm
index 661d54c33f..8f56ba1aea 100644
--- a/macros/optex/base/fnotes.opm
+++ b/macros/optex/base/fnotes.opm
@@ -132,8 +132,8 @@
as a box shifted down by `\parskip` and with `\vskip-\baselineskip` followed.
\_cod -----------------------------
-\_def\_mnote #1#{\_ifx^#1^\_else \_mnoteC#1\_end \_fi \_mnoteD}
-\_def\_mnoteC up#1\_end{\_mnoteskip=#1\_relax} % \mnote up<dimen> {<text>} syntax
+\_def\_mnote #1#{\_ifx^#1^\_else \_mnoteC#1\_fin \_fi \_mnoteD}
+\_def\_mnoteC up#1\_fin{\_mnoteskip=#1\_relax} % \mnote up<dimen> {<text>} syntax
\_long\_def\_mnoteD#1{%
\_ifvmode \_vskip\_parskip{\_mnoteA{#1}}\_nobreak\_vskip-\_baselineskip\_vskip-\_parskip \_else
\_lower\_dp\_strutbox\_hbox{}\_vadjust{\_kern-\_dp\_strutbox \_mnoteA{#1}\_kern\_dp\_strutbox}%
diff --git a/macros/optex/base/fonts-catalog.opm b/macros/optex/base/fonts-catalog.opm
index cdd77359f1..347c94b145 100644
--- a/macros/optex/base/fonts-catalog.opm
+++ b/macros/optex/base/fonts-catalog.opm
@@ -47,7 +47,7 @@
}
\_def\_dosamples #1:#2{\_ifx^#2^\_else
\_def\_printvars{#2}%
- \_ea\_dosamplesA\_romannumeral-`\.#1,,%
+ \_nospaceafter\_dosamplesA #1,,%
\_ea\_dosamples\_fi
}
\_def\_dosamplesA#1,{%
diff --git a/macros/optex/base/fonts-resize.opm b/macros/optex/base/fonts-resize.opm
index e49303f377..34885d44bd 100644
--- a/macros/optex/base/fonts-resize.opm
+++ b/macros/optex/base/fonts-resize.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \setfontsize {Font resizing macros <2022-02-22>} % preloaded in format
+\_codedecl \setfontsize {Font resizing macros <2022-11-08>} % preloaded in format
\_doc -----------------------------
\`\initunifonts` macro extends \LuaTeX's font capabilities,
@@ -10,19 +10,22 @@
from \LaTeX's `luatexbase` namespace, we provide our own replacements.
\^`\initunifonts` sets itself to relax because we don't want to do
this work twice.
+ \`\ufont` is a shortcut of \^`\initunifonts`~`\font`.
\_cod -----------------------------
-\_def\_initunifonts {%
+\_protected\_def \_initunifonts {%
\_directlua{%
require('luaotfload-main')
luaotfload.main()
- optex_hook_into_luaotfload()
+ optex.hook_into_luaotfload()
}%
\_glet \_fmodtt=\_unifmodtt % use \_ttunifont for \tt
\_glet \_initunifonts=\_relax % we need not to do this work twice
\_glet \initunifonts=\_relax
}
-\_public \initunifonts ;
+\_protected\_def \_ufont {\_initunifonts \_font}
+
+\_public \initunifonts \ufont ;
\_doc -----------------------------
The \`\setfontsize` `{<size spec>}` saves the `<size spec>` to the \`\_sizespec` macro.
@@ -74,7 +77,8 @@
Note, that the `\_xfontname` output is converted due to optical size data using `\_optfn`.
\_cod -----------------------------
-\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else \_font #1{\_optfn{\_xfontname#2}}\_fi}
+\_protected\_def \_fontlet #1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else
+ \_ea\_font \_ea#1\_expanded{{\_optfn{\_xfontname#2}}}\_fi}
\_public \xfontname \fontlet ;
\_doc -----------------------------
@@ -83,17 +87,21 @@
It changes the current font at the given <size spec>.
\nl
\`\resizethefont` is implemented by \^`\newcurrfontsize` using data from
- the \^`\_sizespec` macro.
+ the \^`\_sizespec` macro.\nl
+ \`\sfont` has the same syntax like `\font` primitive, but declares a
+ macro which selects the font and sets its size properly dependent on the
+ current size.
\_cod -----------------------------
-\_def \_newcurrfontsize #1{% \newcurrfontsize{at25pt}
- \_ea\_def \_ea\_tmp \_ea{\_csname \_ea\_csstring \_the\_font \_endcsname}%
- \_ea\_fontlet \_tmp \_font #1\_relax
- \_ea\_fontloaded \_tmp
- \_tmp
+% \newcurrfontsize{at25pt}
+\_def \_newcurrfontsize {\_ea\_newcurrfontsizeA \_csname \_ea\_csstring \_the\_font \_endcsname}
+\_def \_newcurrfontsizeA #1#2{\_fontlet #1\_font #2\_relax \_fontloaded#1#1}
+\_protected\_def \_resizethefont {\_newcurrfontsize\_sizespec}
+\_protected\_def \_sfont #1{%
+ \_protected\_edef #1{\_csname _sfont:\_csstring#1\_endcsname \_resizethefont}%
+ \_initunifonts \_ea\_font \_csname _sfont:\_csstring#1\_endcsname
}
-\_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec}
-\_public \newcurrfontsize \resizethefont ;
+\_public \newcurrfontsize \resizethefont \sfont ;
\_doc -----------------------------
The \`\_regtfm` `<font id> <optical size data>`
@@ -169,7 +177,8 @@ The <size spec> can be empty or `at<dimen>` or `scaled<scale factor>`. The
\OpTeX/ starts with `\font` primitive which is able to read only `tfm` files.
i.e.\ the `<font file name>.tfm` (and additional data for glyphs)
must be correctly installed in your system. If you want to load
-OpenType `otf` or `ttf` font files, use the declarator \^`\initunifonts`.
+OpenType `otf` or `ttf` font files, use the declarator \^`\initunifonts`
+before first `\font` primitive.
This command adds additional features to the `\font` primitive which
gives the extended syntax:
\begtt \catcode`\<=13
@@ -193,8 +202,9 @@ The original syntax for `tfm` files is also available. Example:
primitive from `luaotfload` package. More information is available
in the `luaotfload-latex.pdf` file.
-Note, that \^`\fontfam` does (among other things) \^`\initunifonts`
-internally. You need not to specify it if \^`\fontfam` is used.
+You can use \^`\ufont` macro which runs \^`\initunifonts` followed by `\font`
+primitive. And \^`\fontfam` does (among other things) \^`\initunifonts`
+too. You need not to specify \^`\initunifonts` if \^`\fontfam` or \^`\ufont` is used.
It seems that you must decide about final size of the font before it is
loaded by the `\font` primitive. It is not exactly true; \OpTeX/ offers
@@ -245,8 +255,7 @@ The \^`\resizethefont` works with arbitrary current font, for example with the
font loaded directly by `\font` primitive. For example:
\begtt
-\initunifonts
-\font\tencrimson=[Crimson-Roman]:+onum % font Crimson-Regular at 10 pt is loaded
+\ufont\tencrimson=[Crimson-Roman]:+onum % font Crimson-Regular at 10 pt is loaded
\def\crimson{\tencrimson\resizethefont} % \crimson uses the font size on demand
\crimson The 10 pt text is here.
@@ -258,6 +267,26 @@ behaves like variant selector in the Font Selection System (section~\ref[fontsys
It takes only information about size from the font context, but it is
sufficient. You can use it in titles, footnotes, etc. The font size
depending on surrounding size is automatically selected.
+There is a shortcut \^`\sfont` with the same syntax like `\font` primitive,
+it declares a macro which selects the font and does resizing depending on
+the current size. So, the example above can be realized by
+`\sfont\crimson=[Crimson-Roman]:+onum`.
+
+\secc The `\font`-like commands summary
+
+\begitems
+* `\font` is \TeX/ primitive. When \OpTeX/ starts, then it accepts only
+ classical \TeX/ syntax and doesn't allow to load Unicode fonts.
+ Once \^`\initunifonts` (or \^`\fontfam`) is used, the `\font` primitive is
+ re-initialized: now it accepts extended syntax and it is able to load Unicode
+ OpenType fonts.
+* \^`\ufont` is a shortcut of `\initunifonts \font`. I.e.\ it behaves like
+ `\font` and accepts extended syntax immediatelly.
+* \^`\sfont` has syntax like extended `\font`. It declares a macro which
+ selects the given font and resizes it to the current size (given by
+ \^`\setfontsize`). In various part of document (text, footnotes, titles), the
+ size of this font is selected by the declared macro properly.
+\enditems
\secc[fontlet] The \code{\\fontlet} declarator
@@ -288,13 +317,13 @@ able to choose right file if various optical sizes and corresponding file
names are declared for the font by \^`\_regtfm` or \^`\_regoptsizes` command.
The command \^`\setfontsize` sets the internal reuirements for
optical size if the parameter is in the format `at<dimen>` or `mag<factor>`.
-Then the command \^`\resizethefont` or variant selectors try to choose
+Then the command \^`\resizethefont` or \^`\fontlet` or variant selectors try to choose
the font suitable for the required optical size. For example
\begtt
\fontfam[lm]
The text is printed in font [lmroman10-regular] at 10 pt.
\setfontsize{at13pt}\rm
- Now in the text is printed in [lmroman12-regular] at 13 pt.
+ Now, the text is printed in [lmroman12-regular] at 13 pt.
\endtt
See also section~\ref[optsizes].
@@ -322,6 +351,9 @@ Luaotfload documentation for more information.
\_endinput
+2022-11-08 \sfont introduced, \protected: \initunifont, \ufont, \fontlet
+2022-11-07 \fontlet \a\a: bug fixed
+2022-10-14 \ufont introduced
2022-02-22 Font Selection System reimplemented, \fontsel introduced
2021-05-02 better concept of doc, moving parts to fonts-select
2021-04-17 \_fontloaded, \_newfontloaded introduced
diff --git a/macros/optex/base/fonts-select.opm b/macros/optex/base/fonts-select.opm
index 33d331150b..7e00c9baea 100644
--- a/macros/optex/base/fonts-select.opm
+++ b/macros/optex/base/fonts-select.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \fontfam {Fonts selection system <2022-02-22>} % preloaded in format
+\_codedecl \fontfam {Fonts selection system <2022-12-01>} % preloaded in format
\_doc -----------------------------
The main principle of the Font Selection System is: run one or more
@@ -161,7 +161,7 @@
runs <what> only if the `\_<key>V` is defined as `<value-a>` or
`<value-b>` or ... or `<value-z>`.
\nl
- \`\_prepcommalist` `ab,{},cd,\_end,` expands to `ab,,cd,` (auxiliary macro
+ \`\_prepcommalist` `ab,{},cd,\_fin,` expands to `ab,,cd,` (auxiliary macro
used in `\_onlyif`).\nl
\`\_ffonum` is a shortcut for oldstyle digits font features used in
font family files. You can do `\let\_ffonum=\ignoreit` if you don't want
@@ -184,10 +184,10 @@
\_ifx,#1\_else\_sdef{_#1V}{#2}\_ea\_ea\_ea\_fsetVa\_fi\_fi
}
\_def \_onlyif #1=#2:#3{%
- \_edef\_act{\_noexpand\_isinlist{,\_prepcommalist #2,\_end,}{,\_cs{_#1V},}}\_act
+ \_edef\_act{\_noexpand\_isinlist{,\_prepcommalist #2,\_fin,}{,\_cs{_#1V},}}\_act
\_iftrue #3\_fi
}
-\_def\_prepcommalist#1,{\_ifx\_end#1\_empty\_else #1,\_ea\_prepcommalist\_fi}
+\_def\_prepcommalist#1,{\_ifx\_fin#1\_empty\_else #1,\_ea\_prepcommalist\_fi}
\_def\_ffonum {+onum;+pnum}
\_doc -----------------------------
@@ -258,7 +258,7 @@
They have precedence when \^`\fontsel` constructs the <font switch> name.
\_cod -----------------------------
-\_def\_fontdef #1#2{\_begingroup
+\_protected\_def \_fontdef #1#2{\_begingroup
\_edef\_xfamv{\_csstring#1}\_let\_ttfamv\_xfamv #2%
\_ea\_endgroup\_ea \_let\_ea #1\_the\_font
}
@@ -278,7 +278,7 @@
the same meaning.
\_cod -----------------------------
-\_def\_famvardef#1#2{%
+\_protected\_def \_famvardef #1#2{%
\_sdef{_f:\_currfamily:\_csstring#1}%
{{\_edef\_xfamv{\_csstring#1}\_let\_ttfamv\_xfamv #2\_ea}\_the\_font \_def\_currvar{#1}}%
\_protected\_edef\_tmpa {%
@@ -307,7 +307,7 @@
terminal and to the log file.
\_cod -----------------------------
-\_def\_fontfam[#1]{%
+\_protected\_def \_fontfam [#1]{%
\_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}%
\_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}%
\_else
@@ -349,8 +349,9 @@
\`\_famtext` does nothing or prints the text on the terminal.
\nl
\`\_faminfo` `[<Family Name>] {<comments>} {<file-name>} {<mod-plus-vars>}`
- does\nl `\_def \_famf:<familyname> {<file-name>}` or prints information on
- the terminal.
+ does\nl `\_def \_famf:<familyname> {<file-name>}` (only if <file-name> differs
+ from `f-<familyname>`) or prints information on the terminal. The
+ <mod-plus-vars> data are used when printing the font catalog.
\nl
\`\_famalias` `[<Family Alias>]` does `\def \_famf:<familyalias> {<file-name>}`
where `<file-name>` is stored from the previous `\_faminfo` command. Or
@@ -364,8 +365,8 @@
\_def\_famtext #1{}
\_def\_faminfo [#1]#2#3#4{%
\_lowercase{\_edef\_tmp{\_ea\_removespaces #1 {} }}%
- \_sdef{_famf:\_tmp}{#3}%
- \_def\_famfile{#3}%
+ \_edef\_tmpa{f-\_tmp}\_def\_famfile{#3}%
+ \_unless\_ifx\_tmpa\_famfile \_sdef{_famf:\_tmp}{#3}\_fi
}
\_def\_famalias [#1]{%
\_lowercase{\_edef\_tmpa{\_ea\_removespaces #1 {} }}%
@@ -898,6 +899,8 @@ with Unicode fonts loaded by \^`\fontfam`.
\endinput
+2022-12-01 \faminfo saves f-<filename> to the format only when needed
+2022-11-08 \protected: \fontdef, \famvardef, \fontfam
2022-02-22 Font Selection System reimplemented, \fontsel introduced
2021-09-24 \_unichars used in \initunifonts
2021-07-16 \initunifonts: optex_hook_into_luaotfload added.
diff --git a/macros/optex/base/graphics.opm b/macros/optex/base/graphics.opm
index b54b52c926..77e78cef23 100644
--- a/macros/optex/base/graphics.opm
+++ b/macros/optex/base/graphics.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \inspic {Graphics <2022-03-05>} % preloaded in format
+\_codedecl \inspic {Graphics <2022-11-05>} % preloaded in format
\_doc -----------------------------
\`\inspic` accepts old syntax `\inspic <filename><space>`
@@ -47,8 +47,8 @@
\_newtoks\_inkdefs \_inkdefs={%
\_def\makeatletter#1\makeatother{}%
- \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{\_the\_tmptoks}\_hss}%
- \_def\_inkscanpage#1page=#2,#3\_end{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}%
+ \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_fin \_inspic{\_the\_tmptoks}\_hss}%
+ \_def\_inkscanpage#1page=#2,#3\_fin{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}%
\_def\put(#1,#2)#3{\_nointerlineskip\_vbox to\_zo{\_vss\_hbox to\_zo{\_kern#1\_picwidth
\_pdfsave\_hbox to\_zo{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}%
\_def\begin#1{\_csname _begin#1\_endcsname}%
@@ -169,7 +169,7 @@
}
\_def\_puttext{\_ea\_ea\_ea\_puttextA\_scantwodimens}
-\_def\_puttextA#1#2#3{{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}}
+\_long\_def\_puttextA#1#2#3{{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}}
\_def\_puttextB{%
\_ifvmode
\_ifdim\_prevdepth>\_zo \_vskip-\_prevdepth \_relax \_fi
@@ -383,7 +383,7 @@
\_ea \_shadowlayer \_fi
}%
\_pdfliteral{q /op1 gs 0 g 1 0 0 1 \_shadowmoveto\_space cm
- \_ifx#1\_circlet 1 0 0 1 \_expr{\_bp{.5\_wd0}} \_expr{\_bp{(\_ht0-\_dp0)/2}} cm
+ \_ifx#1\_circlet 1 0 0 1 \_bp{.5\_wd0} \_bp{(\_ht0-\_dp0)/2} cm
\_else 1 0 0 1 -\_shadowb\_space -\_shadowb\_space cm \_fi
\_shadowlayer Q}
}}
@@ -447,6 +447,8 @@ the \^`\transformbox{<transformation>}{\copy\mypic}`.
\_endinput
+2022-11-05 \_doshadow: renduntant \_expr from \_expr{\_bp{...}} removed
+2022-10-18 \_puttextA defined \long, bug fixed
2022-03-05: \_addextgstate, \pageresources, \addpageresources added
2022-03-03: \_coc introduced
2021-07-16: \inoval, \incircle are more simple, using attribitecolor features
diff --git a/macros/optex/base/hi-syntax.opm b/macros/optex/base/hi-syntax.opm
index 586cfed69e..c708be0563 100644
--- a/macros/optex/base/hi-syntax.opm
+++ b/macros/optex/base/hi-syntax.opm
@@ -23,15 +23,15 @@
\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa}
\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=replacement
\_def\_replfrom##1#1##2{\_addto\_tmpb{##1}%
- \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}%
+ \_ifx\_fin##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}%
\_def\_replto##1#2##2{%
- \_ifx\_end##2\_afterfi{\_replfin##1}\_else
+ \_ifx\_fin##2\_afterfi{\_replfin##1}\_else
\_addto\_tmpb{#3}%
\_afterfi{\_replfrom##2}\_fi}%
- \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}%
- \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax
+ \_def\_replfin##1#1\_fin{\_addto\_tmpb{#3}\_replstop}%
+ \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_fin#2\_fin\_fin\_relax
}
-\_def\_replstop#1\_end\_relax{}
+\_def\_replstop#1\_fin\_relax{}
\_def\_finrepl{}
\_doc -----------------------------
@@ -55,12 +55,12 @@
The \`\_xscan` macro replaces occurrences of `\x` by `\z` in the post-processing
phase. The construct `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`.
- If `#3` is `\_end` then it signals that something wrong happens, the
+ If `#3` is `\_fin` then it signals that something wrong happens, the
`<from>` was not terminated by legal `<to>` when `\replfromto` did work.
We must to fix this by using the \`\_xscanR` macro.
\_cod -----------------------------
-\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi
+\_def\_xscan#1#2^^J#3{\_ifx\_fin#3 \_ea\_xscanR\_fi
\z{#1}{#2}%
\_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi}
\_def\_xscanR#1\_fi#2^{^^J}
@@ -86,8 +86,8 @@
\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{%
\_let\n=\_relax \_let\b=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax
- \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_end}%
- \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_end}{\_end}%
+ \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_fin}%
+ \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_fin}{\_fin}%
\_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax
\_hicomments % keeps comments declared by \commentchars
\_endlinechar=`\^^M
@@ -104,7 +104,7 @@
\_the\_hicolors % colors which have precedece
\_else\_opwarning{Syntax "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)}
\_fi\_fi
- \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}%
+ \_replthis{\_start\n^^J}{}\_replthis{^^J\_fin}{^^J}%
\_def\n{}\_def\b{}\_adef{ }{\_dsp}%
\_bgroup \_lccode`\~=`\ \_lowercase{\_egroup\_def\ {\_noexpand~}}%
\_def\w####1{####1}\_def\x####1####2{\_xscan{####1}####2^^J^}%
diff --git a/macros/optex/base/hyperlinks.opm b/macros/optex/base/hyperlinks.opm
index 4c2007cddb..7505436f16 100644
--- a/macros/optex/base/hyperlinks.opm
+++ b/macros/optex/base/hyperlinks.opm
@@ -136,10 +136,10 @@
\_replstring\_tmpb{[||]}{{gb|}}%
\_replstring\_tmpb{ }{{ }}%
\_replstring\_tmpb{://}{{://}}%
- \_ea\_ulink \_ea[\_ea{\_tmpa}] {\_urlfont \_ea\_urlA\_tmpb\_end}%
+ \_ea\_ulink \_ea[\_ea{\_tmpa}] {\_urlfont \_ea\_urlA\_tmpb\_fin}%
}}
-\_def\_urlA#1{\_ifx\_end#1\_else \_urlC{}{#1}\_fi}
-\_def\_urlB#1{\_ifx\_end#1\_else \_urlC{\_urlxskip}{#1}\_fi}
+\_def\_urlA#1{\_ifx\_fin#1\_else \_urlC{}{#1}\_fi}
+\_def\_urlB#1{\_ifx\_fin#1\_else \_urlC{\_urlxskip}{#1}\_fi}
\_def\_urlC#1#2{%
\_ifcsname _ur:#2\_endcsname \_lastnamedcs \_ea\_ea\_ea \_urlA
\_else #1#2\_ea\_ea\_ea \_urlB \_fi
diff --git a/macros/optex/base/if-macros.opm b/macros/optex/base/if-macros.opm
index 8f6082a27a..9113b5f8be 100644
--- a/macros/optex/base/if-macros.opm
+++ b/macros/optex/base/if-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \newif {Special if-macros, is-macros and loops <2022-05-04>} % preloaded in format
+\_codedecl \newif {Special if-macros, is-macros and loops <2022-12-02>} % preloaded in format
\_doc ----------------------------
\secc Classical \code{\\newif}
@@ -32,9 +32,12 @@
\_doc ----------------------------
\`\afterfi` `{<what to do>}<ignored>\fi` closes condition by `\fi` and processes
<what to do>. Usage:
- \begtt
- \if<something> \afterfi{<result is true>} \else \afterfi{<resut is false>} \fi
+ \begtt \catcode`<=13
+ \if<something> \afterfi{<result is true>} \else \afterfi{<result is false>} \fi
\endtt
+ Nested `\if..\afterfi{\if..\afterfi{...}\fi}\fi` are possible. Another approach is mentioned
+ in \ulink[http://petr.olsak.net/optex/optex-tricks.html\#fiinif]{OpTeX trick 0098}
+ which also solves the `\fi` in `\if` problem.
\_cod ----------------------------
\_long\_def \_afterfi#1#2\_fi{\_fi#1}
@@ -302,9 +305,63 @@
\_public \isnextchar ;
+ \_doc ----------------------------
+ \`\casesof` `<token> <list of cases>` implements something similar to
+ the `switch` command known from C language. It is expandable macro. The
+ <list of cases> is a list of arbitrary number of pairs in the format
+ `<token>`\,`{<what to do>}` which must be finalized by the pair
+ `\_finc {<what to do else>}`. The optional spaces after <token>s
+ and between listed cases are ignored. The usage of \^`\casesof` looks like:
+ \begtt \catcode`<=13
+ \casesof <token>
+ <token-1> {<what to do if token=token-1>}
+ <token-2> {<what to do if token=token-2>}
+ ...
+ <token-n> {<what to do if token=token-n>}
+ \_finc {<what to do in other cases>}
+ \endtt
+ The meaning of tokens are compared by `\ifx` primitive.
+ The parts `<what to do>` can be finalized by a macro which can read more
+ data from the input stream as its parameters.
+ \_cod ----------------------------
+
+\_long\_def \_casesof #1#2#3{\_ifx #2\_finc \_ea\_ignoresecond \_else \_ea\_usesecond \_fi
+ {#3}{\_ifx#1#2\_ea\_ignoresecond \_else \_ea\_usesecond \_fi {\_finc{#3}}{\_casesof#1}}%
+}
+\_long\_def \_finc #1#2\_finc#3{#1}
+
+\_public \casesof ;
+
+ \_doc -----------------------------
+ \`\xcasesof` `<list of pairs>` extends the features of the macro \^`\casesof`.
+ Each pair from the `<list of pairs>` is in the format
+ `{<if statement>}{<what to do>}`, only the last pair must have the different
+ format: `\_finc {<what to do else>}`. The `<if statement>` can be arbitrary
+ primitive `\if*` condition (optionally prefixed by `\unless`) and it must be closed
+ in its expansion. It means that `{\ifnum\mycount>0}` is bad, `{\ifnum\mycount>0 }`
+ is correct. Optional spaces between parameters are ignored. Example:
+ \begtt
+ \message {The \tmpnum has \xcasesof
+ {\ifnum\tmpnum>0 } {positive}
+ {\ifnum\tmpnum=0 } {equal to zero}
+ \_finc {negative} value}
+ \endtt
+ The \^`\xcasesof` macro works with principle: first true condition wins,
+ next conditions are not evaluated.
+ \_cod -----------------------------
+
+\_long\_def \_xcasesof #1{\_xcasesofA #1\_finc}
+\_long\_def \_xcasesofA #1#2\_finc #3{%
+ \_ifx #1\_finc \_ea\_ignoresecond\_else \_ea\_usesecond\_fi
+ {#3}{#1#2\_ea\_ignoresecond\_else \_ea\_usesecond\_fi {\_finc{#3}}{\_xcasesof}}%
+}
+\_public \xcasesof ;
\_endcode
+2022-12-02 \xcasesof: its first parameter is \long too.
+2022-11-29 renamed to \casesof, \xcasesof.
+2022-11-26 \casesby, \casesbyif introduced.
2022-05-04 \isinlist created expandable.
2022-03-30 \afterfi defined as \long.
2021-08-02 more robust \fornum: \fi moved by \afterfi
diff --git a/macros/optex/base/lang-data.opm b/macros/optex/base/lang-data.opm
index 6e11f8bd9a..e1b68e5dde 100644
--- a/macros/optex/base/lang-data.opm
+++ b/macros/optex/base/lang-data.opm
@@ -1,10 +1,10 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_langdata {Language dependent data <2022-06-28>} % only en, cs preloaded in format
+\_codedecl \_langdata {Language dependent data <2022-10-11>} % only en, cs preloaded in format
\_langdata en {English} % -----------------------------------------------
\_langw en Chapter Table Figure Subject
-\_langb en {, and } { et al.} { ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.}
+\_langb en {, and } { et al.} {\,ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.}
{Available from } {Available also from }
{Bachelor's Thesis} {Master's Thesis} {Ph.D. Thesis}
\_monthw en January February March April May June
@@ -19,10 +19,10 @@
\_langdata cs {Czech} % ------------------------------------------------
% Chapter Table Figure Subject
\_langw cs Kapitola Tabulka Obrázek Věc
-% {, and } { et al.} { ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.}
+% {, and } { et al.} {\,ed.} {cit.~} {Vol.~} {No.~} {pp.~} {~p.} {,~ed.} {,~eds.}
% {Available from } {Available also from }
% {Bachelor's Thesis} {Master's Thesis} {Ph.D. Thesis}
-\_langb cs { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři}
+\_langb cs { a } { a~kol.} {\,vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editoři}
{Dostupné na } {Dostupné též na }
{Bakalářská práce} {Diplomová práce} {Disertační práce}
% January February March April May June
@@ -31,6 +31,8 @@
července srpna září října listopadu prosince
\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year} % date format
\_quotationmarks cs {„“‚‘}
+\_preplangmore cs {\_frenchspacing \_postexhyphenchar=`\-
+ \_def\_langreset{\_postexhyphenchar=0 }}
\_let \_sortingdatacs = \_sortingdatalatin
\_let \_ignoredcharscs = \_ignoredcharsgeneric
@@ -101,7 +103,12 @@
\_langw hu Fejezet Táblázat Ábra Téma
\_quotationmarks hu {„”»«}
%todo
-\_let \_sortingdatahu = \_sortingdatalatin
+\_def \_sortingdatahu {%
+ /,{ },-,&,@,%
+ aAáÁ,bB,cC,dD,eEéÉ,fF,gG,hH,iIíÍ,jJ,kK,lL,mM,nN,oOóÓ,öÖőŐ,%
+ pP,qQ,rR,sS,tT,uUúÚ,üÜűŰ,vV,wW,xX,yY,zZ,^^Z,%
+ 0,1,2,3,4,5,6,7,8,9,'%
+}
\_let \_ignoredcharshu = \_ignoredcharsgeneric
\_def \_compoundcharshu {cs:c^^Z Cs:C^^Z CS:C^^Z
dzz:d^^Z^^Z Dzz:D^^Z^^Z DZZ:D^^Z^^Z dz:d^^Z Dz:D^^Z DZ:D^^Z
@@ -128,13 +135,15 @@
\_langdata sk {Slovak} % ------------------------------------------------
\_langw sk Kapitola Tabuľka Obrázok Vec
-\_langb sk { a } { a~kol.} { vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editori}
+\_langb sk { a } { a~kol.} {\,vyd.} {vid.~} {ročník~} {č.~} {s.~} {~s.} {,~editor} {,~editori}
{Dostupné na } {Dostupné tiež na }
{Bakalárska práca} {Diplomová práca} {Dizertačná práca}
\_monthw sk januára februára marca apríla mája júna
júla augusta septembra októbra novembra decembra
\_sdef{_mt:today:sk}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year} % date format
\_quotationmarks sk {„“‚‘}
+\_preplangmore sk {\_frenchspacing \_postexhyphenchar=`\-
+ \_def\_langreset{\_postexhyphenchar=0 }}
\_let \_sortingdatask = \_sortingdatalatin
\_let \_ignoredcharssk = \_ignoredcharsgeneric
@@ -150,6 +159,9 @@
\_endcode
+2022-10-11: \postexhyphenchar setting added to cs and sk languages
+2022-10-10: { ed.} changed to {\,ed.}
+2022-08-31: \_sortingdatahu corrected
2022-06-28: Spanish, Polish, French, Swedish, Hungarian sorting rules added
2022-06-28: German sorting rules added
2022-02-19: concept finalized, but data still far of completness
diff --git a/macros/optex/base/lang-decl.opm b/macros/optex/base/lang-decl.opm
index 3b9f9e727d..d6b562ed45 100644
--- a/macros/optex/base/lang-decl.opm
+++ b/macros/optex/base/lang-decl.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \langlist {Languages declaration <2022-02-19>} % preloaded in format
+\_codedecl \langlist {Languages declaration <2022-10-11>} % preloaded in format
\_doc -----------------------------
\`\_preplang` `<lang-id> <LongName> <lang-tag> <hyph-tag> <lr-hyph>`
@@ -163,13 +163,22 @@
\_cod -----------------------------
\_def\_preplangmore #1 #2{\_ea \_gdef \_csname _langspecific:#1\_endcsname{#2}}
-\_def\_langdefault{\_frenchspacing}
\_preplangmore en {\_nonfrenchspacing}
\_preplangmore enus {\_nonfrenchspacing}
\_def\_langdefault {\_frenchspacing}
\_doc -----------------------------
+ The \`\_langreset` is processed before macros declared by \^`\_preplangmore`
+ or before \^`\_langdefault`. If you set something for
+ your language by \^`\_preplangmore` then use `\def\_langreset{<settings>}`
+ in this code too in order to return default values for all other languages.
+ See `cs` part of `lang-data.opm` file for an example.
+ \_cod -----------------------------
+
+\_def\_langreset {}
+
+ \_doc -----------------------------
The default `\language=0` is US-English with original hyphenation patterns
preloaded in the format (see the end of section~\ref[plain]).
We define `\_enlang` and \`\enlang` switches.
@@ -236,7 +245,7 @@
\_cod -----------------------------
\_def\_uselang#1#2#3#4{\_language=#2\_lefthyphenmin=#3\_righthyphenmin=#4\_relax
- \_trycs{_langspecific:#1}{\_langdefault}%
+ \_langreset \_def\_langreset{}\_trycs{_langspecific:#1}{\_langdefault}%
}
\_doc -----------------------------
@@ -310,5 +319,6 @@
\_endcode
+2022-10-11 \_langreset introduced
2022-02-19 \_langinput moved here
2022-02-17 released, original file was hyphen-lan.opm
diff --git a/macros/optex/base/languages.opm b/macros/optex/base/languages.opm
index 4ae66ef1f4..1d7558444c 100644
--- a/macros/optex/base/languages.opm
+++ b/macros/optex/base/languages.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_mtext {Languages <2022-02-19>} % preloaded in format
+\_codedecl \_mtext {Languages <2022-11-18>} % preloaded in format
\_doc -----------------------------
Four words are generated by \OpTeX/ macros: \"Chapter",
@@ -120,8 +120,8 @@
\_def\_qqA#1#2#3{\_bgroup\_setverb \_catcode`\ =10
\_isnextchar\_bgroup{\_catcode`\{=1 \_catcode`\}=2 #1#2#3}{#1#2#3}}
-\_long\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2}
-\_long\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2}
+\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2}
+\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2}
\_def\_regquotes#1#2#3#4{\_bgroup \_lccode`~=`#2\_lowercase{\_egroup \_def#1##1~}{#3##1#4}}
\_doc -----------------------------
@@ -139,6 +139,7 @@
\_endcode % -------------------------------------
+2022-11-18 \"..." are not \long now
2022-02-19 \quotes, \_quotationmarks introduced
2022-02-04 \_langinput, words-lan.opm introduced
2021-05-23 \_monthw: bug fix
diff --git a/macros/optex/base/makeindex.opm b/macros/optex/base/makeindex.opm
index ba50352559..36b4a48c08 100644
--- a/macros/optex/base/makeindex.opm
+++ b/macros/optex/base/makeindex.opm
@@ -285,7 +285,7 @@
\_addto\_iilist{#1#2,}% % dvojice skupin vyresena
\_sortreturn{\_fif\_mergesort}% % \mergesort dalsi
\_fi
- \_ifx\_end#3% % neco,konec (#1#2=neco)
+ \_ifx\_fin#3% % neco,konec (#1#2=neco)
\_ifx\_empty\_iilist % neco=kompletni setrideny seznam
\_def\_iilist{#1#2}%
\_sortreturn{\_fif\_fif\_gobbletoend}% % koncim
@@ -303,7 +303,7 @@
\_relax % zarazka, na ktere se zastavi \sortreturn
}
\_def\_sortreturn#1#2\_fi\_relax{#1} \_def\_fif{\_fi}
-\_def\_gobbletoend #1\_end{}
+\_def\_gobbletoend #1\_fin{}
\_doc -----------------------------
The \`\_dosorting` `\list` macro redefines `\list` as sorted `\list`.
@@ -342,7 +342,7 @@
\_csname _secondpass\_sortinglang \_endcsname % activates \_reversewords if needed
\_def \_act##1{\_addto #1{##1,}}%
\_edef #1{\_ea}\_ea\_xargs \_ea\_act #1;% commas between items added, mergesort initialized
- \_edef \_iilist{\_ea}\_ea\_mergesort #1\_end,\_end
+ \_edef \_iilist{\_ea}\_ea\_mergesort #1\_fin,\_fin
\_ea\_endgroup
\_ea\_def\_ea#1\_ea{\_iilist}%
}
diff --git a/macros/optex/base/math-preload.opm b/macros/optex/base/math-preload.opm
index 9f73ef24d1..a3ac3e44b3 100644
--- a/macros/optex/base/math-preload.opm
+++ b/macros/optex/base/math-preload.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \normalmath {Math fonts CM + AMS preloaded <2022-07-22>} % preloaded in format
+\_codedecl \normalmath {Math fonts CM + AMS preloaded <2022-12-01>} % preloaded in format
\_doc ------------------------------
We have two math macros \`\normalmath` for the normal shape of all math
@@ -126,47 +126,49 @@
like `\_loadmathfamily` does it. But the second parameter is a
`\<font-switch>` declared previously by the `\font` primitive.
\nl
+ The `<number>` is saved by \^`\_loadmathfamily`, \^`\_setmathfamily`
+ to the \`\_mfam`.
+ \nl
The font family is loaded at \`\_sizemtext`, \`\_sizemscript` and
\`\_sizemsscript` sizes. These sizes are set by the
\`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` macro.
These parameters are given in the \`\ptmunit` unit, it is set to
1\`\ptunit` and it is set to 1\,pt by default.
\nl
- \`\_corrmsize` `<factor><space>` can be used just before
- `\_loadmathfamily` or `\_setmathfamily`.
- The `<factor>` is decimal number, it denotes
- scale-factor \"size of loaded math font in `\textstyle` : size of text font".
- You can use it in `\_normalmath` or `\_boldmath` macros if you want to do a
- corrections (for example due to different ex-height in text and math
- font). The `\_corrmsize` is applied only to one following
- `\_loadmathfamily` or `\_setmathfamily`. If it is missing
- then the `<factor>` is 1 for such math family (i.e.\ no size corrections).
+ \`\_mfactor` sets scaling factor for given math fonts family
+ related to text font size. It does the setting `\_ptmunit=<factor>\_ptunit` where
+ the <factor> is defined by `\sdef{_mfactor:<family>}{<factor>}`.
+ For eample, you can set `\sdef{_mfactor:1}{0.95}` if you found that
+ this scaling of math family 1 gives better visual compatibility
+ with used text fonts. If not declared then scaling factor is~1.
\_cod -----------------------------
-\_def\_corrmsize#1 {\_ptmunit=#1\_ptunit} % for corrections of sizes in diferent fonts
-
-\_def\_loadmathfamily #1 #2 {%
+\_def\_loadmathfamily {\_afterassignment\_loadmathfamilyA \_chardef\_mfam}
+\_def\_loadmathfamilyA #1 {\_mfactor
\_edef\_optsizesave{\_the\_optsize}%
- \_optsize=\_sizemtext \_font\_mF=\_optfn{#2} at\_optsize \_textfont#1=\_mF
- \_optsize=\_sizemscript \_font\_mF=\_optfn{#2} at\_optsize \_scriptfont#1=\_mF
- \_optsize=\_sizemsscript \_font\_mF=\_optfn{#2} at\_optsize \_scriptscriptfont#1=\_mF
- \_optsize=\_optsizesave \_ptmunit=\_ptunit
+ \_optsize=\_sizemtext \_font\_mF \_optfn{#1} at\_optsize \_textfont\_mfam=\_mF
+ \_optsize=\_sizemscript \_font\_mF \_optfn{#1} at\_optsize \_scriptfont\_mfam=\_mF
+ \_optsize=\_sizemsscript \_font\_mF \_optfn{#1} at\_optsize \_scriptscriptfont\_mfam=\_mF
+ \_optsize=\_optsizesave
}
-\_def\_setmathfamily #1 #2{\_let\_mF=#2%
+\_def\_setmathfamily {\_afterassignment\_setmathfamilyA \_chardef\_mfam}
+\_def\_setmathfamilyA #1{\_mfactor \_let\_mF=#1%
\_edef\_optsizesave{\_the\_optsize}%
- \_optsize=\_sizemtext \_fontlet#2=#2 at\_optsize \_textfont#1=#2%
- \_optsize=\_sizemscript \_fontlet#2=#2 at\_optsize \_scriptfont#1=#2%
- \_optsize=\_sizemsscript \_fontlet#2=#2 at\_optsize \_scriptscriptfont#1=#2%
- \_optsize=\_optsizesave \_ptmunit=\_ptunit \_let#2=\_mF
+ \_optsize=\_sizemtext \_fontlet#1#1at\_optsize \_textfont\_mfam=#1%
+ \_optsize=\_sizemscript \_fontlet#1#1at\_optsize \_scriptfont\_mfam=#1%
+ \_optsize=\_sizemsscript \_fontlet#1#1at\_optsize \_scriptscriptfont\_mfam=#1%
+ \_optsize=\_optsizesave \_let#1=\_mF
}
\_def\_setmathsizes[#1/#2/#3]{\_ptmunit=\_ptunit
\_def\_sizemtext{#1\_ptmunit}\_def\_sizemscript{#2\_ptmunit}%
\_def\_sizemsscript{#3\_ptmunit}%
}
+\_def\_mfactor{\_ptmunit=\_trycs{_mfactor:\_the\_mfam}{}\_ptunit}
+
\_newdimen\_ptunit \_ptunit=1pt
\_newdimen\_ptmunit \_ptmunit=1\_ptunit
-\_public \setmathsizes \ptunit \ptmunit ;
+\_public \setmathsizes \ptunit ;
\_doc -----------------------------
\`\_setmathparam``<luatex-param> {<factor>}` sets
@@ -176,10 +178,14 @@
\_cod -----------------------------
\_def\_setmathparam#1#2{%
- #1\_displaystyle =#2\_fontdimen6\_textfont1
- #1\_textstyle =#2\_fontdimen6\_textfont1
- #1\_scriptstyle =#2\_fontdimen6\_scriptfont1
- #1\_scriptscriptstyle =#2\_fontdimen6\_scriptscriptfont1
+ #1\_displaystyle =#2\_fontdimen6\_textfont1
+ #1\_crampeddisplaystyle =#2\_fontdimen6\_textfont1
+ #1\_textstyle =#2\_fontdimen6\_textfont1
+ #1\_crampedtextstyle =#2\_fontdimen6\_textfont1
+ #1\_scriptstyle =#2\_fontdimen6\_scriptfont1
+ #1\_crampedscriptstyle =#2\_fontdimen6\_scriptfont1
+ #1\_scriptscriptstyle =#2\_fontdimen6\_scriptscriptfont1
+ #1\_crampedscriptscriptstyle =#2\_fontdimen6\_scriptscriptfont1
}
\_doc -----------------------------
@@ -243,6 +249,9 @@ For example
\_endinput
+2022-12-01 reading number by \_loadmathfamily, \_setmathfamily more robust
+2022-11-16: \_corrmsize removed, \_mfactor introduced
+2022-09-04: \crampedstyles setings added.
2022-07-22: \_setmathparam\_Umathspaceafterscript added.
2022-02-22: \rm, \it, etc moved to fonts-select, \_marm, \_mait etc. introduced
2020-05-06: \itfam, \ttfam removed, (Unicode math preferred)
diff --git a/macros/optex/base/more-macros.opm b/macros/optex/base/more-macros.opm
index f256458184..418e71b774 100644
--- a/macros/optex/base/more-macros.opm
+++ b/macros/optex/base/more-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \eoldef {OpTeX useful macros <2022-05-24>} % preloaded in format
+\_codedecl \eoldef {OpTeX useful macros <2022-11-24>} % preloaded in format
\_doc -----------------------------
We define \`\opinput` `{<file name>}` macro which
@@ -89,7 +89,7 @@
loaded file is forgotten after the `\opinput`.
\_cod -----------------------------
-\_def \_load [#1]{\_loadA #1,,,\_end}
+\_def \_load [#1]{\_savemathsb \_loadA #1,,,\_end \_restoremathsb}
\_def \_loadA #1#2,{\_ifx,#1 \_ea \_loadE \_else \_loadB{#1#2}\_ea\_loadA\_fi}
\_def \_loadB #1{%
\_ifcsname _load:#1\_endcsname \_else
@@ -105,25 +105,29 @@
The declarator \`\optdef``\macro [<opt default>] <params>{<replacement text>}`
defines the `\macro` with the optional parameter followed by normal parameters
declared in `<params>`. The optional parameter must be used as the first
- first parameter in brackets `[...]`. If it isn't used then <opt default>
+ parameter in brackets `[...]`. If it isn't used then <opt default>
is taken into account. The `<replacement text>` can use `\the\opt`
because optional parameter is saved to the \`\opt` tokens register.
Note the difference from \LaTeX/ concept where the optional parameter is
in `#1`. \OpTeX/ uses `#1` as the first normal parameter (if declared).
- The \`\_nospaceafter` ignores the following optional space at expand
+ The \`\nospaceafter` ignores the following optional space at expand
processor level using the negative `\romannumeral` trick.
+ The \`\nospacefuturelet` bahaves like `\futurelet` primitive, but it
+ ignores the following optional space and works at expand processor level.
\_cod -----------------------------
+\_newtoks\_opt
\_def\_optdef#1[#2]{%
\_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_csstring#1}}{\_cs{_oB:\_csstring#1}}}%
\_sdef{_oA:\_csstring#1}[##1]{\_opt={##1}\_cs{_oB:\_csstring#1\_nospaceafter}}%
\_sdef{_oB:\_csstring#1\_nospaceafter}%
}
-\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.}
-\_newtoks\_opt
+\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.\_noexpand}
+\_def\_nospacefuturelet#1#2{\_ea\_immediateassignment
+ \_ea\_futurelet\_ea#1\_ea#2\_romannumeral-`\.\_noexpand}
-\_public \opt \optdef ;
+\_public \opt \optdef \nospaceafter \nospacefuturelet ;
\_doc -----------------------------
The declarator \`\eoldef``\macro #1{<replacement text>}` defines a `\macro`
@@ -150,8 +154,8 @@
\_eoldef\_skiptoeol#1{}
\_def\_bracedparam#1{\_ifcsname _\_csstring #1:M\_endcsname
\_csname _\_csstring #1:M\_ea \_endcsname
- \_else \_csname __in\_csstring #1:M\_ea \_endcsname \_fi
-}
+ \_else \_csname _in\_csstring #1\_ea \_endcsname \_fi
+}
\_public \eoldef \skiptoeol \bracedparam ;
\_doc -----------------------------
@@ -170,10 +174,10 @@
the next line continues.
\_cod -----------------------------
-\_def\_scantoeol#1{\def\_tmp{#1}\_begingroup \_setscancatcodes \_scantoeolA}
+\_def\_scantoeol#1{\_begingroup \_setscancatcodes \_scantoeolA #1}
\_def\_setscancatcodes{\_setverb \_catcode`\^^M=12\_catcode`\^=7\_catcode`\ =10\_catcode`\^^J=14 }
\_catcode`\^^M=12 %
-\_def\_scantoeolA#1^^M{\_endgroup \_tmp{#1}}%
+\_def\_scantoeolA#1#2^^M{\_endgroup #1{#2}}%
\_normalcatcodes %
\_public \scantoeol ;
@@ -194,13 +198,20 @@
It finishes processing or appends the next part to `\_tmptoks` separated by
<textB> and continues loop. The final part of the macro removes the last `?`
from resulting `\_tmptoks` and defines a new version of the `\foo`.
+
+ The \^`\replstring` macro is not expandable, but you can create your
+ expandable macro, for example:
+ \begtt
+ \def\replAB#1{\immediateassigned{\def\tmp{#1}\replstring\tmp{A}{B}}\the\_tmptoks}
+ \replAB {text A \and A} % expands to "text B \and B"
+ \endtt
\_cod -----------------------------
\_newtoks\_tmptoks
\_catcode`!=3 \_catcode`?=3
\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB}
\_long\_def\_replacestringsA##1#2{\_tmptoks{##1}\_replacestringsB}%
- \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_toksapp\_tmptoks{#3##1}%
+ \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_tmptoks\_ea{\_the\_tmptoks#3##1}%
\_ea\_replacestringsB\_fi}%
\_ea\_replacestringsA #1?#2!#2%
\_long\_def\_replacestringsA##1?{\_tmptoks{##1}\_edef#1{\_the\_tmptoks}}%
@@ -232,7 +243,22 @@
\_def\_removespaces #1 {\_isempty{#1}\_iffalse #1\_ea\_removespaces\_fi}
\_ea\_def \_ea\_ignorept \_ea#\_ea1\_detokenize{pt}{#1}
-\public \removespaces \ignorept ;
+\_public \removespaces \ignorept ;
+
+ \_doc -----------------------------
+ If you do `\let\foo=a` then it is not simple to return from `\foo` to the original
+ character code of `a`. You can write \code{`a} but you cannot write \code{`\\foo}.
+ The macro \`\cstochar``<sequence>` solves this problem. If the sequence
+ is equal to a character then it expands to this character (always with
+ catcode 12). If it isn't equal to a character then it expands to nothing.
+ You can say \code{\\expanded{`\\cstochar\\foo}} if you want to extract
+ the character code.
+ \_cod -----------------------------
+
+\_def\_cstochar#1{\_ea\_cstocharA\_meaning#1 {} {} \_fin}
+\_def\_cstocharA#1 #2 #3 #4\_fin{\_isinlist{#1#2}-\_iffalse #3\_fi}
+
+\_public \cstochar ;
\_doc -----------------------------
You can use expandable \`\bp``{<dimen>}` convertor from
@@ -262,6 +288,53 @@
\_public \expr \bp ;
\_doc ------------------
+ You can write \^`\setpos``[<label>]` somewhere and the position of such
+ \^`\setpos``[<label>]` can be referenced by \^`\posx``[<label>]`,
+ \^`\posy``[<label>]` and \^`\pospg``[<label>]`. The first two macros
+ expand to $x$ and $y$ position measured from left-bottom corner of the page
+ (dimen values) and \^`\pospg[<label>]` expands to the <gpageno>, i.e.\ to
+ the page number counted from one at beginning of the document.
+ These values are available in the second (and more) \TeX/ run, because the
+ information is saved to `.ref` file and restored from it at the beginning of
+ the \TeX/ job. If these values are not known then mentioned macros expand to
+ 0sp, 0sp and 0. The following example implements `\linefrom[<label>]` and
+ `\lineto[<label>]` macros. The line connecting these two points is drawn
+ (after second \TeX/ run):
+ \begtt
+ \def\linefrom[#1]{\setpos[#1:f]\drawlinefromto[#1]}
+ \def\lineto [#1]{\setpos[#1:t]}
+ \def\drawlinefromto[#1]{\ifnum\pospg[#1:f]>0 \ifnum\pospg[#1:f]=\pospg[#1:t]
+ \pdfliteral{q 0 0 m 1 0 0 RG % << red color
+ \expr{\bp{\posx[#1:t]}-\bp{\posx[#1:f]}}
+ \expr{\bp{\posy[#1:t]}-\bp{\posy[#1:f]}} l S Q}\fi\fi
+ }
+ This is a text.\linefrom[A]\par
+ This is second paragraph with a text.\lineto[A]
+ Try to reverse from-to and watch the changes.
+ \endtt
+ The coordinates are saved to the `.ref` file in the format
+ \`\_Xpos``{<label>}{<x-pos>}{<y-pos>}`. The \^`\_Xpos` macro defines
+ `\_pos:<label>` as `{<x-pos>}{<y-pos>}{<total-pg>}{<rel-pg>}`.
+ We need to read only given parameter by `\_posi`, `\_posii` or `\_posiii`
+ auxiliary macros. The implementation of
+ \`\setpos`, \`\posx` and \`\posy` macros are based on `\padsavepos`
+ `\pdflastxpos` and `\pdflastypos` pdf\TeX/ primitives. The \`\pospg`
+ simply reads the data from the \~`\_currpage` macro.
+ \_cod ------------------
+
+\_def\_Xpos#1#2#3{\_sxdef{_pos:#1}{{#2}{#3}\_currpage}}
+\_def\_setpos[#1]{\_openref\_pdfsavepos
+ \_ewref\_Xpos{{#1}\_unexpanded{{\_the\_pdflastxpos}{\_the\_pdflastypos}}}}
+
+\_def\_posx [#1]{\_ea \_posi \_expanded {\_trycs{_pos:#1}{{0}{}{}{}}sp}}
+\_def\_posy [#1]{\_ea \_posii \_expanded {\_trycs{_pos:#1}{{}{0}{}{}}sp}}
+\_def\_pospg[#1]{\_ea \_posiii \_expanded {\_trycs{_pos:#1}{{}{}{0}{}}}}
+
+\_def\_posi #1#2#3#4{#1} \_def\_posii #1#2#3#4{#2} \_def\_posiii #1#2#3#4{#3}
+
+\_public \setpos \posx \posy \pospg ;
+
+ \_doc ------------------
The pair {\`\_doc` ... \`\_cod`} is used for documenting macros and to
printing the technical documentation of the \OpTeX/. The syntax is:
{\begtt \catcode`\<=13
@@ -276,8 +349,28 @@
\_long\_def\_doc #1\_cod {\_skiptoeol}
+ \_doc ------------------
+ \`\docgen` processes lines before `\_codedecl` because the version text
+ in the macro `\_<pkg>_version` can be defined here. The package
+ documentation can print it. \^`\docgen` prints banner to log because TeX doesn't do it
+ when command line doesn't begin with the main file name after parameters.
+ \_cod ------------------
+
+\_def\_docgen #1 {\_ea \_docgenA \_input{#1.opm}}
+\_long \_def\_docgenA #1\_codedecl#2\_endcode #3\_doc {#1\_wlog{\_banner}\_skiptoeol}
+
+\_public \docgen ;
+
\_endcode % -------------------------------------
+2022-11-24 \setpos, \posx, \posy moved from OpTeX trick here
+2022-11-22 \docgen writes banner to log
+2022-11-20 \docgen reads lines before \_codedecl in order to define pkg. version
+2022-11-18 \cstochar introduced
+2022-11-13 \docgen introduced, \bracedparam corrected, \scantoeol modified
+2022-11-05 \replstring can be expandable using \immediateassigned: \toksapp replaced
+2022-11-03 \nospacefuturelet added.
+2022-10-27 \_savemathsb ...\_restoremathsb added to \load (eg. \load[xstring])
2022-05-24 \optdef: used \csstring instead \string, bug fixed.
2021-04-25 \normalcatcodes: typo fixed
2021-04-22 \the\_currctable replaced by \the\_catcodetable, bug fixed.
diff --git a/macros/optex/base/multicolumns.opm b/macros/optex/base/multicolumns.opm
index 83ed0f9e10..d84aef69c6 100644
--- a/macros/optex/base/multicolumns.opm
+++ b/macros/optex/base/multicolumns.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \begmulti {Balanced columns <2022-05-05>} % preloaded in format
+\_codedecl \begmulti {Balanced columns <2022-11-26>} % preloaded in format
\_doc -----------------------------
\`\_betweencolumns` or \`\_leftofcolumns` or \`\_rightofcolumns` include
@@ -37,7 +37,9 @@
\_newcount\_mullines
-\_def\_begmulti #1 {\_par\_bgroup\_wipeepar \_multiskip \_def\_Ncols{#1}
+\_def\_begmulti #1 {\_par\_bgroup\_wipeepar
+ \_ifnum\_lastpenalty>10000 \_vskip4.5\_baselineskip\_penalty9999 \_vskip-4.5\_baselineskip \_fi
+ \_multiskip \_def\_Ncols{#1}
\_setbox6=\_vbox\_bgroup\_bgroup \_let\_setxhsize=\_relax \_penalty-99
%% \hsize := column width = (\hsize+\colsep) / n - \colsep
\_setbox0=\_hbox{\_leftofcolumns\_rightofcolumns}%
@@ -142,6 +144,7 @@
\_endcode % -------------------------------------
+2022-11-26 \at least three lines in the beginning of \begmulti at the page
2022-05-05 `\_betweencolumns` etc. introduced.
2021-05-20 Colors inside \begmulti...\endmuti, bug fixed
2020-03-26 Introduced
diff --git a/macros/optex/base/optex.ini b/macros/optex/base/optex.ini
index 05e052f82b..4941ead57c 100644
--- a/macros/optex/base/optex.ini
+++ b/macros/optex/base/optex.ini
@@ -21,7 +21,7 @@
% OpTeX version
-\def\optexversion{1.08 Aug 2022}
+\def\optexversion{1.09 Dec 2022}
\def\fmtname{OpTeX}
\let\fmtversion=\optexversion
@@ -60,7 +60,7 @@
\input fonts-select.opm % font selection system
\input math-preload.opm % math fams CM + AMS preloaded
\input math-macros.opm % basic macros for math plus mathchardefs
-\input math-unicode.opm % macros for loading UnicodeMath fonts
+\input unimath-macros.opm % macros for loading UnicodeMath fonts
\input fonts-opmac.opm % font managing macros from OPmac
\input output.opm % output routine
\input margins.opm % macros for margins setting
@@ -94,7 +94,7 @@
}
\_everyjob = {%
- \_message{This is OpTeX (Olsak's Plain TeX), version <\optexversion>^^J}%
+ \_message{\_banner^^J}%
\_directlua{lua.bytecode[1]()}% load OpTeX's Lua code
\_mathsbon % replaces \int_a^b to \int _a^b
\_inputref % inputs \jobname.ref if exists
diff --git a/macros/optex/base/optex.lua b/macros/optex/base/optex.lua
index 3bec088b60..40915fd6d4 100644
--- a/macros/optex/base/optex.lua
+++ b/macros/optex/base/optex.lua
@@ -8,7 +8,8 @@ local fmt = string.format
--
-- Define namespace where some \OpTeX/ functions will be added.
-optex = optex or {}
+local optex = _ENV.optex or {}
+_ENV.optex = optex
-- Error function used by following functions for critical errors.
local function err(message)
@@ -17,12 +18,14 @@ end
--
-- For a `\chardef`'d, `\countdef`'d, etc., csname return corresponding register
-- number. The responsibility of providing a `\XXdef`'d name is on the caller.
-function registernumber(name)
+local function registernumber(name)
return token.create(name).index
end
+_ENV.registernumber = registernumber
+optex.registernumber = registernumber
--
-- MD5 hash of given file.
-function mdfive(file)
+function optex.mdfive(file)
local fh = io.open(file, "rb")
if fh then
local data = fh:read("*a")
@@ -32,7 +35,8 @@ function mdfive(file)
end
--
-- \medskip\secc[lua-alloc] Allocators^^M
-alloc = alloc or {}
+local alloc = _ENV.alloc or {}
+_ENV.alloc = alloc
--
-- An attribute allocator in Lua that cooperates with normal \OpTeX/ allocator.
local attributes = {}
@@ -51,17 +55,17 @@ end
-- Allocator for Lua functions ("pseudoprimitives"). It passes variadic
-- arguments (\"`...`") like `"global"` to `token.set_lua`.
local function_table = lua.get_functions_table()
-function define_lua_command(csname, fn, ...)
+local function define_lua_command(csname, fn, ...)
local luafnalloc = #function_table + 1
token.set_lua(csname, luafnalloc, ...) -- WARNING: needs LuaTeX 1.08 (2019) or newer
function_table[luafnalloc] = fn
end
---
--- `provides_module` is needed by older version of luaotfload
-provides_module = function() end
+_ENV.define_lua_command = define_lua_command
+optex.define_lua_command = define_lua_command
--
-- \medskip\secc[callbacks] Callbacks^^M
-callback = callback or {}
+local callback = _ENV.callback or {}
+_ENV.callback = callback
--
-- Save `callback.register` function for internal use.
local callback_register = callback.register
@@ -388,17 +392,18 @@ end)
--
-- Compatibility with \LaTeX/ through luatexbase namespace. Needed for
-- luaotfload.
-luatexbase = {
+_ENV.luatexbase = {
registernumber = registernumber,
attributes = attributes,
- provides_module = provides_module,
+ -- `provides_module` is needed by older version of luaotfload
+ provides_module = function() end,
new_attribute = alloc.new_attribute,
callback_descriptions = callback.callback_descriptions,
create_callback = callback.create_callback,
add_to_callback = callback.add_to_callback,
remove_from_callback = callback.remove_from_callback,
call_callback = callback.call_callback,
- callbacktypes = {}
+ callbacktypes = {},
}
--
-- `\tracingmacros` callback registered.
@@ -441,6 +446,7 @@ local pdfdict_mt = {
local function pdf_dict(t)
return setmetatable(t or {}, pdfdict_mt)
end
+optex.pdf_dict = pdf_dict
--
local resource_dict_objects = {}
local page_resources = {}
@@ -653,34 +659,67 @@ callback.add_to_callback("pre_shipout_filter", function(list)
return tonode(list)
end, "_colors")
--
--- We also hook into `luaotfload`'s handling of color. Instead of the default
--- behavior (inserting colorstack whatsits) we set our own attribute. The hook
--- has to be registered {\em after} `luaotfload` is loaded.
-function optex_hook_into_luaotfload()
- if not luaotfload.set_colorhandler then
- return -- old luaotfload, colored fonts will be broken
+-- We also hook into `luaotfload`'s handling of color and transparency. Instead
+-- of the default behavior (inserting colorstack whatsits) we set our own
+-- attribute. On top of that, we take care of transparency resources ourselves.
+--
+-- The hook has to be registered {\em after} `luaotfload` is loaded.
+local setattribute = direct.set_attribute
+local token_setmacro = token.set_macro
+local color_count = registernumber("_colorcnt")
+local tex_getcount, tex_setcount = tex.getcount, tex.setcount
+--
+local function set_node_color(n, color) -- "1 0 0 rg" or "0 g", etc.
+ local attr = tonumber(token_getmacro("_color::"..color))
+ if not attr then
+ attr = tex_getcount(color_count)
+ tex_setcount(color_count, attr + 1)
+ local strattr = tostring(attr)
+ token_setmacro("_color::"..color, strattr)
+ token_setmacro("_color:"..strattr, color)
+ token_setmacro("_color-s:"..strattr, string.upper(color))
end
- local setattribute = direct.set_attribute
- local token_setmacro = token.set_macro
- local color_count = registernumber("_colorcnt")
- local tex_getcount, tex_setcount = tex.getcount, tex.setcount
- luaotfload.set_colorhandler(function(head, n, rgbcolor) -- rgbcolor = "1 0 0 rg"
- local attr = tonumber(token_getmacro("_color::"..rgbcolor))
- if not attr then
- attr = tex_getcount(color_count)
- tex_setcount(color_count, attr + 1)
- local strattr = tostring(attr)
- token_setmacro("_color::"..rgbcolor, strattr)
- token_setmacro("_color:"..strattr, rgbcolor)
- -- no stroke color set
- end
- setattribute(n, color_attribute, attr)
+ setattribute(todirect(n), color_attribute, attr)
+end
+optex.set_node_color = set_node_color
+--
+function optex.hook_into_luaotfload()
+ -- color support for luaotfload v3.13+, otherwise broken
+ pcall(luaotfload.set_colorhandler, function(head, n, rgbcolor) -- rgbcolor = "1 0 0 rg"
+ set_node_color(n, rgbcolor)
return head, n
end)
+
+ -- transparency support for luaotfload v3.22+, otherwise broken
+ pcall(function()
+ luatexbase.add_to_callback("luaotfload.parse_transparent", function(input) -- from "00" to "FF"
+ -- in luaotfload: 0 = transparent, 255 = opaque
+ -- in optex: 0 = opaque, 255 = transparent
+ local alpha = tonumber(input, 16)
+ if not alpha then
+ tex.error("Invalid transparency specification passed to font")
+ return nil
+ elseif alpha == 255 then
+ return nil -- this allows luaotfload to skip calling us for opaque style
+ end
+ local transp = 255 - alpha
+ local transpv = fmt("%.3f", alpha / 255)
+ pdf.add_page_resource("ExtGState", fmt("tr%d", transp), pdf_dict{ca = transpv, CA = transpv})
+ pdf.add_page_resource("ExtGState", "tr0", pdf_dict{ca = 1, CA = 1})
+ return transp -- will be passed to the below function
+ end, "optex")
+
+ luaotfload.set_transparenthandler(function(head, n, transp)
+ setattribute(n, transp_attribute, transp)
+ return head, n
+ end)
+ end)
end
-- History:
- -- 2022-03-07 transparency in the colorize() function, current_tr added
+ -- 2022-08-25 expose some useful functions in `optex` namespace
+ -- 2022-08-24 luaotfload transparency with attributes added
+ -- 2022-03-07 transparency in the colorize() function, current_tr added
-- 2022-03-05 resources management added
-- 2021-07-16 support for colors via attributes added
-- 2020-11-11 optex.lua released
diff --git a/macros/optex/base/others.opm b/macros/optex/base/others.opm
index 47bfe573fd..98df836f76 100644
--- a/macros/optex/base/others.opm
+++ b/macros/optex/base/others.opm
@@ -107,8 +107,8 @@
\_def\_lipsumtext[#1]{\_lipsumload\_cs{_lip:#1}}
\_def\_lipsum[#1]{\_lipsumA #1.]{#1}}
-\_def\_lipsumA #1.#2]#3{\_ifx^#2^\_lipsumB #1\_empty-\_empty\_end \_else \_lipsumdot[#1].\_fi}
-\_def\_lipsumB #1-#2\_empty#3\_end{%
+\_def\_lipsumA #1.#2]#3{\_ifx^#2^\_lipsumB #1\_empty-\_empty\_fin \_else \_lipsumdot[#1].\_fi}
+\_def\_lipsumB #1-#2\_empty#3\_fin{%
\_fornum #1..\_ifx^#2^#1\_else#2\_fi \_do {\_lipsumtext[##1]\_par}}
\_def\_lipsumload{{%
\_setbox0=\_vbox{\_tmpnum=0 % vertical mode during \input lipsum.ltd.tex
@@ -118,8 +118,8 @@
\_opinput {lipsum.ltd.tex}%
\_global\_let\_lipsumload=\_empty
}}}
-\_def\_lipsumdot[#1]{\_lipsumload \_ea\_ea\_ea \_lipsumdotA \_csname _lip:#1\_endcsname.\_end}
-\_def\_lipsumdotA #1.#2\_end {#1}
+\_def\_lipsumdot[#1]{\_lipsumload \_ea\_ea\_ea \_lipsumdotA \_csname _lip:#1\_endcsname.\_fin}
+\_def\_lipsumdotA #1.#2\_fin {#1}
\_public \lipsum \lipsumtext ;
\_let \lorem=\lipsum
diff --git a/macros/optex/base/output.opm b/macros/optex/base/output.opm
index c74d99d371..095cfda4b3 100644
--- a/macros/optex/base/output.opm
+++ b/macros/optex/base/output.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \nopagenumbers {Output routine <2021-03-07>} % preloaded in format
+\_codedecl \nopagenumbers {Output routine <2022-10-20>} % preloaded in format
\_doc -----------------------------
\`\_optexoutput` is the default output routine. You can create another...\nl
@@ -86,7 +86,7 @@
\_def\_makeheadline {\_istoksempty \_headline \_iffalse
\_vbox to\_zo{\_vss
\_baselineskip=\_headlinedist \_lineskiplimit=-\_maxdimen
- \_hbox to\_xhsize{\_the\_headline}\_hbox{}}\_nointerlineskip
+ \_hbox to\_xhsize{\_normalbaselines\_the\_headline}\_hbox{}}\_nointerlineskip
\_fi
}
@@ -96,7 +96,7 @@
\_def\_makefootline{\_istoksempty \_footline \_iffalse
\_baselineskip=\_footlinedist
- \_lineskiplimit=-\_maxdimen \_hbox to\_xhsize{\_the\_footline}
+ \_lineskiplimit=-\_maxdimen \_hbox to\_xhsize{\_normalbaselines\_the\_footline}
\_fi
}
@@ -258,6 +258,7 @@ The output routine \^`\_optexoutput` is similar as in plain \TeX. It does:
\_endinput
+2022-10-22 \_normalbaselines added to \makehead/foot/line
2022-03-07 \_resetattrs instead \_resetcolor
2021-07-16 output routine supports colors via attributes
2021-02-25 \_draftbox improved
diff --git a/macros/optex/base/pdfuni-string.opm b/macros/optex/base/pdfuni-string.opm
index 89a479895a..4e5a29e9db 100644
--- a/macros/optex/base/pdfuni-string.opm
+++ b/macros/optex/base/pdfuni-string.opm
@@ -51,8 +51,8 @@
\_escapechar=-1
\_edef#1{#1\_empty}%
\_escapechar=`\\
- \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_end$}% $x$ -> x
- \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_end}}% {x} -> x
+ \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_fin$}% $x$ -> x
+ \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_fin}}% {x} -> x
\_edef#1{\_detokenize\_ea{#1}}%
\_replstring#1{ }{{ }}% text text -> text{ }text
\_catcode`\\=12 \_let\\=\_bslash
@@ -69,8 +69,8 @@
}
\_def\_removeoutbraces #1#{#1\_removeoutbracesA}
-\_def\_removeoutbracesA #1{\_ifx\_end#1\_else #1\_ea\_removeoutbraces\_fi}
-\_def\_removeoutmath #1$#2${#1\_ifx\_end#2\_else #2\_ea\_removeoutmath\_fi}
+\_def\_removeoutbracesA #1{\_ifx\_fin#1\_else #1\_ea\_removeoutbraces\_fi}
+\_def\_removeoutmath #1$#2${#1\_ifx\_fin#2\_else #2\_ea\_removeoutmath\_fi}
\_doc -----------------------------
The \`\_prepinverb``<macro><separator>{<text>}`,
@@ -83,9 +83,9 @@
\_def\_prepinverb#1#2#3{\_def#1{}%
\_def\_dotmpb ##1#2##2{\_addto#1{\_scantextokens{\_unexpanded{##1}}}%
- \_ifx\_end##2\_else\_ea\_dotmpbA\_ea##2\_fi}%
+ \_ifx\_fin##2\_else\_ea\_dotmpbA\_ea##2\_fi}%
\_def\_dotmpbA ##1#2{\_addto#1{##1}\_dotmpb}%
- \_dotmpb#3#2\_end
+ \_dotmpb#3#2\_fin
}
\_doc -----------------------------
diff --git a/macros/optex/base/plain-macros.opm b/macros/optex/base/plain-macros.opm
index 6909abff09..6ae59108b5 100644
--- a/macros/optex/base/plain-macros.opm
+++ b/macros/optex/base/plain-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \magstep {Macros from plain TeX <2022-02-19>} % preloaded in format
+\_codedecl \magstep {Macros from plain TeX <2022-10-11>} % preloaded in format
\_doc -----------------------------
The \`\dospecials` works like in plain TeX but does nothing with `_`.
@@ -200,7 +200,7 @@
\_chardef\AE="C6
\_chardef\OE="D7
\_chardef\O="D8
-\_chardef\i="11 \chardef\j="12 % dotless letters
+\_chardef\i="19 \chardef\j="1A % dotless letters
\_chardef\aa="E5
\_chardef\AA="C5
\_chardef\S="9F
@@ -219,15 +219,19 @@
\_public \mathhexbox ;
\_doc -----------------------------
- The \`\_unichars` macro is run in \^`\initunifonts`,
+ The \`\_unichars` macro is run in \~`\initunifonts`,
Unicodes are used instead old plain \TeX/ settings.
\_cod -----------------------------
-\def\_unichars{% characters with different codes in Unicode:
+\def\_unichars{% Plain TeX character sequences with different codes in Unicode:
\_chardef\ss=`ß
- \_chardef\oe=`œ
- \_chardef\OE=`Œ
- \_chardef\S=`§
+ \_chardef\ae=`æ \_chardef\AE=`Æ
+ \_chardef\oe=`œ \_chardef\OE=`Œ
+ \_chardef\o=`ø \_chardef\O=`Ø
+ \_chardef\aa=`å \_chardef\AA=`Å
+ \_chardef\l=`ł \_chardef\L=`Ł
+ \_chardef\i=`ı \_chardef\j=`ȷ
+ \_chardef\S=`§ \_chardef\P=`¶
\_chardef\dag`†
\_chardef\ddag`‡
\_chardef\copyright`©
@@ -365,6 +369,7 @@
\_endcode % -------------------------------------
+2022-10-11 ... \_unichars extended
2022-02-19 ... \input hyphen.tex moved here (format file is 80k smaller)
2021-09-24 ... \_unichars introduced
2021-04-09 ... \_public\showhyphens, bug fixed
diff --git a/macros/optex/base/prefixed.opm b/macros/optex/base/prefixed.opm
index d15ee4140d..a599e0ec85 100644
--- a/macros/optex/base/prefixed.opm
+++ b/macros/optex/base/prefixed.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \public {Prefixing and code syntax <2021-08-16>} % preloaded in format
+\_codedecl \public {Prefixing and code syntax <2022-11-25>} % preloaded in format
\_doc ---------
All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ...
@@ -21,15 +21,19 @@
private form of \`\_ea`
because there is high probability that `\ea` will be redefined by the user.
\nl
- \`\public` `<sequence> <sequence> ... ;` does
+ \`\public` `\<sequence> \<sequence> ... ;` does
`\let \<sequence> = \_<sequence>` for all sequences.
\nl
- \`\private` `<sequence> <sequence> ...;` does
+ \`\private` `\<sequence> \<sequence> ...;` does
`\let \_<sequence> = \<sequence>` for all sequences.
\nl
- \`\_checkexists` `<where> <prefix><sequence>` prints error
- if the control sequence propagated to
- a new name space by `\public` etc. macros is not declared.
+ \`\newpublic``<do>\<sequence>` prints warning if `\<sequence>`
+ is declared already. Then runs `<do>\<sequence>`.\nl
+ \`\_checkexists` `<where> {<sequence-string>}` prints error
+ if the control sequence given by its name <sequence-string>
+ is not declared. This check is used in `\public`, `\private`,
+ `\_nspublic` and `\_nsprivate` macros in order to avoid mistakes
+ in names when declaring new control sequences.
\nl
\`\xargs` `<what> <sequence> <sequence> ... ;`
does `<what><sequence>` for each sequences.
@@ -42,62 +46,42 @@
\_def \_pkglabel{}
\_def \_public {\_xargs \_publicA}
\_def \_publicA #1{%
- \_checkexists \public _#1%
+ \_checkexists \public {_\_csstring#1}%
\_ea\_let \_ea#1\_csname _\_csstring #1\_endcsname
}
\_def \_private {\_xargs \_privateA}
\_def \_privateA #1{%
- \_checkexists \private {}#1%
+ \_checkexists \private {\_csstring #1}%
\_ea\_let \_csname _\_csstring #1\_endcsname =#1%
}
-\_def\_checkexists #1#2#3{\_unless \_ifcsname #2\_csstring#3\_endcsname
- \_errmessage {\_string#1: \_bslash#2\_csstring#3 must be declared}\_fi
-}
-\_public \public \private \xargs \ea ;
-
- \_doc -----------------------
- Each macro file should begin with \`\_codedecl` `\macro {<info>}`.
- If the `\macro` is defined already then the `\endpinput` protects to read
- such file more than once. Else the <info> is printed to the terminal
- and the file is read.\nl
- The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file.
- \`\wterm` `{<text>}` prints the `<text>` to the terminal and to the `.log` file,
- \`\wlog` `{<text>}` prints the `<text>` only to the `.log` file (as in plain \TeX)
- \_cod -----------------------
-
-\_def \_codedecl #1#2{%
- \_ifx #1\_undefined \_wlog{#2}%
- \_else \_ea \_endinput \_fi
+\_def\_checkexists #1#2{\_unless \_ifcsname #2\_endcsname
+ \_errmessage {\_string#1: \_bslash#2 must be declared}\_fi
}
-\_def \_wterm {\_immediate \_write16 }
-\_def \_wlog {\_immediate\_write-1 } % write on log file (only)
-
-\_public \wterm \wlog ;
-
- \_doc ------------------------
- The `\optexversion` and `\fmtname` are defined in the `optex.ini` file.
- Maybe, somebody will need a private version of these macros.
- \_cod ------------------------
-
-\_private \optexversion \fmtname ;
+\_def\_newpublic #1#2{\_unless\_ifx #2\_undefined
+ \_opwarning{\_string#2 is redefined%
+ \_ifx\_pkglabel\_empty \_else\_space by the \_ea\_ignoreit\_pkglabel\_space package\_fi}\_fi
+ #1#2%
+}
+\_public \public \private \newpublic \xargs \ea ;
\_doc -----------------------------
- The `\_mathsbon` and `\_mathsboff` are defined in `math-macros.opm` file.
- Now, we define the macros
+ We define the macros
\`\_namespace` `{<pkg label>}`, \`\_resetnamespace` `{<pkg label>}`, \`\_endnamespace`,
- \`\_nspublic` and \`\_nsprivate`
+ \`\_pkglabel`, \`\_nspublic`, and \`\_nsprivate`
for package writers, see section~\ref[pkg-namespace].{\hbadness=2200\par}
\_cod -----------------------------
\_def \_pkglabel{}
\_def\_namespace #1{%
- \_ifcsname namesp:#1\_endcsname \_errmessage
+ \_ifcsname _namesp:#1\_endcsname \_errmessage
{The name space "#1" is used already, it cannot be used twice}%
\_endinput
- \_else \_resetnamespace{#1}\_fi
+ \_else
+ \_ea \_gdef \_csname _namesp:#1\_endcsname {}%
+ \_resetnamespace{#1}\_fi
}
\_def\_resetnamespace #1{%
- \_ea \_gdef \_csname namesp:#1\_endcsname {}%
+ \_unless \_ifx \_pkglabel\_empty \_endnamespace \_fi
\_gdef \_pkglabel{_#1}%
\_directlua{
callback.add_to_callback("process_input_buffer",
@@ -110,20 +94,60 @@
\_directlua{ callback.remove_from_callback("process_input_buffer", "_namespace") }%
\_gdef \_pkglabel{}%
}
-
\_def \_nspublic {\_xargs \_nspublicA}
\_def \_nspublicA #1{%
- \_checkexists \nspublic {\_pkglabel _}#1%
- \_unless\_ifx #1\_undefined
- \_opwarning{\_ea\_ignoreit\_pkglabel\_space redefines the meaning of \_string#1}\_fi
- \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname
+ \_checkexists \_nspublic {\_pkglabel _\_csstring #1}%
+ \_ea\_newpublic \_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname
}
\_def \_nsprivate {\_xargs \_nsprivateA}
\_def \_nsprivateA #1{%
- \_checkexists \nsprivate {}#1%
+ \_checkexists \_nsprivate {\_csstring #1}%
\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1%
}
+ \_doc -----------------------
+ Each macro file should begin with \`\_codedecl` `\macro {<info>}`.
+ If the `\macro` is defined already then the `\endpinput` protects to read
+ such file more than once. Else the <info> is printed to the terminal
+ and the file is read.
+ The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file.
+ \`\wterm` `{<text>}` prints the `<text>` to the terminal and to the `.log` file,
+ \`\wlog` `{<text>}` prints the `<text>` only to the `.log` file (as in plain \TeX)
+ \_cod -----------------------
+
+\_def \_codedecl #1#2{%
+ \_ifx #1\_undefined \_wlog{@:[\_basefilename\_currfile] #2}%
+ \_else \_ea \_endinput \_fi
+}
+\_def \_wterm {\_immediate \_write16 }
+\_def \_wlog {\_immediate\_write-1 } % write on log file (only)
+
+\_public \wterm \wlog ;
+
+ \_doc -----------------------------
+ \`\currfile` returns the name of the current input file including its path.\nl
+ \`\basefilename``\currfile` returns base name of
+ the current file, without its path and extension.\nl
+ \`\_nofilepath` `<text>/<with>/<slashes>/\_fin` expands to the last segment
+ separated by slashes.\nl
+ \`\_nofileext` `<filename>.\_fin` expands to the file name without extension.
+ \_cod -----------------------------
+
+\_def\_currfile{\_directlua{tex.print(status.filename)}}
+\_def\_basefilename #1{\_ea\_nofileext\_expanded{\_ea\_ea\_ea\_nofilepath#1/\_fin}.\_fin}
+\_def\_nofilepath #1/#2{\ifx#2\_fin #1\_else \_ea\_nofilepath \_ea#2\_fi}
+\_def\_nofileext #1.#2\_fin{#1}
+
+\_public \currfile \basefilename ;
+
+ \_doc ------------------------------
+ We define \`\_fin` as a useless macro. Suppose that its meaning will be never
+ used for another control sequence. You can use `\_fin` as a final delimiter
+ of a list of tokens and your macro can ask `\ifx\_fin#1` in order to
+ decide that the list of tokens is finalized.
+ \_cod ------------------------------
+
+\_protected\_long \_def \_fin \_fin {}
\_endcode %----------------------------------------------------
@@ -216,25 +240,48 @@ features can be lost (printing percent character by `\%` for example).
\secc Macro files syntax
-Each segment of \OpTeX/ macros is stored in one file with `.opm` extension
+Segments of \OpTeX/ macros or external macro packages
+are stored in files with `.opm` extension
(means OPtex Macros). Your local macros should be in a normal `*.tex` file.
The code in macro files starts by \^`\_codedecl` and ends by \^`\_endcode`.
The \^`\_endcode` is equivalent for `\endinput`, so documentation can follow.
The \^`\_codedecl` has syntax:
-\begtt
-\_codedecl \sequence {Name <version>}
+\begtt \catcode`<=13 \adef!{\string}
+\_codedecl \sequence {<short title> !<<version>>}
\endtt
-If the mentioned `\sequence` is defined, then \^`\_codedecl` does the same as
+If the mentioned `\sequence` is undefined then \^`\_codedecl` prints the message
+\begtt \catcode`<=13 \adef!{\string}
+@:[<file name>] <short title> !<<version>>
+\endtt
+to the log file and \TeX/ continues with reading the following macros.
+If the `\sequence` is defined, then \^`\_codedecl` acts like
`\endinput`: this protects from reading the file twice. We suppose, that
`\sequence` is defined in the macro file.
-It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro lines.
-The documentation text should be here. It is ignored when macros are read
-but it can be printed using `doc.opm` macros like in this documentation.
-
+It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro
+definitions. The documentation text should be here.
+It is ignored when macros are read.
+
+The \^`\_doc` ... \^`\_cod` parts can be printed after \^`\load[doc]`
+using \~`\printdoc` macro, see section~\ref[doc].
+If you have created a documented macro file `pkgname.opm` then you can
+put macros for creating your documentation between
+first pair of \^`\_doc` ... \^`\_cod` used after \^`\_endcode`.
+These macros should \^`\load[doc]` and must be finished by \^`\bye`.
+Then you have code+documentation together in a single file and
+user can generate the documentation of our package by
+\^`\docgen` used at command line:
+\begtt
+optex -jobname pkgname-doc '\docgen pkgname'
+\endtt
+Example of a \^`\_doc` ... \^`\_cod` code used for creating the
+documentation using \^`\docgen` can be found in the `math.opm` file. You can see
+\ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf]{its documentation}, especially
+\ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf\#ref:pkgtemplate]
+{section about creating packages}.
\secc[pkg-namespace] Name spaces for package writers
@@ -255,12 +302,23 @@ The scope of the \^`\_namespace` command ends at the \^`\_endnamespace` command
or when another \^`\_namespace` is used. This command checks
if the same package label is not declared by the \^`\_namespace` twice.
-The \^`\_nspublic` macro does `\let\foo = \_<pkg>_foo` when
+\^`\_nspublic` `<list of sequences> ;`
+does `\let\foo = \_<pkg>_foo` for each given sequence when
\^`\_namespace{<pkg>}` is declared. Moreover, it prints a warning if `\foo` is
defined already. The \^`\_nsprivate` macro does reverse
operation to it without warnings. Example: you can define `\def\.macro{...}` and then
set it to the user name space by `\_nspublic \macro;`.
+It could happen that a package writer needs to declare a control sequence
+(say `\foo`) directly without setting it in `\_<pkg>_foo` name space
+followed by using \^`\_nspublic`. The \^`\newpublic` prefix should be used in this
+case, for example `\_newpublic\_def\foo` or `\_newpublic\_chardef\foo` or
+`\_newpublic{\_long\_def}\foo`. The \^`\newpublic``<do>\<sequence>` prints
+a warning if the declared `\<sequence>` is defined already and then runs
+`<do>\<sequence>`. The reason of the warning is the same as when
+\^`\_nspublic` warns about doing re-declaration of control sequences already
+declared.
+
Don't load other packages (which are using their own namespace) inside your
namespace. Do load them before your \^`\_namespace`~`{<pkg>}` is
initialized. Or close your namespace by \^`\_endnamespace` and open it again
@@ -315,6 +373,10 @@ can look like.
\endinput
+2022-11-25 \_resetnamespace: moved \gdef\_namesp:#1 {} to \_namespace
+2022-11-24 \newpublic introduced, \_checkexists with only two parameters.
+2022-11-22 \currfile introduced and used in \_codedecl
+2022-11-13 \_resetnamespace corrected
2021-08-16 \_wlog moved from basic macros, \_codedecl uses \_wlog only.
2021-04-25 \_checkexists introduced
2021-02-15 \_expandafter -> \_ea in \_codedecl
diff --git a/macros/optex/base/ref-file.opm b/macros/optex/base/ref-file.opm
index 7f9c619009..922150f9f5 100644
--- a/macros/optex/base/ref-file.opm
+++ b/macros/optex/base/ref-file.opm
@@ -29,7 +29,7 @@
printed. Try running `optex op-demo` twice to see the effect.
\_cod --------------------------
-\_def\_mdfive#1{\_directlua{mdfive("#1")}}
+\_def\_mdfive#1{\_directlua{optex.mdfive("#1")}}
\_def\_prevrefhash{}
\_doc --------------------------
diff --git a/macros/optex/base/references.opm b/macros/optex/base/references.opm
index c26320b046..9da2bca30f 100644
--- a/macros/optex/base/references.opm
+++ b/macros/optex/base/references.opm
@@ -94,9 +94,9 @@
but the optional `@` in the `<given-text>` is replaced by the `<implicit-text>` first.
\_cod -----------------------------
-\_def\_reftext #1#2{\_isatin #2@\_iffalse #2\_else\_reftextA{#1}#2\_end \_fi}
-\_def\_reftextA #1#2@#3\_end {#2#1#3}
-\_def\_isatin #1@#2\_iffalse {\_ifx\_end#2\_end}
+\_def\_reftext #1#2{\_isatin #2@\_iffalse #2\_else\_reftextA{#1}#2\_fin \_fi}
+\_def\_reftextA #1#2@#3\_fin {#2#1#3}
+\_def\_isatin #1@#2\_iffalse {\_ifx\_fin#2\_fin}
\_doc -----------------------------
Default \`\_printlabel` is empty macro (labels are not printed).
diff --git a/macros/optex/base/sections.opm b/macros/optex/base/sections.opm
index 9ff2c2d436..7d7a78232b 100644
--- a/macros/optex/base/sections.opm
+++ b/macros/optex/base/sections.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \chap {Titles, chapters, sections, subsections <2022-08-02>} % preloaded in format
+\_codedecl \chap {Titles, chapters, sections, subsections <2022-10-19>} % preloaded in format
\_doc ---------------------------
We are using scaled fonts for titles
@@ -28,6 +28,7 @@
\_nobreak\_bigskip
}
\_def\_tit{\_scantoeol\_printtit}
+\_let\_intit=\_printtit % used by \bracedparam
\_public \tit ;
@@ -332,9 +333,11 @@
The \`\caption``/<letter>` increases `\_<letter>num` counter,
edefines \`\_thecapnum` as `\_the<letter>num` and
defines \`\_thecaptitle` as language-dependent word using \^`\_mtext`,
+ declares default format by \^`\_captionformat``{<letter>}` and
runs the `\_everycaption<letter>` tokens register.
- The group opened by `\caption` is finalized by first `\_par` from
- an empty line or from `\vskip` or from `\endinsert`.
+ The two groups opened by `\caption` are finalized by first `\_par` from
+ an empty line or from `\vskip`, `\cskip` or from `\endinsert`.
+ If a \code{\}} occurs first then `\_par` from `\aftergroup` is processed.
The `\_printcaption<letter>` is called, it starts with
printing of the caption.\nl
The \`\cskip` macro inserts nonbreakable vertical space between the caption and
@@ -348,8 +351,11 @@
\_else \_opwarning{Unknown caption /\_tmpa}\_fi
\_edef\_thecapnum {\_csname _the\_tmpa num\_endcsname}%
\_edef\_thecaptitle{\_mtext{\_tmpa}}%
+ \_ea\_captionformat\_ea{\_tmpa}%
\_ea\_the \_csname _everycaption\_tmpa\_endcsname
- \_def\_par{\_nbpar\_egroup}%
+ \_def\_par{\_ifhmode\_nbpar\_egroup\_egroup\_fi}%
+ \_ifx\par\_endgraf \_let\par=\_par \_fi
+ \_bgroup \_aftergroup\_par
\_cs{_printcaption\_tmpa}%
}
\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object
@@ -359,12 +365,15 @@
\_doc -----------------------------
The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode.
They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to
- make reference and hyperlink destination) a they can use:
+ make reference and hyperlink destination). They can use:
\begitems
* \^`\_thecaptitle` ... expands to the word Table or Figure (depending on
the current language).
* \^`\_thecapnum` ... expands to `\the<letter>num` (caption number).
\enditems
+ The macro \^`\_printcaptiont` (or `f`) is processed inside group and the
+ `\_par` can be run after this group. If you want to re-define formating
+ parameters for `\_par`, do this in the macro \^`\_captionformat`.
The \`\_captionsep` inserts a separator between auto-generated
caption number and the following caption text. Default separator
is `\_enspace` but if the caption text starts with dot or colon, then
@@ -375,7 +384,7 @@
\_def \_printcaptiont {%
\_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}%
- \_narrowlastlinecentered\_iindent \_futurelet\_next\_captionsep
+ \_futurelet\_next\_captionsep
}
\_def\_captionsep{\_ifx\_next.\_ea\_bfnext \_else\_ifx\_next:\_ea\_ea\_ea\_bfnext
\_else \_enspace \_fi\_fi}
@@ -392,11 +401,14 @@
\def\_theanum {\_othe\_chapnum.\_the\_secnum.\_the\_anum}
\sdef{_mt:a:en}{Algorithm} \sdef{_mt:a:cs}{Algoritmus} % + your language...
\endtt
- The default format of `\caption` text is a paragraph in block narrower by
+ The format of the \^`\caption` text is given by the
+ \`\_captionformat``{<caption-letter>}` macro.
+ The default format for `t` and `f` is a paragraph in block narrower by
`\_iindent` and with the last line is centered. This setting is done by
the \`\_narrowlastlinecentered` macro.
\_cod -----------------------------
+\_def\_captionformat#1{\_narrowlastlinecentered\_iindent}
\_def\_narrowlastlinecentered#1{%
\_leftskip=#1plus1fil
\_rightskip=#1plus-1fil
@@ -461,6 +473,7 @@
\_endcode % -------------------------------------
+2022-10-19 More robust \caption (two opened groups, \_printcaption introduced)
2022-08-02 Penalties in \_printsec, \_printsecc changed
2022-07-11 \_printchap: \_prevdepth=0pt added, see issue 100
2021-03-03 \_captionsep introduced, \_othe used in \_thetnum, \_thefnum.
diff --git a/macros/optex/base/table.opm b/macros/optex/base/table.opm
index 26131897fc..1866c0486d 100644
--- a/macros/optex/base/table.opm
+++ b/macros/optex/base/table.opm
@@ -22,12 +22,12 @@
\_cod -----------------------------
\_newifi \_ifpxto
-\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_end
+\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_fin
\_bgroup \_catcodetable\_optexcatcodes \_tableA}
-\_def\_tableW#1#2\_end{\_pxtofalse
+\_def\_tableW#1#2\_fin{\_pxtofalse
\_ifx#1\_empty \_def\_tablew{}\_else
- \_ifx#1p \_def\_tablew{}\_tableWx#2\_end \_else \_def\_tablew{#1#2}\_fi\_fi}
-\_def\_tableWx xto#1\_end{\_tmpdim=#1\_relax \_pxtotrue}
+ \_ifx#1p \_def\_tablew{}\_tableWx#2\_fin \_else \_def\_tablew{#1#2}\_fi\_fi}
+\_def\_tableWx xto#1\_fin{\_tmpdim=#1\_relax \_pxtotrue}
\_public \table ;
\_doc -----------------------------
@@ -337,12 +337,12 @@
\_def\_tablinefil{\_leaders\_hrule\_hfil}
\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}%
- \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_end,%
+ \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_fin,%
\_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}%
\_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}%
\_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule}
-\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_ea\_crlpA\_fi}
-\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi}
+\_def\_crlpA#1,{\_ifx\_fin#1\_else \_crlpB#1-\_fin,\_ea\_crlpA\_fi}
+\_def\_crlpB#1#2-#3,{\_ifx\_fin#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi}
\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax
\_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat}
\_def\_crlpD{\_incr\_tmpnum \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}%
diff --git a/macros/optex/base/unimath-codes.opm b/macros/optex/base/unimath-codes.opm
index 229ea4575d..418d0d28aa 100644
--- a/macros/optex/base/unimath-codes.opm
+++ b/macros/optex/base/unimath-codes.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_ncharrmA {Uni math codes <2022-07-20>} % preloaded on demand by \loadmath
+\_codedecl \_ncharrmA {Uni math codes <2022-11-20>} % preloaded on demand by \loadmath
\_doc -----------------------------
The control sequences for `\alpha`, `\beta` etc are redefined here.
@@ -170,19 +170,30 @@
\_doc -----------------------------
Each math symbol has its declaration in the file `unicode-math-table.tex`
which is copied to `unimath-table.opm`. The file has the following format:
- {\vitt{unimath-table.opm}\verbinput (70-85) unimath-table.opm }
- We have to read this information and convert it to the Unicode math codes.
+ {\vitt{unimath-table.opm}\verbinput (36-41) unimath-table.opm }
+ We have to read this information and set given control sequences to
+ the relevant Unicode characters using `\chardef`. We don't use `\mathchardef`
+ for them because the want to manage the matcodes (class, family, slot)
+ only at single place: at Unicode characters. Control sequeces declared here
+ are only pointers to these Unicode characters. Exceptions are delimiters and
+ math accents.\nl
+ If the character is delimiter then we declare \_d:<sequence> to be the
+ `\chardef` equivalent of the character and `\let<sequence>=<character>`
+ because `\left`, `\right` doesn't like `\chardef` equivalent of the
+ character although it has its own delcode.
\_cod -----------------------------
\_begingroup % \input unimath-table.opm (it is a copy of unicode-math-table.tex):
\_def\UnicodeMathSymbol #1#2#3#4{%
- \_ifnum#1=\_Umathcodenum#1 % the code isn't set by mathclass.opm
- \_Umathchardef#2=0 1 #1 \_Umathcode#1=0 1 #1
- \_else \_Umathcharnumdef#2=\_Umathcodenum#1 \_fi
- \_ifx#3\_mathopen \_def#2{\_Udelimiter 4 1 #1 }\_fi
- \_ifx#3\_mathclose \_def#2{\_Udelimiter 5 1 #1 }\_fi
- \_ifx#3\_mathaccent \_def#2{\_Umathaccent fixed 7 1 #1 }\_fi
+ \_chardef#2=#1 % control sequence is only pointer to Unicode character
+ \_ifnum#1=\_Umathcodenum#1 \_Umathcode#1=0 1 #1 \_fi % it isn't set by mathclass.opm
+ \_ifx#3\_mathopen \_setdelimiter#2\_fi
+ \_ifx#3\_mathclose \_setdelimiter#2\_fi
+ \_ifx#3\mathfence \_setdelimiter#2\_fi
+ \_ifx#3\_mathaccent \_protected\_def#2{\_Umathaccent fixed 7 1 #1 }\_fi
}
+ \_def\mathfence{F}%
+ \_def\_setdelimiter#1{\_expanded{\_let\_cs{_d:\_csstring#1}=#1\_let#1=\Uchar#1}}
\_globaldefs=1 \_input unimath-table.opm
\_endgroup
@@ -203,10 +214,8 @@
% mathclas defines ! as Ord, plain.tex as Close
\_Umathcode `! = 5 1 `! % keep plain.tex declaration
-\_Umathchardef \mathexclam = 5 1 `!
% mathclas defines ? as Punct, plain.tex as Close
\_Umathcode `? = 5 1 `? % keep plain.tex declaration
-\_Umathchardef \mathquestion = 5 1 `?
\_Umathcode `* = 2 1 "02217 % equivalent to \ast, like in plain TeX
@@ -222,22 +231,24 @@
\_public \sqrt \cuberoot \fourthroot ;
-\_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else
- \_ea\_let\_csname\_csstring#1op\_endcsname=#1%
- \_ea\_def\_ea #1\_ea{\_csname\_csstring#1op\_endcsname \_nolimits}%
- \_bgroup \_lccode`\~=#2 \_lowercase{\_egroup \_mathcode`~="8000 \_let ~=#1}%
+ \_doc -----------------------------
+ We save the `\mathcode` of `\int` to `\_intop` using `\Umathchardef` and
+ declare Unicode character `\int` as math-active and define it
+ as `\_intop\_nolimits`. We define `\intop` as `\_intop` for users
+ (intergral with normal limits).
+ We do this with other int-like operators listed below too.
+ \_cod -----------------------------
+
+\_def\_intwithnolimits#1{\_ifx#1\_relax \_else
+ \_ea\_Umathcharnumdef\_csname _\_csstring#1op\_endcsname=\_Umathcodenum#1%
+ \_ea\_def \_csname\_csstring#1op\_ea\_endcsname\_ea{\_csname _\_csstring#1op\_endcsname}%
+ \_bgroup \_lccode`\~=#1 \_lowercase{\_egroup
+ \_ea\_def\_ea~\_ea{\_csname _\_csstring#1op\_endcsname\_nolimits}\_mathcode`~="8000 }%
\_ea \_intwithnolimits \_fi
}
-\_intwithnolimits \int "0222B \iint "0222C \iiint "0222D
- \oint "0222E \oiint "0222F \oiiint "02230
- \intclockwise "02231 \varointclockwise "02232 \ointctrclockwise "02233
- \sumint "02A0B \iiiint "02A0C \intbar "02A0D \intBar "02A0E \fint "02A0F
- \pointint "02A15 \sqint "02A16 \intlarhk "02A17 \intx "02A18
- \intcap "02A19 \intcup "02A1A \upint "02A1B \lowint "02A1C \_relax "0
-
-\_protected\_def \vert {\_Udelimiter 0 1 "07C }
-\_protected\_def \Vert {\_Udelimiter 0 1 "02016 }
-\_protected\_def \Vvert {\_Udelimiter 0 1 "02980 }
+\_intwithnolimits \int \iint \iiint \oint \oiint \oiiint
+ \intclockwise \varointclockwise \ointctrclockwise \sumint \iiiint \intbar \intBar \fint
+ \pointint \sqint \intlarhk \intx \intcap \intcup \upint \lowint \_relax
\_protected\_def \_overbrace #1{\_mathop {\_Umathaccent 7 1 "023DE{#1}}\_limits}
\_protected\_def \_underbrace #1{\_mathop {\_Umathaccent bottom 7 1 "023DF{#1}}\_limits}
@@ -274,7 +285,6 @@
\_global\_Umathcode "22EF = 0 1 "22EF % mathclass says that it is Rel
\_global\_Umathcode "002E = 0 1 "002E % mathclass says that dot is Punct
-\_global\_Umathchardef \unicodecdots = 0 1 "22EF
\_global\_Umathcode `/ = 0 1 `/ % mathclass says that / is Bin, Plain TeX says that it is Ord.
@@ -451,6 +461,9 @@ for technical details about Unicode-math.
\_endinput
History:
+2022-11-20 \mathfence's get delimiter code too
+2022-11-18 Delimiters re-implemented
+2022-11-17 \Umathchardef replaced by \chardef
2022-07-20 \Umathcode for copyright declared
2022-02-22 \rm, \bf etc. moved to font-select, \_marm, \_mabf etc. introduced
2022-02-08 several wide math accents added
diff --git a/macros/optex/base/math-unicode.opm b/macros/optex/base/unimath-macros.opm
index 22db1d095e..96f87a6a9b 100644
--- a/macros/optex/base/math-unicode.opm
+++ b/macros/optex/base/unimath-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \loadmath {Unicode Math fonts <2022-07-22>} % preloaded in format
+\_codedecl \loadmath {Unicode Math fonts <2022-12-01>} % preloaded in format
\_doc -----------------------------
\`\loadmath` `{<Unicode-math font>}` loads the given font. It does:
@@ -66,16 +66,18 @@
math families (5, 6, 7, etc.) in the \^`\normalmath` macro.
\nl
The default value of \^`\_normalunimath` shows a combination of base Unicode-math
- font with 8bit Math font at family 4. See definition of `\script` macro where
+ font at family 1 with 8bit Math font at family 4. See definition of `\script` macro where
`\fam4` is used.
\_cod -----------------------------
\_def\_normalunimath{%
+ \_setmathfamily 0 \_tenrm % font for non-math objects in math mode
\_loadumathfamily 1 {\_unimathfont}{} % Base font
\_loadmathfamily 4 rsfs % script
\_setunimathdimens
}%
\_def\_boldunimath{%
+ \_setmathfamily 0 \_tenbf % font for non-math objects in math mode
\_ifx\_unimathboldfont \_undefined
\_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold
\_else
@@ -117,14 +119,10 @@
The `<font features>` are added to the default
\`\_mfontfeatures` and to the size-dependent features `ssty=1`
if script size is asked or `ssty=2` if scriptscriptsize is asked.\nl
- \`\_mparams``<number>` inserts additional font feature `nomathparam`
- if the <number> of the family is greater than 3. Lua\TeX/ sets math
- parameters (thickness of fraction rules etc., see section 7.4 in Lua\TeX/
- documentation) repeatedly from loaded math
- fonts if `nomathparam` is not given. We want to load these parameters only
- from fonts at families 0--3 (and actually we are using only family 1 as main math font).\nl
- The \^`\_corrmsize` `<factor><space>` can be used just before
- `\_loadumathfamily`, see section~\ref[math-preload] for more information.\nl
+ \`\_mparams` can insert additional font features
+ dependig on the current `\_mfam`.\nl
+ The \^`\_mfactor` `<family><space>` sets scaling factor,
+ see section~\ref[math-preload] for more information.\nl
The \`\_textmff`, \`\_scriptmff` and \`\_sscriptmff` are font
features for text, script and sscript sizes respectively. They are
locally re-defined in \^`\mathbox` macro.
@@ -133,16 +131,16 @@
\_def\_umathname#1#2{"#1:\_mfontfeatures#2"}
\_def\_mfontfeatures{mode=base;script=math;}
-\_def\_loadumathfamily #1 #2#3 {%
- \_font\_mF=\_umathname{#2}{\_textmff \_mparams{#1}#3} at\_sizemtext \_textfont #1=\_mF
- \_font\_mF=\_umathname{#2}{\_scriptmff \_mparams{#1}#3} at\_sizemtext \_scriptfont #1=\_mF
- \_font\_mF=\_umathname{#2}{\_sscriptmff\_mparams{#1}#3} at\_sizemtext \_scriptscriptfont#1=\_mF
- \_ptmunit=\_ptunit
+\_def\_loadumathfamily{\_afterassignment\_loadumathfamilyA \_chardef\_mfam}
+\_def\_loadumathfamilyA #1#2 {\_mfactor
+ \_font\_mF \_umathname{#1}{\_textmff \_mparams #2} at\_sizemtext \_textfont \_mfam=\_mF
+ \_font\_mF \_umathname{#1}{\_scriptmff \_mparams #2} at\_sizemtext \_scriptfont \_mfam=\_mF
+ \_font\_mF \_umathname{#1}{\_sscriptmff\_mparams #2} at\_sizemtext \_scriptscriptfont\_mfam=\_mF
}
\_def\_textmff {ssty=0;mathsize=1;}
\_def\_scriptmff {ssty=1;mathsize=2;}
\_def\_sscriptmff{ssty=2;mathsize=3;}
-\_def\_mparams#1{\_ifnum#1>3 nomathparam;\_fi}
+\_def\_mparams{}
\_doc -----------------------------
Unicode math font includes all typical math alphabets together, user needs not to
@@ -210,6 +208,8 @@
\~`\normalmath` and \~`\boldmath` macros. Note that allocationos using
\^`\newfam` starts from 43 because numbers 1--42 are reserved for direct
usage without \^`\newfam`.
+ We use \^`\aheadto` here because we want to read the main family 1 as
+ last one (for definitive setting of math parameters).
\_cod -----------------------------
\_def\_addUmathfont #1#2#3#4#5#6{% #1: fam (will be set), #2#3: normal font, #4#5: bold font
@@ -217,11 +217,12 @@
\_else \_isfont{#2}\_iffalse \_opwarning{font #2 is unavailable}%
\_else
\_newfam#1\_relax
- \_global\_addto\_normalmath{\_corrmsize#6 \_loadumathfamily #1 {#2}{#3} }%
+ \_sdef{_mfactor:\_the\_numexpr#1\_relax}{#6}%
+ \_global\_aheadto\_normalmath{\_loadumathfamily #1{#2}{#3} }%
\_ifx\_relax#4\_relax
- \_global\_addto\_boldmath{\_corrmsize#6 \_loadumathfamily #1 {#2}{embolden=1.7;} }%
+ \_global\_aheadto\_boldmath{\_loadumathfamily #1{#2}{embolden=1.7;} }%
\_else
- \_global\_addto\_boldmath{\_corrmsize#6 \_loadumathfamily #1 {#4}{#5} }%
+ \_global\_aheadto\_boldmath{\_loadumathfamily #1{#4}{#5} }%
\_fi
\_normalmath
\_wterm{add-MATH-FONT: #1=\the#1, "#2", \ifx"#4"\else bold: "#4"\fi}%
@@ -229,27 +230,58 @@
}
\_doc -----------------------------
- \`\resetmathchars` `<fam> <list of sequences> ;`
- saves <fam> to \`\_mafam` and applies \`\_resetmathcharsX`
- to each sequence from <list of sequences>.
+ \`\mathchars` `<fam> {<list of sequences>}`
+ saves <fam> to \`\_mafam` and runs for each sequence from the <list of sequences>
+ the relevant code settings.
The `\directlua` chunk prints the 8-digits hexadecimal code of the
- sequence followed by the sequence itself. The digts are scanned by \`\_resetmathcharsY`
- and new `\Umathchardef` and `\Umathcode` is declared. Note that the used
+ sequence followed by the sequence itself. The digts are scanned by \`\_mathcharsB`
+ and new `\Umathcode` is declared.\nl
+ If there exist \_d:<sequence> (i.e.\ it is delimiter) then `\Udelcode` is
+ redeclared too. Finally, in case of `\int`-like operators the
+ `\_intop` sequence is redeclared by `\Umathchardef`. Note that the used
primitives have the syntax:
\begtt \catcode`<=13
- \Umathchardef <sequence> <math class> <math family> <slot number>
- \Umathcode <code> <math class> <math family> <slot number>
+ \Umathchardef <sequence> = <math class> <math family> <slot number>
+ \Umathcode <code> = <math class> <math family> <slot number>
+ \Udelcode <code> = <math family> <slot number>
\endtt
\_cod -----------------------------
-\_def\_resetmathchars #1{\_chardef\_mafam=#1\_relax \_xargs \_resetmathcharX}
-\_def\_resetmathcharX#1{\_ea\_resetmathcharY
- \_directlua{tex.print(string.format("\_pcent08X", \_the#1))}#1}
-\_def\_resetmathcharY#1#2#3#4#5#6#7#8#9{% #9 is given \math-sequence
- \_Umathchardef #9\_numexpr"#3/2\_relax \_mafam "#4#5#6#7#8
- \_Umathcode "#4#5#6#7#8=\_numexpr"#3/2\_relax \_mafam "#4#5#6#7#8
+\_def\_mathchars {\_afterassignment\_mathcharsA \_chardef\_mafam=}
+\_def\_mathcharsA #1{\_foreach #1\_do{%
+ \_ifcsname _d:\_csstring##1\_endcsname \_ea \_mathcharsD \_csname _d:\_csstring##1\_endcsname
+ \_else \_mathcharsC ##1\_fi
+}}
+\_def\_mathcharsC #1{\_ea\_mathcharsB
+ \_directlua{tex.print(string.format("\_pcent08X", \_the\_Umathcode#1))}#1%
}
-\_public \addUmathfont \resetmathchars ;
+\_def\_mathcharsB #1#2#3#4#5#6#7#8#9{% #9 is given \math-sequence
+ \_ifcsname _\_csstring#9op\_endcsname
+ \_ea \_Umathchardef \_csname _\_csstring#9op\_endcsname=1 \_mafam #9\_relax
+ \_else
+ \_Umathcode "#4#5#6#7#8=\_numexpr"#3/2\_relax \_mafam "#4#5#6#7#8
+ \_fi
+}
+\_def\_mathcharsD #1{\_mathcharsC #1\_relax \_Udelcode #1=\_mafam #1\_relax}
+
+ \_doc -----------------------------
+ \`\mathcodes` `<fam> {<list of pairs>}` sets mathcodes of given
+ characters with explicit <class>es. Each pair can be `<class>{<list of chars>}`
+ and `<list of chars>` can include \`\Urange` `<from>-<to>`.
+ This is reason why we apply `\expanded` to the `<list of chars>`
+ before reading it by \^`\foreach`: the \^`\Urange` is expandable
+ and expands to the relevant list of characters.
+ \_cod -----------------------------
+
+\_def\_mathcodes{\_afterassignment\_mathcodesA\_chardef\_mafam=}
+\_def\_mathcodesA#1{%
+ \_foreach #1\_do ##1##2{%
+ \_ea\_foreach\_expanded{##2}\_do{\_Umathcode `####1=##1\_mafam`####1}%
+ }%
+}
+\_def\_Urange #1-#2{\_fornum `#1..`#2\_do{\_Uchar##1 }}
+
+\_public \addUmathfont \mathchars \mathcodes \Urange ;
\_endcode
@@ -286,31 +318,55 @@ Example:
\addUmathfont \xits {[XITSMath-Regular]}{} {[XITSMath-Bold]}{} {}
\endtt
%
-declares `latinmodern-math` as main math font (its bold variant is \"faked bold")
-and the additional math font `\xits` is `XITSMath-Regular` for normal
-printing and `XITSMath-Bold` for bold printing.
+declares `latinmodern-math` as main math font (its bold variant is \"faked bold").
+The additional math font family `\xits` is declared in the example. It uses
+`XITSMath-Regular` for normal printing and `XITSMath-Bold` for bold printing.
-All characters used in math formula is printed from main math font by
-default. But you can redeclare a list of characters for printing from
-additional font by \^`\resetmathchars` `\famname <list of sequences> ;`. For
+All characters used in math formula are printed from main math font by
+default. But you can re-declare characters for printing from
+additional font by \^`\mathchars` `\famname {<list of sequences>}`. For
example:
\begtt
-\resetmathchars \xits \stareq \triangleq \veeeq \wedgeq ;
+\mathchars \xits {\stareq \triangleq \veeeq \wedgeq}
\endtt
%
sets the characters `\stareq`, `\triangleq`, `\veeeq`, `\wedgeq` from
-the `\xits` additional font. You can see all possible sequences by
-`\input print-unimath.opm`.
-If you want to use whole math alphabet from additional math font, use
-`\addto\selector{\fam\famname}`, for example `\addto\cal{\fam\xits}`
+the `\xits` additional font. The <list of sequences> can include
+control sequences from the `unicode-table.tex`, but no math
+accents. These contol sequences can be printed by `\input print-unimath.opm`.
+
+The \^`\mathchars` macro keeps the class and slot of declared math objects
+and re-declares only family of them. It is applied to all control
+sequences given in the parameter. The relevant math codes are re-declared.
+
+Use `\addto\selector{\fam\famname}` if you want to print whole math alphabet
+from an additional math font. For example `\addto\cal{\fam\xits}`
declares all `\cal` characters from the `\xits` font loaded by
\^`\addUmathfont`.
+The \^`\mathcodes` macro provides comfortable settings of math codes of math
+objects. Its syntax is \^`\mathcodes` `<family> {<list-of-pairs>}`. Each pair
+in the <list-of-pairs> is `<class-number><character>` (separated by optional
+space) or `<class-number>{<list-of-characters>}`. The <list-of-characters>
+includes declared characters or \^`\Urange` `<from>-<to>` which is equal to the
+list of characters beginning <from> and ending <to>, for example
+`\Urange a-d` is equal to `abcd`.
+
+The \^`\mathcodes` macro declares mathcode of given characters internally by
+\begtt \catcode`<=13
+\Umathcode `<character> = <class-number> <family> `<character>
+\endtt
+
+The \^`\mathcodes` macro sets math codes of given Unicode characters.
+The relevant control sequence from `unicode-table.tex` changes its
+behavior too. For example, If you change math code of × then the
+`\times` control sequence will behave like new declared ×.
+
\secc Unicode-math macros preloaded in the format
-\printdoc math-unicode.opm
+\printdoc unimath-macros.opm
\secc[unimath-codes] Macros and codes set when `\loadmath` is processed firstly
@@ -329,6 +385,11 @@ the section~\ref[math-macros].
\_endinput
+2022-12-01 reading number by \_loadumathfamily more robust
+2022-11-18 \mathchars improved, \Udelcodes are set too, \addUmathfont uses \ahead
+2022-11-17 \Umathchardef replaced by \chardef
+2022-11-16 \resetmathchars removed, \mathchars, \mathcodes introduced
+2022-11-13 \_setfontfamily 0 added.
2022-07-22 \Umathspaceafterscript setting added.
2022-06-10 \addUmathfont and \resetmathchars added.
2021-08-16 \_loadumathfamily simplified, used mathsize= font feature.
diff --git a/macros/optex/base/verbatim.opm b/macros/optex/base/verbatim.opm
index 201dc66fd9..ac00369d33 100644
--- a/macros/optex/base/verbatim.opm
+++ b/macros/optex/base/verbatim.opm
@@ -138,7 +138,7 @@
}
\_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{%
\_prepareverbdata\_tmpb{#1^^J}%
- \_ea\_printverb \_tmpb\_end
+ \_ea\_printverb \_tmpb\_fin
\_par \_restoremathsb
\_endgroup \_ttskip
\_isnextchar\_par{}{\_noindent}%
@@ -172,10 +172,10 @@
\_ifx\_printverblinenum\_relax \_else \_incr\_ttline \_fi
\_testcommentchars #1\_relax\_relax\_relax
\_iftrue
- \_ifx\_end#2\_printcomments\_fi
+ \_ifx\_fin#2\_printcomments\_fi
\_else
\_ifx\_vcomments\_empty\_else \_printcomments \_def\_vcomments{}\_fi
- \_ifx\_end#2%
+ \_ifx\_fin#2%
\_bgroup \_adef{ }{}\_def\t{}% if the last line is emtpy, we don't print it
\_ifcat&#1&\_egroup \_ifx\_printverblinenum\_relax \_else \_decr\_ttline \_fi
\_else\_egroup \_printverbline{#1}\_fi
@@ -183,7 +183,7 @@
\_printverbline{#1}%
\_fi
\_fi
- \_unless\_ifx\_end#2\_afterfi{\_printverb#2}\_fi
+ \_unless\_ifx\_fin#2\_afterfi{\_printverb#2}\_fi
}
\_def\_printverbline#1{\_putttpenalty \_indent \_printverblinenum \_kern\_ttshift #1\_par}
\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font}
@@ -274,7 +274,7 @@
\_repeat
\_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}%
\_catcode`\ =10 \_catcode`\%=9 % used in \commentchars comments
- \_ea\_printverb \_tmpb\_end
+ \_ea\_printverb \_tmpb\_fin
\_ttlinesave
\_par \_restoremathsb
\_endgroup
diff --git a/macros/optex/doc/mte-doc.tex b/macros/optex/doc/mte-doc.tex
deleted file mode 100644
index 030f023d3f..0000000000
--- a/macros/optex/doc/mte-doc.tex
+++ /dev/null
@@ -1,26 +0,0 @@
-% This is part of mte.opm macro package for OpTeX
-
-% Run optex mte-doc
-% (two times) to generate documentation including references and the index.
-
-\load [doc]
-
-\def\elink[#1]#2{%
- \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf\#cs:#1]%
- {\tt\string#2}%
-}
-\def\olink[#1]#2{%
- \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf\#cs:#1]%
- {\tt\string#2}%
-}
-\let\_urllinkcolor=\Cyan
-
-\printdoctail mte.opm
-\printdoc mte.opm
-
-\nonum\sec Index
-\begmulti 3
-\tt \makeindex
-\endmulti
-
-\bye
diff --git a/macros/optex/doc/optex-doc.pdf b/macros/optex/doc/optex-doc.pdf
index bf9f70a326..666e8793e6 100644
--- a/macros/optex/doc/optex-doc.pdf
+++ b/macros/optex/doc/optex-doc.pdf
Binary files differ
diff --git a/macros/optex/doc/optex-doc.tex b/macros/optex/doc/optex-doc.tex
index 785a181b1d..de9639a576 100644
--- a/macros/optex/doc/optex-doc.tex
+++ b/macros/optex/doc/optex-doc.tex
@@ -21,7 +21,7 @@
\tit Format Based on Plain \TeX/ and OPmac\fnotemark1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\hfill Version 1.08
+\hfill Version 1.09
\centerline{\it Petr Olšák, 2020, 2021, 2022}
diff --git a/macros/optex/doc/optex-math.tex b/macros/optex/doc/optex-math.tex
index ab127ea762..e94b742d66 100644
--- a/macros/optex/doc/optex-math.tex
+++ b/macros/optex/doc/optex-math.tex
@@ -37,6 +37,20 @@
\def\x`{\bgroup\_setverb\xx}
\bgroup \lccode\string`\.=\string`\` \lowercase{\egroup \def\xx #1#2.{\i #2 \egroup `#1#2.}}
+\bgroup
+\globaldefs=-1
+\def\refs{} \tmpnum=0
+\def\_Xtoc#1#2#3{\incr\tmpnum
+ \ea\addto \ea\refs \expanded{{\noexpand\sdef{r:#3}{\the\tmpnum}}}
+ \scantoeol\ignoreit
+}
+\isfile{optex-doc.ref}\iftrue \input{optex-doc.ref}\fi
+\ea
+\egroup
+\refs
+
+\def\urloptexdoc{https://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+\def\optexdoc[#1]{\ea\ulink\expanded{[\urloptexdoc\#toc:\trycs{r:#1}{}]}}
\hyperlinks\Green\Green
@@ -69,8 +83,8 @@ There are more types of extensions: e\TeX, lua\TeX/, Unicode math and
is appended to the red triangle to inform you about the extension type.
Nevertheless, \OpTeX/ user doesn't have to worry about it, all extensions
are available if Unicode Math font is loaded (e.g., by the command
-`\fonfam[lmfonts]`). See section 1.3.3 in \OpTeX/ documentation about
-loading Unicode math fonts.
+`\fonfam[lmfonts]`). See \optexdoc[1.3.3]{section 1.3.3} in \OpTeX/
+documentation about loading Unicode math fonts.
{\iindent=2em
\bigskip
@@ -109,7 +123,8 @@ The math atoms are \ii single/math/object {\em single math objects} or
\fnote{In \OpTeX/, the character `_` can be interpreted as a part of
the control sequence name, not as the subscript constructor. But in common cases,
constructions of math atoms are interpreted exactly as in plain \TeX. See sections
- 2.2.2 and 2.14 of \OpTeX/ documentation for more details. If you want to
+ \optexdoc[2.2.2]{2.2.2} and \optexdoc[2.15]{2.15}
+ of \OpTeX/ documentation for more details. If you want to
be sure that `_` is just a subscript constructor in \OpTeX/ then you can set \code{\\catcode`\\_=8}
but after this, you cannot use control sequences with `_` character.}
The constructors for exponent `^` and subscript `_` can be used in arbitrary order
@@ -644,8 +659,8 @@ in another than this default shape, then we can use
\x`\mit`, \x`\rm`, \x`\it`, \x`\bf`, \x`\cal`.
\new \OpTeX/
\OpTeX/ supports more such selectors \x`\script`, \x`\frak`, \x`\bbchar`, \x`\bi`, see
-section 1.3.3 in the \OpTeX/ documentation. The math selectors have local
-validity in the group.
+\optexdoc[1.3.3]{section 1.3.3} in the \OpTeX/ documentation.
+The math selectors have local validity in the group.
The control sequences \x`\rm`, \x`\it`, \x`\bf`, and \x`\bi` act as variant selectors
of fonts in non-math mode (text mode) and they act
@@ -1410,7 +1425,7 @@ operator:
$$
\sum/_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{
i &\in A \cr
- \quad j &\in B\cup C \cr
+ j &\in B\cup C \cr
m &\in C }}
i + j + m
$$
@@ -1418,7 +1433,7 @@ $$
$$
\sum_{\eqlines{\baselineskip=.7\baselineskip}\eqstyle{\scriptstyle}\eqalign{
i &\in A \cr
- \quad j &\in B\cup C \cr
+ j &\in B\cup C \cr
m &\in C }}
i + j + m
$$
@@ -1585,8 +1600,8 @@ characters from main math font and these additional fonts. This can be
usable if the main math font doesn't include all desired characters or you
dislike some character shapes from main font. \OpTeX/ enables to load
additional math fonts by `\addUmathfont` and characters from additional
-fonts can be declared by `\resetmathchars`. See the section 2.16 of \OpTeX/
-documentation for more details about this.
+fonts can be declared by `\mathchars`. See the \optexdoc[2.16]{section 2.16}
+of \OpTeX/ documentation for more details about this.
The rest of this section includes an example which shows another task: how
to combine main Unicode math font with old 8-bit math font `bbold10.tfm`.
diff --git a/macros/optex/doc/optex-techdoc.tex b/macros/optex/doc/optex-techdoc.tex
index 5a51ba4d8a..7815619404 100644
--- a/macros/optex/doc/optex-techdoc.tex
+++ b/macros/optex/doc/optex-techdoc.tex
@@ -87,7 +87,7 @@ the `\dump` command.
}
\printdoctail prefixed.opm
-\secc The implementation of the namespaces
+\secc The implementation of the namespaces and macros for macro-files
\printdoc prefixed.opm
\sec pdf\TeX/ initialization
@@ -145,7 +145,7 @@ section~\ref[fselect].
\printdoc math-macros.opm
\sec Unicode-math fonts
-\printdoctail math-unicode.opm
+\printdoctail unimath-macros.opm
\sec[opmac-fonts] Scaling fonts in document (high-level macros)
These macros are documented in section~\ref[sizes] from the user point of view.
@@ -274,7 +274,7 @@ The allocations are declared in subsection~\ref[lua-alloc], calbacks are
implemented in subsection~\ref[callbacks] and handling with colors can be
found in the subsection~\ref[lua-colors].
-{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}
+{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \_hfuzz=1em \medskip}
\commentchars-- \def\docfile{optex.lua} \ttline=-1
\_def\_printcomments{\_medskip
{\_catcodetable0 \_typosize[10/12]\_everypar={}\_scantextokens\_ea{\_vcomments}\par}%
@@ -285,7 +285,7 @@ found in the subsection~\ref[lua-colors].
}
-\sec Printing documentation
+\sec[doc] Printing documentation
\printdoctail doc.opm
\printdoc doc.opm
diff --git a/macros/optex/doc/optex-userdoc.tex b/macros/optex/doc/optex-userdoc.tex
index 23609f7bad..e04014b991 100644
--- a/macros/optex/doc/optex-userdoc.tex
+++ b/macros/optex/doc/optex-userdoc.tex
@@ -237,8 +237,8 @@ to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus
If you write \^`\fontfam[?]` then all font families registered in \OpTeX/
are listed on the terminal and in the log file.
If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in
-\OpTeX/ and available in your \TeX/ system is printed. The instructions
-on how to register your own font family are appended in the catalog.
+\OpTeX/ and available in your \TeX/ system is printed.
+See also \ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]{this catalog}.
If the family is loaded then {\em font modifiers} applicable in such font family
are listed on the terminal: (`\caps`, `\cond` for example).
@@ -1128,7 +1128,7 @@ this item occurs is listed in the index entry. So you can type:
The \ii resistor resistor is a passive electrical component ...
\endtt
-You cannot double the word if you use the \^`\iid` instead of \^`\ii`:
+You don't have to double the word if you use the \^`\iid` instead of \^`\ii`:
\begtt
The \iid resistor is a passive electrical component ...
@@ -1304,7 +1304,7 @@ The usage is:
\endtt
The <bib-base> is one or more `*.bib` database source files (separated by
-spaces and without extension) and the <style> is the part of the filename
+commas and without extension) and the <style> is the part of the filename
`bib-<style>.opm` where the formatting of the references list is
defined. \OpTeX/ supports `simple` or `iso690` styles. The features of
the `iso690` style is documented in the section~\ref[isobib] in detail.
@@ -1746,7 +1746,11 @@ to more files (with individual chapters or sections), use simply the `\input` pr
The macro packages intended to \OpTeX/ have the name `*.opm`.
The list of packages supported by \OpTeX/ follows. Most of them are directly part of \OpTeX/:
-\begitems
+\begitems \typosize[9/11]
+* \ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf]{\tt math.opm}
+ provides usable features for math typesetting and shows
+ \ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf\#ref:pkgtemplate]
+ {how to create new packages}.
* `qrcode.opm` enables to create QR codes.
* `tikz.opm` does `\input tikz.tex`, i.e.\ loads Ti{\it k\/}Z. It adds \OpTeX/-specific code.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/mte-doc.pdf]{\tt mte.opm}
@@ -1907,14 +1911,19 @@ More information about such macros can be found in the technical documentation.
You can use hyperlinks here in order to go to the appropriate place of the technical
documentation.
-\medskip \noindent
-\^`\addto`` \macro{<text>}` adds <text> at the end of `\macro` body.\nl
+\bgroup \medskip \noindent \typosize[9/11]
+\^`\addto` `\macro{<text>}` adds <text> at the end of `\macro` body,
+\^`\aheadto` `\macro{<text>}` puts <text> at the begin.\nl
\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl
\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl
+\^`\basefilename` \^`\currfile` returns the name of the file currently read.\nl
\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl
+\^`\casesof` `<token> <list of cases>` expands to a given case by meaning of the `<token>`.
+ See also \^`\xcasesof`.\nl
\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl
\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl
\^`\cs` `{<string>}` expands `\<string>`.\nl
+\^`\cstochar` `<sequence>` converts <sequence> to <character> if there was `\let<sequence>=<character>`.\nl
\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl
\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl
\~`\_endcode` closes the part of macro code in macro files.\nl
@@ -1931,8 +1940,8 @@ documentation.
\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl
`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl
\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist`
-\~`\isfile`, \~`\isfont` do various tests. Example: \~`\isinlist\list{<text>}\iftrue` does
- `\iftrue` if <text> is in `\list`.\nl
+\~`\isfile`, \~`\isfont` do various tests.\nl
+ Example: \~`\isinlist\list{<text>}\iftrue` does `\iftrue` if <text> is in `\list`.\nl
\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next
character is <char>, else <text2>.\nl
\~`\kv` `{<key>}` expands to value when key-value parameters are used.\nl
@@ -1942,9 +1951,12 @@ documentation.
\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl
\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl
\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl
+\^`\nospaceafter``\macro`, \^`\nospacefuturelet`: they ignore the following optional space.\nl
\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl
\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl
\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl
+\~`\posx``[<label>]`, \~`\posy``[<label>]`, \~`\pospg``[<label>]`
+ provide coordinates of absolute position of the \~`\setpos``[<label>]`.
\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl
\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl
\~`\readkv` `\macro` reads parameters from `\macro` in key-value format.\nl
@@ -1958,7 +1970,7 @@ documentation.
\^`\wlog`` {<text>}` writes <text> to .log file.\nl
\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl
\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl
-\unpenalty\unskip
+\unpenalty\unskip \par \egroup
\sec Compatibility with Plain \TeX/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/optex/pkg/math.opm b/macros/optex/pkg/math.opm
new file mode 100644
index 0000000000..5b0f29dd2f
--- /dev/null
+++ b/macros/optex/pkg/math.opm
@@ -0,0 +1,639 @@
+% This is macro package used by OpTeX, see http://petr.olsak.net/optex
+% math.opm, Petr Olšák <petr@olsak.net>, 2022
+% This file can serve as an template for other package files
+% See end of the file for more information
+
+\_def\_math_version {0.02, 2022-11-26}
+\_codedecl \replacemissingchars {Doing math more comfortable <\_math_version>}
+\_namespace{math}
+
+ \_doc
+ \`\bigp`, \`\Bigp`, \`\biggp`, \`\Biggp`, \`\autop`, \`\normalp` are inspired from
+ \tricklink[bigp]{0094}
+ \_cod
+
+\_def\.bigp #1{\.fparam{#1}\_bigl\_bigr}
+\_def\.Bigp #1{\.fparam{#1}\_Bigl\_Bigr}
+\_def\.biggp#1{\.fparam{#1}\_biggl\_biggr}
+\_def\.Biggp#1{\.fparam{#1}\_Biggl\_Biggr}
+\_def\.autop#1{\.fparam{#1}\_left\_right}
+\_def\.normalp#1{\.fparam{#1}\_relax\_relax}
+\_def\.fparam#1#2#3{%
+ \_isequal .{#1}\_iffalse #1\_fi
+ \_let\.bigleft=#2\_let\.bigright=#3\_nospacefuturelet\.next\.fparamA}
+\_def\.fparamA{%
+ \_ifx\.next(\.afterrelax{\.fparamB()}\_fi
+ \_ifx\.next[\.afterrelax{\.fparamB[]}\_fi
+ \_ifx\.next\{\.afterrelax{\.fparamB\{\}}\_fi
+ \_ifx\.next\_bgroup \_def\.lparen{\{}\_def\.rparen{\}}\.afterrelax{\.fparamC}\_fi
+ \_relax
+}
+\_def\.fparamB#1#2{%
+ \_def\.lparen{#1}\_def\.rparen{#2}%
+ \_def\.next#1##1#2{\_trick_ensurebalanced#1#2\.fparamC{##1}}%
+ \.next
+}
+\_def\.fparamC#1{%
+ \_ifx\.bigleft\_left \_mathopen{}\_fi
+ \.bigleft\.lparen{#1}\.bigright\.rparen
+ \_ifx\.bigright\_right \_mathclose{}\_fi
+}
+\_def\.afterrelax#1#2\_relax{\_fi#1}
+
+\_nspublic \bigp \Bigp \biggp \Biggp \autop \normalp ;
+
+ \_doc
+ We need macro \`\.ensurebalanced` for balancing nested parentheses from
+ \tricklink[balancing]{0043}. We use `trick` namespace for these macros.
+ \_cod
+
+\_resetnamespace{trick}
+ \_def\.ensurebalanced#1#2#3{\_immediateassigned{%
+ \_def\.balopen{#1}\_def\.balclose{#2}\_let\.balaction=#3%
+ \_def\.readnextbal##1##2#2{\.ensurebalancedA{##1#2##2}}}%
+ \.ensurebalancedA}
+ \_def\.ensurebalancedA#1{\.isbalanced#1%
+ \_iftrue\_afterfi{\.balaction{#1}}\_else\_afterfi{\.readnextbal{#1}}\_fi}
+ \_def\.isbalanced#1\_iftrue{\_immediateassignment\_tmpnum=0 \.isbalancedA#1{\.isbalanced}}
+ \_def\.isbalancedA#1#{\.countbalanced#1\.isbalanced \.isbalancedB}
+ \_def\.isbalancedB#1{%
+ \_ifx\.isbalanced#1\_afterfi{\_cs{ifnum}\_tmpnum=0 }\_else\_ea\.isbalancedA\_fi}
+ \_def\.countbalanced#1{\_ea\_ifx\.balopen #1\_immediateassignment\_incr\_tmpnum\_fi
+ \_ea\_ifx\.balclose#1\_immediateassignment\_decr\_tmpnum\_fi
+ \_ifx\.isbalanced#1\_else\_ea\.countbalanced\_fi}
+\_resetnamespace{math}
+
+ \_doc
+ \`\smartdots` re-sets `\dots` to `\.dots`.
+ The `\.dots` lets `\.next` using `\futurelet` and checks the `\.next`:
+ It it is declared by `\_chardef` then `\.mchar` is the real Unicode character
+ with `\chardef`ed code.
+ If `\.next` is a real Unicode character then `\.mchar` includes it. This
+ is done by the expandable \o`\cstochar` macro provided by \OpTeX/.
+ If `\.next` is something else (i.e.\ `\.mchar` is empty) then print
+ \o`\ldots` else print \o`\cdots` for Op, Bin, Rel, Open, Close math
+ classes of the `\.next` math object or prints \o`\ldots` in other cases.
+ \_cod
+
+\_def\.smartdots {\_let\dots=\.dots}
+\_def\.dots{\_relax \_ifmmode \_ea\.specdots \_else \_dots \_fi}
+\_def\.specdots{\_futurelet\.next\.specdotsA}
+\_def\.specdotsA{%
+ \.ischardef\.next\_iftrue \_edef\.mchar{\_Uchar\.next}%
+ \_else \_edef\.mchar{\_cstochar\.next}%
+ \_fi
+ \_ifx\.mchar\_empty \_ldots
+ \_else \_Umathcharnumdef\.next=\_Umathcode\_ea`\.mchar \_relax
+ \_ifcase \.readclass\.next
+ \_ldots\_or \_cdots\_or \_cdots\_or \_cdots\_or \_cdots\_or \_cdots \_else \_ldots \_fi
+ \_fi
+}
+\_def\.ischardef #1\_iftrue {\_ea\.ischardefA\_meaning#1\_fin}
+\_def\.ischardefA #1#2#3#4#5#6\_fin {\_def\.tmpa{#1#2#3#4#5}\_ifx\.tmpa\.stringchar}
+\_edef\.stringchar{\_string\char}
+\_def\.readclass#1{\_ea\.readclassA\_meaning#1\_fin}
+\_def\.readclassA#1"#2"#3\_fin{#2}
+
+\_nspublic \smartdots ;
+
+ \_doc
+ \`\smartvert` sets `|` as math-active charcter and declares it
+ equal to `\.autovert` macro. This macro checks two variants: there
+ is single `|` or there is double `||`. It runs \`\.autovertA` or
+ \`\.autoVertA`. These macros find the closing `|` or `||` and use
+ `|` or `‖` in context of `\left`, `\right`. The \`\singlevert`
+ is declared here if a user want to use a single vertical bar.
+ \_cod
+
+\_newpublic \_mathchardef \_singlevert=\_mathcode`|
+\_def\.autovert {\_isnextchar|{\.autoVertA}{\.autovertA}}
+\_def\.autovertA #1|{\_mathopen{}\_mathclose{\_left|#1\_right|}}
+\_def\.autoVertA|#1||{\_mathopen{}\_mathclose{\_left‖#1\_right‖}}
+\_bgroup \_lccode`\~=`\| \_lowercase{\_egroup
+ \_def\.smartvert{\_let~=\.autovert \_mathcode`|="8000 }}
+
+\_nspublic \smartvert ;
+
+ \_doc
+ The control sequences \`\N`, \`\Z`, \`\Q`, \`\R`, \`\C`
+ \`\sgn`, \`\argmin`, \`\argmax`, \`\grad`, \`\rank`, \`\tr`, \`\diag`, \`\Span`,
+ \`\Rng`, \`\Null`, \`\Ker`, \`\Res`, \`\tg`, \`\arctg`,
+ \`\frac`, \`\dfrac`, \`\tfrac`, \`\.`
+ are defined directly in the user space by \o`\_newpublic`.
+ \_cod
+
+\_newpublic\_def \N {{\_bbchar N}}
+\_newpublic\_def \Z {{\_bbchar Z}}
+\_newpublic\_def \Q {{\_bbchar Q}}
+\_newpublic\_def \R {{\_bbchar R}}
+\_newpublic\_def \C {{\_bbchar C}}
+
+\_newpublic\_def \sgn {\_mathop{\_rm sgn}\_nolimits}
+\_newpublic\_def \argmin {\_mathop{\_rm argmin}}
+\_newpublic\_def \argmax {\_mathop{\_rm argmax}}
+\_newpublic\_def \grad {\_mathop{\_rm grad}\_nolimits}
+\_newpublic\_def \rank {\_mathop{\_rm rank}\_nolimits}
+\_newpublic\_def \tr {\_mathop{\_rm tr}\_nolimits}
+\_newpublic\_def \diag {\_mathop{\_rm diag}\_nolimits}
+\_newpublic\_def \Span {\_mathop{\_rm Span}\_nolimits}
+\_newpublic\_def \Rng {\_mathop{\_rm Rng}\_nolimits}
+\_newpublic\_def \Null {\_mathop{\_rm Null}\_nolimits}
+\_newpublic\_def \Ker {\_mathop{\_rm Ker}\_nolimits}
+\_newpublic\_def \Res {\_mathop{\_rm Res}\_nolimits}
+\_newpublic\_def \tg {\_mathop{\_rm tg}\_nolimits}
+\_newpublic\_def \arctg {\_mathop{\_rm arctg}\_nolimits}
+
+\_newpublic\_def \frac #1#2{{{#1}\_over#2}}
+\_newpublic\_def \dfrac #1#2{{\_displaystyle{{#1}\_over#2}}}
+\_newpublic\_def \tfrac #1#2{{\_textstyle{{#1}\_over#2}}}
+
+\_newpublic\_def \.#1{{\_bf#1}}
+
+ \_doc
+ The \`\toright` and \`\toleft` macros are based on the
+ \o`\setpos` and \o`\posx` macros. The printing point is shifted by `\posx`
+ to the left (i.e.\ to the left boundary of the sheet) and then it is shifted
+ to the desired space by `\kern\hoffset+\hsize`.
+ This idea is moved from \tricklink[torighteq]{0028}.
+ \_cod
+
+\_newcount \.tomarginno
+\_def\.toright #1{\_incr\.tomarginno {\_setpos[_math_tr:\_the\.tomarginno]%
+ \_rlap{\_kern-\_posx[_math_tr:\_the\.tomarginno]\_kern\_hoffset\_kern\_hsize\_llap{#1}}}}
+\_def\.toleft #1{\_incr\.tomarginno {\_setpos[_math_tr:\_the\.tomarginno]%
+ \_rlap{\_kern-\_posx[_math_tr:\_the\.tomarginno]\_kern\_hoffset\_rlap{#1}}}}
+
+\_nspublic \toright \toleft ;
+
+ \_doc
+ The \`\subeqmark` works because the internal \O`\_thednum`
+ is re-defined. The \`\.dnumpost` is added here. If you want to use another format
+ for \O`\_thednum` then you have to add the \`\.dnumpost` to it too.
+ \_cod
+
+\_def \_thednum {(\_the\_dnum \.dnumpost)}
+\_def\.dnumpost{}
+\_def\.subeqmark #1{\_def\.dnumpost{#1}\_lowercase{\_ifx a#1}\_else \_decr\_dnum\_fi \_eqmark}
+
+\_nspublic \subeqmark ;
+
+ \_doc
+ \`\textvariables`, \`\textdigits`, \`\textmoremath` initialize
+ new two families 5, 6 using `\.textmathini` and sets `\mathcode`s
+ of given characters to these families.
+ Moreover, `\textvariables` adds `\fam` register setting to `\rm` and `\it`
+ selectors and re-set Greek variables to use only math font (because we
+ are not sure if Greek letters are in the current text fonts).
+ \_cod
+
+\_def\.textmathini{%
+ \_fontdef\.mathrm{\_rm}\_fontdef\.mathit{\_it}%
+ \_fontdef\.mathbf{\_bf}\_fontdef\.mathbi{\_bi}%
+ \_addto\_normalmath{%
+ \_setmathfamily 5 \.mathrm
+ \_setmathfamily 6 \.mathit
+ }%
+ \_addto\_boldmath{%
+ \_setmathfamily 5 \.mathbf
+ \_setmathfamily 6 \.mathbi
+ }%
+ \_normalmath
+ \_let\.textmathini=\_relax
+}
+\_def\.textvariables {\.textmathini \_mathcodes 6 {7{\_Urange a-z \_Urange A-Z}}%
+ \_addto\_marm {\_fam5 }\_addto\_mait{\_fam6 }%
+ \_protected\_def\_itgreek {\_umathrangegreek01\_greekita}%
+ \_protected\_def\_rmgreek {\_umathrangegreek01\_greekrma}%
+ \_protected\_def\_itGreek {\_umathrangeGREEK01\_greekitA \_setnablait}
+ \_protected\_def\_rmGreek {\_umathrangeGREEK01\_greekrmA \_setnablarm}
+ \_itgreek \_rmGreek
+}
+\_def\.textdigits {\.textmathini \_mathcodes 5 {7{\_Urange 0-9}}}
+\_def\.textmoremath {\.textmathini
+ \_mathcodes 5 {5{!?} 2{*+-} 3{=<>} 6{,:;} 0{./|} 4{([\{} 5{\})]}}%
+ \_Umathcode `- = 2 5 "2212 % hyphen behaves like minus in math mode
+}
+\_nspublic \textvariables \textdigits \textmoremath ;
+
+ \_doc
+ \`\replacemissingchars``<family>` defines `\UnicodeMathSymbol` and reads
+ `unimath-table.opm`, i.e.\ it does for each math character following
+ if the character is missing in main math font and if it is present in
+ added font and if it is not already replaced character then apply new math
+ code or `\Umathaccent` definition. Its name is added to `\.alist` or
+ `\.clist`. The new codes are declared by `\matchars<family>{<expanded>\clist}`.
+ The `\.rlist` is the list of characters already replaced. They are not
+ replaced again if a new `\replacemissingchars` is used.
+ \_cod
+
+\_def\.rlist{}
+\_def\.replacemissingchars#1{%
+ \_def\.alist{}\_def\.clist{}
+ \_def\UnicodeMathSymbol##1##2##3##4{%
+ \_iffontchar\_textfont1##1 \_else % not in main math font
+ \_iffontchar\_textfont#1 ##1 % is presnet in added font
+ \_isinlist\.rlist{##2}\_iffalse % not already replaced
+ \_ifx##3\_mathaccent
+ \_protected\_def##2{\_Umathaccent fixed 7 #1 ##1 }%
+ \_addto\.alist{##2}%
+ \_else
+ \_addto\.clist{##2}%
+ \_fi\_fi\_fi\_fi
+ }
+ \_input unimath-table.opm
+ \_wlog{^^J\_string\replacemissingchars: From \_string\fam=\_string#1 is printed now:^^J%
+ CHARACTERS: \.clist^^JACCENTS: \.alist^^J}%
+ \_ea\_mathchars \_expanded{\_noexpand#1{\.clist}}%
+ \_edef\.rlist{\.rlist\.clist\.alist}%
+ \_def\.alist{}\_def\.clist{}\_let\UnicodeMathSymbol=\_undefined
+}
+\_nspublic \replacemissingchars ;
+
+ \_doc
+ \`\scriptspaces``{<s-rel>}{<s-bin>}{<ss-rel>}{<ss-bin>}`
+ sets internal \LuaTeX/ registers represented by
+ appropriate primitives, see section 7.5 in the \LuaTeX/ manual.
+ \_cod
+
+\_def\.scriptspaces #1#2#3#4{%
+ \_Umathordrelspacing\_scriptstyle=\.orzeromu{#1}\_relax
+ \_Umathrelordspacing\_scriptstyle=\.orzeromu{#1}\_relax
+ \_Umathordrelspacing\_crampedscriptstyle=\.orzeromu{#1}\_relax
+ \_Umathrelordspacing\_crampedscriptstyle=\.orzeromu{#1}\_relax
+ \_Umathordbinspacing\_scriptstyle=\.orzeromu{#2}\_relax
+ \_Umathbinordspacing\_scriptstyle=\.orzeromu{#2}\_relax
+ \_Umathordbinspacing\_crampedscriptstyle=\.orzeromu{#2}\_relax
+ \_Umathbinordspacing\_crampedscriptstyle=\.orzeromu{#2}\_relax
+ \_Umathordrelspacing\_scriptscriptstyle=\.orzeromu{#3}\_relax
+ \_Umathrelordspacing\_scriptscriptstyle=\.orzeromu{#3}\_relax
+ \_Umathordrelspacing\_crampedscriptscriptstyle=\.orzeromu{#3}\_relax
+ \_Umathrelordspacing\_crampedscriptscriptstyle=\.orzeromu{#3}\_relax
+ \_Umathordbinspacing\_scriptscriptstyle=\.orzeromu{#4}\_relax
+ \_Umathbinordspacing\_scriptscriptstyle=\.orzeromu{#4}\_relax
+ \_Umathordbinspacing\_crampedscriptscriptstyle=\.orzeromu{#4}\_relax
+ \_Umathbinordspacing\_crampedscriptscriptstyle=\.orzeromu{#4}\_relax
+}
+\_def\.orzeromu#1{\_ifx^#1^0mu\_else#1\_fi}
+
+\_nspublic \scriptspaces ;
+
+\_endnamespace
+\_endcode
+
+\sec Summary
+
+This package provides various extensions usable for math typesetting. Mostly
+of them are inspired from
+\ulink[http://petr.olsak.net/optex/optex-tricks.html]{\OpTeX/ tricks} www page.
+
+The following macros are defined in this package:
+\begitems
+* \~`\bigp`, \~`\Bigp`, \~`\biggp`, \~`\Biggp`, \~`\autop`, \~`\normalp`
+ gives better controlling of sizes of parentheses.
+* \~`\smartdots` declares `\dots` macro more intelligent.
+ \~`\smartvert` declares \"`|`" for better spacing.
+* There are many common math macros for sets or for operators, for example
+ \~`\R` or \~`\sgn`.
+* \~`\toright`, \~`\toleft` puts the \o`\eqmark` to desired position,
+ \~`\subeqmark` prints the given suffix as a part of the equation mark.
+* \~`\scriptspaces` sets more spaces around rel, bin in script and scripscript styles.
+* \~`\textvariables`, \~`\textdigits`, \~`\textmoremath`
+ enables characters from used text font in math mode
+ (variables, digits, more characters).
+* \~`\replacemissingchars` allows to re-declare all characters missing in math font
+ for printing them from additional math font.
+\enditems
+
+This package is not definitive. I plan to add more features in new versions
+if needed. Moreover, this package gives an example for package writers how
+to write their own packages, see section~\ref[pkgtemplate].
+
+\sec Controlled sizes of parentheses
+
+If you write `$f(x(y+z))$` then the outer parentheses should be bigger.
+Classical Plain \TeX/ provides macros \O`\bigl`, \O`\bigr`, etc., they can
+be used in this manner: `$f\bigl(x(y+z)\bigr)$`. But the source file looks
+bad with such markup. Better is to say that parentheses have to be bigger
+using a single prefix before functional symbol, i.e. `$\bigp f(x(y+z))$`.
+This should be print the same as previous example with \O`\bigl`, \O`\bigr`.
+
+The prefixes \^`\bigp` (big pair), \^`\Bigp` (Big pair),
+\^`\biggp` (bigg pair) and \^`\Biggp` (Bigg pair) are provided,
+they can be used before a functional symbol. The scaled parentheses
+surrounding the functional parameter can be (...) or [...] or `\{`...`\}` or
+\{...\}. I.e.\ `\Bigp\Gamma [x]` is the same as `\Gamma \Bigl[x\bigr]`.
+Moreover, the functional parameter gets its own \TeX/ group, so
+`\Bigp G(a\over2)` results to `G\Bigl({a\over2}\bigr)`.
+There are two more prefixes \^`\autop` and \^`\normalp`. First one applies
+`\left`, `\right` to the parentheses of the parameter, second one keeps
+the parentheses unscaled. If you want to scale the parentheses without
+preceding functional symbol then use dot instead this symbol, for example
+`\Bigp.(a)` is equal to `\Bigl(a\Bigr)`.
+
+Examples:
+\begtt
+$$
+ \displaylines{
+ \Biggp F (1+\biggp g (1+\Bigp f(1+\bigp f(1+f(x))))) \cr
+ f(x(y+z)),\quad \bigp f(x(y+z)),\quad \autop f (a\over b)\cr
+ \Bigp f(a\over b+c),\quad \Bigp f(x^2\over2),\quad \Bigp.(a\over b)
+ }
+$$
+\endtt
+gives:
+$$
+ \displaylines{
+ \Biggp F (1+\biggp g (1+\Bigp f(1+\bigp f(1+f(x))))) \cr
+ f(x(y+z)),\quad \bigp f(x(y+z)),\quad \autop f (a\over b)\cr
+ \Bigp f(a\over b+c),\quad \Bigp f(x^2\over2),\quad \Bigp.(a\over b)
+ }
+$$
+
+\sec Intelligent `\dots` like in AMS\TeX
+
+AMS\TeX/ provides \o`\dots` macro which works depending on the context. If it is surrounded
+by symbols like $+$, $-$, $=$ then it works like \o`\cdots`, if it is surrounded by
+comma or similar symbols then it works like \o`\ldots`.
+This package keeps \o`\dots` unchanged but it is changed (and behaves as
+mentioned above) after the \^`\smartdots` declaration.
+
+\smartdots
+You can try this after the \^`\smartdots` declaration:
+\medskip
+
+`$a_1, a_2, \dots, a_n$ ` prints $a_1, a_2, \dots, a_n$,
+
+`$a_1 + a_2 + \dots + a_n$ ` prints $a_1 + a_2 + \dots + a_n$,
+
+
+\sec Using vertical bars with better spacing
+
+The character \"`|`" is declared with Ord class by default in Plain \TeX/,
+but we are using it typically in the context `$|x|$`. It means there should
+be Open and Close classes. This example gives correct result but try to use
+`$|-1|$` which gives bad spacing: $|-1|$.
+And `$||x||$` gives bad result too.
+
+When you declare \^`\smartvert`, these problems are solved. Moreover, the
+\"`|`" or \"`||`" are expected to be always in pairs and they are scaled by
+`\left` and `\right` primitives automatically. If you don't want to use it
+in a pair, use \^`\singlevert` or `\big|`, or `\Big|` etc. Compare
+the result of `$|\sum a_n|+||x||$`:
+$$
+ \eqalign{
+ |\sum a_n|+||x|| &\quad \hbox{if \scantextokens{`\smartvert`} isn't initialized,}\cr
+ \smartvert
+ |\sum a_n|+||x|| &\quad \hbox{if \scantextokens{`\smartvert`} is initialized.}
+ }
+$$
+
+\sec Basic and typical macros for sets, functions etc.
+
+These typical macros are defined in `math.opm`:
+\^`\N` for $\N$, \^`\Z` for $\Z$, \^`\Q` for $\Q$, \^`\R` for $\R$, \^`\C` for $\C$,
+\^`\sgn`, \^`\argmin`, \^`\argmax`, \^`\grad`, \^`\rank`, \^`\tr`, \^`\diag`, \^`\Span`, \^`\Rng`,
+\^`\Null`, \^`\Ker`, \^`\Res`, \^`\tg`, \^`\arctg`.
+
+I hate the \^`\frac`, \^`\dfrac` and \^`\tfrac` macros defined in \LaTeX/
+but someone may want to use them. This package defines them.
+But I note: usage of `$1\over2$` for $1\over2$
+is much more understandable than \LaTeX's `$\frac12$`.
+
+The vectors and matrices are ususally printed by `{\bf A}{\bf x}`.
+The package provides a shortcut `\.<letter>` to do the same, so user can write
+`\.A\.x` for multiplication of a matrix $\.A$ by a vector $\.x$.
+We strictly don't recommend usage of `\.`, `\v`, `\=`, etc.\ for accents, so
+`math.opm` can define `\.` differently than the classical meaning \"dotaccent".
+
+\sec Equation marks in atypical cases
+
+We want to put equation marks `\eqmark` in more lines in display mode when we
+are using macros not designed for such case. For example in the lines of
+the `\cases` macro:
+
+\begtt
+$$ f(x) = \cases{0 & for $x<0$\toright\eqmark \cr
+ 1 & otherwise\toright\eqmark } $$
+\endtt
+This puts the equation marks to the right margin in each line generated by
+the `\cases` macro.
+$$ f(x) = \cases{0 & for $x\string<0$\toright\eqmark \cr
+ 1 & otherwise\toright\eqmark }
+$$
+The \^`\toright`\o`\eqmark` is used here. Analogically,
+\^`\toleft`\o`\eqmark` puts the equation mark to the left margin.
+The position of these marks are correct after second or more \TeX/ run
+because \TeX/ needs to read data from its previous run in this case.
+
+Sometime we want to declare a bunch of equations with the same numeric
+equation marks but with different suffixes, for example (1.1a), (1.1b). We
+provide the macro \^`\subeqmark``<suffix>` here.
+If `<suffix>` is `a` or `A` then \^`\subeqmark` starts a new bunch of
+equations with the next number. Following `\subeqmark b`, `\subeqmark c`,
+etc.\ use the same equation number, they differ only by given suffixes:
+You can put `[<label>]` after `<suffix>` for referencing purposes.
+Example:
+
+\begtt
+$$\adef~{\kern.5em }
+ \eqalignno{
+ x + 2y + 3z &= 600 & \subeqmark a \cr
+ 12x + ~y - 3z &= -7 & \subeqmark b[label] \cr
+ 4x - ~y + 5z &= ~5 & \subeqmark c \cr
+ }
+$$
+The equation~\ref[label] has negative right side. Moreover, it applies
+$$
+ a^2 + b^2 = c^2. \eqmark
+$$
+\endtt
+prints
+$$\adef~{\kern.5em }
+ \eqalignno{
+ x + 2y + 3z &= 600 & \subeqmark a \cr
+ 12x + ~y - 3z &= -7 & \subeqmark b[label] \cr
+ 4x - ~y + 5z &= ~5 & \subeqmark c \cr
+ }
+$$
+The equation~\ref[label] has negative right side. Moreover, it applies
+$$
+ a^2 + b^2 = c^2. \eqmark
+$$
+
+\sec Setting more spaces in script styles
+
+Classical \TeX/ puts \n`\thickmuskip` around relations and \n`\medmuskip` around
+binary operators only in \n`\textstyle` and \n`\displaystyle`. These spaces are
+missing in \n`\scripstyle` and \n`\scriptscriptstyle`. It means that we get, for
+example
+$$
+ \sum_{i=j+1}^\infty a_i
+$$
+The formula $i=k+1$ has no spaces here, so it looks unattractive. \LuaTeX/
+provides better control of all such spaces, so `math.opm` declares the macro
+\^`\scriptspaces``{<s-rel>}{<s-bin>}{<ss-rel>}{<ss-bin>}` for setting
+these spaces. <s-rel> is \"muskip" value used around relations in \n`\scriptstyle`,
+<s-bin> is \"muskip" used around binary operators in \n`\scriptstyle` and the
+last two parameters gives these spacing in \n`\scriptscriptstyle`.
+If a parameter is empty, it means that it has zero value.
+For example after `\scriptspaces {2mu}{1.3mu}{}{}`
+the formula mentioned above looks like
+$$
+ \scriptspaces {2mu}{1.3mu}{}{}
+ \sum_{i=j+1}^\infty a_i
+$$
+It looks better, doesn't it?
+
+\sec Variables and digits from currently used text font
+
+When Unicode math font is loaded then all variables and digits are printed
+from it in math mode. If you are using text fonts with another visual
+concept then you can see a differences when you use digits in text mode and in
+math mode. You can specify \^`\textdigits` if you want to use digits from
+current text `\rm` font in math and \^`\textvariables` if you want to use
+variables from current text `\it` font in math.
+You can set printing of
++−*/=<>\{([])\} from text `\rm` font in math by \^`\textmoremath`.
+You can inspire from the \^`\textmoremath` macro and set more similar
+characters from text font.
+
+You have to load a text font family (using \o`\fontfam` for example) first and
+use \^`\textdigits`, \^`\textvariables`, \^`\textmoremath` after it. This is
+due to these macros reads {\em current} text \o`\rm` and \o`\it` fonts and set
+them to math printing.
+
+Note that we cannot avoid a visual incompatibility of parentheses when they
+are use in the context \n`\left`, \n`\right`. These parentheses must be printed
+from math font always because text font is unable to create bigger versions of
+them.
+
+\sec Replacing all missing math characters from another font
+
+If we load an additional math font by \o`\addUmathfont`, for example:
+\begtt
+\addUmathfont \xits {[XITSMath-Regular]}{} {[XITSMath-Bold]}{} {}
+\endtt
+then we can re-declare the code of arbitrary math character in such a way
+that it is printed from this additional font. It can be done by \o`\mathchars`
+provided by \OpTeX/, for example:
+\begtt
+\mathchars \xits {\leftdasharrow \updasharrow \rightdasharrow \downdasharrow}
+\endtt
+But this method enables to re-declare only selected characters. Maybe, you
+want to re-declare {\em all} Unicode math characters which are missing in the main font.
+This can be done by \^`\replacemissingchars`\,`<family>` provided by the
+`math.opm`. For example
+\begtt
+\replacemissingchars \xits
+\endtt
+replaces all characters missing in the main font by characters from the
+`\xits` declared by previous \o`\addUmathfont`.
+The names of all replaced characters are printed in log file.
+If the additional math font doesn't provide all Unicode math characters
+then you can load a next additional math font using another \o`\addUmathfont` and do
+\^`\replacemissingchars`\,`<family>` again. Only those characters not replaced
+by previous steps are replaced.
+
+
+\sec[pkgtemplate] General recommendation for writing packages
+
+This section has nothing common with the subject of this package but this package
+can serve as inspiration for another package writers. It should be a template
+for another `<pkg>.opm` files. We emphasize several principles here.
+The basic information can be found in
+\ulink[https://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf\#ref:prefixed]
+{section 2.2} of the \OpTeX/ manual.
+Try to run\fnote{Run it three times because Table of contents and Index are created.}
+\begtt
+optex -jobname math-doc '\docgen math'
+\endtt
+for creating this documentation. You can see (from the log file) that the
+`math.opm` is read four times during this process. First one is due to
+\o`\docgen`~`math`. It skips the part before \o`\_endcode` and searches the
+following {`\_doc...\_cod`} pair in the file and processes it (see the end
+of the file `math.opm`). The macros and main instruction about generating
+toc, index, etc.\ are here. First instruction is \o`\load``[doc,math]` which
+initializes `doc` mode of \OpTeX/ and loads `math.opm` secondly because we
+want to show some effects provided by this package. Then there is
+\o`\printdoctail`~`math.opm` which loads the `math.opm` again and prints the
+documentation starting from \o`\_endcode`. Finally, there is
+\o`\printdoc`~`math.opm` which prints the codes mixed by the documentation
+text inside pairs {`\_doc...\_cod`}. This causes the fourth loading of the
+`math.opm` file.
+
+The first part of the `math.opm` file looks like:
+\begtt \catcode`\<=13 \adef!{\string}
+% Optional comments
+
+\_def\_<pkg>_version {<version-number>, <version-date>}
+\_codedecl \pkgsequence {Doing the life more comfortable !<\_<pkg>_version>}
+\_namespace{<pkg>}
+\endtt
+The `\_<pkg>_version` macro should be declared here. The macro should expand
+to version number followed by version date. User can check
+the package version simply by expanding this macro after the package is
+loaded. And we want to have this data only at single place of the file.
+You may check the log file if the text given by `\_codedecl` isn't too long
+and isn't broken to more lines. Keeping single line is better because users can
+`grep @:` on log file in order to get information of all loaded packages
+and their version numbers.
+
+The \o`\_namespace``{<pkg>}` opens the name space used by your package where all
+`\.foo` are internally transformed to `\_<pkg>_foo`. Next part of the file
+includes the code itself documented in {`\_doc...\_cod`} pairs. It is
+finished by \o`\_endnamespace` which finalizes the scope where `\.foo` are
+transformed to `\_<pkg>_foo` and by \o`\_endcode` which does \n`\endinput` when
+the macros are load. Final part of the file after \o`\_endcode` can include
+more detailed documentation.
+
+If you have any idea of creating a macro package, you probably start with
+experimental macros in user name space. It means that there are
+`\def\mymacro` etc. Once such a code is working, you can include it to the
+macro package introduced by \o`\_namespace``{<pkg>}`. You have to go through
+your code carefully sequence per sequence and insert `_` or `.` in front of
+their name. The \"`_`" have to be used if the sequence is a primitive or
+\OpTeX/ macro and the \"`.`" if it is your macro. So, the code fragment
+`\def\mymacro` have to be rewritten to `\_def\.mymacro`. If the macro
+`\mymacro` is intended for usage in the user space, then append
+`\_nspublic \mymacro ;` too.
+
+Sometimes you may want to define a macro only for user space. Then
+use prefix \O`\_newpublic` before your declaration, see declaration of
+ \^`\sgn` in this package as an exampe. The reason is: if
+a user has defined such a macro already then the warning is printed.
+The user can read this warning and declare the macro after
+`\load[<pkg>]` in this case.
+
+ \_doc
+ \load [doc,math]
+ \def\opurl{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+ \def\tnurl{http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf}
+ \def\trurl{http://petr.olsak.net/optex/optex-tricks.html}
+ \def\tricklink[#1]#2{\ea\ulink \ea[\trurl\##1]{\OpTeX/ trick #2}}
+ \def\exlink#1#2{\ea\ulink\expanded{[#2\csstring#1]{\hbox{\tt\string#1\,}}}}
+ \def\o`#1`{\exlink#1{\opurl\#cs:^}}
+ \def\O`#1`{\exlink#1{\opurl\#cs:}}
+ \def\n`#1`{\exlink#1{\tnurl\#cs:}}
+ \outlines 0
+
+ \tit Macros for doing math more comfortable
+ \hfill Version: \_math_version \par
+ \centerline{\it Petr Olšák\/\fnotemark1, 2022}
+ \fnotetext{\url{https://petr.olsak.net}}
+
+ \notoc\nonum\sec Table of contents
+ \maketoc
+ \printdoctail math.opm % prints the documantation written after \_endcode
+ \sec Implementation
+ \printdoc math.opm % prints \_doc...\_cod parts + code before \_endcode
+ \nonum\sec Index
+ \begmulti 3
+ \tt \makeindex % prints index in three columns
+ \endmulti
+ \bye
+ \_cod
+
+\endinput
+
+0.02, 2022-11-26: \smartvert introduced
+0.01, 2022-11-25: released
diff --git a/macros/optex/pkg/mte.opm b/macros/optex/pkg/mte.opm
index e0687001d6..0c8b22152a 100644
--- a/macros/optex/pkg/mte.opm
+++ b/macros/optex/pkg/mte.opm
@@ -2,7 +2,8 @@
% mte.opm, Petr Olšák <petr@olsak.net>, 2021
% See end of the file for more information
-\_codedecl \enablemte {MicroTypographic Extension <2021-05-23>}
+\_def \_mte_version {0.1, 2021-05-23}
+\_codedecl \enablemte {MicroTypographic Extension <\_mte_version>}
\_namespace{mte}
\_doc -------------------
@@ -608,6 +609,7 @@
\_endcode
\tit MicroTypographic Extensions for \OpTeX/
+\hfill v. \_mte_version
\centerline{\it Petr Olšák, 2021}
\bigskip
@@ -680,6 +682,30 @@ that a specific font family needs different microtypographic data, please
let me know. I can add extra definitions to appropriate font family
file.
-\_endinput
+\_doc
+ % Run optex -jobname mte-doc '\docgen mte'
+ % (two times) to generate documentation including references and the index.
+
+ \load [doc]
+
+ \def\elink[#1]#2{%
+ \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf\#cs:#1]%
+ {\tt\string#2}%
+ }
+ \def\olink[#1]#2{%
+ \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf\#cs:#1]%
+ {\tt\string#2}%
+ }
+
+ \printdoctail mte.opm
+ \printdoc mte.opm
-Use "optex mte-doc.tex" (twice) to generate documentation from this file.
+ \nonum\sec Index
+ \begmulti 3
+ \tt \makeindex
+ \endmulti
+
+ \bye
+\_cod
+
+\_endinput
diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.dtx b/macros/unicodetex/latex/njuthesis/njuthesis.dtx
index b3da068451..1a87ed55fc 100644
--- a/macros/unicodetex/latex/njuthesis/njuthesis.dtx
+++ b/macros/unicodetex/latex/njuthesis/njuthesis.dtx
@@ -119,7 +119,7 @@ To produce the documentation run the original source files ending with
%<*!(driver|install)>
% ^^A 诚耀百廿,雄创一流
% ^^A 南京大学一百二十周年华诞邀您共襄盛举!
-%<+!driver>\GetIdInfo $Id: njuthesis.dtx 1.1.0 2022-10-23 12:30:00
+%<+!driver>\GetIdInfo $Id: njuthesis.dtx 1.1.1 2022-12-04 00:00:00
%<+!driver> +0800 NJU LUG <git+nju-lug-email-3104-issue-@yaoge123.cn>$
%<class> {Thesis template for Nanjing University}
%<class>\ProvidesExplClass{njuthesis}
@@ -355,7 +355,7 @@ To produce the documentation run the original source files ending with
% \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue-@yaoge123.cn}
% {git+nju-lug-email-3104-issue-@yaoge123.cn}}}
%
-% \date{v1.1.0 \quad 2022-10-23}
+% \date{v1.1.1 \quad 2022-12-04}
%
% \changes{v0.1}{2021/09/04}{开始开发。}
% \changes{v0.2}{2021/09/07}{初步搭建了可用的模板。}
@@ -444,51 +444,51 @@ To produce the documentation run the original source files ending with
% 封面、摘要的设计参考了部分既有报告。
%
%
-% \subsection{开始之前}
-% \label{subsec:first-things-first}
-%
-% 在本文正式介绍 \cls{njuthesis} 论文模板前,您也许并不熟悉 \TeX{}
-% 排版系统。话不多说,请先按部就班体验一遍下述的工作流程:
-%
-% \bigskip
-% \fcolorbox{olgreen}{gray!5}{\parbox{\textwidth-5em}{%
-% \hspace{2em}\begin{minipage}[c]{10cm}
-% \begin{enumerate}
-% \item 访问 \url{https://tex.nju.edu.cn}
-% \item 点击右上角~\olbutton{注册}~按钮,
-% 用\href{https://itsc.nju.edu.cn/1b/ce/c21586a334798/page.htm}
-% {南大邮箱}注册账号
-% \item 登录您的账号
-% \item 点击左上角~\olbutton{创建新项目}~按钮,选择~\olbutton{论文模板}
-% \item 随意取名,点击~\olbutton{创建}~按钮
-% \end{enumerate}
-% \end{minipage}}}
-%
-% \bigskip
-% 稍等片刻,您会在浏览器右侧发现一份新生成的空白论文。
-% 如果它的效果令您满意,不妨以本模板为基础开始写作。
-%
-% \subparagraph{我一定要体验上述流程吗?}
-% 是,但也不一定。有人坚持认为应该做一些\emph{直观、清晰、有手就行、一
-% 条路走到底}的教程,而不是\emph{长篇累牍的精细介绍},其核心论据在于:
-% 现代人类总体上需要快速取得成就感,而且大部分可能用到本模板的同学不
-% 会具备必要的基础知识。反驳的观点在于过分简单的实验总是浪费时间的,
-% 尤其是在您可能早已掌握基本用法的情况下。但,不论如何,这番操作总会
-% 使您预览到 \cls{njuthesis} 论文模板的实际样式。
-%
-% \subparagraph{我并没有见到理想的结果。}
-% 具体是哪里不满意?如果是\emph{样式存在偏差},请联系模板的作者;如果
-% \emph{不能访问前文提到的在线编译网站},请考虑检查网络连接,依次咨询
-% 本校\href{https://itsc.nju.edu.cn}{信息化管理建设服务中心}和该网站
-% 的维护者\href{mailto:my@yaoge123.cn}{姚舸老师};如果\emph{报错},请
-% 点击左上角的菜单按钮,查看编译器是否显示为 |XeLaTeX|;
-% 再如果\emph{还有其他原因},通过这几分钟的实验我们也可以得到一个极其
-% 有益的结论:\emph{也许 Word 模板更加适合您}。这可以节省下熟悉
-% \TeX{} 排版软件使用方法所需的可观时间。
-%
-% \subparagraph{但我依然对 \LaTeX 一无所知!}
-% 这意味着您真的得花些时间在\emph{长篇累牍的精细介绍}上。
-% 如果您已经下定决心,请接着向后阅读,有需要时善用搜索引擎。
+% ^^A \subsection{开始之前}
+% ^^A \label{subsec:first-things-first}
+%
+% ^^A 在本文正式介绍 \cls{njuthesis} 论文模板前,您也许并不熟悉 \TeX{}
+% ^^A 排版系统。话不多说,请先按部就班体验一遍下述的工作流程:
+%
+% ^^A \bigskip
+% ^^A \fcolorbox{olgreen}{gray!5}{\parbox{\textwidth-5em}{%
+% ^^A \hspace{2em}\begin{minipage}[c]{10cm}
+% ^^A \begin{enumerate}
+% ^^A \item 访问 \url{https://tex.nju.edu.cn}
+% ^^A \item 点击右上角~\olbutton{注册}~按钮,
+% ^^A 用\href{https://itsc.nju.edu.cn/1b/ce/c21586a334798/page.htm}
+% ^^A {南大邮箱}注册账号
+% ^^A \item 登录您的账号
+% ^^A \item 点击左上角~\olbutton{创建新项目}~按钮,选择~\olbutton{论文模板}
+% ^^A \item 随意取名,点击~\olbutton{创建}~按钮
+% ^^A \end{enumerate}
+% ^^A \end{minipage}}}
+%
+% ^^A \bigskip
+% ^^A 稍等片刻,您会在浏览器右侧发现一份新生成的空白论文。
+% ^^A 如果它的效果令您满意,不妨以本模板为基础开始写作。
+%
+% ^^A \subparagraph{我一定要体验上述流程吗?}
+% ^^A 是,但也不一定。有人坚持认为应该做一些\emph{直观、清晰、有手就行、一
+% ^^A 条路走到底}的教程,而不是\emph{长篇累牍的精细介绍},其核心论据在于:
+% ^^A 现代人类总体上需要快速取得成就感,而且大部分可能用到本模板的同学不
+% ^^A 会具备必要的基础知识。反驳的观点在于过分简单的实验总是浪费时间的,
+% ^^A 尤其是在您可能早已掌握基本用法的情况下。但,不论如何,这番操作总会
+% ^^A 使您预览到 \cls{njuthesis} 论文模板的实际样式。
+%
+% ^^A \subparagraph{我并没有见到理想的结果。}
+% ^^A 具体是哪里不满意?如果是\emph{样式存在偏差},请联系模板的作者;如果
+% ^^A \emph{不能访问前文提到的在线编译网站},请考虑检查网络连接,依次咨询
+% ^^A 本校\href{https://itsc.nju.edu.cn}{信息化管理建设服务中心}和该网站
+% ^^A 的维护者\href{mailto:my@yaoge123.cn}{姚舸老师};如果\emph{报错},请
+% ^^A 点击左上角的菜单按钮,查看编译器是否显示为 |XeLaTeX|;
+% ^^A 再如果\emph{还有其他原因},通过这几分钟的实验我们也可以得到一个极其
+% ^^A 有益的结论:\emph{也许 Word 模板更加适合您}。这可以节省下熟悉
+% ^^A \TeX{} 排版软件使用方法所需的可观时间。
+%
+% ^^A \subparagraph{但我依然对 \LaTeX 一无所知!}
+% ^^A 这意味着您真的得花些时间在\emph{长篇累牍的精细介绍}上。
+% ^^A 如果您已经下定决心,请接着向后阅读,有需要时善用搜索引擎。
%
%
% \subsection{历史沿革}
@@ -868,37 +868,37 @@ To produce the documentation run the original source files ending with
% {\color{red}|[!]|} 请注意,在线编辑器不一定提供良好的文件恢复和版本管理机制。
% 请谨慎备份您的心血结晶。
%
-% \subsubsection{南大 \TeX 平台简介}
-% \changes{v0.2}{2021/09/07}{添加对南大 \TeX 的支持。}
+% ^^A \subsubsection{南大 \TeX 平台简介}
+% ^^A \changes{v0.2}{2021/09/07}{添加对南大 \TeX 的支持。}
%
-% \href{https://tex.nju.edu.cn}{南大 \TeX} 基于开源的 Overleaf 社区版平台构建
-% \footnote{理论上在\href{https://doc.nju.edu.cn/books/latex}{这个网站}能找到
-% 一段平台简介,实际上大家都有意无意地鸽了,下次一定补上。},于2021年3月4日正
-% 式上线,是 \href{https://sci.nju.edu.cn/}{eScience 中心}为南大在校师生提供的
-% \LaTeX 在线编辑器,首次使用需凭学校邮箱自助注册账号。
+% ^^A \href{https://tex.nju.edu.cn}{南大 \TeX} 基于开源的 Overleaf 社区版平台构建
+% ^^A \footnote{理论上在\href{https://doc.nju.edu.cn/books/latex}{这个网站}能找到
+% ^^A 一段平台简介,实际上大家都有意无意地鸽了,下次一定补上。},于2021年3月4日正
+% ^^A 式上线,是 \href{https://sci.nju.edu.cn/}{eScience 中心}为南大在校师生提供的
+% ^^A \LaTeX 在线编辑器,首次使用需凭学校邮箱自助注册账号。
%
-% {\color{red}|[!]|} 在 2022 年 5 月的运行中,该网站出现了多次崩溃事件,
-% 初步判断原因是由社区版并没有为高并发数做优化引发的。
-% 高峰时期,仍然建议在本地部署 \TeX 发行版。
+% ^^A {\color{red}|[!]|} 在 2022 年 5 月的运行中,该网站出现了多次崩溃事件,
+% ^^A 初步判断原因是由社区版并没有为高并发数做优化引发的。
+% ^^A 高峰时期,仍然建议在本地部署 \TeX 发行版。
%
-% \subsubsection{操作步骤}
+% ^^A \subsubsection{操作步骤}
%
-% 本说明手册开头的 \ref{subsec:first-things-first} 即呈现了网站内嵌的
-% \cls{njuthesis} 模板的使用方法。由于南大 \TeX 网站已预装 \cls{njuthesis},
-% 可以直接编写正文,无需 \file{.cls} 等格式文件。
-% 如果有其他要求,也可以按如下步骤手动上传包含模板的压缩包。
+% ^^A 本说明手册开头的 \ref{subsec:first-things-first} 即呈现了网站内嵌的
+% ^^A \cls{njuthesis} 模板的使用方法。由于南大 \TeX 网站已预装 \cls{njuthesis},
+% ^^A 可以直接编写正文,无需 \file{.cls} 等格式文件。
+% ^^A 如果有其他要求,也可以按如下步骤手动上传包含模板的压缩包。
%
-% \begin{enumerate}
-% \item 访问\href{https://tex.nju.edu.cn}{南大 \TeX 网站},
-% 点击界面右上方“注册”按钮,使用\emph{南京大学邮箱}注册账号并登录
-% \item 新建空白项目,或者上传 \ref{subsubsec:on-the-fly-installation} 节得到的压缩文件。
-% \item 在项目页面左上角的“菜单”中,确认编译器为 |XeLaTeX| 或者 |LuaLaTeX|
-% \item 仿照 \file{njuthesis-sample.tex} 编写论文
-% \item 点击“重新编译”按钮进行编译和预览
-% \end{enumerate}
+% ^^A \begin{enumerate}
+% ^^A \item 访问\href{https://tex.nju.edu.cn}{南大 \TeX 网站},
+% ^^A 点击界面右上方“注册”按钮,使用\emph{南京大学邮箱}注册账号并登录
+% ^^A \item 新建空白项目,或者上传 \ref{subsubsec:on-the-fly-installation} 节得到的压缩文件。
+% ^^A \item 在项目页面左上角的“菜单”中,确认编译器为 |XeLaTeX| 或者 |LuaLaTeX|
+% ^^A \item 仿照 \file{njuthesis-sample.tex} 编写论文
+% ^^A \item 点击“重新编译”按钮进行编译和预览
+% ^^A \end{enumerate}
%
%
-% \subsubsection{其他平台}
+% ^^A \subsubsection{其他平台}
%
% \subparagraph{Overleaf}
% \changes{v0.12}{2021/12/07}{更新了对 Overleaf 的支持情况。}
@@ -1225,6 +1225,19 @@ To produce the documentation run the original source files ending with
% \end{talltblr}
% \end{table}
%
+% macOS 用户需要额外注意的是,此系统内置的 Times New Roman 并没有 smcp
+% 这一特性,所以 \tn{textsc} 命令无法产生正确的小型大写字母字型,导致
+% 研究生模板英文封面的部分内容不能正确显示。另外,macOS 中的 Times 字体
+% 也不包含 smcp 特性。
+% 相应的解决办法是拷贝一份 Windows 预装的 Times New Roman
+% \footnote{Times New Roman(或 TimesNewRomanPSMT)在 Windows 和 macOS
+% 下的区别在于版本。根据我们的测试,Windows 10 下该字体的版本为 7.00,
+% 而 macOS Monterey 下该字体的版本为 5.01.3x。这显然是苹果的问题。},
+% 或者使用 \TeX{} Live 内置的 \TeX{} Gyre Termes 字体
+% \footnote{\TeX{} Gyre Termes 可以视作 Times New Roman 的重制版,两者的
+% 视觉感受是一致的。},这两个字体都具备 smcp 特性。
+% 本模板在检测到 Times New Roman 不包含 smcp 特性时,会抛出警告并使用
+% \TeX{} Gyre Termes 字体进行替换。
%
% \paragraph{数学}
%
@@ -2447,7 +2460,7 @@ To produce the documentation run the original source files ending with
%
% 以下宏包可以在文档类选项中禁用:
% \begin{itemize}
-% \item \pkg{amsthm} 和 \pkg{create-theorem},提供定理类环境支持。
+% \item \pkg{ntheorem},提供定理类环境支持。
% \item \pkg{unicode-math},负责处理 Unicode 编码的 OpenType 数学字体。
% \item \pkg{footmisc},处理脚注。
% \item \pkg{enumitem},调整列表环境。
@@ -3135,11 +3148,16 @@ To produce the documentation run the original source files ending with
\cs_new_protected:Npn \@@_box_multiline:NNNN #1#2#3#4
{
\int_set:Nn #1 { 1 }
- \int_set:Nn #2 { \clist_count:N #3 }
- \int_compare:nF { #2 > 4 } { \int_set:Nn #2 { 4 } }
+ \int_set:Nn #2 { \int_max:nn { \clist_count:N #3 } { 4 } }
\int_do_until:nn { #1 > #2 }
{
\clist_pop:NN #3 \l_@@_tmpa_tl
+% \end{macrocode}
+% \changes{v1.1}{2022/11/29}{修复空返回值在国家图书馆封面引发的死循环。}
+% 防止空的返回值引发死循环。
+% \begin{macrocode}
+ \quark_if_no_value:NT \l__nju_tmpa_tl
+ { \tl_set_eq:NN \l_@@_tmpa_tl \c_empty_tl }
\@@_box_ulined:NN #4 \l_@@_tmpa_tl \tex_par:D
\int_incr:N #1
}
@@ -3343,18 +3361,15 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
-% \subsubsection{封面相关}
-% \changes{v0.16}{2022/03/10}{将封面和摘要内部函数定义移动到前部。}
-%
-% 定义关于标题的报错信息。
+% \begin{macro}{\@@_msg:nn}
+% 简化提示信息的创建。
% \begin{macrocode}
-\msg_new:nnn { njuthesis } { missing-title }
- {
- The~ title~ should~ not~ be~ left~ blank.\\
- Please~ check~ whether~ you~ have~ fill~ in~
- both~ Chinese~ and~ English~ titles.
- }
+\cs_new:Npn \@@_msg:nn { \msg_new:nnn { njuthesis } }
% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{封面相关}
+% \changes{v0.16}{2022/03/10}{将封面和摘要内部函数定义移动到前部。}
%
% \begin{macro}{\@@_loop_until:nnn}
% 等效于 plain \TeX 的 \tn{loop} 循环,原始结构为\\
@@ -3578,19 +3593,6 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
-% 定义关于标题的报错信息。
-% \begin{macrocode}
-\msg_new:nnn { njuthesis } { abs-title-too-long }
- {
- Your~ title~ is~ too~ long~ to~ fit~ in~ two~ lines.\\
- I~ have~ drawn~ additional~ lines~ to~ contain~ it,~
- which~ will~ probably~ make~ your~ abstract~ page~
- look~ slightly~ different~ from~ the~ standard.\\
- You~ can~ use~ the~ "abstract/title-style"~ key~
- to~ disable~ this~ message.
- }
-% \end{macrocode}
-%
% \begin{macro}{\@@_uline_list:NNn,\@@_uline_list:NNx}
% \changes{v0.16}{2022/03/25}{使用原生断行算法处理摘要页标题。}
% 用于研究生摘要页面的多行标题。
@@ -3811,6 +3813,75 @@ To produce the documentation run the original source files ending with
% \end{macro}
%
%
+% \subsection{提示信息}
+% \changes{v1.1}{2022/12/03}{整理提示信息。}
+%
+% 本节集中定义模板中的错误信息。
+% \begin{macrocode}
+\@@_msg:nn { abs-title-too-long }
+ {
+ Your~ title~ seems~ too~ long~ to~ fit~ in~ two~ lines.\\
+ I~ have~ drawn~ additional~ lines~ to~ contain~ it,~
+ which~ will~ probably~ make~ your~ abstract~ page~
+ look~ slightly~ different~ from~ the~ standard.~
+ You~ can~ use~ the~ "abstract/title-style"~ key~
+ to~ disable~ this~ message.
+ }
+\@@_msg:nn { empty-theorem-type }
+ {
+ Empty~ theorem~ list~ to~ define.\\
+ The~ key~ "theorem/type"~ should~ not~ be~ left~ empty.
+ }
+\@@_msg:nn { load-config }
+ { I~ am~ loading~ config~ file~ "#1". }
+\@@_msg:nn { missing-image }
+ {
+ You~ have~ not~ selected~ local~ files~
+ for~ emblem~ and~ name~ images.\\
+ It~ seems~ that~ you~ haven't~ fill~ in~ both~
+ "image/nju-emblem"~ and~ "image/nju-name",~ therefore
+ I~ am~ using~ the~ package~ "njuvisual"~ instead,~
+ which~ may~ slow~ down~ the~ compilation.
+ }
+\@@_msg:nn { missing-ntheorem }
+ {
+ "ntheorem"~ package~ not~ detected.\\
+ The~ functionality~ of~ built-in~ theorem~ settings~
+ requires~ loading~ the~ class~ with~ "ntheorem"~ option~
+ set~ to~ "true".
+ }
+\@@_msg:nn { missing-title }
+ {
+ Thesis~ title~ should~ not~ be~ left~ blank.\\
+ Please~ check~ whether~ you~ have~ fill~ in~
+ both Chinese~ and~ English~ titles.
+ }
+\@@_msg:nn { no-small-caps }
+ {
+ I~ am~ using~ TeX~ Gyre~ Termes~ as~ default~ Roman~ font.\\
+ This~ is~ because~ the~ "Times~ New~ Roman"~ font~ in~ your~
+ system~ does~ not~ embed~ glyphs~ for~ small~ capitals.~
+ You~ can~ ignore~ this~ warning~ if~ you~ do~ not~ need~
+ \string\textsc.~ For~ more~ information,~
+ please~ refer~ to~ section~ 3.2.6~ of~ the~ documentation.
+ }
+\@@_msg:nn { package-too-old }
+ {
+ Package~ "#1"~ is~ too~ old.\\
+ The~ "njuthesis"~ class only~ supports~ "#1"~ with~
+ a~ version~ higher~ than~ v#2.~
+ Please~ update~ an~ up-to-date~ version~ of~ it~
+ using~ your~ TeX~ package~ manager~ or~ from~ CTAN.
+ }
+\@@_msg:nn { package-conflict }
+ {
+ The~ "#2"~ package~ is~ incompatible~ with~ "#1".\\
+ I~ have~ loaded~ "#1"~ by~ default.~ Maybe~ You~ should~
+ refer~ to~ section~ 4~ of~ the~ documentation.
+ }
+% \end{macrocode}
+%
+%
% \subsection{模板选项}
% \changes{v0.11}{2021/11/15}{进行了效率优化。}
%
@@ -3824,7 +3895,7 @@ To produce the documentation run the original source files ending with
% 学位,默认为学士。
% \begin{macrocode}
type .choices:nn = { bachelor, master, doctor, postdoc }
- { \int_gset_eq:NN \g_@@_info_type_int \l_keys_choice_int },
+ { \int_gset_eq:NN \g_@@_info_type_int \l_keys_choice_int },
type .initial:n = bachelor,
% \end{macrocode}
% \end{macro}
@@ -4086,7 +4157,7 @@ To produce the documentation run the original source files ending with
%
% \begin{macro}{\@@_keys_set:nn}
% \changes{v1.1}{2022/09/26}{使用 \cs{keys_set_filter:nnn} 重构盲审模式。}
-% 在开启盲审模式时,屏蔽被编入 \opt{annoymous} 分组的键值对输入。
+% 在开启盲审模式时,屏蔽被编入 \opt{anonymous} 分组的键值对输入。
% \begin{macrocode}
\bool_if:NTF \g_@@_opt_anon_bool
{
@@ -4346,14 +4417,6 @@ To produce the documentation run the original source files ending with
% \begin{macro}{\@@_check_pkg_version:nnn}
% 检查宏包版本是否过时。
% \begin{macrocode}
-\msg_new:nnn { njuthesis } { package-too-old }
- {
- Package~ "#1"~ is~ too~ old.\\
- The~ njuthesis~ class~ only~ supports~ "#1"~ with~
- a~ version higher~ than~ v#2.\\
- Please~ update~ an~ up-to-date~ version~ of~ it~
- using~ your TeX~ package~ manager~ or~ from~ CTAN.
- }
\cs_new_protected:Npn \@@_check_pkg_version:nnn #1#2#3
{
\@ifpackagelater {#1} {#2}
@@ -4379,12 +4442,6 @@ To produce the documentation run the original source files ending with
% \item 产生冲突的宏包
% \end{arguments}
% \begin{macrocode}
-\msg_new:nnn { njuthesis } { package-conflict }
- {
- The~ "#2"~ package~ is~ incompatible~ with~ "#1".\\
- I~ have~ loaded~ "#1"~ by~ default.~ Maybe~ You~ should~
- refer~ to~ section~ 4~ of~ the~ "njuthesis"~ manual.
- }
\cs_new_protected:Npn \@@_check_pkg_conflict:nn #1#2
{
\ctex_at_begin_package:nn { #2 }
@@ -4430,8 +4487,6 @@ To produce the documentation run the original source files ending with
%
% 载入用户设置,可用于对模板做额外修改。
% \begin{macrocode}
-\msg_new:nnn { njuthesis } { load-config }
- { I~ am~ loading~ config~ file~ "#1". }
\clist_map_inline:Nn \g_@@_config_clist
{
\msg_info:nnn { njuthesis } { load-config } { #1 }
@@ -4480,7 +4535,8 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{info/department,info/department*,info/major,info/major*,info/field,info/field*}
+% \begin{macro}{info/department,info/department*,
+% info/major,info/major*,info/field,info/field*}
% 院系、专业、方向。
% \begin{macrocode}
department .tl_set:N = \g_@@_info_dept_tl ,
@@ -4570,6 +4626,10 @@ To produce the documentation run the original source files ending with
% \begin{macrocode}
email .tl_set:N = \g_@@_info_email_tl
}
+% \end{macrocode}
+%
+% 将指定信息项归入 \opt{anonymous} 组,以在盲审模式下选择性屏蔽。
+% \begin{macrocode}
\clist_map_inline:Nn \c_@@_name_anon_clist
{ \keys_define:nn { nju / info } { #1 .groups:n = { anonymous } } }
\clist_map_inline:Nn \c_@@_name_anon_en_clist
@@ -4578,6 +4638,7 @@ To produce the documentation run the original source files ending with
% \end{macro}
%
% \changes{v0.15}{2022/01/22}{正确处理双导师信息。}
+% \changes{v1.1}{2022/11/04}{修复研究生模板封面的导师信息居中问题。}
% 在导言区录入用户信息后进行变量设置。此处使用到了 \pkg{ctex} 提供的命令,
% 应当位于载入文档类之后。
% \begin{macrocode}
@@ -4586,17 +4647,18 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% 拼合双导师的姓名和职称。
% \begin{macrocode}
- \clist_map_inline:nn
- { \g_@@_info_supv_clist, \g_@@_info_supvii_clist }
+ \tl_set:Nx \g_@@_info_supvfull_tl
+ { \clist_use:Nn \g_@@_info_supv_clist { \@@_hskip: } }
+ \clist_if_empty:NF \g_@@_info_supvii_clist
{
\tl_gput_right:Nx \g_@@_info_supvfull_tl
- { \clist_use:Nn #1 { \@@_hskip: } \@@_quad: }
+ { \@@_quad: \clist_use:Nn \g_@@_info_supv_clist { \@@_hskip: } }
}
- \tl_gput_right:Nn \g_@@_info_supvfull_tl { \tex_unskip:D }
- \tl_set:Nn \g_@@_info_supvfull_en_tl
+ \tl_set_eq:NN \g_@@_info_supvfull_en_tl \g_@@_info_supv_en_tl
+ \tl_if_empty:NF \g_@@_info_supvii_en_tl
{
- \g_@@_info_supv_en_tl \@@_quad:
- \g_@@_info_supvii_en_tl \tex_unskip:D
+ \tl_gput_right:Nx \g_@@_info_supvfull_en_tl
+ { \@@_quad: \g_@@_info_supvii_en_tl }
}
}
%</class>
@@ -4698,36 +4760,18 @@ To produce the documentation run the original source files ending with
%
% \subsubsection{操作系统检测}
%
-% 判断用户是否自定义了中英文字体。如果其中任意一种未被定义,
-% 则使用系统预装字体覆盖字体选项。
+% 调用 \pkg{ctex} 提供的操作系统检测。
% \begin{macrocode}
-\bool_lazy_or:nnT
- { \tl_if_empty_p:N \g_@@_font_latin_tl }
- { \tl_if_empty_p:N \g_@@_font_cjk_tl }
+\ctex_detect_platform:
% \end{macrocode}
-% 进行操作系统检测。
-% 检测 Windows 的命令由 \pkg{l3kernel} 提供,
-% 检测 macOS 的命令由 \pkg{ctex} 提供,
-% 这两种情况外的系统被判断为 Linux,一律使用自由字体。
+% 判断用户是否自定义了中英文字体。如果其中任意一种未被定义,
+% 则使用系统预装字体覆盖字体选项。
+% Windows 或 macOS 外的系统被判断为 Linux,一律使用自由字体。
% \begin{macrocode}
- {
- \sys_if_platform_windows:TF
- {
- \tl_set:Nn \g_@@_font_latin_tl { win }
- \tl_set:Nn \g_@@_font_cjk_tl { win }
- }
- {
- \ctex_if_platform_macos:TF
- {
- \tl_set:Nn \g_@@_font_latin_tl { mac }
- \tl_set:Nn \g_@@_font_cjk_tl { mac }
- }
- {
- \tl_set:Nn \g_@@_font_latin_tl { gyre }
- \tl_set:Nn \g_@@_font_cjk_tl { fandol }
- }
- }
- }
+\tl_if_empty:NT \g_@@_font_latin_tl
+ { \tl_gset_eq:NN \g_@@_font_latin_tl \g__ctex_fontset_tl }
+\tl_if_empty:NT \g_@@_font_cjk_tl
+ { \tl_gset_eq:NN \g_@@_font_cjk_tl \g__ctex_fontset_tl }
% \end{macrocode}
%
%
@@ -4735,71 +4779,69 @@ To produce the documentation run the original source files ending with
%
% 接下来逐个定义所需要使用的字库。
%
-% \begin{macro}{\@@_loadfont_latin_win:}
-% Windows 西文字体
+% \begin{macro}{\@@_loadfont_latin:n,
+% \@@_loadfont_latin_win:,\@@_loadfont_latin_mac:}
+% Windows 与 macOS 西文字体的区别主要在于默认等宽字体。
% \begin{macrocode}
-\cs_new_protected:Npn \@@_loadfont_latin_win:
+\cs_new_protected:Npn \@@_loadfont_latin:n #1
{
\__fontspec_main_setmainfont:nn { } { Times~New~Roman }
\__fontspec_main_setsansfont:nn { } { Arial }
- \__fontspec_main_setmonofont:nn
- { Scale = MatchLowercase }
- { Courier~New }
+ \__fontspec_main_setmonofont:nn { Scale = MatchLowercase } { #1 }
}
+\cs_new_protected:Npn \@@_loadfont_latin_win:
+ { \@@_loadfont_latin:n { Courier~New } }
+\cs_new_protected:Npn \@@_loadfont_latin_mac:
+ {
+ \@@_loadfont_latin:n { Menlo }
% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_loadfont_latin_mac:}
-% macOS 西文字体。
+% \changes{v1.1}{2022/12/03}{添加对 Times New Roman 的 smcp 特性的检测。}
+% 检测 Times New Roman 是否具有小型大写字母(small caps)字型。
+% 这是 macOS 预装的字体版本较旧导致的。
% \begin{macrocode}
-\cs_new_protected:Npn \@@_loadfont_latin_mac:
+ \fontspec_if_small_caps:F
{
- \__fontspec_main_setmainfont:nn { } { Times~New~Roman }
- \__fontspec_main_setsansfont:nn { } { Arial }
- \__fontspec_main_setmonofont:nn
- { Scale = MatchLowercase }
- { Menlo }
+ \msg_warning:nn { njuthesis } { no-small-caps }
+ \__fontspec_main_setmainfont:nn
+ { \c_@@_name_gyrefeature_clist } { texgyretermes }
+ }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_loadfont_latin_gyre:}
-% 开源的 gyre 西文字体。
+% 开源的 \TeX Gyre 西文字体。
% \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_latin_gyre:
{
\__fontspec_main_setmainfont:nn
- {
- Extension = .otf,
- UprightFont = *-regular,
- BoldFont = *-bold,
- ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic
- }
- { texgyretermes }
+ { \c_@@_name_gyrefeature_clist } { texgyretermes }
\__fontspec_main_setsansfont:nn
+ { \c_@@_name_gyrefeature_clist } { texgyreheros }
+ \__fontspec_main_setmonofont:nn
{
- Extension = .otf,
- UprightFont = *-regular,
- BoldFont = *-bold,
- ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic
+ \c_@@_name_gyrefeature_clist,
+ Scale = MatchLowercase,
+ Ligatures = CommonOff
}
- { texgyreheros }
- \__fontspec_main_setmonofont:nn
+ { texgyrecursor }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\c_@@_name_gyrefeature_clist}
+% 用于 \pkg{fontspec} 的 \TeX Gyre 字体特性列表。
+% \begin{macrocode}
+\clist_const:Nn \c_@@_name_gyrefeature_clist
{
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic,
- Scale = MatchLowercase,
- Ligatures = CommonOff
+ BoldItalicFont = *-bolditalic
}
- { texgyrecursor }
- }
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
%
% \subsubsection{定义中文字库}
@@ -4818,13 +4860,13 @@ To produce the documentation run the original source files ending with
\cs_new_protected:Npn \@@_loadfont_cjk_win:
{
\setCJKmainfont { SimSun }
- [ AutoFakeBold = 2.17, ItalicFont = KaiTi ]
- \setCJKsansfont { SimHei } [ AutoFakeBold = 2.17 ]
- \setCJKmonofont { FangSong } [ AutoFakeBold = 2.17 ]
- \setCJKfamilyfont { zhsong } { SimSun } [ AutoFakeBold = 2.17 ]
- \setCJKfamilyfont { zhhei } { SimHei } [ AutoFakeBold = 2.17 ]
- \setCJKfamilyfont { zhfs } { FangSong } [ AutoFakeBold = 2.17 ]
- \setCJKfamilyfont { zhkai } { KaiTi } [ AutoFakeBold = 2.17 ]
+ [ \c_@@_name_fakebold_tl, ItalicFont = KaiTi ]
+ \setCJKsansfont { SimHei } [ \c_@@_name_fakebold_tl ]
+ \setCJKmonofont { FangSong } [ \c_@@_name_fakebold_tl ]
+ \setCJKfamilyfont { zhsong } { SimSun } [ \c_@@_name_fakebold_tl ]
+ \setCJKfamilyfont { zhhei } { SimHei } [ \c_@@_name_fakebold_tl ]
+ \setCJKfamilyfont { zhfs } { FangSong } [ \c_@@_name_fakebold_tl ]
+ \setCJKfamilyfont { zhkai } { KaiTi } [ \c_@@_name_fakebold_tl ]
}
% \end{macrocode}
% \end{macro}
@@ -4861,34 +4903,31 @@ To produce the documentation run the original source files ending with
\@@_hide_no_script_msg:
\setCJKmainfont { FandolSong-Regular }
[
- Extension = .otf,
- BoldFont = FandolSong-Bold,
- ItalicFont = FandolKai-Regular
+ Extension = .otf,
+ BoldFont = FandolSong-Bold,
+ ItalicFont = FandolKai-Regular
]
\setCJKsansfont { FandolHei-Regular }
[
- Extension = .otf,
- BoldFont = FandolHei-Bold
+ Extension = .otf,
+ BoldFont = FandolHei-Bold
]
\setCJKmonofont { FandolFang-Regular }
- [ Extension = .otf ]
+ [ Extension = .otf ]
\setCJKfamilyfont { zhsong } { FandolSong-Regular }
[
- Extension = .otf,
- BoldFont = FandolSong-Bold
+ Extension = .otf,
+ BoldFont = FandolSong-Bold
]
\setCJKfamilyfont { zhhei } { FandolHei-Regular }
[
- Extension = .otf,
- BoldFont = FandolHei-Bold
+ Extension = .otf,
+ BoldFont = FandolHei-Bold
]
\setCJKfamilyfont { zhfs } { FandolFang-Regular }
- [ Extension = .otf ]
+ [ Extension = .otf ]
\setCJKfamilyfont { zhkai } { FandolKai-Regular }
- [
- Extension = .otf,
- AutoFakeBold = 2.17
- ]
+ [ Extension = .otf, \c_@@_name_fakebold_tl ]
}
% \end{macrocode}
% \end{macro}
@@ -4914,11 +4953,11 @@ To produce the documentation run the original source files ending with
\setCJKfamilyfont { zhsong } { FZShuSong-Z01 }
[ BoldFont = FZXiaoBiaoSong-B05 ]
\setCJKfamilyfont { zhhei } { FZHei-B01 }
- [ AutoFakeBold = 2.17 ]
+ [ \c_@@_name_fakebold_tl ]
\setCJKfamilyfont { zhkai } { FZKai-Z03 }
- [ AutoFakeBold = 2.17 ]
+ [ \c_@@_name_fakebold_tl ]
\setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
- \defaultCJKfontfeatures{}
+ \defaultCJKfontfeatures { }
}
% \end{macrocode}
% \end{macro}
@@ -4928,24 +4967,10 @@ To produce the documentation run the original source files ending with
% \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_noto:
{
- \setCJKmainfont
- [
- UprightFont = NotoSerifCJKsc-Regular,
- BoldFont = NotoSerifCJKsc-Bold,
- ItalicFont = NotoSerifCJKsc-Regular,
- BoldItalicFont = NotoSerifCJKsc-Bold,
- ItalicFeatures = FakeSlant,
- BoldItalicFeatures = FakeSlant
- ] { Noto~Serif~CJK~SC }
- \setCJKsansfont
- [
- UprightFont = NotoSansCJKsc-Regular,
- BoldFont = NotoSansCJKsc-Bold,
- ItalicFont = NotoSansCJKsc-Regular,
- BoldItalicFont = NotoSansCJKsc-Bold,
- ItalicFeatures = FakeSlant,
- BoldItalicFeatures = FakeSlant
- ] { Noto~Sans~CJK~SC }
+ \setCJKmainfont [ \c_@@_name_notofeature_clist ]
+ { NotoSerifCJKsc }
+ \setCJKsansfont [ \c_@@_name_notofeature_clist ]
+ { NotoSansCJKsc }
\setCJKmonofont { Noto~Sans~Mono~CJK~SC }
\setCJKfamilyfont { zhsong } { Noto~Serif~CJK~SC }
\setCJKfamilyfont { zhhei } { Noto~Sans~CJK~SC }
@@ -4962,34 +4987,42 @@ To produce the documentation run the original source files ending with
% \begin{macrocode}
\cs_new_protected:Npn \@@_loadfont_cjk_source:
{
- \setCJKmainfont
- [
- UprightFont = SourceHanSerifSC-Regular,
- BoldFont = SourceHanSerifSC-Bold,
- ItalicFont = SourceHanSerifSC-Regular,
- BoldItalicFont = SourceHanSerifSC-Bold,
- ItalicFeatures = FakeSlant,
- BoldItalicFeatures = FakeSlant
- ] { Source~Han~Serif~SC }
- \setCJKsansfont
- [
- UprightFont = SourceHanSansSC-Regular,
- BoldFont = SourceHanSansSC-Bold,
- ItalicFont = SourceHanSansSC-Regular,
- BoldItalicFont = SourceHanSansSC-Bold,
- ItalicFeatures = FakeSlant,
- BoldItalicFeatures = FakeSlant
- ] { Source~Han~Sans~SC }
- \setCJKmonofont { FZFangSong-Z02 }
+ \setCJKmainfont [ \c_@@_name_notofeature_clist ]
+ { SourceHanSerifSC }
+ \setCJKsansfont [ \c_@@_name_notofeature_clist ]
+ { SourceHanSansSC }
+ \setCJKmonofont { FZFangSong-Z02 }
\setCJKfamilyfont { zhsong } { Source~Han~Serif~SC }
\setCJKfamilyfont { zhhei } { Source~Han~Sans~SC }
\setCJKfamilyfont { zhfs } { FZFangSong-Z02 }
\setCJKfamilyfont { zhkai } { FZKai-Z03 }
- [AutoFakeBold=2.17]
+ [ \c_@@_name_fakebold_tl ]
}
% \end{macrocode}
% \end{macro}
%
+% \begin{variable}{\c_@@_name_fakebold_tl}
+% \begin{macrocode}
+\tl_const:Nn \c_@@_name_fakebold_tl { AutoFakeBold = 2.17 }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_name_notofeature_clist}
+% 用于 \pkg{fontspec} 的思源字体特性列表。
+% \begin{macrocode}
+\clist_const:Nn \c_@@_name_notofeature_clist
+ {
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Regular,
+ BoldItalicFont = *-Bold,
+ ItalicFeatures = FakeSlant,
+ BoldItalicFeatures = FakeSlant
+ }
+% \end{macrocode}
+% \end{variable}
+%
%
% \subsubsection{定义数学字库}
%
@@ -5133,7 +5166,7 @@ To produce the documentation run the original source files ending with
% \begin{macro}{\@@_loadfont_math_none:}
% 不进行数学字体配置。
% \begin{macrocode}
-\cs_new:Npn \@@_loadfont_math_none: { }
+\@@_cs_clear:N \@@_loadfont_math_none:
% \end{macrocode}
% \end{macro}
%
@@ -5141,6 +5174,16 @@ To produce the documentation run the original source files ending with
% \subsubsection{载入指定字库}
% \changes{v0.10}{2021/09/28}{修正了数学字体。}
%
+% \begin{macro}{\@@_loadfont_latin_windows:
+% \@@_loadfont_latin_fandol:,\@@_loadfont_cjk_windows:}
+% 为兼容 \pkg{ctex} 做出的名称改变。
+% \begin{macrocode}
+\cs_new_eq:NN \@@_loadfont_latin_windows: \@@_loadfont_latin_win:
+\cs_new_eq:NN \@@_loadfont_latin_fandol: \@@_loadfont_latin_gyre:
+\cs_new_eq:NN \@@_loadfont_cjk_windows: \@@_loadfont_cjk_win:
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@@_loadfont:}
% 载入字体命令。
% \begin{macrocode}
@@ -5805,7 +5848,16 @@ To produce the documentation run the original source files ending with
% \changes{v1.1}{2022/10/16}{新增悬挂缩进选项。}
% 是否悬挂缩进。
% \begin{macrocode}
- hang .bool_gset:N = \g_@@_fn_hang_bool,
+ hang .choice:,
+ hang / true .code:n =
+ {
+ \cs_set:Npn \@@_fn_hang:
+ {
+ \int_set:Nn \tex_hangafter:D { 1 }
+ \dim_set_eq:NN \tex_hangindent:D \c_@@_fnhang_dim
+ }
+ },
+ hang / false .code:n = { \@@_cs_clear:N \@@_fn_hang: },
hang .initial:n = true
}
% \end{macrocode}
@@ -5862,11 +5914,7 @@ To produce the documentation run the original source files ending with
\mode_leave_vertical:
\hbox_to_wd:nn { \c_@@_fnhang_dim } { \@thefnmark \tex_hfil:D }
\tex_penalty:D \@M
- \bool_if:NT \g_@@_fn_hang_bool
- {
- \int_set:Nn \tex_hangafter:D { 1 }
- \dim_set_eq:NN \tex_hangindent:D \c_@@_fnhang_dim
- }
+ \@@_fn_hang:
#1
}
}
@@ -6046,20 +6094,6 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
-% \begin{macrocode}
-\msg_new:nnn { njuthesis } { empty-theorem-type }
- {
- Empty~ theorem~ list~ to~ define.\\
- The~ key~ "theorem/type"~ should~ not~ be~ set~ empty.
- }
-\msg_new:nnn { njuthesis } { missing-ntheorem }
- {
- "ntheorem"~ package~ not~ detected.\\
- The~ functionality~ of~ built-in~ theorem~ settings~ require~
- loading~ the~ class~ with~ "ntheorem"~ option~ set~ to~ "true".
- }
-% \end{macrocode}
-%
% \begin{macro}{\@@_thm_define:nn}
% 配置定理环境。
% \begin{arguments}
@@ -7459,14 +7493,6 @@ To produce the documentation run the original source files ending with
% \changes{v0.16}{2022/02/22}{不再默认载入 \pkg{njuvisual}。}
% 检查 \tn{njuemblem} 和 \tn{njuname} 命令是否有定义。
% \begin{macrocode}
-\msg_new:nnn { njuthesis } { missing-image }
- {
- Local~ images~ not~ designated.\\
- It~ seems~ that~ you~ haven't~ fill~ in~ both~
- "style/emblem-img"~ and~ "style/name-img",~
- therefore~ I~ am~ using~ package~ "njuvisual"~
- instead,~ which~ may~ slow~ down~ the~ compilation.
- }
\ctex_at_end_preamble:n
{
% \end{macrocode}
diff --git a/macros/unicodetex/latex/njuthesis/njuthesis.pdf b/macros/unicodetex/latex/njuthesis/njuthesis.pdf
index a02d764b62..7ce01c2b6c 100644
--- a/macros/unicodetex/latex/njuthesis/njuthesis.pdf
+++ b/macros/unicodetex/latex/njuthesis/njuthesis.pdf
Binary files differ
diff --git a/macros/xetex/latex/xduts/xduts.dtx b/macros/xetex/latex/xduts/xduts.dtx
index 25c448bb66..ac9c27edf9 100644
--- a/macros/xetex/latex/xduts/xduts.dtx
+++ b/macros/xetex/latex/xduts/xduts.dtx
@@ -1,14 +1,14 @@
% \iffalse
%<*driver>
\ProvidesFile{xduts.dtx}
-[2022/12/01 v2.18.1.1 Xidian University TeX Suite]
+[2022/12/03 v3.1.0.0 Xidian University TeX Suite]
%</driver>
%<class|sty>\NeedsTeXFormat{LaTeX2e}
%<class|sty>\RequirePackage{expl3}
%<xdufont>\ProvidesExplPackage{xdufont}
%<xdupgthesis>\ProvidesExplClass{xdupgthesis}
%<xduugthesis>\ProvidesExplClass{xduugthesis}
-%<class|sty> {2022/12/01}{2.18.1.1}
+%<class|sty> {2022/12/03}{3.1.0.0}
%<xdufont> {Xidian University Font package}
%<xdupgthesis> {Xidian University Postgraduate Thesis document class}
%<xduugthesis> {Xidian University Undergraduate Thesis document class}
@@ -276,7 +276,7 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% 文件配置见\secrefx{文件配置},
% 交叉引用配置见\secrefx{交叉引用配置},
% caption配置见\secrefx{caption配置},
-% 表格配置见\secrefx{表格配置},
+% 图表配置见\secrefx{图表配置},
% 算法配置见\secrefx{算法配置},
% 对照表配置见\secrefx{对照表配置},
% 作者简介配置见\secrefx{作者简介配置}。
@@ -317,7 +317,7 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% 文件配置见\secrefx{文件配置},
% 交叉引用配置见\secrefx{交叉引用配置},
% caption配置见\secrefx{caption配置},
-% 表格配置见\secrefx{表格配置},
+% 图表配置见\secrefx{图表配置},
% 算法配置见\secrefx{算法配置},
% 章节配置见\secrefx{章节配置},
% 附录配置见\secrefx{附录环境},
@@ -679,20 +679,36 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{function}
% \changes{v2.17.0.0}{2022/11/28}{设置图、表、算法caption格式}
% \begin{function}[added=2022-11-28]{style/caption-format}
+% 已弃用。
+% \end{function}
+% \begin{function}[added=2022-04-03]{style/fig-label-sep}
+% 已弃用。
+% \end{function}
+% \subsection{图表配置}
+% \label{图表配置}
+% \changes{v3.0.0.0}{2022/12/03}{设置图表caption格式}
+% \begin{function}[added=2022-12-03]{style/ft-caption-format}
% \begin{syntax}
-% \optx{style/caption-format}=\metax{plain|(hang)}
+% \optx{style/ft-caption-format}=\metax{plain|(hang)}
% \end{syntax}
-% 设置图、表、算法caption的对齐方式。
+% 设置图表caption格式。
% \begin{optdesc}
-% \item[plain] 无缩进。
+% \item[plain] 无缩进,即自然段落。
% \item[hang] 悬挂缩进。
% \end{optdesc}
% \end{function}
-% \begin{function}[added=2022-04-03]{style/fig-label-sep}
-% 已弃用。
+% \changes{v3.0.0.0}{2022/12/03}{设置图表caption对齐方式}
+% \begin{function}[added=2022-12-03]{style/ft-caption-align}
+% \begin{syntax}
+% \optx{style/ft-caption-align}=\metax{left|centering|(centering-left)}
+% \end{syntax}
+% 设置图表caption对齐方式。
+% \begin{optdesc}
+% \item[left] 左对齐。
+% \item[centering] 居中。
+% \item[centering-left] 只有一行时居中,多行时左对齐。
+% \end{optdesc}
% \end{function}
-% \subsection{表格配置}
-% \label{表格配置}
% \changes{v0.10.0.1}{2022/04/13}{补充表格内容字号文档说明}
% \begin{function}[added=2022-04-13,updated=2022-04-15]{style/table-small-font}
% \begin{syntax}
@@ -726,16 +742,43 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \item[true] 五号。
% \item[false] 小四号。
% \end{optdesc}
-% \begin{function}[added=2022-11-29]{style/algorithm-caption-align}
+% \changes{v3.0.0.0}{2022/12/03}{设置算法caption格式}
+% \begin{function}[added=2022-12-03]{style/alg-caption-format}
% \begin{syntax}
-% \optx{style/algorithm-caption-align}=\metax{(left)|centering}
+% \optx{style/alg-caption-format}=\metax{plain|(hang)}
% \end{syntax}
-% 设置算法caption对齐方式。
+% 设置算法caption格式。
+% \begin{optdesc}
+% \item[plain] 无缩进,即自然段落。
+% \item[hang] 悬挂缩进。
+% \end{optdesc}
% \end{function}
+% \changes{v3.0.0.0}{2022/12/03}{设置算法caption对齐方式}
+% \begin{function}[added=2022-12-03]{style/alg-caption-align}
+% \begin{syntax}
+% \optx{style/alg-caption-align}=\metax{(left)|centering|centering-left}
+% \end{syntax}
+% 设置算法caption对齐方式。
% \begin{optdesc}
% \item[left] 左对齐。
-% \item[centering] 居中,此时\optx{style/caption-format}中的设置对算法caption无效。
+% \item[centering] 居中。
+% \item[centering-left] 只有一行时居中,多行时左对齐。
+% \end{optdesc}
+% \end{function}
+% \changes{v3.1.0.0}{2022/12/03}{设置算法三线间距}
+% \begin{function}[added=2022-12-03]{style/add-alg-rule-vspace}
+% \begin{syntax}
+% \optx{style/add-alg-rule-vspace}=\metax{true|(false)}
+% \end{syntax}
+% 设置是否为ruled样式的算法环境的三条横线增加纵向间距。
+% \begin{optdesc}
+% \item[true] 增加。
+% \item[false] 不增加。
% \end{optdesc}
+% \end{function}
+% \begin{function}[added=2022-11-29]{style/algorithm-caption-align}
+% 已弃用。
+% \end{function}
% \subsection{章节配置}
% \label{章节配置}
% \begin{function}[added=2022-04-05]{style/before-skip}
@@ -3219,11 +3262,14 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \l_@@_fix_graphics_bool,
% \l_@@_ref_add_space_bool,
% \l_@@_cap_label_sep_tl,
-% \l_@@_cap_format_tl,
+% \l_@@_ft_cap_format_tl,
+% \l_@@_alg_cap_format_tl,
+% \l_@@_ft_cap_align_tl,
+% \l_@@_alg_cap_align_tl,
+% \l_@@_add_alg_rule_vspace_bool,
% \l_@@_tab_small_bool,
% \l_@@_alg_small_cap_bool,
% \l_@@_alg_small_bool,
-% \l_@@_alg_capt_align_tl,
% \l_@@_before_skip_clist,
% \l_@@_after_skip_clist,
% \l_@@_chap_tl,
@@ -3272,7 +3318,17 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{macrocode}
% 图、表、算法caption格式。
% \begin{macrocode}
-\tl_new:N \l_@@_cap_format_tl
+\tl_new:N \l_@@_ft_cap_format_tl
+\tl_new:N \l_@@_alg_cap_format_tl
+% \end{macrocode}
+% 图、表、算法caption对齐方式。
+% \begin{macrocode}
+\tl_new:N \l_@@_ft_cap_align_tl
+\tl_new:N \l_@@_alg_cap_align_tl
+% \end{macrocode}
+% 设置算法三线间距。
+% \begin{macrocode}
+\bool_new:N \l_@@_add_alg_rule_vspace_bool
% \end{macrocode}
% 设置表格字号是否为五号。
% \begin{macrocode}
@@ -3286,10 +3342,6 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \begin{macrocode}
\bool_new:N \l_@@_alg_small_bool
% \end{macrocode}
-% 设置算法caption对齐方式。
-% \begin{macrocode}
-\tl_new:N \l_@@_alg_capt_align_tl
-% \end{macrocode}
% 设置章节标题前后的垂直间距。
% \begin{macrocode}
\clist_new:N \l_@@_before_skip_clist
@@ -3357,8 +3409,21 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{macrocode}
% 图、表、算法caption格式。
% \begin{macrocode}
- caption-format .choices:nn = { plain, hang }
- { \tl_set_eq:NN \l_@@_cap_format_tl \l_keys_choice_tl },
+ ft-caption-format .choices:nn = { plain, hang }
+ { \tl_set_eq:NN \l_@@_ft_cap_format_tl \l_keys_choice_tl },
+ alg-caption-format .choices:nn = { plain, hang }
+ { \tl_set_eq:NN \l_@@_alg_cap_format_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 图、表、算法caption对齐方式。
+% \begin{macrocode}
+ ft-caption-align .choices:nn = { left, centering, centering-left }
+ { \tl_set_eq:NN \l_@@_ft_cap_align_tl \l_keys_choice_tl },
+ alg-caption-align .choices:nn = { left, centering, centering-left }
+ { \tl_set_eq:NN \l_@@_alg_cap_align_tl \l_keys_choice_tl },
+% \end{macrocode}
+% 设置算法三线间距。
+% \begin{macrocode}
+ add-alg-rule-vspace .bool_set:N = \l_@@_add_alg_rule_vspace_bool,
% \end{macrocode}
% 设置表格字号是否为五号。
% \begin{macrocode}
@@ -3372,11 +3437,6 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \begin{macrocode}
algorithm-small-font .bool_set:N = \l_@@_alg_small_bool,
% \end{macrocode}
-% 设置算法caption对齐方式。
-% \begin{macrocode}
- algorithm-caption-align .choices:nn = { left, centering }
- { \tl_set_eq:NN \l_@@_alg_capt_align_tl \l_keys_choice_tl },
-% \end{macrocode}
% 设置章节标题前的垂直间距。
% \begin{macrocode}
before-skip .clist_set:N = \l_@@_before_skip_clist,
@@ -3419,7 +3479,11 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
style / fix-includegraphics = false,
style / ref-add-space = false,
style / caption-label-sep = { 0.75em },
- style / caption-format = { hang },
+ style / ft-caption-format = { hang },
+ style / alg-caption-format = { hang },
+ style / ft-caption-align = { centering-left },
+ style / alg-caption-align = { left },
+ style / add-alg-rule-vspace = { false },
style / table-small-font = true,
style / algorithm-small-caption = true,
style / algorithm-small-font = true,
@@ -4762,22 +4826,17 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{macro}
% \subsection{Caption}
% \begin{macro}{\DeclareCaptionLabelSeparator,\DeclareCaptionFont,\captionsetup}
+% \changes{v3.0.0.0}{2022/12/03}{设置图、表caption格式}
% \changes{v2.17.0.0}{2022/11/28}{设置图、表caption格式}
% \changes{v0.1.2.0}{2022/04/03}{设置图片标签与后面标题之间的间距}
% \changes{v0.1.3.0}{2022/04/03}{设置图片标签与标题字体字号}
% \changes{v2.10.1.0}{2022/06/26}{修复算法标签与标题字体字号警告}
% 设置图表标签与后面标题之间的间距及caption字体字号。
% \begin{macrocode}
+\PassOptionsToPackage { ruled } { caption }
\RequirePackage { caption }
\DeclareCaptionLabelSeparator { customskip } { \hskip \l_@@_cap_label_sep_tl }
\DeclareCaptionFont { customfont } { \@@_rm_family: \zihao { 5 } }
-\DeclareCaptionFont { algcustomfont }
- {
- \@@_rm_family:
- \bool_if:NTF \l_@@_alg_small_cap_bool
- { \zihao { 5 } }
- { \zihao { -4 } }
- }
\captionsetup
{
labelsep = customskip,
@@ -4785,12 +4844,21 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
}
\ctex_at_end_preamble:n
{
- \tl_if_eq:NnTF \l_@@_cap_format_tl { hang }
- { \captionsetup { format = hang } } { }
+ \tl_if_eq:NnTF \l_@@_ft_cap_format_tl { hang }
+ { \captionsetup { format = hang } }
+ { \captionsetup { format = plain } }
+ \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { left }
+ { \captionsetup { singlelinecheck = false, justification = justified } }
+ {
+ \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { centering }
+ { \captionsetup { singlelinecheck = false, justification = centerlast } }
+ { \captionsetup { singlelinecheck = true, justification = justified } }
+ }
}
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\captionsetup}
+% \begin{macro}{\DeclareCaptionFont,\captionsetup*}
+% \changes{v3.0.0.0}{2022/12/03}{设置算法caption格式}
% \changes{v2.18.0.0}{2022/11/28}{设置算法caption对齐方式}
% \changes{v2.17.0.0}{2022/11/28}{设置算法caption格式}
% \changes{v1.0.4.0}{2022/04/15}{设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距}
@@ -4798,7 +4866,14 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \changes{v2.6.0.0}{2022/06/25}{设置\pkgx{algorithm}算法Caption字号是否为五号}
% 设置\pkgx{algorithm}算法标签与标题字体字号及标签与后面标题之间的间距。
% \begin{macrocode}
-\captionsetup [ algorithm ]
+\DeclareCaptionFont { algcustomfont }
+ {
+ \@@_rm_family:
+ \bool_if:NTF \l_@@_alg_small_cap_bool
+ { \zihao { 5 } }
+ { \zihao { -4 } }
+ }
+\captionsetup* [ algorithm ]
{
labelsep = customskip,
labelfont = algcustomfont,
@@ -4806,12 +4881,48 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
}
\ctex_at_end_preamble:n
{
- \tl_if_eq:NnTF \l_@@_alg_capt_align_tl { left }
+ \tl_if_eq:NnTF \l_@@_alg_cap_format_tl { hang }
+ { \captionsetup* [ algorithm ] { format = hang } }
+ { \captionsetup* [ algorithm ] { format = plain } }
+ \captionsetup* [ ruled ] { strut = 0 }
+ \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { left }
{
- \tl_if_eq:NnTF \l_@@_cap_format_tl { hang }
- { \captionsetup [ algorithm ] { format = hang } } { }
+ \captionsetup* [ algorithm ]
+ { singlelinecheck = false, justification = justified }
+ }
+ {
+ \tl_if_eq:NnTF \l_@@_ft_cap_align_tl { centering }
+ {
+ \captionsetup* [ algorithm ]
+ { singlelinecheck = false, justification = centerlast }
+ }
+ {
+ \cs_set_eq:NN \floatc@ruled \floatc@plain
+ \captionsetup* [ ruled ] { slc = 1 }
+ \captionsetup* [ algorithm ]
+ { singlelinecheck = true, justification = justified }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \changes{v3.1.0.0}{2022/12/03}{设置\pkgx{algorithm}算法三线间距}
+% \begin{macro}{\ctex_at_end_preamble:n}
+% 设置\pkgx{algorithm}算法三线间距。
+% \begin{macrocode}
+\ctex_at_end_preamble:n
+ {
+ \bool_if:NT \l_@@_add_alg_rule_vspace_bool
+ {
+ \cs_set:Npn \fs@ruled
+ {
+ \cs_set_eq:NN \@fs@capt \floatc@plain
+ \cs_set:Npn \@fs@pre { \hrule height .8pt depth 0pt \kern 5pt }
+ \cs_set:Npn \@fs@post { \kern 5pt \hrule \relax }
+ \cs_set:Npn \@fs@mid { \kern 5pt \hrule \kern 5pt }
+ \cs_set_eq:NN \@fs@iftopcapt \iftrue
+ }
}
- { \captionsetup [ algorithm ] { justification = centering } }
}
% \end{macrocode}
% \end{macro}
@@ -4841,33 +4952,51 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{macrocode}
% 设置\pkgx{algorithm2e}算法caption格式及对齐方式。
% \begin{macrocode}
- \tl_if_eq:NnTF \l_@@_alg_capt_align_tl { left }
+ \RenewDocumentCommand { \algocf@makecaption } { mm }
{
- \box_new:N \l_@@_algtwoe_capt_box
- \RenewDocumentCommand { \algocf@makecaption } { mm }
+ \box_clear_new:N \l_@@_algiie_capt_box
+ \hbox_set:Nn \l_@@_algiie_capt_box
+ { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
+ \dim_compare:nNnTF { \box_wd:N \l_@@_algiie_capt_box } > { \hsize }
{
- \hbox_set:Nn \l_@@_algtwoe_capt_box
- { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
- \dim_compare:nNnTF { \box_wd:N \l_@@_algtwoe_capt_box } > { \hsize }
+ \tl_if_eq:NnTF \l_@@_alg_cap_format_tl { hang }
{
- \tl_if_eq:NnTF \l_@@_cap_format_tl { hang }
+ \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { centering }
+ {
+ \makebox { \AlCapFnt #1 \algocf@capseparator }
+ \makebox
+ {
+ \parbox [ t ] { \hsize }
+ { \centering \AlCapNameFnt #2 }
+ }
+ }
{
\makebox { \AlCapFnt #1 \algocf@capseparator }
\makebox { \parbox [ t ] { \hsize } { \AlCapNameFnt #2 } }
}
+ }
+ {
+ \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { centering }
+ {
+ \parbox { \columnwidth }
+ { \centering \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2}
+ }
{
\parbox { \columnwidth }
{ \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2}
}
}
- { \makebox [ \columnwidth ] { \box_use:N \l_@@_algtwoe_capt_box } }
}
- }
- {
- \RenewDocumentCommand { \algocf@makecaption } { mm }
{
- \parbox { \columnwidth }
- { \centering \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
+ \tl_if_eq:NnTF \l_@@_alg_cap_align_tl { left }
+ {
+ \parbox { \columnwidth }
+ { \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
+ }
+ {
+ \parbox { \columnwidth }
+ { \centering \AlCapFnt #1 \algocf@capseparator \AlCapNameFnt #2 }
+ }
}
}
\RenewDocumentCommand { \algocf@makecaption@ruled } { mm }
@@ -4878,6 +5007,20 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
}
% \end{macrocode}
% \end{macro}
+% \changes{v3.1.0.0}{2022/12/03}{设置\pkgx{algorithm2e}算法三线间距}
+% \begin{macro}{\ctex_at_end_preamble:n}
+% 设置\pkgx{algorithm2e}算法三线间距。
+% \begin{macrocode}
+\ctex_at_end_preamble:n
+ {
+ \bool_if:NT \l_@@_add_alg_rule_vspace_bool
+ {
+ \dim_set:Nn \interspacetitleruled { 5pt }
+ \dim_set:Nn \interspacealgoruled { 5pt }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{\@@_tblr_caption_box:n}
% \changes{v2.16.2.0}{2022/11/27}{\envx{longtblr}环境整页宽的caption盒子}
% \pkgx{tabularray}中\envx{longtblr}环境整页宽的caption盒子。
@@ -4933,12 +5076,12 @@ literate = {\$}{{\textcolor{purple3}{\$}}}{1}
% \end{macrocode}
% \end{macro}
% \subsection{图片}
-% \begin{macro}{\PassOptionsToPackage,\captionsetup}
+% \begin{macro}{\PassOptionsToPackage,\captionsetup*}
% \changes{v0.4.2.0}{2022/04/05}{设置子图标签与标题字体字号}
% 设置子图标签与标题字体字号,支持\pkgx{subfig}和\pkgx{subcaption}宏包。
% \begin{macrocode}
\PassOptionsToPackage { font = small } { subfig }
-\captionsetup [ sub ] { font = customfont }
+\captionsetup* [ sub ] { font = customfont }
% \end{macrocode}
% \end{macro}
% \begin{macro}{\captionsetup}
diff --git a/macros/xetex/latex/xduts/xduts.pdf b/macros/xetex/latex/xduts/xduts.pdf
index eb83cd20a4..19527913c3 100644
--- a/macros/xetex/latex/xduts/xduts.pdf
+++ b/macros/xetex/latex/xduts/xduts.pdf
Binary files differ
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index 350373e855..63c02b8e91 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,9 @@
+2022-12-02 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-4ht.tex (fancyvrb.4ht): use \nobreak to prevent unwanted
+ line breaks.
+ https://github.com/michal-h21/make4ht/issues/104
+
2022-12-01 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-html4.tex (html4.4ht): fixed cross-reference links to
diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex
index e55a7e212e..e0157a2263 100644
--- a/support/TeX4ht/source/tex4ht-4ht.tex
+++ b/support/TeX4ht/source/tex4ht-4ht.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-4ht.tex 1253 2022-11-28 09:54:31Z michal_h21 $
+% $Id: tex4ht-4ht.tex 1259 2022-12-02 22:40:01Z michal_h21 $
% tex tex4ht-4ht or ht tex tex4ht-4ht
%
% Copyright 2009-2022 TeX Users Group
@@ -25183,7 +25183,9 @@ as they resulted in unwanted blank lines.
\setbox\@tempboxa=\FV@ListProcessLine{#1}%
\let\FV@ProcessLine\FV@ListProcessLine@iv}
\def\FV@ListProcessLine@iv#1{%
- \box\@tempboxa
+ % we use \nobreak to really prevent unwanted line breaks
+ % see https://github.com/michal-h21/make4ht/issues/104
+ \box\@tempboxa\nobreak%
\setbox\@tempboxa=\FV@ListProcessLine{#1}}%
\def\FV@ListProcessLastLine{%
\ifx\FV@ProcessLine\FV@ListProcessLine@iv
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index e5cd049177..18ac313869 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -36,6 +36,7 @@ $mirrors = {
},
'Iran' => {
'https://ctan.asis.sh/' => 1,
+ 'https://mirror.bardia.tech/ctan/' => 1,
},
'Japan' => {
'http://ring.airnet.ne.jp/archives/text/CTAN/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 930e1664ff..ef363a608c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/65162
+depend revision/65171
name 00texlive.image
category TLCore
@@ -4672,7 +4672,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 65156
+revision 65164
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
@@ -86140,17 +86140,17 @@ catalogue-version 1.0.2
name csbulletin
category Package
-revision 65146
+revision 65168
shortdesc LaTeX class for articles submitted to the CSTUG Bulletin (Zpravodaj)
relocated 1
longdesc The package provides the class for articles for the CSTUG
longdesc Bulletin (Zpravodaj Ceskoslovenskeho sdruzeni uzivatelu TeXu).
longdesc You can see the structure of a document by looking at the
longdesc source file of the manual.
-containersize 12032
-containerchecksum e882c884fcbaf15d7b96e4e6c77b4a355fc486b099ffde218e6e72d8d075d4e30e22b5c32dac1cf55f770385e6cc9006d115639fde7b71b9a436a854dc6155a4
-doccontainersize 282672
-doccontainerchecksum 44390c69dd48f6d27c7b24d9ba815ce75baffbc6d3ab116ba24e3e44f8dd8473c0aa1540b08b8fe4dd6b0cfdc6b5232af975fa6aafbe0d944151e07627af37d6
+containersize 12932
+containerchecksum 17840ec5e0437437d6f10ef875dc90b8d5da84fa7d4991093409c77119285d53470863ef2d23aa70cad6975bb0c868ddbb557f07015481dd1f2e19015b137a61
+doccontainersize 282532
+doccontainerchecksum 75e34a375d2524f8b04b028075e20ff856702e550b680750fb1ab8eadad70a7be54357806d95dc75269a54a7abecff81684328940c4910649f2236ade74824e8
docfiles size=80
RELOC/doc/latex/csbulletin/LICENSE.txt
RELOC/doc/latex/csbulletin/README details="Readme"
@@ -86160,13 +86160,14 @@ docfiles size=80
RELOC/doc/latex/csbulletin/example-english.tex
RELOC/doc/latex/csbulletin/example-slovak.tex
RELOC/doc/latex/csbulletin/example.bib
-runfiles size=12
+runfiles size=13
+ RELOC/tex/latex/csbulletin/csbulacronym.sty
RELOC/tex/latex/csbulletin/csbulletin.cls
RELOC/tex/latex/csbulletin/csbulobalka.cls
RELOC/tex/latex/csbulletin/csbulobalka.sty
RELOC/tex/latex/csbulletin/csbulv1.cls
catalogue-ctan /macros/latex/contrib/csbulletin
-catalogue-license lppl1.3
+catalogue-license lppl1.3c
catalogue-topics journalpub class
name cslatex
@@ -88624,7 +88625,7 @@ catalogue-version 0.2
name cvss
category Package
-revision 64985
+revision 65169
shortdesc Compute and display CVSS base scores
relocated 1
longdesc The Common Vulnerability Scoring System (CVSS) is an open
@@ -88635,20 +88636,20 @@ longdesc to compute CVSS3.1 base scores and use them in documents, i.e.
longdesc it only deals with the Base score. Temporal and Environental
longdesc scores will be part of a future release. More information can
longdesc be found at https://www.first.org/cvss/specification-document.
-containersize 3572
-containerchecksum b2beef281f5b83938b55c115a05edc155381fcaf8d2390844a3d134d856204d271007ce35cf7aeed4f766b9319f643f0aba8cce370dce7d5b7756eb798936dad
-doccontainersize 490640
-doccontainerchecksum d69a4dbe5db6642a4f83a68dcd8bc7dd7668bcda13f20cfee51a2f99074636c642f28638f6e18c533bfeb73f537865c7a4c0f54ce25044e6f8a32a5e00edeb56
-docfiles size=125
+containersize 3320
+containerchecksum 563d310188adc99e14bc93772f8f94af0741665c15d8013d9cc98fa5d86129d48b62473835973bba90fcb4117fbd782b029b87045e5b392fabd308c8f1a6de42
+doccontainersize 574872
+doccontainerchecksum 604139dd0e636b5b050d07417f7990c741e7400c7c656d76fb15d56a76b869a2805e43236ac2ea062826df5f102753c8f1450a4e09b24dbc2f96b6668975bbe3
+docfiles size=146
RELOC/doc/latex/cvss/LICENSE
RELOC/doc/latex/cvss/README.md details="Readme"
RELOC/doc/latex/cvss/cvss.pdf details="Package documentation"
-srccontainersize 7364
-srccontainerchecksum 1175886c0342fc8d76da3a506b1f10e272f4e0f7373893338c633181d1ef8434d8a24ede481a0b326e4ce656ba11aa2b250eed89e77b147754bfccbb788ef84c
+srccontainersize 7376
+srccontainerchecksum 771545e51e6066529d43edd5f14f070c816c8b86478f5e2598929f34838dfd0e90d9ed666d478e8f5c3aa14da9f6f7b8658e6b1527f212c775cbc2c7645e9e2f
srcfiles size=12
RELOC/source/latex/cvss/cvss.dtx
RELOC/source/latex/cvss/cvss.ins
-runfiles size=4
+runfiles size=3
RELOC/tex/latex/cvss/cvss.sty
catalogue-contact-bugs https://github.com/3isenHeiM/CVSS-latex/issues
catalogue-contact-development https://github.com/3isenHeiM/CVSS-latex/pulls
@@ -88656,6 +88657,7 @@ catalogue-contact-repository https://github.com/3isenHeiM/CVSS-latex
catalogue-ctan /macros/latex/contrib/cvss
catalogue-license lppl1.3c
catalogue-topics calculation expl3
+catalogue-version 1.1.0
name cweb
category Package
@@ -120976,7 +120978,7 @@ catalogue-version 1.1
name ffcode
category Package
-revision 65132
+revision 65170
shortdesc Fixed-font code blocks formatted nicely
relocated 1
longdesc This LaTeX package helps you write source code in your academic
@@ -120989,18 +120991,18 @@ depend minted
depend pgf
depend tcolorbox
depend xkeyval
-containersize 2176
-containerchecksum aaf13c709ba0abad7aee45b2ced9e4450fa8d4bde86fba352c001d2aa94fb8ee9ba5961ba7cb9cda01fba07eb80d8474a18a0d3f32c3c24a74c9c8d6de565299
-doccontainersize 545792
-doccontainerchecksum c158a31f3fad46d3d0548fa2ec863a878f15d6d333ee422fabc8895d6207632f6a0912731f4d3f96deb9f28358afad03efa4b547dc15803c368162c0b41616f8
+containersize 2180
+containerchecksum e76c0605b8a074d1827a73a3ba4e9fae40ade590b01e90ee10593c4484e0a534cebb556bf49389fa03355424910cc349b73fbae2827153fc717be69d38d007e0
+doccontainersize 545808
+doccontainerchecksum c5302e1113f5d1a05517c4877efd710bc6931bac62157001ea540f0b40388c95202dd457fb1362f8b30dc313a48d9742fcd5c6c6a7e5f3404755a3eafa01041a
docfiles size=144
RELOC/doc/latex/ffcode/DEPENDS.txt
RELOC/doc/latex/ffcode/LICENSE.txt
RELOC/doc/latex/ffcode/README.md details="Readme"
RELOC/doc/latex/ffcode/ffcode.pdf details="Package documentation"
-srccontainersize 4980
-srccontainerchecksum 00ba628e0f373ed1c51b4759949591769ec4666a1339bd88c7a9878d00fdcac1e4bb94d1e897b79bd8cfe62bb95109f0b8769b86051949c3d6021e54c6150de4
-srcfiles size=4
+srccontainersize 5016
+srccontainerchecksum 2863c642dddba771bc4507ed2f0e4a3c4ff12ab4291fb397a2e0f8859776bbba7442a85fefe87d655d0c6236b5e40878ba29cfa19f71870f6932f38247657f5f
+srcfiles size=5
RELOC/source/latex/ffcode/ffcode.dtx
RELOC/source/latex/ffcode/ffcode.ins
runfiles size=1
@@ -121009,7 +121011,7 @@ catalogue-contact-repository https://github.com/yegor256/ffcode
catalogue-ctan /macros/latex/contrib/ffcode
catalogue-license mit
catalogue-topics listing verbatim line-nos
-catalogue-version 0.7.0
+catalogue-version 0.8.0
name ffslides
category Package
@@ -282518,7 +282520,7 @@ catalogue-version 1.6a
name simpleicons
category Package
-revision 65102
+revision 65167
shortdesc Simple Icons for LaTeX
relocated 1
longdesc Similar to FontAwesome icons being provided on LaTeX by the
@@ -282526,16 +282528,16 @@ longdesc fontawesome package, this package aims to do the same with
longdesc Simple Icons. For reference, visit their website:
longdesc https://simpleicons.org/.
execute addMap simpleicons.map
-containersize 2704520
-containerchecksum 6e0e837d416089bc5303455c973571d3f226df2f43a37fece6edb9f63944ee3f76e6cbda0461a3489b28445867de51091f2319dadae6afcbb632380965d04427
-doccontainersize 1985216
-doccontainerchecksum f947feaec28f8633420be75a0b94a3ef0804a86b030ba01cc29ca7b35b1767fdfea39110d1c550b02bf69bef29a71b7c55583d730b1dd76ebd6d4e52fd71689c
+containersize 2707528
+containerchecksum dc290ce6a254cfb3b963b2dab3dafa368d476b1648119f7e1f803069674fd1d82ead26763f3b5c82ef3e2ecb67f4ef876c040670049b6f109c26516956488455
+doccontainersize 1986672
+doccontainerchecksum cfdda03b85b8f237ca79e1b82d883b9c0baabf65b40752271ceefd6dfb4dd3c50eeb52af7de14e5c84950c1811e91ed023ddb7ebab9676fa2b1c14d75c726375
docfiles size=517
RELOC/doc/fonts/simpleicons/README.md details="Readme"
RELOC/doc/fonts/simpleicons/bindings.tex
RELOC/doc/fonts/simpleicons/simpleicons.pdf details="Package documentation"
RELOC/doc/fonts/simpleicons/simpleicons.tex
-runfiles size=1021
+runfiles size=1022
RELOC/fonts/enc/dvips/simpleicons/simpleiconsEight.enc
RELOC/fonts/enc/dvips/simpleicons/simpleiconsFive.enc
RELOC/fonts/enc/dvips/simpleicons/simpleiconsFour.enc
@@ -282577,7 +282579,7 @@ catalogue-contact-repository https://github.com/ineshbose/simple-icons-latex
catalogue-ctan /fonts/simpleicons
catalogue-license cc-by-1
catalogue-topics font font-symbol font-supp-symbol font-otf font-type1
-catalogue-version 7.20.0
+catalogue-version 7.21.0
name simpleinvoice
category Package
@@ -299910,7 +299912,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 65162
+revision 65171
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
@@ -299931,10 +299933,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 974276
-containerchecksum a0dd18f42b2d77402eb1e161a7bef304b319ff35a692b52349df726c32bb52a559f7751bcbfff4c0dd0274da9799866c0b3046a018c3d03e04716d8128168284
+containersize 974364
+containerchecksum 28c5f7aad288a38241a4099d25bc779c9b984779246f9c7d5bec4d4b389f04cffa04848a5052b3c56eb0503cc18d2962b3b012f868ea9b24eb6f0872348d01d2
doccontainersize 136384
-doccontainerchecksum e383563e0bec80b0f7e95ad682d187afa10785c82d213dc081c2b40c91129be27164f8a6c2c43d1262d6c59227a89e6f9d89ad78fb5e67583abc3045872c462b
+doccontainerchecksum 5c5cf5a944e60140abe0c85cc18caa74043c25afca308191925212d1417cfa8b27d2e44ec184eb66a0d684ee95ec303e713630601a48a5d16c9aa490cd20cf11
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -300006,8 +300008,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 1302008
-srccontainerchecksum 95c9ed54e4d0d3cafa2698b9fc3b250e9d21f3dd8b533c195fd39997b36a9eadeb4d2a97eee7e4aad681db722ad79a2bc307569ba00d0109f0b1b8eb27d6381d
+srccontainersize 1285060
+srccontainerchecksum 1c87cca6ccddb10abe2479ad0d3e71cc6d120ccea3aaad5f75822b965fbe9aa1c93691e0f4a075022c7d55148767e6619883e46c0b461e904400cfc54664807b
srcfiles size=3941
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -310788,7 +310790,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 65156
+revision 65164
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.
@@ -310796,10 +310798,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 113688
-containerchecksum 9bf4d5d814bc0b77e278e43abb46e9b155b9806f95992845bbe671601610fdd6713186753d12ad2587ec4deb207896883ca19ba8073340e0f1d0fcc85d5608f0
-doccontainersize 423300
-doccontainerchecksum ba294ef93274d742894f1867b309e738147b49bee21b7dfc2ddcaf6846abc78e8d7bc009575b84eecd88433dccaa05989fa8387e4a2d9a3fd44ff5a280e2eae4
+containersize 113704
+containerchecksum e9e7fa045dc3d7c72e02b8475d07ad4f06ce1d85404dd610d07ddfc166e6c9cb7216671bda8d75849ced3ef7f7a2532afa2f892ee0dda08861912fc23b5be7fb
+doccontainersize 423444
+doccontainerchecksum 95aa096c8f09311623cb767f5d2d142a63fcb27bc6e664555f62ebe8661cf8b1a57cbeb0e22ebfa816e95f708f738fa95063850431dc913378436421999ca23d
docfiles size=532
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 1e8c810133..07d1461dcb 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-8dbfb485996581a8c15d71b7c5664f9e texlive.tlpdb
+aaed663f86a55b73882c236c428065e9 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 148c5edaf3..a41728b747 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-ace2916600c865ca34032755d09f5ec7ae5b82b6f1b19e2ad03859c7a3ca18d6abd179a07c65e8fd8746af5267b03164ecaa5d875da881799b7559656f9b0230 texlive.tlpdb
+aa1af04397b984c8f1c9336f75af5b3f8e45b3d176d3491398437fea3c0bf91e79cde5c7c7c97424e0ccafb42d9ec2d47eaea3089c482a8b3c5bced75cfc9143 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index b513a878c4..8131167484 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-----
-iQEcBAEBCgAGBQJjiU1YAAoJEEzhh34ZQ4xwG9YH/i7eB54RFSOGlUlaqTEoqsfT
-kjCPthGJCokYsbY/VReMPCxB+3WU9vSuujHIxnxFps8/kCa4skkGTG+NQuFqdbfa
-VF1tUcMJH61rbSh1QVJ5SFwP1jKN+4OGN5KKRjqAiCK7CuzU7dS1Q/r+COf0SA+z
-iySvYEYhXZhXLLN3UIGmD2MSAigTLlihVObKNMeF1ZIFHkuAa0wg3bxOUHR4Rz7T
-QjPCzyIUJ1J5NPMNBIcrRSOp3GmBtNGmmYoooxch7IAmpB5YNiYfQYyqRPIu6vr0
-dxjXKywYb24VNoWt03SfG1MuEdpUuJfwv1m/tHVqAH3lcbnMVQ6l8m2ZLOxTM5c=
-=St9k
+iQEcBAEBCgAGBQJjip5gAAoJEEzhh34ZQ4xwpFwIAJH3AGmSjI5PuwzTlqd8H++R
+CfYRaslcAAVc+sUhZgBKMm1DiLmiLqsi3U+YcwO+I23PxqKJvdNs9Ro5XJbQKg8X
+7jEMFmdqoEX0eQsIwhrwLH4E22odRQXr28+JWwg4ymRl/UYZBxRMHfvOfYhEGoe/
+B2Hl9liFTLdjAMNyHKXWhv5XWDpWoetV8X08c4tupWrEsAUB5Z+GLaakzpaNMd+I
+qJ9FiiDUfM3mLdKt6vJRlN5g2tQjFIbpzbfIIt5W16wwKbae5zX0yPdERpWP0dC8
+fhNKsXv1NfE9XHKnDCtWrmkKfccFH9jUPbg7QvrHxSMAFaoxcwKqmnReSEWOUVU=
+=fYeK
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 2509791fff..79e2764c42 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index 253ebdbb91..bc2e3b67c3 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-12-03-02-02
+2022-12-04-02-02