summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname864
-rw-r--r--FILES.byname.gzbin2248286 -> 2248655 bytes
-rw-r--r--FILES.last07days1181
-rw-r--r--language/japanese/BX/bxjscls/README-ja.md8
-rw-r--r--language/japanese/BX/bxjscls/README.md1
-rw-r--r--language/japanese/BX/bxjscls/bxjscls-manual.pdfbin373054 -> 374676 bytes
-rw-r--r--language/japanese/BX/bxjscls/bxjscls-manual.tex93
-rw-r--r--language/japanese/BX/bxjscls/bxjscls.dtx354
-rw-r--r--language/japanese/BX/bxjscls/bxjscls.pdfbin1156825 -> 1164447 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md13
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx26
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin585059 -> 585393 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1555947 -> 1556273 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color-base.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin263132 -> 263496 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx92
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin379235 -> 379235 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin113527 -> 113527 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin140776 -> 140776 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin144785 -> 144785 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin107115 -> 107115 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin105090 -> 105090 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin140795 -> 140795 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin119094 -> 119094 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin152413 -> 152413 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin235322 -> 235322 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin147097 -> 147097 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin165946 -> 165946 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin199139 -> 199139 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin75889 -> 75889 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin279904 -> 280233 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin228194 -> 228529 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin217567 -> 217900 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin5861960 -> 5860559 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/semantex/README.md23
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin239643 -> 359130 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty8844
-rw-r--r--macros/latex/contrib/semantex/semantex.tex4715
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.lua212
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.sty114
-rw-r--r--macros/latex/contrib/semtex/README.md37
-rw-r--r--macros/latex/contrib/semtex/semtex.pdfbin0 -> 77110 bytes
-rw-r--r--macros/latex/contrib/semtex/semtex.sty83
-rw-r--r--macros/latex/contrib/semtex/semtex.tex229
-rw-r--r--macros/latex/contrib/subfiles/subfiles.dtx522
-rw-r--r--macros/latex/contrib/subfiles/subfiles.ins4
-rw-r--r--macros/latex/contrib/subfiles/subfiles.pdfbin241574 -> 246620 bytes
-rw-r--r--macros/luatex/latex/lua-physical/README.md4
-rw-r--r--macros/luatex/latex/lua-physical/lua-physical.pdfbin311374 -> 304061 bytes
-rw-r--r--macros/luatex/latex/lua-physical/lua-physical.tex67
-rwxr-xr-x[-rw-r--r--]macros/luatex/latex/lua-physical/physical.lua52
-rw-r--r--macros/luatex/latex/lua-physical/physical/physical-init.lua53
-rw-r--r--macros/luatex/latex/lua-physical/test/testData.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testDefinition.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testDimension.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testNumber.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testQuantity.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testUnit.lua2
-rw-r--r--support/make4ht/README2
-rw-r--r--support/make4ht/changelog.tex102
-rw-r--r--support/make4ht/domfilters/make4ht-fixinlines.lua1
-rw-r--r--support/make4ht/domfilters/make4ht-mathmlfixes.lua1
-rw-r--r--support/make4ht/extensions/make4ht-ext-common_domfilters.lua2
-rw-r--r--support/make4ht/extensions/make4ht-ext-common_filters.lua2
-rw-r--r--support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua6
-rw-r--r--support/make4ht/extensions/make4ht-ext-join_colors.lua2
-rw-r--r--support/make4ht/extensions/make4ht-ext-mathjaxnode.lua2
-rw-r--r--support/make4ht/extensions/make4ht-ext-tidy.lua2
-rw-r--r--support/make4ht/formats/make4ht-jats.lua14
-rw-r--r--support/make4ht/formats/make4ht-tei.lua17
-rwxr-xr-xsupport/make4ht/make4ht4
-rw-r--r--support/make4ht/make4ht-doc.pdfbin131544 -> 132815 bytes
-rw-r--r--support/make4ht/make4ht-errorlogparser.lua5
-rw-r--r--support/make4ht/make4ht-indexing.lua2
-rw-r--r--support/make4ht/make4ht-odtfilter.lua33
-rw-r--r--support/make4ht/mkutils.lua9
-rw-r--r--support/make4ht/readme.tex13
-rw-r--r--support/tex4ebook/README4
-rw-r--r--support/tex4ebook/changelog.tex54
-rw-r--r--support/tex4ebook/readme.tex9
-rwxr-xr-xsupport/tex4ebook/tex4ebook8
-rw-r--r--support/tex4ebook/tex4ebook-doc.pdfbin78439 -> 79364 bytes
-rw-r--r--support/tex4ebook/tex4ebook-exec_azw.lua35
-rw-r--r--support/tex4ebook/tex4ebook-exec_azw3.lua35
-rw-r--r--support/tex4ebook/tex4ebook-exec_epub.lua113
-rw-r--r--support/tex4ebook/tex4ebook.4ht10
-rw-r--r--support/tex4ebook/tex4ebook.sty4
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl7
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb903
-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.xzbin2228976 -> 2228484 bytes
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin548651 -> 548754 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog16
-rw-r--r--timestamp2
156 files changed, 12345 insertions, 6829 deletions
diff --git a/FILES.byname b/FILES.byname
index 5288af43f8..4ba19c6339 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -1841,7 +1841,7 @@
1989/12/11 | 6196 | biblio/tib/tib.man
1989/03/29 | 23265 | biblio/tib/vitaMake
2005/12/15 | 366385 | biblio/tib.zip
-2020/09/04 | 15515 | CTAN.sites
+2020/09/07 | 15649 | CTAN.sites
1990/10/03 | 5032 | dviware/beebe/00readme.txt
1990/10/03 | 479 | dviware/beebe/doc/00dir.cmd
1990/10/03 | 1209 | dviware/beebe/doc/00dir.lst
@@ -5003,7 +5003,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
-2020/09/06 | 215829 | FILES.last07days
+2020/09/07 | 101470 | FILES.last07days
2020/08/14 | 104065 | fonts/academicons/academicons.pdf
2020/08/14 | 17247 | fonts/academicons/academicons.sty
2020/08/14 | 6546 | fonts/academicons/academicons.tex
@@ -166033,7 +166033,7 @@
2020/09/01 | 70866 | install/macros/latex/contrib/l3backend.tds.zip
2020/06/04 | 790724 | install/macros/latex/contrib/l3build.tds.zip
2020/09/01 | 4609545 | install/macros/latex/contrib/l3experimental.tds.zip
-2020/09/03 | 11899388 | install/macros/latex/contrib/l3kernel.tds.zip
+2020/09/06 | 11901311 | install/macros/latex/contrib/l3kernel.tds.zip
2020/05/15 | 2170827 | install/macros/latex/contrib/l3packages.tds.zip
2015/03/29 | 573323 | install/macros/latex/contrib/lastpage.tds.zip
2009/09/02 | 556672 | install/macros/latex/contrib/layouts.tds.zip
@@ -170676,15 +170676,15 @@
2019/10/20 | 1086 | language/japanese/BX/bxjatoucs/LICENSE
2019/10/20 | 2776 | language/japanese/BX/bxjatoucs/README.md
2019/10/22 | 69213 | language/japanese/BX/bxjatoucs.zip
-2020/05/28 | 387128 | language/japanese/BX/bxjscls/bxjscls.dtx
+2020/09/04 | 393086 | language/japanese/BX/bxjscls/bxjscls.dtx
2017/11/01 | 847 | language/japanese/BX/bxjscls/bxjscls.ins
-2020/05/28 | 373054 | language/japanese/BX/bxjscls/bxjscls-manual.pdf
-2020/05/28 | 82847 | language/japanese/BX/bxjscls/bxjscls-manual.tex
-2020/05/28 | 1156825 | language/japanese/BX/bxjscls/bxjscls.pdf
+2020/09/04 | 374676 | language/japanese/BX/bxjscls/bxjscls-manual.pdf
+2020/09/04 | 84261 | language/japanese/BX/bxjscls/bxjscls-manual.tex
+2020/09/04 | 1164447 | language/japanese/BX/bxjscls/bxjscls.pdf
2020/02/05 | 1461 | language/japanese/BX/bxjscls/LICENSE
-2020/05/28 | 14295 | language/japanese/BX/bxjscls/README-ja.md
-2020/05/28 | 5640 | language/japanese/BX/bxjscls/README.md
-2020/05/28 | 1637398 | language/japanese/BX/bxjscls.zip
+2020/09/04 | 14746 | language/japanese/BX/bxjscls/README-ja.md
+2020/09/04 | 5674 | language/japanese/BX/bxjscls/README.md
+2020/09/07 | 1648476 | language/japanese/BX/bxjscls.zip
2019/04/01 | 44 | language/japanese/BX/bxwareki/bxwareki2019.def
2019/05/27 | 3941 | language/japanese/BX/bxwareki/bxwareki-cd.def
2019/05/28 | 182364 | language/japanese/BX/bxwareki/bxwareki.pdf
@@ -196051,107 +196051,107 @@
2020/09/01 | 1630 | macros/latex/contrib/l3experimental/xgalley.ins
2020/09/01 | 285681 | macros/latex/contrib/l3experimental/xgalley.pdf
2020/09/02 | 4566213 | macros/latex/contrib/l3experimental.zip
-2020/09/03 | 24664 | macros/latex/contrib/l3kernel/CHANGELOG.md
-2020/09/03 | 70000 | macros/latex/contrib/l3kernel/expl3.dtx
-2020/09/03 | 585059 | macros/latex/contrib/l3kernel/expl3.pdf
-2020/09/03 | 1555947 | macros/latex/contrib/l3kernel/interface3.pdf
-2020/09/03 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
-2020/09/03 | 127477 | macros/latex/contrib/l3kernel/l3basics.dtx
-2020/09/03 | 14244 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
-2020/09/03 | 77528 | macros/latex/contrib/l3kernel/l3box.dtx
-2020/09/03 | 61738 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2020/09/03 | 30954 | macros/latex/contrib/l3kernel/l3cctab.dtx
-2020/09/03 | 75536 | macros/latex/contrib/l3kernel/l3clist.dtx
-2020/09/03 | 85887 | macros/latex/contrib/l3kernel/l3coffins.dtx
-2020/09/03 | 5653 | macros/latex/contrib/l3kernel/l3color-base.dtx
-2020/09/03 | 43159 | macros/latex/contrib/l3kernel/l3debug.dtx
-2020/09/03 | 30345 | macros/latex/contrib/l3kernel/l3deprecation.dtx
-2020/09/03 | 149242 | macros/latex/contrib/l3kernel/l3doc.dtx
-2020/09/03 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2020/09/03 | 263132 | macros/latex/contrib/l3kernel/l3docstrip.pdf
-2020/09/03 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
-2020/09/03 | 133887 | macros/latex/contrib/l3kernel/l3file.dtx
-2020/09/03 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
-2020/09/03 | 11812 | macros/latex/contrib/l3kernel/l3fparray.dtx
-2020/09/03 | 6956 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2020/09/03 | 47674 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
-2020/09/03 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2020/09/03 | 19653 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
-2020/09/03 | 70325 | macros/latex/contrib/l3kernel/l3fp.dtx
-2020/09/03 | 49386 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
-2020/09/03 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2020/09/03 | 23107 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2020/09/03 | 105735 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
-2020/09/03 | 25739 | macros/latex/contrib/l3kernel/l3fp-random.dtx
-2020/09/03 | 18591 | macros/latex/contrib/l3kernel/l3fp-round.dtx
-2020/09/03 | 12965 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2020/09/03 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
-2020/09/03 | 6076 | macros/latex/contrib/l3kernel/l3.ins
-2020/09/03 | 19680 | macros/latex/contrib/l3kernel/l3intarray.dtx
-2020/09/03 | 89226 | macros/latex/contrib/l3kernel/l3int.dtx
-2020/09/03 | 27656 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
-2020/09/03 | 112616 | macros/latex/contrib/l3kernel/l3keys.dtx
-2020/09/03 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
-2020/09/03 | 17106 | macros/latex/contrib/l3kernel/l3luatex.dtx
-2020/09/03 | 77434 | macros/latex/contrib/l3kernel/l3msg.dtx
-2020/09/03 | 76139 | macros/latex/contrib/l3kernel/l3names.dtx
-2020/09/03 | 113527 | macros/latex/contrib/l3kernel/l3news01.pdf
-2020/09/03 | 4935 | macros/latex/contrib/l3kernel/l3news01.tex
-2020/09/03 | 140776 | macros/latex/contrib/l3kernel/l3news02.pdf
-2020/09/03 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
-2020/09/03 | 144785 | macros/latex/contrib/l3kernel/l3news03.pdf
-2020/09/03 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
-2020/09/03 | 107115 | macros/latex/contrib/l3kernel/l3news04.pdf
-2020/09/03 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
-2020/09/03 | 105090 | macros/latex/contrib/l3kernel/l3news05.pdf
-2020/09/03 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
-2020/09/03 | 140795 | macros/latex/contrib/l3kernel/l3news06.pdf
-2020/09/03 | 6431 | macros/latex/contrib/l3kernel/l3news06.tex
-2020/09/03 | 119094 | macros/latex/contrib/l3kernel/l3news07.pdf
-2020/09/03 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
-2020/09/03 | 152413 | macros/latex/contrib/l3kernel/l3news08.pdf
-2020/09/03 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
-2020/09/03 | 235322 | macros/latex/contrib/l3kernel/l3news09.pdf
-2020/09/03 | 107379 | macros/latex/contrib/l3kernel/l3news09.tex
-2020/09/03 | 147097 | macros/latex/contrib/l3kernel/l3news10.pdf
-2020/09/03 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
-2020/09/03 | 165946 | macros/latex/contrib/l3kernel/l3news11.pdf
-2020/09/03 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
-2020/09/03 | 199139 | macros/latex/contrib/l3kernel/l3news12.pdf
-2020/09/03 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
-2020/09/03 | 379235 | macros/latex/contrib/l3kernel/l3news.pdf
-2020/09/03 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
-2020/09/03 | 35072 | macros/latex/contrib/l3kernel/l3prefixes.csv
-2020/09/03 | 75889 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2020/09/03 | 2817 | macros/latex/contrib/l3kernel/l3prefixes.tex
-2020/09/03 | 64938 | macros/latex/contrib/l3kernel/l3prg.dtx
-2020/09/03 | 51025 | macros/latex/contrib/l3kernel/l3prop.dtx
-2020/09/03 | 35831 | macros/latex/contrib/l3kernel/l3quark.dtx
-2020/09/03 | 251923 | macros/latex/contrib/l3kernel/l3regex.dtx
-2020/09/03 | 87751 | macros/latex/contrib/l3kernel/l3seq.dtx
-2020/09/03 | 76428 | macros/latex/contrib/l3kernel/l3skip.dtx
-2020/09/03 | 40663 | macros/latex/contrib/l3kernel/l3sort.dtx
-2020/09/03 | 113900 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2020/09/03 | 74310 | macros/latex/contrib/l3kernel/l3str.dtx
-2020/09/03 | 279904 | macros/latex/contrib/l3kernel/l3styleguide.pdf
-2020/09/03 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
-2020/09/03 | 228194 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2020/09/03 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
-2020/09/03 | 30010 | macros/latex/contrib/l3kernel/l3sys.dtx
-2020/09/03 | 217567 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
-2020/09/03 | 6450 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2020/09/03 | 51971 | macros/latex/contrib/l3kernel/l3text-case.dtx
-2020/09/03 | 34581 | macros/latex/contrib/l3kernel/l3text.dtx
-2020/09/03 | 20914 | macros/latex/contrib/l3kernel/l3text-purify.dtx
-2020/09/03 | 40695 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
-2020/09/03 | 135177 | macros/latex/contrib/l3kernel/l3tl.dtx
-2020/09/03 | 110692 | macros/latex/contrib/l3kernel/l3token.dtx
-2020/09/03 | 9642 | macros/latex/contrib/l3kernel/l3unicode.dtx
-2020/09/03 | 2997 | macros/latex/contrib/l3kernel/README.md
-2020/09/03 | 21212 | macros/latex/contrib/l3kernel/source3body.tex
-2020/09/03 | 5861960 | macros/latex/contrib/l3kernel/source3.pdf
-2020/09/03 | 2153 | macros/latex/contrib/l3kernel/source3.tex
-2020/09/03 | 11678113 | macros/latex/contrib/l3kernel.zip
+2020/09/06 | 24714 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2020/09/06 | 70261 | macros/latex/contrib/l3kernel/expl3.dtx
+2020/09/06 | 585393 | macros/latex/contrib/l3kernel/expl3.pdf
+2020/09/06 | 1556273 | macros/latex/contrib/l3kernel/interface3.pdf
+2020/09/06 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
+2020/09/06 | 127477 | macros/latex/contrib/l3kernel/l3basics.dtx
+2020/09/06 | 14244 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
+2020/09/06 | 77528 | macros/latex/contrib/l3kernel/l3box.dtx
+2020/09/06 | 61738 | macros/latex/contrib/l3kernel/l3candidates.dtx
+2020/09/06 | 30954 | macros/latex/contrib/l3kernel/l3cctab.dtx
+2020/09/06 | 75536 | macros/latex/contrib/l3kernel/l3clist.dtx
+2020/09/06 | 85887 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2020/09/06 | 5653 | macros/latex/contrib/l3kernel/l3color-base.dtx
+2020/09/06 | 43159 | macros/latex/contrib/l3kernel/l3debug.dtx
+2020/09/06 | 30345 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2020/09/06 | 149242 | macros/latex/contrib/l3kernel/l3doc.dtx
+2020/09/06 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
+2020/09/06 | 263496 | macros/latex/contrib/l3kernel/l3docstrip.pdf
+2020/09/06 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
+2020/09/06 | 133763 | macros/latex/contrib/l3kernel/l3file.dtx
+2020/09/06 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
+2020/09/06 | 11812 | macros/latex/contrib/l3kernel/l3fparray.dtx
+2020/09/06 | 6956 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
+2020/09/06 | 47674 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
+2020/09/06 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
+2020/09/06 | 19653 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2020/09/06 | 70325 | macros/latex/contrib/l3kernel/l3fp.dtx
+2020/09/06 | 49386 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
+2020/09/06 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
+2020/09/06 | 23107 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
+2020/09/06 | 105735 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
+2020/09/06 | 25739 | macros/latex/contrib/l3kernel/l3fp-random.dtx
+2020/09/06 | 18591 | macros/latex/contrib/l3kernel/l3fp-round.dtx
+2020/09/06 | 12965 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
+2020/09/06 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
+2020/09/06 | 6076 | macros/latex/contrib/l3kernel/l3.ins
+2020/09/06 | 19680 | macros/latex/contrib/l3kernel/l3intarray.dtx
+2020/09/06 | 89226 | macros/latex/contrib/l3kernel/l3int.dtx
+2020/09/06 | 27656 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2020/09/06 | 112616 | macros/latex/contrib/l3kernel/l3keys.dtx
+2020/09/06 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
+2020/09/06 | 17106 | macros/latex/contrib/l3kernel/l3luatex.dtx
+2020/09/06 | 77434 | macros/latex/contrib/l3kernel/l3msg.dtx
+2020/09/06 | 76139 | macros/latex/contrib/l3kernel/l3names.dtx
+2020/09/06 | 113527 | macros/latex/contrib/l3kernel/l3news01.pdf
+2020/09/06 | 4935 | macros/latex/contrib/l3kernel/l3news01.tex
+2020/09/06 | 140776 | macros/latex/contrib/l3kernel/l3news02.pdf
+2020/09/06 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
+2020/09/06 | 144785 | macros/latex/contrib/l3kernel/l3news03.pdf
+2020/09/06 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
+2020/09/06 | 107115 | macros/latex/contrib/l3kernel/l3news04.pdf
+2020/09/06 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
+2020/09/06 | 105090 | macros/latex/contrib/l3kernel/l3news05.pdf
+2020/09/06 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
+2020/09/06 | 140795 | macros/latex/contrib/l3kernel/l3news06.pdf
+2020/09/06 | 6431 | macros/latex/contrib/l3kernel/l3news06.tex
+2020/09/06 | 119094 | macros/latex/contrib/l3kernel/l3news07.pdf
+2020/09/06 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
+2020/09/06 | 152413 | macros/latex/contrib/l3kernel/l3news08.pdf
+2020/09/06 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
+2020/09/06 | 235322 | macros/latex/contrib/l3kernel/l3news09.pdf
+2020/09/06 | 107379 | macros/latex/contrib/l3kernel/l3news09.tex
+2020/09/06 | 147097 | macros/latex/contrib/l3kernel/l3news10.pdf
+2020/09/06 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
+2020/09/06 | 165946 | macros/latex/contrib/l3kernel/l3news11.pdf
+2020/09/06 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
+2020/09/06 | 199139 | macros/latex/contrib/l3kernel/l3news12.pdf
+2020/09/06 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
+2020/09/06 | 379235 | macros/latex/contrib/l3kernel/l3news.pdf
+2020/09/06 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
+2020/09/06 | 35072 | macros/latex/contrib/l3kernel/l3prefixes.csv
+2020/09/06 | 75889 | macros/latex/contrib/l3kernel/l3prefixes.pdf
+2020/09/06 | 2817 | macros/latex/contrib/l3kernel/l3prefixes.tex
+2020/09/06 | 64938 | macros/latex/contrib/l3kernel/l3prg.dtx
+2020/09/06 | 51025 | macros/latex/contrib/l3kernel/l3prop.dtx
+2020/09/06 | 35831 | macros/latex/contrib/l3kernel/l3quark.dtx
+2020/09/06 | 251923 | macros/latex/contrib/l3kernel/l3regex.dtx
+2020/09/06 | 87751 | macros/latex/contrib/l3kernel/l3seq.dtx
+2020/09/06 | 76428 | macros/latex/contrib/l3kernel/l3skip.dtx
+2020/09/06 | 40663 | macros/latex/contrib/l3kernel/l3sort.dtx
+2020/09/06 | 113900 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2020/09/06 | 74310 | macros/latex/contrib/l3kernel/l3str.dtx
+2020/09/06 | 280233 | macros/latex/contrib/l3kernel/l3styleguide.pdf
+2020/09/06 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2020/09/06 | 228529 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+2020/09/06 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
+2020/09/06 | 30010 | macros/latex/contrib/l3kernel/l3sys.dtx
+2020/09/06 | 217900 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
+2020/09/06 | 6450 | macros/latex/contrib/l3kernel/l3term-glossary.tex
+2020/09/06 | 51971 | macros/latex/contrib/l3kernel/l3text-case.dtx
+2020/09/06 | 34581 | macros/latex/contrib/l3kernel/l3text.dtx
+2020/09/06 | 20914 | macros/latex/contrib/l3kernel/l3text-purify.dtx
+2020/09/06 | 40695 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+2020/09/06 | 135177 | macros/latex/contrib/l3kernel/l3tl.dtx
+2020/09/06 | 110692 | macros/latex/contrib/l3kernel/l3token.dtx
+2020/09/06 | 9642 | macros/latex/contrib/l3kernel/l3unicode.dtx
+2020/09/06 | 2997 | macros/latex/contrib/l3kernel/README.md
+2020/09/06 | 21212 | macros/latex/contrib/l3kernel/source3body.tex
+2020/09/06 | 5860559 | macros/latex/contrib/l3kernel/source3.pdf
+2020/09/06 | 2153 | macros/latex/contrib/l3kernel/source3.tex
+2020/09/07 | 11679925 | macros/latex/contrib/l3kernel.zip
2020/05/15 | 3423 | macros/latex/contrib/l3packages/CHANGELOG.md
2019/11/15 | 1444 | macros/latex/contrib/l3packages/l3keys2e-demo.tex
2020/05/15 | 11613 | macros/latex/contrib/l3packages/l3keys2e.dtx
@@ -204889,11 +204889,13 @@
2019/12/10 | 24550 | macros/latex/contrib/selinput/selinput.dtx
2019/12/10 | 537307 | macros/latex/contrib/selinput/selinput.pdf
2019/12/11 | 541126 | macros/latex/contrib/selinput.zip
-2020/07/21 | 1197 | macros/latex/contrib/semantex/README.md
-2020/07/21 | 239643 | macros/latex/contrib/semantex/semantex.pdf
-2020/07/21 | 215621 | macros/latex/contrib/semantex/semantex.sty
-2020/07/21 | 74018 | macros/latex/contrib/semantex/semantex.tex
-2020/07/21 | 276040 | macros/latex/contrib/semantex.zip
+2020/09/07 | 1660 | macros/latex/contrib/semantex/README.md
+2020/09/07 | 359130 | macros/latex/contrib/semantex/semantex.pdf
+2020/09/07 | 210678 | macros/latex/contrib/semantex/semantex.sty
+2020/09/07 | 173012 | macros/latex/contrib/semantex/semantex.tex
+2020/09/07 | 7030 | macros/latex/contrib/semantex/stripsemantex.lua
+2020/09/07 | 3301 | macros/latex/contrib/semantex/stripsemantex.sty
+2020/09/07 | 412937 | 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
@@ -204947,6 +204949,11 @@
2015/06/15 | 22867 | macros/latex/contrib/semproc/semproc.dtx
2015/06/15 | 363791 | macros/latex/contrib/semproc/semproc.pdf
2015/06/16 | 368380 | macros/latex/contrib/semproc.zip
+2020/09/07 | 1486 | macros/latex/contrib/semtex/README.md
+2020/09/07 | 77110 | macros/latex/contrib/semtex/semtex.pdf
+2020/09/07 | 1864 | macros/latex/contrib/semtex/semtex.sty
+2020/09/07 | 6403 | macros/latex/contrib/semtex/semtex.tex
+2020/09/07 | 80378 | macros/latex/contrib/semtex.zip
2016/07/19 | 1848 | macros/latex/contrib/sepfootnotes/README
2016/07/19 | 218406 | macros/latex/contrib/sepfootnotes/sepfootnotes.pdf
2016/07/19 | 8730 | macros/latex/contrib/sepfootnotes/sepfootnotes.sty
@@ -206605,11 +206612,11 @@
2005/06/29 | 21942 | macros/latex/contrib/subfig/test6.tex
2005/06/06 | 3981 | macros/latex/contrib/subfig/test7.tex
2005/07/08 | 529420 | macros/latex/contrib/subfig.zip
-2019/11/21 | 446 | macros/latex/contrib/subfiles/README
-2020/02/14 | 26419 | macros/latex/contrib/subfiles/subfiles.dtx
-2019/11/21 | 2076 | macros/latex/contrib/subfiles/subfiles.ins
-2020/02/14 | 241574 | macros/latex/contrib/subfiles/subfiles.pdf
-2020/02/14 | 248339 | macros/latex/contrib/subfiles.zip
+2019/11/06 | 446 | macros/latex/contrib/subfiles/README
+2020/09/07 | 29145 | macros/latex/contrib/subfiles/subfiles.dtx
+2020/09/07 | 2074 | macros/latex/contrib/subfiles/subfiles.ins
+2020/09/07 | 246620 | macros/latex/contrib/subfiles/subfiles.pdf
+2020/09/07 | 253797 | macros/latex/contrib/subfiles.zip
2003/09/25 | 618 | macros/latex/contrib/subfloat/ChangeLog
2002/08/19 | 401 | macros/latex/contrib/subfloat/install.sh
2003/09/25 | 2107 | macros/latex/contrib/subfloat/Makefile
@@ -213229,28 +213236,27 @@
2020/06/07 | 248883 | macros/luatex/latex/luamesh.zip
2020/09/04 | 1069 | macros/luatex/latex/lua-physical/LICENSE
2020/09/04 | 1839 | macros/luatex/latex/lua-physical/lua-physical.bib
-2020/09/05 | 311374 | macros/luatex/latex/lua-physical/lua-physical.pdf
-2020/09/05 | 73027 | macros/luatex/latex/lua-physical/lua-physical.tex
-2020/09/04 | 41 | macros/luatex/latex/lua-physical/physical.lua
+2020/09/07 | 304061 | macros/luatex/latex/lua-physical/lua-physical.pdf
+2020/09/07 | 73382 | macros/luatex/latex/lua-physical/lua-physical.tex
+2020/09/07 | 1587 | macros/luatex/latex/lua-physical/physical.lua
2020/09/04 | 5492 | macros/luatex/latex/lua-physical/physical/physical-astronomical.lua
2020/09/04 | 6758 | macros/luatex/latex/lua-physical/physical/physical-data.lua
2020/09/04 | 28337 | macros/luatex/latex/lua-physical/physical/physical-definition.lua
2020/09/04 | 4782 | macros/luatex/latex/lua-physical/physical/physical-dimension.lua
-2020/09/05 | 1761 | macros/luatex/latex/lua-physical/physical/physical-init.lua
2020/09/04 | 1002552 | macros/luatex/latex/lua-physical/physical/physical-isotope.lua
2020/09/04 | 14565 | macros/luatex/latex/lua-physical/physical/physical-number.lua
2020/09/04 | 16677 | macros/luatex/latex/lua-physical/physical/physical-quantity.lua
2020/09/04 | 4493 | macros/luatex/latex/lua-physical/physical/physical-unit.lua
-2020/09/05 | 22890 | macros/luatex/latex/lua-physical/README.md
+2020/09/07 | 22890 | macros/luatex/latex/lua-physical/README.md
2020/09/04 | 99491 | macros/luatex/latex/lua-physical/test/luaunit.lua
-2020/09/04 | 6914 | macros/luatex/latex/lua-physical/test/testData.lua
-2020/09/04 | 24016 | macros/luatex/latex/lua-physical/test/testDefinition.lua
-2020/09/04 | 8282 | macros/luatex/latex/lua-physical/test/testDimension.lua
+2020/09/07 | 6923 | macros/luatex/latex/lua-physical/test/testData.lua
+2020/09/07 | 24025 | macros/luatex/latex/lua-physical/test/testDefinition.lua
+2020/09/07 | 8291 | macros/luatex/latex/lua-physical/test/testDimension.lua
2020/09/04 | 1433 | macros/luatex/latex/lua-physical/test/test.lua
-2020/09/04 | 13708 | macros/luatex/latex/lua-physical/test/testNumber.lua
-2020/09/04 | 16882 | macros/luatex/latex/lua-physical/test/testQuantity.lua
-2020/09/04 | 2775 | macros/luatex/latex/lua-physical/test/testUnit.lua
-2020/09/05 | 796152 | macros/luatex/latex/lua-physical.zip
+2020/09/07 | 13717 | macros/luatex/latex/lua-physical/test/testNumber.lua
+2020/09/07 | 16891 | macros/luatex/latex/lua-physical/test/testQuantity.lua
+2020/09/07 | 2784 | macros/luatex/latex/lua-physical/test/testUnit.lua
+2020/09/07 | 788479 | macros/luatex/latex/lua-physical.zip
2020/08/13 | 437891 | macros/luatex/latex/luaprogtable/luaprogtable-doc.pdf
2020/08/13 | 21510 | macros/luatex/latex/luaprogtable/luaprogtable-doc.tex
2020/08/13 | 16863 | macros/luatex/latex/luaprogtable/luaprogtable.lua
@@ -251640,68 +251646,68 @@
2019/05/27 | 96489 | support/lyluatex/lyluatex.tex
2019/05/27 | 2868 | support/lyluatex/README.md
2019/05/28 | 1334865 | support/lyluatex.zip
-2020/02/28 | 24689 | support/make4ht/changelog.tex
-2020/02/28 | 4641 | support/make4ht/domfilters/make4ht-aeneas.lua
-2020/02/28 | 2741 | support/make4ht/domfilters/make4ht-booktabs.lua
-2020/02/28 | 6807 | support/make4ht/domfilters/make4ht-collapsetoc.lua
-2020/02/28 | 1047 | support/make4ht/domfilters/make4ht-fixinlines.lua
-2020/02/28 | 595 | support/make4ht/domfilters/make4ht-idcolons.lua
-2020/02/28 | 4913 | support/make4ht/domfilters/make4ht-joincharacters.lua
-2020/02/28 | 2216 | support/make4ht/domfilters/make4ht-joincolors.lua
-2020/02/28 | 1406 | support/make4ht/domfilters/make4ht-mathmlfixes.lua
-2020/02/28 | 627 | support/make4ht/domfilters/make4ht-odtimagesize.lua
-2020/02/28 | 321 | support/make4ht/domfilters/make4ht-odtpartable.lua
-2020/02/28 | 1026 | support/make4ht/domfilters/make4ht-t4htlinks.lua
-2020/02/28 | 2584 | support/make4ht/domfilters/make4ht-tablerows.lua
-2020/02/28 | 1045 | support/make4ht/extensions/make4ht-ext-common_domfilters.lua
-2020/02/28 | 627 | support/make4ht/extensions/make4ht-ext-common_filters.lua
-2020/02/28 | 2794 | support/make4ht/extensions/make4ht-ext-detect_engine.lua
-2020/02/28 | 8335 | support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
-2020/02/28 | 309 | support/make4ht/extensions/make4ht-ext-join_colors.lua
-2020/02/28 | 974 | support/make4ht/extensions/make4ht-ext-latexmk_build.lua
-2020/02/28 | 271 | support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
-2020/02/28 | 288 | support/make4ht/extensions/make4ht-ext-odttemplate.lua
-2020/02/28 | 3861 | support/make4ht/extensions/make4ht-ext-preprocess_input.lua
-2020/02/28 | 4301 | support/make4ht/extensions/make4ht-ext-staticsite.lua
-2020/02/28 | 1329 | support/make4ht/extensions/make4ht-ext-tidy.lua
-2020/02/28 | 798 | support/make4ht/filters/make4ht-cleanspan.lua
-2020/02/28 | 264 | support/make4ht/filters/make4ht-cleanspan-nat.lua
-2020/02/28 | 2270 | support/make4ht/filters/make4ht-domfilter.lua
-2020/02/28 | 291 | support/make4ht/filters/make4ht-entities.lua
-2020/02/28 | 713 | support/make4ht/filters/make4ht-entities-to-unicode.lua
-2020/02/28 | 596 | support/make4ht/filters/make4ht-filter.lua
-2020/02/28 | 386 | support/make4ht/filters/make4ht-fixligatures.lua
-2020/02/28 | 425 | support/make4ht/filters/make4ht-fix-links.lua
-2020/02/28 | 402 | support/make4ht/filters/make4ht-hruletohr.lua
-2020/02/28 | 3191 | support/make4ht/filters/make4ht-mathjaxnode.lua
-2020/02/28 | 2324 | support/make4ht/filters/make4ht-odttemplate.lua
-2020/02/28 | 3412 | support/make4ht/filters/make4ht-staticsite.lua
-2020/02/28 | 1215 | support/make4ht/filters/make4ht-svg-height.lua
-2020/02/28 | 1143 | support/make4ht/formats/make4ht-docbook.lua
-2020/02/28 | 395 | support/make4ht/formats/make4ht-html5.lua
-2020/02/28 | 7599 | support/make4ht/formats/make4ht-odt.lua
-2020/02/28 | 344 | support/make4ht/formats/make4ht-tei.lua
-2020/02/28 | 326 | support/make4ht/formats/make4ht-xhtml.lua
-2020/02/28 | 9796 | support/make4ht/lapp-mk4.lua
-2020/02/28 | 4028 | support/make4ht/make4ht
-2020/02/28 | 7915 | support/make4ht/make4ht-aeneas-config.lua
-2020/02/28 | 2465 | support/make4ht/make4ht-config.lua
-2020/02/28 | 131544 | support/make4ht/make4ht-doc.pdf
-2020/02/28 | 798 | support/make4ht/make4ht-doc.tex
-2020/02/28 | 5355 | support/make4ht/make4ht-dvireader.lua
-2020/02/28 | 2679 | support/make4ht/make4ht-errorlogparser.lua
-2020/02/28 | 1039 | support/make4ht/make4ht-filterlib.lua
-2020/02/28 | 4244 | support/make4ht/make4ht-htlatex.lua
-2020/02/28 | 7544 | support/make4ht/make4ht-indexing.lua
-2020/02/28 | 6356 | support/make4ht/make4ht-lib.lua
-2020/02/28 | 2905 | support/make4ht/make4ht-logging.lua
-2020/02/28 | 1093 | support/make4ht/make4ht-odtfilter.lua
-2020/02/28 | 3247 | support/make4ht/make4ht-xtpipes.lua
-2020/02/28 | 10527 | support/make4ht/mkparams.lua
-2020/02/28 | 16483 | support/make4ht/mkutils.lua
-2020/02/28 | 37553 | support/make4ht/README
-2020/02/28 | 46829 | support/make4ht/readme.tex
-2020/02/28 | 227542 | support/make4ht.zip
+2020/09/07 | 26319 | support/make4ht/changelog.tex
+2020/09/07 | 4641 | support/make4ht/domfilters/make4ht-aeneas.lua
+2020/09/07 | 2741 | support/make4ht/domfilters/make4ht-booktabs.lua
+2020/09/07 | 6807 | support/make4ht/domfilters/make4ht-collapsetoc.lua
+2020/09/07 | 1057 | support/make4ht/domfilters/make4ht-fixinlines.lua
+2020/09/07 | 595 | support/make4ht/domfilters/make4ht-idcolons.lua
+2020/09/07 | 4913 | support/make4ht/domfilters/make4ht-joincharacters.lua
+2020/09/07 | 2216 | support/make4ht/domfilters/make4ht-joincolors.lua
+2020/09/07 | 1448 | support/make4ht/domfilters/make4ht-mathmlfixes.lua
+2020/09/07 | 627 | support/make4ht/domfilters/make4ht-odtimagesize.lua
+2020/09/07 | 321 | support/make4ht/domfilters/make4ht-odtpartable.lua
+2020/09/07 | 1026 | support/make4ht/domfilters/make4ht-t4htlinks.lua
+2020/09/07 | 2584 | support/make4ht/domfilters/make4ht-tablerows.lua
+2020/09/07 | 1046 | support/make4ht/extensions/make4ht-ext-common_domfilters.lua
+2020/09/07 | 628 | support/make4ht/extensions/make4ht-ext-common_filters.lua
+2020/09/07 | 2794 | support/make4ht/extensions/make4ht-ext-detect_engine.lua
+2020/09/07 | 8387 | support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
+2020/09/07 | 310 | support/make4ht/extensions/make4ht-ext-join_colors.lua
+2020/09/07 | 974 | support/make4ht/extensions/make4ht-ext-latexmk_build.lua
+2020/09/07 | 272 | support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
+2020/09/07 | 288 | support/make4ht/extensions/make4ht-ext-odttemplate.lua
+2020/09/07 | 3861 | support/make4ht/extensions/make4ht-ext-preprocess_input.lua
+2020/09/07 | 4301 | support/make4ht/extensions/make4ht-ext-staticsite.lua
+2020/09/07 | 1330 | support/make4ht/extensions/make4ht-ext-tidy.lua
+2020/09/07 | 798 | support/make4ht/filters/make4ht-cleanspan.lua
+2020/09/07 | 264 | support/make4ht/filters/make4ht-cleanspan-nat.lua
+2020/09/07 | 2270 | support/make4ht/filters/make4ht-domfilter.lua
+2020/09/07 | 291 | support/make4ht/filters/make4ht-entities.lua
+2020/09/07 | 713 | support/make4ht/filters/make4ht-entities-to-unicode.lua
+2020/09/07 | 596 | support/make4ht/filters/make4ht-filter.lua
+2020/09/07 | 386 | support/make4ht/filters/make4ht-fixligatures.lua
+2020/09/07 | 425 | support/make4ht/filters/make4ht-fix-links.lua
+2020/09/07 | 402 | support/make4ht/filters/make4ht-hruletohr.lua
+2020/09/07 | 3191 | support/make4ht/filters/make4ht-mathjaxnode.lua
+2020/09/07 | 2324 | support/make4ht/filters/make4ht-odttemplate.lua
+2020/09/07 | 3412 | support/make4ht/filters/make4ht-staticsite.lua
+2020/09/07 | 1215 | support/make4ht/filters/make4ht-svg-height.lua
+2020/09/07 | 1143 | support/make4ht/formats/make4ht-docbook.lua
+2020/09/07 | 395 | support/make4ht/formats/make4ht-html5.lua
+2020/09/07 | 345 | support/make4ht/formats/make4ht-jats.lua
+2020/09/07 | 7599 | support/make4ht/formats/make4ht-odt.lua
+2020/09/07 | 733 | support/make4ht/formats/make4ht-tei.lua
+2020/09/07 | 326 | support/make4ht/formats/make4ht-xhtml.lua
+2020/09/07 | 9796 | support/make4ht/lapp-mk4.lua
+2020/09/07 | 4039 | support/make4ht/make4ht
+2020/09/07 | 7915 | support/make4ht/make4ht-aeneas-config.lua
+2020/09/07 | 2465 | support/make4ht/make4ht-config.lua
+2020/09/07 | 132815 | support/make4ht/make4ht-doc.pdf
+2020/09/07 | 798 | support/make4ht/make4ht-doc.tex
+2020/09/07 | 5355 | support/make4ht/make4ht-dvireader.lua
+2020/09/07 | 2751 | support/make4ht/make4ht-errorlogparser.lua
+2020/09/07 | 1039 | support/make4ht/make4ht-filterlib.lua
+2020/09/07 | 4244 | support/make4ht/make4ht-htlatex.lua
+2020/09/07 | 7547 | support/make4ht/make4ht-indexing.lua
+2020/09/07 | 6356 | support/make4ht/make4ht-lib.lua
+2020/09/07 | 2905 | support/make4ht/make4ht-logging.lua
+2020/09/07 | 3247 | support/make4ht/make4ht-xtpipes.lua
+2020/09/07 | 10527 | support/make4ht/mkparams.lua
+2020/09/07 | 16669 | support/make4ht/mkutils.lua
+2020/09/07 | 37551 | support/make4ht/README
+2020/09/07 | 46874 | support/make4ht/readme.tex
+2020/09/07 | 229010 | support/make4ht.zip
2018/02/21 | 59658 | support/makedtx/makedtx.dtx
2018/02/21 | 1370 | support/makedtx/makedtx.ins
2018/02/21 | 300434 | support/makedtx/makedtx.pdf
@@ -253969,20 +253975,22 @@
2005/06/29 | 3686 | support/tex2tok/_tex2tok.tex
2005/06/29 | 20547 | support/tex2tok/tex2tok.tex
2005/06/30 | 8863 | support/tex2tok.zip
-2019/11/01 | 11241 | support/tex4ebook/changelog.tex
-2019/11/01 | 11175 | support/tex4ebook/README
-2019/11/01 | 14355 | support/tex4ebook/readme.tex
-2019/11/01 | 5564 | support/tex4ebook/tex4ebook
-2019/11/01 | 14636 | support/tex4ebook/tex4ebook.4ht
-2019/11/01 | 78439 | support/tex4ebook/tex4ebook-doc.pdf
-2019/11/01 | 752 | support/tex4ebook/tex4ebook-doc.tex
-2019/11/01 | 4325 | support/tex4ebook/tex4ebook-epub3.4ht
-2019/11/01 | 9407 | support/tex4ebook/tex4ebook-exec_epub3.lua
-2019/11/01 | 11303 | support/tex4ebook/tex4ebook-exec_epub.lua
-2019/11/01 | 917 | support/tex4ebook/tex4ebook-exec_mobi.lua
-2019/11/01 | 4434 | support/tex4ebook/tex4ebook.sty
-2019/11/01 | 2677 | support/tex4ebook/tex4ebook-tidyconf.conf
-2019/11/02 | 109033 | support/tex4ebook.zip
+2020/09/07 | 12217 | support/tex4ebook/changelog.tex
+2020/09/07 | 11199 | support/tex4ebook/README
+2020/09/07 | 14411 | support/tex4ebook/readme.tex
+2020/09/07 | 5704 | support/tex4ebook/tex4ebook
+2020/09/07 | 14764 | support/tex4ebook/tex4ebook.4ht
+2020/09/07 | 79364 | support/tex4ebook/tex4ebook-doc.pdf
+2020/09/07 | 752 | support/tex4ebook/tex4ebook-doc.tex
+2020/09/07 | 4325 | support/tex4ebook/tex4ebook-epub3.4ht
+2020/09/07 | 996 | support/tex4ebook/tex4ebook-exec_azw3.lua
+2020/09/07 | 995 | support/tex4ebook/tex4ebook-exec_azw.lua
+2020/09/07 | 9407 | support/tex4ebook/tex4ebook-exec_epub3.lua
+2020/09/07 | 15678 | support/tex4ebook/tex4ebook-exec_epub.lua
+2020/09/07 | 917 | support/tex4ebook/tex4ebook-exec_mobi.lua
+2020/09/07 | 4426 | support/tex4ebook/tex4ebook.sty
+2020/09/07 | 2677 | support/tex4ebook/tex4ebook-tidyconf.conf
+2020/09/07 | 112840 | support/tex4ebook.zip
2017/04/17 | 463 | support/TeX4ht/README
2008/06/16 | 13958556 | support/TeX4ht/tex4ht-all.zip
1988/10/16 | 7680 | support/texcalc/TEXCALC.INS
@@ -257371,9 +257379,9 @@
2019/02/28 | 14272 | systems/texlive/tlnet/archive/akktex.r26055.tar.xz
2019/02/28 | 202824 | systems/texlive/tlnet/archive/akletter.doc.r15878.tar.xz
2019/02/28 | 9720 | systems/texlive/tlnet/archive/akletter.r15878.tar.xz
-2020/05/23 | 146032 | systems/texlive/tlnet/archive/akshar.doc.r55249.tar.xz
-2020/05/23 | 2968 | systems/texlive/tlnet/archive/akshar.r55249.tar.xz
-2020/05/23 | 8036 | systems/texlive/tlnet/archive/akshar.source.r55249.tar.xz
+2020/09/07 | 145756 | systems/texlive/tlnet/archive/akshar.doc.r56277.tar.xz
+2020/09/07 | 2988 | systems/texlive/tlnet/archive/akshar.r56277.tar.xz
+2020/09/07 | 1526912 | systems/texlive/tlnet/archive/akshar.source.r56277.tar.xz
2020/03/24 | 1107112 | systems/texlive/tlnet/archive/alegreya.doc.r54512.tar.xz
2020/03/24 | 24434164 | systems/texlive/tlnet/archive/alegreya.r54512.tar.xz
2020/03/02 | 243664 | systems/texlive/tlnet/archive/aleph.aarch64-linux.r53999.tar.xz
@@ -259310,7 +259318,7 @@
2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz
2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz
2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz
-2020/09/03 | 6164 | systems/texlive/tlnet/archive/collection-latexextra.r56253.tar.xz
+2020/09/07 | 6164 | systems/texlive/tlnet/archive/collection-latexextra.r56278.tar.xz
2020/08/14 | 688 | systems/texlive/tlnet/archive/collection-latex.r56105.tar.xz
2020/03/04 | 748 | systems/texlive/tlnet/archive/collection-latexrecommended.r54074.tar.xz
2020/08/30 | 684 | systems/texlive/tlnet/archive/collection-luatex.r56210.tar.xz
@@ -263012,8 +263020,8 @@
2019/02/28 | 3556 | systems/texlive/tlnet/archive/lastpage.r36680.tar.xz
2019/02/28 | 19772 | systems/texlive/tlnet/archive/lastpage.source.r36680.tar.xz
2019/02/28 | 1725896 | systems/texlive/tlnet/archive/latex2e-help-texinfo.doc.r48918.tar.xz
-2019/02/28 | 1178656 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.doc.r44997.tar.xz
-2019/02/28 | 472 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.r44997.tar.xz
+2020/09/07 | 1661212 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.doc.r56275.tar.xz
+2020/09/07 | 448 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.r56275.tar.xz
2019/02/28 | 728 | systems/texlive/tlnet/archive/latex2e-help-texinfo.r48918.tar.xz
2019/02/28 | 873268 | systems/texlive/tlnet/archive/latex2e-help-texinfo-spanish.doc.r49023.tar.xz
2019/02/28 | 736 | systems/texlive/tlnet/archive/latex2e-help-texinfo-spanish.r49023.tar.xz
@@ -263842,6 +263850,8 @@
2019/02/28 | 348 | systems/texlive/tlnet/archive/luaotfload.x86_64-solaris.r34647.tar.xz
2020/04/19 | 35324 | systems/texlive/tlnet/archive/luapackageloader.doc.r54779.tar.xz
2020/04/19 | 1700 | systems/texlive/tlnet/archive/luapackageloader.r54779.tar.xz
+2020/09/07 | 357052 | systems/texlive/tlnet/archive/lua-physical.doc.r56278.tar.xz
+2020/09/07 | 359316 | systems/texlive/tlnet/archive/lua-physical.r56278.tar.xz
2020/08/15 | 442728 | systems/texlive/tlnet/archive/luaprogtable.doc.r56113.tar.xz
2020/08/15 | 7092 | systems/texlive/tlnet/archive/luaprogtable.r56113.tar.xz
2019/02/28 | 50272 | systems/texlive/tlnet/archive/luarandom.doc.r49419.tar.xz
@@ -268533,9 +268543,9 @@
2019/02/28 | 363444 | systems/texlive/tlnet/archive/topletter.doc.r48182.tar.xz
2019/02/28 | 2552 | systems/texlive/tlnet/archive/topletter.r48182.tar.xz
2019/02/28 | 6292 | systems/texlive/tlnet/archive/topletter.source.r48182.tar.xz
-2020/05/31 | 6380872 | systems/texlive/tlnet/archive/toptesi.doc.r55364.tar.xz
-2020/05/31 | 20420 | systems/texlive/tlnet/archive/toptesi.r55364.tar.xz
-2020/05/31 | 96948 | systems/texlive/tlnet/archive/toptesi.source.r55364.tar.xz
+2020/09/07 | 5776432 | systems/texlive/tlnet/archive/toptesi.doc.r56276.tar.xz
+2020/09/07 | 20420 | systems/texlive/tlnet/archive/toptesi.r56276.tar.xz
+2020/09/07 | 97136 | systems/texlive/tlnet/archive/toptesi.source.r56276.tar.xz
2020/08/31 | 74156 | systems/texlive/tlnet/archive/totalcount.doc.r56214.tar.xz
2020/08/31 | 1640 | systems/texlive/tlnet/archive/totalcount.r56214.tar.xz
2020/08/31 | 4616 | systems/texlive/tlnet/archive/totalcount.source.r56214.tar.xz
@@ -269667,16 +269677,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
2020/06/13 | 105829 | systems/texlive/tlnet/install-tl
-2020/09/06 | 5500847 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/09/06 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/09/07 | 5500851 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/09/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/08/23 | 4889 | systems/texlive/tlnet/install-tl-windows.bat
-2020/09/06 | 19381468 | systems/texlive/tlnet/install-tl-windows.exe
-2020/09/06 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/09/06 | 24269369 | systems/texlive/tlnet/install-tl.zip
-2020/09/06 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/09/07 | 19381515 | systems/texlive/tlnet/install-tl-windows.exe
+2020/09/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/09/07 | 24269369 | systems/texlive/tlnet/install-tl.zip
+2020/09/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -269732,12 +269742,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2020/08/06 | 27567 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/09/06 | 16572291 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/09/06 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/09/07 | 16574900 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/09/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/09/06 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/09/06 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/09/06 | 2227880 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/09/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/09/07 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/09/07 | 2228976 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -274227,7 +274237,7 @@
2020/02/04 | 281488 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2020/09/06 | 548651 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/09/07 | 548754 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -275395,9 +275405,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/08/01 | 38929 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/08/01 | 43039 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/09/06 | 203063 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/09/06 | 1220716 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/09/06 | 1138690 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/09/07 | 203047 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/09/07 | 1220723 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/09/07 | 1139218 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/08/01 | 13102 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/08/01 | 14104 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -275551,187 +275561,187 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2020/09/06 | 231669 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/09/06 | 548478 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/09/06 | 59343 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/09/06 | 67258 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/09/06 | 956335 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/09/06 | 1061414 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/09/06 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/09/06 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/09/06 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/09/06 | 34773 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/09/06 | 49591 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/09/06 | 57159 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/09/06 | 84661 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/09/06 | 93642 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/09/06 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/09/06 | 73449 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/09/06 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/09/06 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/09/06 | 329615 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/09/06 | 392365 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/09/06 | 32350 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/09/06 | 36359 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/09/06 | 72255 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/09/06 | 79418 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/09/06 | 203965 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/09/06 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/09/06 | 169655 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/09/06 | 184489 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/09/06 | 51935 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/09/06 | 58661 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/09/06 | 20817 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/09/06 | 22982 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/09/06 | 460429 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/09/06 | 45319 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/09/06 | 51135 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/09/06 | 273698 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/09/06 | 310934 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/09/06 | 40822 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/09/06 | 45031 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/09/06 | 115883 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/09/06 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/09/06 | 1265430 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/09/06 | 1404302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/09/06 | 95400 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/09/06 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/09/06 | 43314 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/09/06 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/09/06 | 46356 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/09/06 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/09/06 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/09/06 | 62978 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/09/06 | 133655 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/09/06 | 151864 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/09/06 | 72862 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/09/06 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/09/06 | 68969 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/09/06 | 77316 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/09/06 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/09/06 | 281779 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/09/06 | 25504 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/09/06 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/09/06 | 100917 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/09/06 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/09/06 | 63516 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/09/06 | 72612 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/09/06 | 94384 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/09/06 | 113581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/09/06 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/09/06 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/09/06 | 462709 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/09/06 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/09/06 | 141853 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/09/06 | 154418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/09/06 | 94513 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/09/06 | 108988 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/09/06 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/09/06 | 17626 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/09/06 | 27802 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/09/06 | 29638 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/09/06 | 623928 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/09/06 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/09/06 | 500569 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/09/06 | 561890 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/09/06 | 544359 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/09/06 | 583965 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/09/06 | 93622 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/09/06 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/09/06 | 1746183 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/09/06 | 2031793 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/09/06 | 67276 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/09/06 | 73688 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/09/06 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/09/06 | 31253 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/09/06 | 7550 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/09/06 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/09/06 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/09/06 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/09/06 | 269404 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/09/06 | 305083 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/09/06 | 96479 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/09/06 | 101784 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/09/06 | 79693 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/09/06 | 88874 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/09/06 | 170421 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/09/06 | 189153 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/09/06 | 159879 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/09/06 | 180900 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/09/06 | 196318 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/09/06 | 177375 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/09/06 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/09/06 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/09/06 | 31223 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/09/06 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/09/06 | 57313 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/09/06 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/09/06 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/09/06 | 69913 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/09/06 | 45775 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/09/06 | 52202 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/09/06 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/09/06 | 210277 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/09/06 | 35215 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/09/06 | 39332 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/09/06 | 327552 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/09/06 | 360765 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/09/06 | 187720 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/09/06 | 193833 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/09/06 | 207672 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/09/06 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/09/06 | 78102 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/09/06 | 87298 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/09/06 | 922275 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/09/06 | 1021970 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/09/06 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/09/06 | 23601 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/09/06 | 31211 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/09/06 | 36867 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/09/06 | 63555 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/09/06 | 71554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/09/06 | 42623 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/09/06 | 50915 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/09/06 | 1192976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/09/06 | 1325258 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/09/06 | 42063 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/09/06 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/09/06 | 76797 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/09/06 | 82787 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2020/09/06 | 26853 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/09/06 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/09/06 | 16024 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/09/06 | 17727 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/09/06 | 63429 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/09/06 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/09/06 | 151836 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/09/06 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/09/06 | 77486 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/09/06 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/09/06 | 97374 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/09/06 | 104548 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/09/06 | 2534480 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/09/06 | 2657479 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/09/06 | 55557 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/09/06 | 62027 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/09/06 | 33090 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/09/06 | 36922 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/09/06 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/09/06 | 32394 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/09/06 | 66015 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/09/06 | 70141 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/09/06 | 250289 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/09/06 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/09/06 | 597783 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/09/06 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/09/06 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/09/06 | 43075 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/09/06 | 203125 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/09/06 | 1221486 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/09/06 | 1139107 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/09/06 | 13128 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/09/06 | 14131 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/09/07 | 548478 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/09/07 | 59343 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/09/07 | 67259 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/09/07 | 956335 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/09/07 | 1061415 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/09/07 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/09/07 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/09/07 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/09/07 | 34774 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/09/07 | 49592 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/09/07 | 57162 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/09/07 | 84663 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/09/07 | 93642 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/09/07 | 65820 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/09/07 | 73449 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/09/07 | 27009 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/09/07 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/09/07 | 329619 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/09/07 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/09/07 | 32351 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/09/07 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/09/07 | 72257 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/09/07 | 79419 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/09/07 | 203965 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/09/07 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/09/07 | 169657 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/09/07 | 184489 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/09/07 | 51937 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/09/07 | 58662 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/09/07 | 20818 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/09/07 | 22981 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/09/07 | 460430 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/09/07 | 45320 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/09/07 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/09/07 | 273699 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/09/07 | 310936 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/09/07 | 40822 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/09/07 | 45032 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/09/07 | 115883 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/09/07 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/09/07 | 1265431 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/09/07 | 1404301 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/09/07 | 95401 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/09/07 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/09/07 | 43315 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/09/07 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/09/07 | 46357 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/09/07 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/09/07 | 57149 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/09/07 | 62978 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/09/07 | 133656 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/09/07 | 151865 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/09/07 | 72863 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/09/07 | 77367 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/09/07 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/09/07 | 77316 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/09/07 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/09/07 | 281779 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/09/07 | 25503 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/09/07 | 29059 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/09/07 | 100920 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/09/07 | 116788 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/09/07 | 63514 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/09/07 | 72610 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/09/07 | 94384 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/09/07 | 113582 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/09/07 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/09/07 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/09/07 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/09/07 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/09/07 | 141854 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/09/07 | 154420 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/09/07 | 94515 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/09/07 | 108990 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/09/07 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/09/07 | 17626 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/09/07 | 27802 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/09/07 | 29638 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/09/07 | 623929 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/09/07 | 677581 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/09/07 | 500567 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/09/07 | 561892 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/09/07 | 544358 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/09/07 | 583965 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/09/07 | 93623 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/09/07 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/09/07 | 1746185 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/09/07 | 2031795 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/09/07 | 67279 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/09/07 | 73691 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/09/07 | 26997 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/09/07 | 31254 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/09/07 | 7550 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/09/07 | 8568 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/09/07 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/09/07 | 211539 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/09/07 | 269407 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/09/07 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/09/07 | 96481 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/09/07 | 101786 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/09/07 | 79692 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/09/07 | 88874 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/09/07 | 170422 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/09/07 | 189153 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/09/07 | 159879 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/09/07 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/09/07 | 196320 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/09/07 | 177375 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/09/07 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/09/07 | 96847 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/09/07 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/09/07 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/09/07 | 57314 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/09/07 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/09/07 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/09/07 | 69914 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/09/07 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/09/07 | 52203 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/09/07 | 192589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/09/07 | 210276 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/09/07 | 35217 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/09/07 | 39333 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/09/07 | 327554 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/09/07 | 360766 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/09/07 | 187722 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/09/07 | 193837 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/09/07 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/09/07 | 243052 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/09/07 | 78102 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/09/07 | 87298 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/09/07 | 922275 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/09/07 | 1021970 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/09/07 | 20006 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/09/07 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/09/07 | 31211 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/09/07 | 36865 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/09/07 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/09/07 | 71552 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/09/07 | 42623 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/09/07 | 50916 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/09/07 | 1192976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/09/07 | 1325259 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/09/07 | 42063 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/09/07 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/09/07 | 76797 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/09/07 | 82787 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/09/07 | 26853 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/09/07 | 29028 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/09/07 | 16023 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/09/07 | 17729 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/09/07 | 63428 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/09/07 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/09/07 | 151838 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/09/07 | 165593 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/09/07 | 77488 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/09/07 | 87982 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/09/07 | 97376 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/09/07 | 104549 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/09/07 | 2534482 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/09/07 | 2657475 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/09/07 | 55563 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/09/07 | 62029 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/09/07 | 33090 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/09/07 | 36922 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/09/07 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/09/07 | 32394 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/09/07 | 66016 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/09/07 | 70142 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/09/07 | 250291 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/09/07 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/09/07 | 597780 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/09/07 | 638662 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/09/07 | 39269 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/09/07 | 43075 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/09/07 | 203130 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/09/07 | 1220531 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/09/07 | 1138096 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/09/07 | 13129 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/09/07 | 14132 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2020/09/06 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/09/07 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -276051,7 +276061,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/09/06 | 866 | systems/win32/miktex/tm/packages/pr.ini
+2020/09/07 | 866 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -277206,7 +277216,7 @@
2020/09/04 | 4918280 | systems/win32/w32tex/aleph-w32.tar.xz
2020/08/31 | 66063688 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/09/05 | 707019 | systems/win32/w32tex/ChangeLog
+2020/09/06 | 707483 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -277214,12 +277224,12 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/08/28 | 23425684 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/09/04 | 140566460 | systems/win32/w32tex/context.tar.xz
+2020/09/05 | 140565172 | systems/win32/w32tex/context.tar.xz
2020/06/13 | 910472 | systems/win32/w32tex/cweb-w32.tar.xz
2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/06/13 | 845760 | systems/win32/w32tex/dvi2ps-w32.tar.xz
2020/06/13 | 483880 | systems/win32/w32tex/dvi2tty-w32.tar.xz
-2020/09/05 | 4661868 | systems/win32/w32tex/dvipdfm-w32.tar.xz
+2020/09/06 | 4662668 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/06/13 | 4550104 | systems/win32/w32tex/dvipsk-w32.tar.xz
2020/08/22 | 2644752 | systems/win32/w32tex/dvitools-w32.tar.xz
2020/09/02 | 1178236 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
@@ -277256,7 +277266,7 @@
2020/06/13 | 1169008 | systems/win32/w32tex/pstoedit-w32.tar.xz
2020/08/25 | 273895004 | systems/win32/w32tex/pstricks.tar.xz
2020/06/13 | 517656 | systems/win32/w32tex/psutils-w32.tar.xz
-2020/09/05 | 6487208 | systems/win32/w32tex/ptex-ng-w32.tar.xz
+2020/09/06 | 6489636 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/09/04 | 10493064 | systems/win32/w32tex/ptex-w32.tar.xz
2020/04/10 | 1784316 | systems/win32/w32tex/qpdf-w32.tar.xz
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
@@ -277284,14 +277294,14 @@
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2020/03/27 | 38319492 | systems/win32/w32tex/w32tex-src.tar.xz
2020/09/02 | 99306980 | systems/win32/w32tex/web2c-lib.tar.xz
-2020/08/27 | 45622972 | systems/win32/w32tex/web2c-w32.tar.xz
+2020/09/05 | 45607316 | systems/win32/w32tex/web2c-w32.tar.xz
2020/07/07 | 810800 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2020/08/20 | 22351540 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
2020/08/26 | 2153060 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/06/13 | 82884 | systems/win32/w32tex/win64/cweb-w64.tar.xz
2020/06/13 | 758152 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
2020/06/13 | 447760 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
-2020/09/05 | 803244 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
+2020/09/06 | 805008 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
2020/06/13 | 759644 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
2020/08/22 | 2358124 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
2020/09/02 | 1087244 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
@@ -277316,7 +277326,7 @@
2020/03/20 | 557532 | systems/win32/w32tex/win64/pmx-w64.tar.xz
2020/06/13 | 789904 | systems/win32/w32tex/win64/pstoedit-w64.tar.xz
2020/06/13 | 385996 | systems/win32/w32tex/win64/psutils-w64.tar.xz
-2020/09/05 | 1708516 | systems/win32/w32tex/win64/ptex-ng-w64.tar.xz
+2020/09/06 | 1710796 | systems/win32/w32tex/win64/ptex-ng-w64.tar.xz
2020/09/01 | 1880180 | systems/win32/w32tex/win64/ptex-w64.tar.xz
2020/01/18 | 40736 | systems/win32/w32tex/win64/t1utils-w64.tar.xz
2020/06/13 | 419688 | systems/win32/w32tex/win64/tex4htk-w64.tar.xz
@@ -277326,8 +277336,8 @@
2020/01/18 | 42768 | systems/win32/w32tex/win64/txtutil-w64.tar.xz
2020/09/01 | 1809288 | systems/win32/w32tex/win64/uptex-w64.tar.xz
2020/08/21 | 3391912 | systems/win32/w32tex/win64/web2c-w64.tar.xz
-2020/09/05 | 10983356 | systems/win32/w32tex/win64/xetex-w64.tar.xz
-2020/09/05 | 48808828 | systems/win32/w32tex/xetex-w32.tar.xz
+2020/09/06 | 10983344 | systems/win32/w32tex/win64/xetex-w64.tar.xz
+2020/09/06 | 48812640 | systems/win32/w32tex/xetex-w32.tar.xz
2020/05/29 | 2936068 | systems/win32/w32tex/xindy-w32.tar.xz
2013/11/19 | 11356248 | systems/win32/w32tex/xymtex.tar.xz
2016/09/09 | 4334636 | systems/win32/w32tex/xypic.tar.xz
@@ -277424,7 +277434,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/09/07 | 186 | timestamp
+2020/09/08 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 7f01064e6d..18dfc4b6c9 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 3d92585e2d..9f3ec718b6 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,333 +1,549 @@
-2020/09/06 | 97374 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/09/07 | 996 | support/tex4ebook/tex4ebook-exec_azw3.lua
+2020/09/07 | 995 | support/tex4ebook/tex4ebook-exec_azw.lua
+2020/09/07 | 9796 | support/make4ht/lapp-mk4.lua
+2020/09/07 | 974 | support/make4ht/extensions/make4ht-ext-latexmk_build.lua
+2020/09/07 | 97376 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/09/07 | 97136 | systems/texlive/tlnet/archive/toptesi.source.r56276.tar.xz
+2020/09/07 | 96847 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/09/07 | 96481 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/09/07 | 956335 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/09/07 | 95401 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/09/07 | 94515 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/09/07 | 94384 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/09/07 | 9407 | support/tex4ebook/tex4ebook-exec_epub3.lua
+2020/09/07 | 93642 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/09/07 | 93623 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/09/07 | 922275 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/09/07 | 917 | support/tex4ebook/tex4ebook-exec_mobi.lua
+2020/09/07 | 88874 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/09/07 | 87982 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/09/07 | 87298 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/09/07 | 866 | systems/win32/miktex/tm/packages/pr.ini
+2020/09/07 | 8568 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/09/07 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/09/07 | 84663 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/09/07 | 8387 | support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
+2020/09/07 | 8291 | macros/luatex/latex/lua-physical/test/testDimension.lua
+2020/09/07 | 82787 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/09/07 | 80378 | macros/latex/contrib/semtex.zip
+2020/09/07 | 798 | support/make4ht/make4ht-doc.tex
+2020/09/07 | 798 | support/make4ht/filters/make4ht-cleanspan.lua
+2020/09/07 | 79692 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/09/07 | 79419 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/09/07 | 79364 | support/tex4ebook/tex4ebook-doc.pdf
+2020/09/07 | 7915 | support/make4ht/make4ht-aeneas-config.lua
+2020/09/07 | 788479 | macros/luatex/latex/lua-physical.zip
+2020/09/07 | 78102 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/09/07 | 77488 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/09/07 | 77367 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/09/07 | 77316 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/09/07 | 77110 | macros/latex/contrib/semtex/semtex.pdf
+2020/09/07 | 76797 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/09/07 | 7599 | support/make4ht/formats/make4ht-odt.lua
+2020/09/07 | 7550 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/09/07 | 7547 | support/make4ht/make4ht-indexing.lua
+2020/09/07 | 752 | support/tex4ebook/tex4ebook-doc.tex
+2020/09/07 | 73691 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/09/07 | 73449 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/09/07 | 733 | support/make4ht/formats/make4ht-tei.lua
+2020/09/07 | 73382 | macros/luatex/latex/lua-physical/lua-physical.tex
+2020/09/07 | 72863 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/09/07 | 72610 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/09/07 | 72257 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/09/07 | 71552 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/09/07 | 713 | support/make4ht/filters/make4ht-entities-to-unicode.lua
+2020/09/07 | 7030 | macros/latex/contrib/semantex/stripsemantex.lua
+2020/09/07 | 70142 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/09/07 | 69914 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/09/07 | 6923 | macros/luatex/latex/lua-physical/test/testData.lua
+2020/09/07 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/09/07 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/09/07 | 6807 | support/make4ht/domfilters/make4ht-collapsetoc.lua
+2020/09/07 | 677581 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/09/07 | 67279 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/09/07 | 67259 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/09/07 | 66016 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/09/07 | 65820 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/09/07 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/09/07 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/09/07 | 6403 | macros/latex/contrib/semtex/semtex.tex
+2020/09/07 | 638662 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/09/07 | 6356 | support/make4ht/make4ht-lib.lua
+2020/09/07 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/09/07 | 63514 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/09/07 | 63428 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/09/07 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/09/07 | 62978 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/09/07 | 628 | support/make4ht/extensions/make4ht-ext-common_filters.lua
+2020/09/07 | 627 | support/make4ht/domfilters/make4ht-odtimagesize.lua
+2020/09/07 | 623929 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/09/07 | 62029 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/09/07 | 6164 | systems/texlive/tlnet/archive/collection-latexextra.r56278.tar.xz
+2020/09/07 | 597780 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/09/07 | 596 | support/make4ht/filters/make4ht-filter.lua
+2020/09/07 | 595 | support/make4ht/domfilters/make4ht-idcolons.lua
+2020/09/07 | 59343 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/09/07 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/09/07 | 58662 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/09/07 | 583965 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/09/07 | 5776432 | systems/texlive/tlnet/archive/toptesi.doc.r56276.tar.xz
+2020/09/07 | 57314 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/09/07 | 57162 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/09/07 | 57149 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/09/07 | 5704 | support/tex4ebook/tex4ebook
+2020/09/07 | 561892 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/09/07 | 55563 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/09/07 | 5500851 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/09/07 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/09/07 | 548754 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/09/07 | 548478 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/09/07 | 544358 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/09/07 | 5355 | support/make4ht/make4ht-dvireader.lua
+2020/09/07 | 52203 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/09/07 | 51937 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/09/07 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/09/07 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/09/07 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/09/07 | 50916 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/09/07 | 500567 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/09/07 | 49592 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/09/07 | 4913 | support/make4ht/domfilters/make4ht-joincharacters.lua
+2020/09/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/09/07 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/09/07 | 46874 | support/make4ht/readme.tex
+2020/09/07 | 4641 | support/make4ht/domfilters/make4ht-aeneas.lua
+2020/09/07 | 46357 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/09/07 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/09/07 | 460430 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/09/07 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/09/07 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/09/07 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/09/07 | 45320 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/09/07 | 45032 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/09/07 | 448 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.r56275.tar.xz
+2020/09/07 | 4426 | support/tex4ebook/tex4ebook.sty
+2020/09/07 | 43315 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/09/07 | 4325 | support/tex4ebook/tex4ebook-epub3.4ht
+2020/09/07 | 43075 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/09/07 | 4301 | support/make4ht/extensions/make4ht-ext-staticsite.lua
+2020/09/07 | 42623 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/09/07 | 425 | support/make4ht/filters/make4ht-fix-links.lua
+2020/09/07 | 4244 | support/make4ht/make4ht-htlatex.lua
+2020/09/07 | 42063 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/09/07 | 412937 | macros/latex/contrib/semantex.zip
+2020/09/07 | 40822 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/09/07 | 4039 | support/make4ht/make4ht
+2020/09/07 | 402 | support/make4ht/filters/make4ht-hruletohr.lua
+2020/09/07 | 395 | support/make4ht/formats/make4ht-html5.lua
+2020/09/07 | 39333 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/09/07 | 39269 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/09/07 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/09/07 | 386 | support/make4ht/filters/make4ht-fixligatures.lua
+2020/09/07 | 3861 | support/make4ht/extensions/make4ht-ext-preprocess_input.lua
+2020/09/07 | 37551 | support/make4ht/README
+2020/09/07 | 36922 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/09/07 | 36865 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/09/07 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/09/07 | 360766 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/09/07 | 359316 | systems/texlive/tlnet/archive/lua-physical.r56278.tar.xz
+2020/09/07 | 359130 | macros/latex/contrib/semantex/semantex.pdf
+2020/09/07 | 357052 | systems/texlive/tlnet/archive/lua-physical.doc.r56278.tar.xz
+2020/09/07 | 35217 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/09/07 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/09/07 | 34774 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/09/07 | 345 | support/make4ht/formats/make4ht-jats.lua
+2020/09/07 | 3412 | support/make4ht/filters/make4ht-staticsite.lua
+2020/09/07 | 33090 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/09/07 | 3301 | macros/latex/contrib/semantex/stripsemantex.sty
+2020/09/07 | 329619 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/09/07 | 327554 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/09/07 | 326 | support/make4ht/formats/make4ht-xhtml.lua
+2020/09/07 | 3247 | support/make4ht/make4ht-xtpipes.lua
+2020/09/07 | 32394 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/09/07 | 32351 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/09/07 | 321 | support/make4ht/domfilters/make4ht-odtpartable.lua
+2020/09/07 | 3191 | support/make4ht/filters/make4ht-mathjaxnode.lua
+2020/09/07 | 31254 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/09/07 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/09/07 | 31211 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/09/07 | 310 | support/make4ht/extensions/make4ht-ext-join_colors.lua
+2020/09/07 | 310936 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/09/07 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/09/07 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/09/07 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/09/07 | 304061 | macros/luatex/latex/lua-physical/lua-physical.pdf
+2020/09/07 | 2988 | systems/texlive/tlnet/archive/akshar.r56277.tar.xz
+2020/09/07 | 29638 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/09/07 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/09/07 | 291 | support/make4ht/filters/make4ht-entities.lua
+2020/09/07 | 29145 | macros/latex/contrib/subfiles/subfiles.dtx
+2020/09/07 | 2905 | support/make4ht/make4ht-logging.lua
+2020/09/07 | 29059 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/09/07 | 29028 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/09/07 | 288 | support/make4ht/extensions/make4ht-ext-odttemplate.lua
+2020/09/07 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/09/07 | 281779 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/09/07 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/09/07 | 2794 | support/make4ht/extensions/make4ht-ext-detect_engine.lua
+2020/09/07 | 2784 | macros/luatex/latex/lua-physical/test/testUnit.lua
+2020/09/07 | 27802 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/09/07 | 2751 | support/make4ht/make4ht-errorlogparser.lua
+2020/09/07 | 2741 | support/make4ht/domfilters/make4ht-booktabs.lua
+2020/09/07 | 273699 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/09/07 | 272 | support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
+2020/09/07 | 27009 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/09/07 | 26997 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/09/07 | 269407 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/09/07 | 26853 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/09/07 | 2677 | support/tex4ebook/tex4ebook-tidyconf.conf
+2020/09/07 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/09/07 | 2657475 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/09/07 | 264 | support/make4ht/filters/make4ht-cleanspan-nat.lua
+2020/09/07 | 26319 | support/make4ht/changelog.tex
+2020/09/07 | 2584 | support/make4ht/domfilters/make4ht-tablerows.lua
+2020/09/07 | 25503 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/09/07 | 253797 | macros/latex/contrib/subfiles.zip
+2020/09/07 | 2534482 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/09/07 | 250291 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/09/07 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/09/07 | 246620 | macros/latex/contrib/subfiles/subfiles.pdf
+2020/09/07 | 2465 | support/make4ht/make4ht-config.lua
+2020/09/07 | 243052 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/09/07 | 24269369 | systems/texlive/tlnet/install-tl.zip
+2020/09/07 | 24025 | macros/luatex/latex/lua-physical/test/testDefinition.lua
+2020/09/07 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/09/07 | 2324 | support/make4ht/filters/make4ht-odttemplate.lua
+2020/09/07 | 22981 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/09/07 | 229010 | support/make4ht.zip
+2020/09/07 | 22890 | macros/luatex/latex/lua-physical/README.md
+2020/09/07 | 2270 | support/make4ht/filters/make4ht-domfilter.lua
+2020/09/07 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/09/07 | 2228976 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/09/07 | 2216 | support/make4ht/domfilters/make4ht-joincolors.lua
+2020/09/07 | 211539 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/09/07 | 210678 | macros/latex/contrib/semantex/semantex.sty
+2020/09/07 | 210276 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/09/07 | 20818 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/09/07 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/09/07 | 2074 | macros/latex/contrib/subfiles/subfiles.ins
+2020/09/07 | 20420 | systems/texlive/tlnet/archive/toptesi.r56276.tar.xz
+2020/09/07 | 203965 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/09/07 | 2031795 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/09/07 | 203130 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/09/07 | 203047 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/09/07 | 20006 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/09/07 | 196320 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/09/07 | 193837 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/09/07 | 19381515 | systems/texlive/tlnet/install-tl-windows.exe
+2020/09/07 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/09/07 | 192589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/09/07 | 189153 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/09/07 | 187722 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/09/07 | 1864 | macros/latex/contrib/semtex/semtex.sty
+2020/09/07 | 184489 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/09/07 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/09/07 | 177375 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/09/07 | 17729 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/09/07 | 17626 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/09/07 | 1746185 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/09/07 | 173012 | macros/latex/contrib/semantex/semantex.tex
+2020/09/07 | 170422 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/09/07 | 169657 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/09/07 | 16891 | macros/luatex/latex/lua-physical/test/testQuantity.lua
+2020/09/07 | 16669 | support/make4ht/mkutils.lua
+2020/09/07 | 1661212 | systems/texlive/tlnet/archive/latex2e-help-texinfo-fr.doc.r56275.tar.xz
+2020/09/07 | 1660 | macros/latex/contrib/semantex/README.md
+2020/09/07 | 16574900 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/09/07 | 165593 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/09/07 | 1648476 | language/japanese/BX/bxjscls.zip
+2020/09/07 | 16023 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/09/07 | 159879 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/09/07 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/09/07 | 1587 | macros/luatex/latex/lua-physical/physical.lua
+2020/09/07 | 15678 | support/tex4ebook/tex4ebook-exec_epub.lua
+2020/09/07 | 15649 | CTAN.sites
+2020/09/07 | 154420 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/09/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/09/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/09/07 | 1526912 | systems/texlive/tlnet/archive/akshar.source.r56277.tar.xz
+2020/09/07 | 151865 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/09/07 | 151838 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/09/07 | 1486 | macros/latex/contrib/semtex/README.md
+2020/09/07 | 14764 | support/tex4ebook/tex4ebook.4ht
+2020/09/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/09/07 | 145756 | systems/texlive/tlnet/archive/akshar.doc.r56277.tar.xz
+2020/09/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/09/07 | 1448 | support/make4ht/domfilters/make4ht-mathmlfixes.lua
+2020/09/07 | 14411 | support/tex4ebook/readme.tex
+2020/09/07 | 141854 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/09/07 | 14132 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/09/07 | 1404301 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/09/07 | 13717 | macros/luatex/latex/lua-physical/test/testNumber.lua
+2020/09/07 | 133656 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/09/07 | 1330 | support/make4ht/extensions/make4ht-ext-tidy.lua
+2020/09/07 | 132815 | support/make4ht/make4ht-doc.pdf
+2020/09/07 | 1325259 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/09/07 | 13129 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/09/07 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/09/07 | 1265431 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/09/07 | 12217 | support/tex4ebook/changelog.tex
+2020/09/07 | 1220723 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/09/07 | 1220531 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/09/07 | 1215 | support/make4ht/filters/make4ht-svg-height.lua
+2020/09/07 | 1192976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/09/07 | 11679925 | macros/latex/contrib/l3kernel.zip
+2020/09/07 | 116788 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/09/07 | 115883 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/09/07 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/09/07 | 1143 | support/make4ht/formats/make4ht-docbook.lua
+2020/09/07 | 1139218 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/09/07 | 1138096 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/09/07 | 113582 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/09/07 | 112840 | support/tex4ebook.zip
+2020/09/07 | 11199 | support/tex4ebook/README
+2020/09/07 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/09/07 | 108990 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/09/07 | 1061415 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/09/07 | 1057 | support/make4ht/domfilters/make4ht-fixinlines.lua
+2020/09/07 | 10527 | support/make4ht/mkparams.lua
+2020/09/07 | 1046 | support/make4ht/extensions/make4ht-ext-common_domfilters.lua
+2020/09/07 | 104549 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/09/07 | 1039 | support/make4ht/make4ht-filterlib.lua
+2020/09/07 | 1026 | support/make4ht/domfilters/make4ht-t4htlinks.lua
+2020/09/07 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/09/07 | 1021970 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/09/07 | 101786 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/09/07 | 100920 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/09/06 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
+2020/09/06 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
2020/09/06 | 972587 | macros/latex/contrib/toptesi/toptesi.pdf
-2020/09/06 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/09/06 | 96479 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/09/06 | 956335 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/09/06 | 95400 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/09/06 | 94513 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/09/06 | 94384 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/09/06 | 93642 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/09/06 | 93622 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/09/06 | 922275 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/09/06 | 9642 | macros/latex/contrib/l3kernel/l3unicode.dtx
+2020/09/06 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
+2020/09/06 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
2020/09/06 | 9028 | systems/texlive/tlnet/archive/xepersian-hm.source.r56272.tar.xz
2020/09/06 | 9013633 | systems/win32/miktex/tm/packages/oberdiek.tar.lzma
-2020/09/06 | 88874 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/09/06 | 89226 | macros/latex/contrib/l3kernel/l3int.dtx
2020/09/06 | 8866 | systems/win32/miktex/tm/packages/docutils.tar.lzma
-2020/09/06 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/09/06 | 87298 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/09/06 | 866 | systems/win32/miktex/tm/packages/pr.ini
-2020/09/06 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/09/06 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/09/06 | 84661 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/09/06 | 87751 | macros/latex/contrib/l3kernel/l3seq.dtx
+2020/09/06 | 85887 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2020/09/06 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
+2020/09/06 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
2020/09/06 | 841350 | info/latex2e-help-texinfo-fr/latex2e-fr.dbk
-2020/09/06 | 82787 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/09/06 | 805008 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
2020/09/06 | 80313 | systems/win32/miktex/tm/packages/totalcount.tar.lzma
-2020/09/06 | 79693 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/09/06 | 79418 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/09/06 | 78102 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/09/06 | 77486 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/09/06 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/09/06 | 77528 | macros/latex/contrib/l3kernel/l3box.dtx
+2020/09/06 | 77434 | macros/latex/contrib/l3kernel/l3msg.dtx
2020/09/06 | 7734413 | macros/latex/contrib/toptesi.zip
-2020/09/06 | 77316 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/09/06 | 76797 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
2020/09/06 | 767016 | systems/win32/miktex/tm/packages/hep-paper.tar.lzma
+2020/09/06 | 76428 | macros/latex/contrib/l3kernel/l3skip.dtx
+2020/09/06 | 76139 | macros/latex/contrib/l3kernel/l3names.dtx
+2020/09/06 | 75889 | macros/latex/contrib/l3kernel/l3prefixes.pdf
2020/09/06 | 756 | systems/texlive/tlnet/archive/dviasm.doc.r56270.tar.xz
-2020/09/06 | 7550 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/09/06 | 73688 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/09/06 | 73449 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/09/06 | 75536 | macros/latex/contrib/l3kernel/l3clist.dtx
+2020/09/06 | 74310 | macros/latex/contrib/l3kernel/l3str.dtx
+2020/09/06 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
2020/09/06 | 7292 | systems/texlive/tlnet/archive/luaotfload.source.r56269.tar.xz
-2020/09/06 | 72862 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/09/06 | 72612 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/09/06 | 72255 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
2020/09/06 | 718352 | systems/win32/miktex/tm/packages/lua-physical.tar.lzma
-2020/09/06 | 71554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/09/06 | 70141 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/09/06 | 707483 | systems/win32/w32tex/ChangeLog
+2020/09/06 | 70325 | macros/latex/contrib/l3kernel/l3fp.dtx
+2020/09/06 | 70261 | macros/latex/contrib/l3kernel/expl3.dtx
2020/09/06 | 700719 | info/latex2e-help-texinfo-fr/latex2e-fr.info
-2020/09/06 | 69913 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/09/06 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/09/06 | 68969 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/09/06 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/09/06 | 67276 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/09/06 | 67258 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/09/06 | 66015 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/09/06 | 6956 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
+2020/09/06 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
2020/09/06 | 658743 | info/latex2e-help-texinfo-fr/latex2e-fr.txt
-2020/09/06 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/09/06 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/09/06 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/09/06 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/09/06 | 63555 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/09/06 | 63516 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/09/06 | 63429 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/09/06 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/09/06 | 62978 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/09/06 | 623928 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/09/06 | 62027 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/09/06 | 64938 | macros/latex/contrib/l3kernel/l3prg.dtx
+2020/09/06 | 6489636 | systems/win32/w32tex/ptex-ng-w32.tar.xz
+2020/09/06 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
+2020/09/06 | 6450 | macros/latex/contrib/l3kernel/l3term-glossary.tex
+2020/09/06 | 6431 | macros/latex/contrib/l3kernel/l3news06.tex
+2020/09/06 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
+2020/09/06 | 61738 | macros/latex/contrib/l3kernel/l3candidates.dtx
2020/09/06 | 610968 | systems/texlive/tlnet/archive/luaotfload.doc.r56269.tar.xz
-2020/09/06 | 597783 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/09/06 | 59343 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/09/06 | 6076 | macros/latex/contrib/l3kernel/l3.ins
2020/09/06 | 591144 | systems/texlive/tlnet/archive/luaotfload.r56269.tar.xz
-2020/09/06 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2020/09/06 | 5884 | systems/texlive/tlnet/archive/xepersian-hm.r56272.tar.xz
-2020/09/06 | 58661 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/09/06 | 583965 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/09/06 | 5860559 | macros/latex/contrib/l3kernel/source3.pdf
+2020/09/06 | 585393 | macros/latex/contrib/l3kernel/expl3.pdf
2020/09/06 | 579350 | systems/win32/miktex/tm/packages/nanicolle.tar.lzma
2020/09/06 | 57769 | macros/latex/contrib/toptesi/FrontespizioScudo.pdf
-2020/09/06 | 57313 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/09/06 | 57159 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/09/06 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/09/06 | 5653 | macros/latex/contrib/l3kernel/l3color-base.dtx
2020/09/06 | 563359 | info/latex2e-help-texinfo-fr/latex2e-fr.texi
2020/09/06 | 563035 | systems/win32/miktex/tm/packages/biblatex-ieee.tar.lzma
-2020/09/06 | 561890 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/09/06 | 55557 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2020/09/06 | 5506328 | systems/win32/miktex/tm/packages/merriweather.tar.lzma
-2020/09/06 | 5500847 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/09/06 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/09/06 | 548651 | systems/win32/miktex/tm/packages/files.csv.lzma
-2020/09/06 | 548478 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/09/06 | 544359 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/09/06 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
2020/09/06 | 531661 | systems/win32/miktex/tm/packages/scratch3.tar.lzma
-2020/09/06 | 52202 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/09/06 | 51935 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/09/06 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/09/06 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/09/06 | 51135 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/09/06 | 50915 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/09/06 | 500569 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/09/06 | 49591 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/09/06 | 51971 | macros/latex/contrib/l3kernel/l3text-case.dtx
+2020/09/06 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
+2020/09/06 | 51025 | macros/latex/contrib/l3kernel/l3prop.dtx
+2020/09/06 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
2020/09/06 | 494233 | systems/win32/miktex/tm/packages/xindex.tar.lzma
-2020/09/06 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2020/09/06 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/09/06 | 46356 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/09/06 | 462709 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/09/06 | 460429 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/09/06 | 45775 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/09/06 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/09/06 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2020/09/06 | 45319 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/09/06 | 45031 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/09/06 | 49386 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
+2020/09/06 | 4935 | macros/latex/contrib/l3kernel/l3news01.tex
+2020/09/06 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
+2020/09/06 | 48812640 | systems/win32/w32tex/xetex-w32.tar.xz
+2020/09/06 | 47674 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
+2020/09/06 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
+2020/09/06 | 4662668 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/09/06 | 437600 | macros/latex/contrib/toptesi/toptesi-it.tex
2020/09/06 | 4357920 | install/macros/latex/contrib/akshar.tds.zip
2020/09/06 | 4353999 | macros/latex/contrib/akshar.zip
-2020/09/06 | 43314 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/09/06 | 43075 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/09/06 | 42623 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/09/06 | 43159 | macros/latex/contrib/l3kernel/l3debug.dtx
2020/09/06 | 42142 | systems/win32/miktex/tm/packages/l3backend.tar.lzma
-2020/09/06 | 42063 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
2020/09/06 | 408584 | macros/latex/contrib/toptesi/toptesi.dtx
-2020/09/06 | 40822 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/09/06 | 39332 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/09/06 | 40695 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+2020/09/06 | 40663 | macros/latex/contrib/l3kernel/l3sort.dtx
2020/09/06 | 392 | systems/texlive/tlnet/archive/texlive-docindex.r56268.tar.xz
-2020/09/06 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/09/06 | 392365 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2020/09/06 | 3913 | macros/latex/contrib/toptesi/FrontespizioScudo.tex
+2020/09/06 | 379235 | macros/latex/contrib/l3kernel/l3news.pdf
2020/09/06 | 3756963 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma
2020/09/06 | 372 | macros/latex/contrib/akshar/README.txt
-2020/09/06 | 36922 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/09/06 | 36867 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/09/06 | 36359 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/09/06 | 360765 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
2020/09/06 | 358356 | systems/win32/miktex/tm/packages/metastr.tar.lzma
-2020/09/06 | 35215 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/09/06 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/09/06 | 34773 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/09/06 | 35831 | macros/latex/contrib/l3kernel/l3quark.dtx
+2020/09/06 | 35072 | macros/latex/contrib/l3kernel/l3prefixes.csv
+2020/09/06 | 34581 | macros/latex/contrib/l3kernel/l3text.dtx
2020/09/06 | 3401713 | systems/win32/miktex/tm/packages/lwarp.tar.lzma
2020/09/06 | 332650 | systems/win32/miktex/tm/packages/hypdestopt.tar.lzma
-2020/09/06 | 33090 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/09/06 | 329615 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/09/06 | 327552 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/09/06 | 32394 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/09/06 | 32350 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/09/06 | 31253 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/09/06 | 31223 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/09/06 | 31211 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/09/06 | 310934 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/09/06 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/09/06 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/09/06 | 30954 | macros/latex/contrib/l3kernel/l3cctab.dtx
2020/09/06 | 30553 | macros/latex/contrib/akshar/akshar.dtx
-2020/09/06 | 305083 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/09/06 | 29638 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/09/06 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/09/06 | 30345 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2020/09/06 | 30010 | macros/latex/contrib/l3kernel/l3sys.dtx
+2020/09/06 | 2997 | macros/latex/contrib/l3kernel/README.md
2020/09/06 | 2933 | info/latex2e-help-texinfo-fr/NEWS-fr
-2020/09/06 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/09/06 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/09/06 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/09/06 | 281779 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/09/06 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/09/06 | 27802 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/09/06 | 273698 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/09/06 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/09/06 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/09/06 | 269404 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/09/06 | 26853 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/09/06 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/09/06 | 2657479 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/09/06 | 25504 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/09/06 | 2534480 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/09/06 | 250289 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/09/06 | 2817 | macros/latex/contrib/l3kernel/l3prefixes.tex
+2020/09/06 | 280233 | macros/latex/contrib/l3kernel/l3styleguide.pdf
+2020/09/06 | 27656 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2020/09/06 | 263496 | macros/latex/contrib/l3kernel/l3docstrip.pdf
+2020/09/06 | 25739 | macros/latex/contrib/l3kernel/l3fp-random.dtx
+2020/09/06 | 251923 | macros/latex/contrib/l3kernel/l3regex.dtx
2020/09/06 | 2496 | systems/texlive/tlnet/archive/kerkis.doc.r56271.tar.xz
-2020/09/06 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/09/06 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/09/06 | 24269369 | systems/texlive/tlnet/install-tl.zip
-2020/09/06 | 23601 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/09/06 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
+2020/09/06 | 24714 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2020/09/06 | 235322 | macros/latex/contrib/l3kernel/l3news09.pdf
2020/09/06 | 231669 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
+2020/09/06 | 23107 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
2020/09/06 | 23082699 | systems/win32/miktex/tm/packages/latex-base-dev.tar.lzma
-2020/09/06 | 22982 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2020/09/06 | 2296375 | info/latex2e-help-texinfo-fr.zip
-2020/09/06 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/09/06 | 2227880 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/09/06 | 228529 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
2020/09/06 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r56268.tar.xz
+2020/09/06 | 217900 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
2020/09/06 | 217461 | systems/win32/miktex/tm/packages/lualibs.tar.lzma
+2020/09/06 | 2153 | macros/latex/contrib/l3kernel/source3.tex
2020/09/06 | 2122667 | systems/win32/miktex/tm/packages/texnegar.tar.lzma
-2020/09/06 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/09/06 | 210277 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/09/06 | 20817 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/09/06 | 207672 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/09/06 | 203965 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/09/06 | 2031793 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/09/06 | 203125 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/09/06 | 203063 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/09/06 | 21212 | macros/latex/contrib/l3kernel/source3body.tex
+2020/09/06 | 20914 | macros/latex/contrib/l3kernel/l3text-purify.dtx
2020/09/06 | 2026526 | systems/win32/miktex/tm/packages/kerkis.tar.lzma
2020/09/06 | 2015492 | systems/texlive/tlnet/archive/kerkis.r56271.tar.xz
-2020/09/06 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/09/06 | 196318 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/09/06 | 193833 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/09/06 | 19381468 | systems/texlive/tlnet/install-tl-windows.exe
-2020/09/06 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/09/06 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/09/06 | 189153 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/09/06 | 187720 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/09/06 | 184489 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/09/06 | 180900 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/09/06 | 199139 | macros/latex/contrib/l3kernel/l3news12.pdf
+2020/09/06 | 19680 | macros/latex/contrib/l3kernel/l3intarray.dtx
+2020/09/06 | 19653 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2020/09/06 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
+2020/09/06 | 18591 | macros/latex/contrib/l3kernel/l3fp-round.dtx
2020/09/06 | 1806042 | macros/latex/contrib/toptesi/toptesi-it.pdf
2020/09/06 | 1798123 | systems/win32/miktex/tm/packages/caption.tar.lzma
2020/09/06 | 1792180 | macros/latex/contrib/akshar/HackNF_BI.ttf
2020/09/06 | 1789212 | macros/latex/contrib/akshar/HackNF_B.ttf
-2020/09/06 | 177375 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/09/06 | 17727 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/09/06 | 17626 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2020/09/06 | 1748544 | macros/latex/contrib/akshar/HackNF_I.ttf
-2020/09/06 | 1746183 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
2020/09/06 | 1741792 | macros/latex/contrib/akshar/HackNF_R.ttf
-2020/09/06 | 170421 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/09/06 | 169655 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/09/06 | 1710796 | systems/win32/w32tex/win64/ptex-ng-w64.tar.xz
+2020/09/06 | 17106 | macros/latex/contrib/l3kernel/l3luatex.dtx
2020/09/06 | 168764 | systems/texlive/tlnet/archive/texlive-docindex.doc.r56268.tar.xz
2020/09/06 | 167773 | systems/win32/miktex/tm/packages/changelog.tar.lzma
-2020/09/06 | 16572291 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/09/06 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/09/06 | 165946 | macros/latex/contrib/l3kernel/l3news11.pdf
2020/09/06 | 1642293 | systems/win32/miktex/tm/packages/babel.tar.lzma
-2020/09/06 | 16024 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/09/06 | 159879 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/09/06 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2020/09/06 | 1590331 | systems/win32/miktex/tm/packages/fduthesis.tar.lzma
-2020/09/06 | 154418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/09/06 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/09/06 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/09/06 | 1556273 | macros/latex/contrib/l3kernel/interface3.pdf
+2020/09/06 | 152413 | macros/latex/contrib/l3kernel/l3news08.pdf
2020/09/06 | 1523370 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma
-2020/09/06 | 151864 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/09/06 | 151836 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/09/06 | 149242 | macros/latex/contrib/l3kernel/l3doc.dtx
+2020/09/06 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
+2020/09/06 | 147097 | macros/latex/contrib/l3kernel/l3news10.pdf
2020/09/06 | 147043 | macros/latex/contrib/akshar/akshar.pdf
-2020/09/06 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/09/06 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/09/06 | 144785 | macros/latex/contrib/l3kernel/l3news03.pdf
2020/09/06 | 143996 | info/latex2e-help-texinfo-fr/ChangeLog
-2020/09/06 | 141853 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/09/06 | 14131 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/09/06 | 1404302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/09/06 | 14244 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
+2020/09/06 | 140795 | macros/latex/contrib/l3kernel/l3news06.pdf
+2020/09/06 | 140776 | macros/latex/contrib/l3kernel/l3news02.pdf
2020/09/06 | 140170 | systems/win32/miktex/tm/packages/edichokey.tar.lzma
-2020/09/06 | 133655 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/09/06 | 135177 | macros/latex/contrib/l3kernel/l3tl.dtx
+2020/09/06 | 133763 | macros/latex/contrib/l3kernel/l3file.dtx
2020/09/06 | 1332 | macros/latex/contrib/akshar/akshar.ins
-2020/09/06 | 1325258 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2020/09/06 | 131988 | systems/texlive/tlnet/archive/texlive-scripts.r56268.tar.xz
-2020/09/06 | 13128 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/09/06 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2020/09/06 | 1301445 | systems/win32/miktex/tm/packages/xepersian-hm.tar.lzma
+2020/09/06 | 12965 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
2020/09/06 | 1289764 | systems/texlive/tlnet/archive/xepersian-hm.doc.r56272.tar.xz
2020/09/06 | 1288756 | info/latex2e-help-texinfo-fr/latex2e-fr.html
-2020/09/06 | 1265430 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/09/06 | 1221486 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/09/06 | 1220716 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/09/06 | 127477 | macros/latex/contrib/l3kernel/l3basics.dtx
2020/09/06 | 1211171 | macros/latex/contrib/toptesi/toptesi-scudo-example.zip
-2020/09/06 | 1192976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/09/06 | 119094 | macros/latex/contrib/l3kernel/l3news07.pdf
+2020/09/06 | 11901311 | install/macros/latex/contrib/l3kernel.tds.zip
+2020/09/06 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2020/09/06 | 11812 | macros/latex/contrib/l3kernel/l3fparray.dtx
2020/09/06 | 1168564 | macros/latex/contrib/akshar/siddhanta.ttf
-2020/09/06 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/09/06 | 115883 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/09/06 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2020/09/06 | 1150083 | systems/win32/miktex/tm/packages/pict2e.tar.lzma
2020/09/06 | 1143753 | info/latex2e-help-texinfo-fr/latex2e-fr.pdf
-2020/09/06 | 1139107 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/09/06 | 1138690 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/09/06 | 113581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/09/06 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/09/06 | 113900 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2020/09/06 | 113527 | macros/latex/contrib/l3kernel/l3news01.pdf
+2020/09/06 | 112616 | macros/latex/contrib/l3kernel/l3keys.dtx
+2020/09/06 | 110692 | macros/latex/contrib/l3kernel/l3token.dtx
+2020/09/06 | 10983344 | systems/win32/w32tex/win64/xetex-w64.tar.xz
2020/09/06 | 1095870 | systems/win32/miktex/tm/packages/luaotfload.tar.lzma
-2020/09/06 | 108988 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
2020/09/06 | 1082102 | systems/win32/miktex/tm/packages/mcf2graph.tar.lzma
+2020/09/06 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
2020/09/06 | 10760 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
2020/09/06 | 1074158 | info/latex2e-help-texinfo-fr/latex2e-fr.xml
+2020/09/06 | 107379 | macros/latex/contrib/l3kernel/l3news09.tex
+2020/09/06 | 107115 | macros/latex/contrib/l3kernel/l3news04.pdf
2020/09/06 | 10653972 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2020/09/06 | 1061414 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/09/06 | 104548 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/09/06 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/09/06 | 1021970 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/09/06 | 101784 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/09/06 | 100917 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/09/06 | 105735 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
+2020/09/06 | 105090 | macros/latex/contrib/l3kernel/l3news05.pdf
2020/09/06 | 10048 | systems/texlive/tlnet/archive/dviasm.r56270.tar.xz
2020/09/05 | 83731 | fonts/greek/kerkis/type1/KerkisSans-BoldItalic.pfb
-2020/09/05 | 803244 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
-2020/09/05 | 796152 | macros/luatex/latex/lua-physical.zip
2020/09/05 | 73629 | fonts/greek/kerkis/type1/KerkisSans-Bold.pfb
-2020/09/05 | 73027 | macros/luatex/latex/lua-physical/lua-physical.tex
-2020/09/05 | 707019 | systems/win32/w32tex/ChangeLog
2020/09/05 | 679 | dviware/dviasm/README
-2020/09/05 | 6487208 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/09/05 | 6338 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/09/05 | 59260 | fonts/greek/kerkis/opentype/KerkisSans-BoldItalic.otf
2020/09/05 | 51420 | fonts/greek/kerkis/opentype/KerkisSans-Bold.otf
-2020/09/05 | 48808828 | systems/win32/w32tex/xetex-w32.tar.xz
-2020/09/05 | 4661868 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/09/05 | 4633 | fonts/greek/kerkis/README
+2020/09/05 | 45607316 | systems/win32/w32tex/web2c-w32.tar.xz
2020/09/05 | 43371 | dviware/dviasm/dviasm.py
2020/09/05 | 36237 | fonts/greek/kerkis/afm/KerkisSans-BoldItalic.afm
2020/09/05 | 36097 | fonts/greek/kerkis/afm/KerkisSans-Bold.afm
-2020/09/05 | 311374 | macros/luatex/latex/lua-physical/lua-physical.pdf
2020/09/05 | 2464238 | fonts/greek/kerkis.zip
-2020/09/05 | 22890 | macros/luatex/latex/lua-physical/README.md
-2020/09/05 | 1761 | macros/luatex/latex/lua-physical/physical/physical-init.lua
2020/09/05 | 1756 | fonts/greek/kerkis/tfm/gksfbi7a.tfm
-2020/09/05 | 1708516 | systems/win32/w32tex/win64/ptex-ng-w64.tar.xz
2020/09/05 | 1592 | fonts/greek/kerkis/vf/gksfbi7t.vf
2020/09/05 | 1592 | fonts/greek/kerkis/tfm/gksfb7a.tfm
2020/09/05 | 1584 | fonts/greek/kerkis/vf/gksfb7t.vf
+2020/09/05 | 140565172 | systems/win32/w32tex/context.tar.xz
2020/09/05 | 11551 | dviware/dviasm.zip
-2020/09/05 | 10983356 | systems/win32/w32tex/win64/xetex-w64.tar.xz
2020/09/04 | 99491 | macros/luatex/latex/lua-physical/test/luaunit.lua
2020/09/04 | 975811 | macros/xetex/latex/xepersian-hm/xepersian-hm-doc.pdf
2020/09/04 | 899956 | systems/texlive/tlnet/archive/tex4ht.r56262.tar.xz
2020/09/04 | 8508384 | systems/win32/w32tex/uptex-w32.tar.xz
-2020/09/04 | 8282 | macros/luatex/latex/lua-physical/test/testDimension.lua
-2020/09/04 | 6914 | macros/luatex/latex/lua-physical/test/testData.lua
+2020/09/04 | 84261 | language/japanese/BX/bxjscls/bxjscls-manual.tex
2020/09/04 | 6758 | macros/luatex/latex/lua-physical/physical/physical-data.lua
2020/09/04 | 65544 | macros/xetex/latex/xepersian-hm/doc-samples-xep.pdf
2020/09/04 | 63436 | macros/xetex/latex/xepersian-hm/doc-samples-glyph.pdf
2020/09/04 | 62968 | macros/xetex/latex/xepersian-hm/doc-samples-hrule.pdf
+2020/09/04 | 5674 | language/japanese/BX/bxjscls/README.md
2020/09/04 | 5492 | macros/luatex/latex/lua-physical/physical/physical-astronomical.lua
2020/09/04 | 508041 | macros/xetex/latex/xepersian-hm/xepersian-hm.pdf
2020/09/04 | 4918280 | systems/win32/w32tex/aleph-w32.tar.xz
2020/09/04 | 4782 | macros/luatex/latex/lua-physical/physical/physical-dimension.lua
2020/09/04 | 46840068 | systems/win32/w32tex/latex-dev.tar.xz
2020/09/04 | 4493 | macros/luatex/latex/lua-physical/physical/physical-unit.lua
-2020/09/04 | 41 | macros/luatex/latex/lua-physical/physical.lua
+2020/09/04 | 393086 | language/japanese/BX/bxjscls/bxjscls.dtx
2020/09/04 | 38192 | macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
+2020/09/04 | 374676 | language/japanese/BX/bxjscls/bxjscls-manual.pdf
2020/09/04 | 3538 | macros/xetex/latex/xepersian-hm/xepersian-hm-leaders-hrule.tex
2020/09/04 | 3538 | macros/xetex/latex/xepersian-hm/xepersian-hm-leaders-glyph.tex
2020/09/04 | 3514 | macros/xetex/latex/xepersian-hm/xepersian-hm-glyph.tex
2020/09/04 | 33880168 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/09/04 | 2945 | macros/xetex/latex/xepersian-hm/xepersian-XB.tex
2020/09/04 | 28337 | macros/luatex/latex/lua-physical/physical/physical-definition.lua
-2020/09/04 | 2775 | macros/luatex/latex/lua-physical/test/testUnit.lua
2020/09/04 | 2585492 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/09/04 | 24857 | macros/xetex/latex/xepersian-hm/xepersian-hm-doc.ltx
-2020/09/04 | 24016 | macros/luatex/latex/lua-physical/test/testDefinition.lua
2020/09/04 | 2217805 | macros/xetex/latex/xepersian-hm.zip
2020/09/04 | 20785108 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/09/04 | 2074 | macros/xetex/latex/xepersian-hm/xepersian-hm.ins
@@ -336,110 +552,58 @@
2020/09/04 | 18222260 | systems/win32/w32tex/luatex-dev-w32.tar.xz
2020/09/04 | 18215068 | systems/win32/w32tex/luatex-w32.tar.xz
2020/09/04 | 18207688 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2020/09/04 | 16882 | macros/luatex/latex/lua-physical/test/testQuantity.lua
2020/09/04 | 16677 | macros/luatex/latex/lua-physical/physical/physical-quantity.lua
2020/09/04 | 156633 | macros/xetex/latex/xepersian-hm/xepersian-hm-glyph.pdf
2020/09/04 | 155792 | macros/xetex/latex/xepersian-hm/xepersian-hm-leaders-hrule.pdf
-2020/09/04 | 15515 | CTAN.sites
+2020/09/04 | 14746 | language/japanese/BX/bxjscls/README-ja.md
2020/09/04 | 14565 | macros/luatex/latex/lua-physical/physical/physical-number.lua
2020/09/04 | 1433 | macros/luatex/latex/lua-physical/test/test.lua
-2020/09/04 | 140566460 | systems/win32/w32tex/context.tar.xz
-2020/09/04 | 13708 | macros/luatex/latex/lua-physical/test/testNumber.lua
2020/09/04 | 136156 | systems/texlive/tlnet/archive/tex4ht.doc.r56262.tar.xz
2020/09/04 | 13130 | macros/xetex/latex/xepersian-hm/doc-ligature-xepersian-hm.pdf
2020/09/04 | 1263 | macros/xetex/latex/xepersian-hm/INSTALL.txt
+2020/09/04 | 1164447 | language/japanese/BX/bxjscls/bxjscls.pdf
2020/09/04 | 1069 | macros/luatex/latex/lua-physical/LICENSE
2020/09/04 | 106056 | macros/xetex/latex/xepersian-hm/xepersian-XB.pdf
2020/09/04 | 10493064 | systems/win32/w32tex/ptex-w32.tar.xz
2020/09/04 | 1039 | macros/xetex/latex/xepersian-hm/README.txt
2020/09/04 | 10104 | macros/xetex/latex/xepersian-hm/doc-ligature-xep.pdf
2020/09/04 | 1002552 | macros/luatex/latex/lua-physical/physical/physical-isotope.lua
-2020/09/03 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
-2020/09/03 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2020/09/03 | 9642 | macros/latex/contrib/l3kernel/l3unicode.dtx
-2020/09/03 | 9465 | macros/latex/contrib/l3kernel/l3news08.tex
-2020/09/03 | 9436 | macros/latex/contrib/l3kernel/l3flag.dtx
2020/09/03 | 938 | macros/latex/contrib/oberdiek/oberdiek-source.bib
2020/09/03 | 89 | macros/latex/contrib/lwarp/lwarp_baseline_marker.png
2020/09/03 | 894989 | macros/latex/contrib/pict2e/pict2e.pdf
2020/09/03 | 8949564 | systems/texlive/tlnet/archive/oberdiek.doc.r56250.tar.xz
-2020/09/03 | 89226 | macros/latex/contrib/l3kernel/l3int.dtx
2020/09/03 | 88012 | systems/texlive/tlnet/archive/l3experimental.source.r56245.tar.xz
2020/09/03 | 87776 | systems/texlive/tlnet/archive/lualibs.doc.r56259.tar.xz
-2020/09/03 | 87751 | macros/latex/contrib/l3kernel/l3seq.dtx
2020/09/03 | 8748 | systems/texlive/tlnet/archive/scratch3.r56258.tar.xz
-2020/09/03 | 85887 | macros/latex/contrib/l3kernel/l3coffins.dtx
2020/09/03 | 8576 | systems/texlive/tlnet/archive/lualibs.source.r56259.tar.xz
-2020/09/03 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
-2020/09/03 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
2020/09/03 | 8064 | systems/texlive/tlnet/archive/docutils.doc.r56252.tar.xz
2020/09/03 | 79404 | systems/texlive/tlnet/archive/nicematrix.source.r56256.tar.xz
2020/09/03 | 7788 | systems/texlive/tlnet/archive/pict2e.r56257.tar.xz
-2020/09/03 | 77528 | macros/latex/contrib/l3kernel/l3box.dtx
-2020/09/03 | 77434 | macros/latex/contrib/l3kernel/l3msg.dtx
-2020/09/03 | 76428 | macros/latex/contrib/l3kernel/l3skip.dtx
-2020/09/03 | 76139 | macros/latex/contrib/l3kernel/l3names.dtx
-2020/09/03 | 75889 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2020/09/03 | 75536 | macros/latex/contrib/l3kernel/l3clist.dtx
2020/09/03 | 7516 | systems/texlive/tlnet/archive/metastr.r56246.tar.xz
-2020/09/03 | 74310 | macros/latex/contrib/l3kernel/l3str.dtx
2020/09/03 | 7416 | systems/texlive/tlnet/archive/newverbs.source.r56247.tar.xz
-2020/09/03 | 73845 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
2020/09/03 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
-2020/09/03 | 70325 | macros/latex/contrib/l3kernel/l3fp.dtx
2020/09/03 | 7011 | macros/latex/contrib/oberdiek/oberdiek-bundle.bib
-2020/09/03 | 70000 | macros/latex/contrib/l3kernel/expl3.dtx
-2020/09/03 | 6956 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2020/09/03 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
-2020/09/03 | 64938 | macros/latex/contrib/l3kernel/l3prg.dtx
-2020/09/03 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
-2020/09/03 | 6450 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2020/09/03 | 6431 | macros/latex/contrib/l3kernel/l3news06.tex
-2020/09/03 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
-2020/09/03 | 61738 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2020/09/03 | 6164 | systems/texlive/tlnet/archive/collection-latexextra.r56253.tar.xz
2020/09/03 | 613 | macros/latex/contrib/scratch3/README
-2020/09/03 | 6076 | macros/latex/contrib/l3kernel/l3.ins
-2020/09/03 | 5861960 | macros/latex/contrib/l3kernel/source3.pdf
-2020/09/03 | 585059 | macros/latex/contrib/l3kernel/expl3.pdf
-2020/09/03 | 5653 | macros/latex/contrib/l3kernel/l3color-base.dtx
2020/09/03 | 5604 | macros/latex/contrib/docutils/docutils.sty
-2020/09/03 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
2020/09/03 | 540900 | systems/texlive/tlnet/archive/l3kernel.source.r56254.tar.xz
2020/09/03 | 526855 | macros/latex/contrib/scratch3.zip
-2020/09/03 | 51971 | macros/latex/contrib/l3kernel/l3text-case.dtx
2020/09/03 | 518596 | systems/texlive/tlnet/archive/scratch3.doc.r56258.tar.xz
2020/09/03 | 517711 | macros/latex/contrib/oberdiek/resizegather.pdf
-2020/09/03 | 51059 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2020/09/03 | 51025 | macros/latex/contrib/l3kernel/l3prop.dtx
2020/09/03 | 508889 | macros/latex/contrib/scratch3/scratch3-fr.pdf
2020/09/03 | 503673 | macros/latex/contrib/oberdiek/bmpsize.pdf
-2020/09/03 | 4977 | macros/latex/contrib/l3kernel/l3news07.tex
-2020/09/03 | 49386 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
-2020/09/03 | 4935 | macros/latex/contrib/l3kernel/l3news01.tex
-2020/09/03 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
-2020/09/03 | 47674 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
2020/09/03 | 476727 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2020/09/03 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex
2020/09/03 | 47162 | macros/latex/contrib/scratch3/scratch3.sty
2020/09/03 | 46934 | macros/latex/contrib/oberdiek/pdfrender.dtx
2020/09/03 | 45132 | systems/texlive/tlnet/archive/oberdiek.r56250.tar.xz
2020/09/03 | 438 | macros/latex/contrib/hypdestopt/README.md
-2020/09/03 | 43159 | macros/latex/contrib/l3kernel/l3debug.dtx
2020/09/03 | 420416 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
2020/09/03 | 407244 | systems/texlive/tlnet/archive/lwarp.source.r56255.tar.xz
-2020/09/03 | 40695 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
-2020/09/03 | 40663 | macros/latex/contrib/l3kernel/l3sort.dtx
2020/09/03 | 388493 | macros/latex/contrib/oberdiek/pdfrender.pdf
2020/09/03 | 3871834 | install/macros/latex/contrib/lwarp.tds.zip
-2020/09/03 | 379235 | macros/latex/contrib/l3kernel/l3news.pdf
2020/09/03 | 3640156 | systems/texlive/tlnet/archive/l3experimental.doc.r56245.tar.xz
2020/09/03 | 359960 | macros/latex/contrib/oberdiek/fibnum.pdf
-2020/09/03 | 35831 | macros/latex/contrib/l3kernel/l3quark.dtx
2020/09/03 | 35799 | macros/latex/contrib/oberdiek/hypdoc.dtx
2020/09/03 | 352882 | macros/latex/contrib/oberdiek/thepdfnumber.pdf
-2020/09/03 | 35072 | macros/latex/contrib/l3kernel/l3prefixes.csv
-2020/09/03 | 34581 | macros/latex/contrib/l3kernel/l3text.dtx
2020/09/03 | 336823 | macros/latex/contrib/oberdiek/tabularht.pdf
2020/09/03 | 335268 | macros/latex/contrib/oberdiek/setouterhbox.pdf
2020/09/03 | 3348841 | macros/latex/contrib/lwarp.zip
@@ -463,16 +627,12 @@
2020/09/03 | 311828 | macros/latex/contrib/oberdiek/holtxdoc.pdf
2020/09/03 | 31131 | macros/latex/contrib/oberdiek/tabularht.dtx
2020/09/03 | 310601 | macros/latex/contrib/oberdiek/enparen.pdf
-2020/09/03 | 30954 | macros/latex/contrib/l3kernel/l3cctab.dtx
2020/09/03 | 309114 | macros/latex/contrib/oberdiek/telprint.pdf
2020/09/03 | 308360 | macros/latex/contrib/oberdiek/pdfcol.pdf
2020/09/03 | 305692 | macros/latex/contrib/oberdiek/hyphsubst.pdf
2020/09/03 | 30352 | systems/texlive/tlnet/archive/caption.r56243.tar.xz
-2020/09/03 | 30345 | macros/latex/contrib/l3kernel/l3deprecation.dtx
2020/09/03 | 30285 | macros/latex/contrib/lwarp/lwarp.ins
-2020/09/03 | 30010 | macros/latex/contrib/l3kernel/l3sys.dtx
2020/09/03 | 300028 | macros/latex/contrib/oberdiek/pdfcolfoot.pdf
-2020/09/03 | 2997 | macros/latex/contrib/l3kernel/README.md
2020/09/03 | 299200 | macros/latex/contrib/oberdiek/settobox.pdf
2020/09/03 | 298594 | macros/latex/contrib/oberdiek/aliascnt.pdf
2020/09/03 | 2969 | macros/latex/contrib/oberdiek/README.md
@@ -492,128 +652,79 @@
2020/09/03 | 287648 | macros/latex/contrib/oberdiek/stackrel.pdf
2020/09/03 | 2844 | systems/texlive/tlnet/archive/newverbs.r56247.tar.xz
2020/09/03 | 283435 | macros/latex/contrib/oberdiek/stampinclude.pdf
-2020/09/03 | 2817 | macros/latex/contrib/l3kernel/l3prefixes.tex
2020/09/03 | 28136 | macros/latex/contrib/oberdiek/pagegrid.dtx
2020/09/03 | 280539 | macros/latex/contrib/oberdiek/centernot.pdf
2020/09/03 | 2804912 | systems/texlive/tlnet/archive/lwarp.doc.r56255.tar.xz
2020/09/03 | 280332 | macros/latex/contrib/oberdiek/twoopt.pdf
-2020/09/03 | 279904 | macros/latex/contrib/l3kernel/l3styleguide.pdf
2020/09/03 | 27847 | macros/latex/contrib/oberdiek/pdfcrypt.dtx
2020/09/03 | 278436 | macros/latex/contrib/oberdiek/oberdiek.pdf
2020/09/03 | 277313 | macros/latex/contrib/oberdiek/classlist.pdf
2020/09/03 | 2772 | systems/texlive/tlnet/archive/hypdestopt.r56253.tar.xz
-2020/09/03 | 27656 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
2020/09/03 | 275213 | macros/latex/contrib/oberdiek/dvipscol.pdf
2020/09/03 | 27356 | systems/texlive/tlnet/archive/l3backend.source.r56244.tar.xz
2020/09/03 | 271317 | macros/latex/contrib/oberdiek/ifdraft.pdf
2020/09/03 | 26994 | macros/latex/contrib/oberdiek/pdfcolparallel.dtx
2020/09/03 | 26752 | systems/texlive/tlnet/archive/l3experimental.r56245.tar.xz
2020/09/03 | 26484 | macros/latex/contrib/oberdiek/pdfcol.dtx
-2020/09/03 | 263132 | macros/latex/contrib/l3kernel/l3docstrip.pdf
2020/09/03 | 26109 | macros/latex/contrib/oberdiek/enparen.dtx
2020/09/03 | 260615 | macros/latex/contrib/oberdiek/tabularkv.pdf
2020/09/03 | 25810 | macros/latex/contrib/oberdiek/fibnum.dtx
-2020/09/03 | 25739 | macros/latex/contrib/l3kernel/l3fp-random.dtx
2020/09/03 | 25691 | macros/latex/contrib/oberdiek/rotchiffre.dtx
2020/09/03 | 25308 | macros/latex/contrib/oberdiek/iflang.dtx
-2020/09/03 | 251923 | macros/latex/contrib/l3kernel/l3regex.dtx
2020/09/03 | 25146 | macros/latex/contrib/oberdiek/hypbmsec.dtx
2020/09/03 | 25097 | macros/latex/contrib/oberdiek/eolgrab.dtx
2020/09/03 | 24890 | macros/latex/contrib/oberdiek/telprint.dtx
-2020/09/03 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
2020/09/03 | 2482975 | macros/latex/contrib/lwarp/lwarp.dtx
2020/09/03 | 24780 | macros/latex/contrib/oberdiek/resizegather.dtx
-2020/09/03 | 24664 | macros/latex/contrib/l3kernel/CHANGELOG.md
2020/09/03 | 2420 | systems/texlive/tlnet/archive/docutils.r56252.tar.xz
2020/09/03 | 24106 | macros/latex/contrib/oberdiek/engord.dtx
2020/09/03 | 23877 | macros/latex/contrib/docutils/docutils.sty.html
-2020/09/03 | 235322 | macros/latex/contrib/l3kernel/l3news09.pdf
2020/09/03 | 23336 | systems/texlive/tlnet/archive/metastr.source.r56246.tar.xz
-2020/09/03 | 23107 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2020/09/03 | 228194 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
2020/09/03 | 2249 | macros/latex/contrib/oberdiek/oberdiek.ins
2020/09/03 | 22488 | systems/texlive/tlnet/archive/nicematrix.r56256.tar.xz
2020/09/03 | 2224 | systems/texlive/tlnet/archive/l3backend.doc.r56244.tar.xz
2020/09/03 | 220664 | systems/texlive/tlnet/archive/newverbs.doc.r56247.tar.xz
-2020/09/03 | 217567 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
2020/09/03 | 21668 | macros/latex/contrib/oberdiek/holtxdoc.dtx
-2020/09/03 | 2153 | macros/latex/contrib/l3kernel/source3.tex
2020/09/03 | 21476 | macros/latex/contrib/oberdiek/hypcap.dtx
2020/09/03 | 21343 | macros/latex/contrib/oberdiek/hyphsubst.dtx
-2020/09/03 | 21212 | macros/latex/contrib/l3kernel/source3body.tex
-2020/09/03 | 20914 | macros/latex/contrib/l3kernel/l3text-purify.dtx
2020/09/03 | 20819 | macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
2020/09/03 | 20812 | macros/latex/contrib/oberdiek/protecteddef.dtx
2020/09/03 | 201680 | systems/texlive/tlnet/archive/caption.source.r56243.tar.xz
2020/09/03 | 20045 | macros/latex/contrib/oberdiek/settobox.dtx
-2020/09/03 | 199139 | macros/latex/contrib/l3kernel/l3news12.pdf
-2020/09/03 | 19680 | macros/latex/contrib/l3kernel/l3intarray.dtx
-2020/09/03 | 19653 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
2020/09/03 | 19329 | macros/latex/contrib/oberdiek/pdfcolfoot.dtx
2020/09/03 | 19267 | macros/latex/contrib/oberdiek/scrindex.dtx
-2020/09/03 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
-2020/09/03 | 18591 | macros/latex/contrib/l3kernel/l3fp-round.dtx
2020/09/03 | 18499 | macros/latex/contrib/oberdiek/stampinclude.dtx
2020/09/03 | 18376 | macros/latex/contrib/oberdiek/oberdiek.tex
2020/09/03 | 183700 | systems/texlive/tlnet/archive/lwarp.r56255.tar.xz
2020/09/03 | 18053 | macros/latex/contrib/oberdiek/hypgotoe.dtx
2020/09/03 | 1752 | macros/latex/contrib/docutils/README.md
2020/09/03 | 1712 | macros/latex/contrib/pict2e/README.md
-2020/09/03 | 17106 | macros/latex/contrib/l3kernel/l3luatex.dtx
2020/09/03 | 16829 | macros/latex/contrib/oberdiek/twoopt.dtx
2020/09/03 | 16789 | macros/latex/contrib/oberdiek/flags.dtx
2020/09/03 | 16633 | macros/latex/contrib/oberdiek/classlist.dtx
-2020/09/03 | 165946 | macros/latex/contrib/l3kernel/l3news11.pdf
2020/09/03 | 16564 | macros/latex/contrib/oberdiek/colonequals.dtx
2020/09/03 | 16535 | macros/latex/contrib/oberdiek/aliascnt.dtx
2020/09/03 | 1623 | macros/latex/contrib/lwarp/README.txt
2020/09/03 | 1562956 | systems/texlive/tlnet/archive/caption.doc.r56243.tar.xz
-2020/09/03 | 1555947 | macros/latex/contrib/l3kernel/interface3.pdf
2020/09/03 | 153264 | systems/texlive/tlnet/archive/l3kernel.r56254.tar.xz
2020/09/03 | 1529697 | macros/latex/contrib/nicematrix.zip
-2020/09/03 | 152413 | macros/latex/contrib/l3kernel/l3news08.pdf
2020/09/03 | 15169 | macros/latex/contrib/oberdiek/ifdraft.dtx
2020/09/03 | 15084 | macros/latex/contrib/oberdiek/centernot.dtx
-2020/09/03 | 149242 | macros/latex/contrib/l3kernel/l3doc.dtx
-2020/09/03 | 14913 | macros/latex/contrib/l3kernel/l3news12.tex
-2020/09/03 | 147097 | macros/latex/contrib/l3kernel/l3news10.pdf
-2020/09/03 | 144785 | macros/latex/contrib/l3kernel/l3news03.pdf
2020/09/03 | 1426188 | systems/texlive/tlnet/archive/nicematrix.doc.r56256.tar.xz
-2020/09/03 | 14244 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
2020/09/03 | 14185 | macros/latex/contrib/oberdiek/dvipscol.dtx
-2020/09/03 | 140795 | macros/latex/contrib/l3kernel/l3news06.pdf
-2020/09/03 | 140776 | macros/latex/contrib/l3kernel/l3news02.pdf
2020/09/03 | 13782 | macros/latex/contrib/oberdiek/stackrel.dtx
2020/09/03 | 13772 | macros/latex/contrib/oberdiek/chemarr.dtx
2020/09/03 | 135808 | macros/latex/contrib/pict2e/pict2e.dtx
-2020/09/03 | 135177 | macros/latex/contrib/l3kernel/l3tl.dtx
2020/09/03 | 13476366 | install/macros/latex/contrib/oberdiek.tds.zip
-2020/09/03 | 133887 | macros/latex/contrib/l3kernel/l3file.dtx
2020/09/03 | 13367434 | macros/latex/contrib/oberdiek.zip
2020/09/03 | 13344 | macros/latex/contrib/oberdiek/tabularkv.dtx
-2020/09/03 | 12965 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2020/09/03 | 127477 | macros/latex/contrib/l3kernel/l3basics.dtx
2020/09/03 | 12738 | macros/latex/contrib/docutils.zip
2020/09/03 | 12660 | systems/texlive/tlnet/archive/l3backend.r56244.tar.xz
2020/09/03 | 121768 | systems/texlive/tlnet/archive/lualibs.r56259.tar.xz
-2020/09/03 | 119094 | macros/latex/contrib/l3kernel/l3news07.pdf
-2020/09/03 | 11899388 | install/macros/latex/contrib/l3kernel.tds.zip
-2020/09/03 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
2020/09/03 | 118696 | systems/texlive/tlnet/archive/oberdiek.source.r56250.tar.xz
-2020/09/03 | 11812 | macros/latex/contrib/l3kernel/l3fparray.dtx
-2020/09/03 | 11678113 | macros/latex/contrib/l3kernel.zip
2020/09/03 | 1140009 | macros/latex/contrib/pict2e.zip
-2020/09/03 | 113900 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2020/09/03 | 113527 | macros/latex/contrib/l3kernel/l3news01.pdf
-2020/09/03 | 112616 | macros/latex/contrib/l3kernel/l3keys.dtx
-2020/09/03 | 110692 | macros/latex/contrib/l3kernel/l3token.dtx
2020/09/03 | 1105820 | systems/texlive/tlnet/archive/pict2e.doc.r56257.tar.xz
-2020/09/03 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
-2020/09/03 | 107379 | macros/latex/contrib/l3kernel/l3news09.tex
-2020/09/03 | 107115 | macros/latex/contrib/l3kernel/l3news04.pdf
2020/09/03 | 106085 | macros/latex/contrib/oberdiek/bmpsize.dtx
-2020/09/03 | 105735 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
-2020/09/03 | 105090 | macros/latex/contrib/l3kernel/l3news05.pdf
2020/09/03 | 1024124 | macros/latex/contrib/nicematrix/nicematrix.pdf
2020/09/03 | 10059844 | systems/texlive/tlnet/archive/l3kernel.doc.r56254.tar.xz
2020/09/02 | 99306980 | systems/win32/w32tex/web2c-lib.tar.xz
@@ -935,427 +1046,3 @@
2020/09/01 | 10330 | macros/latex/contrib/graphics-def/dvipdfmx.def
2020/09/01 | 1014427 | macros/latex/contrib/hep-paper.zip
2020/09/01 | 10136 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx
-2020/08/31 | 988811 | macros/latex-dev/base/ltnews.pdf
-2020/08/31 | 9810 | macros/latex-dev/base/ltnews21.tex
-2020/08/31 | 9651 | macros/latex-dev/base/ltexpl.dtx
-2020/08/31 | 9631 | macros/latex-dev/base/format.ins
-2020/08/31 | 9562 | macros/latex-dev/base/ltcntrl.dtx
-2020/08/31 | 9494 | macros/latex-dev/required/tools/shellesc.dtx
-2020/08/31 | 9401 | macros/latex-dev/base/syntonly.dtx
-2020/08/31 | 9374 | macros/latex-dev/base/preload.dtx
-2020/08/31 | 9202 | macros/latex-dev/required/amsmath/amsopn.dtx
-2020/08/31 | 9068 | macros/latex-dev/base/lppl-1-0.txt
-2020/08/31 | 90413 | macros/latex-dev/base/fntguide.tex
-2020/08/31 | 8982 | macros/latex-dev/required/tools/rawfonts.dtx
-2020/08/31 | 89720 | macros/latex-dev/base/slides.dtx
-2020/08/31 | 89386 | macros/latex-dev/base/utf8ienc.dtx
-2020/08/31 | 8864 | macros/latex-dev/base/ltnews17.tex
-2020/08/31 | 88411 | macros/latex-dev/base/lttextcomp.dtx
-2020/08/31 | 8753 | macros/latex/contrib/edichokey/edichokey-doc-en.tex
-2020/08/31 | 8737 | macros/latex-dev/base/ltthm.dtx
-2020/08/31 | 871310 | macros/latex-dev/base/lthooks-code.pdf
-2020/08/31 | 8654 | macros/latex-dev/required/amsmath/amsbsy.dtx
-2020/08/31 | 8632 | macros/latex-dev/base/oldlfont.dtx
-2020/08/31 | 85087 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
-2020/08/31 | 8493 | macros/latex-dev/base/texpert.txt
-2020/08/31 | 83557 | macros/latex-dev/base/ltdefns.dtx
-2020/08/31 | 82371 | macros/latex-dev/required/amsmath/testmath.tex
-2020/08/31 | 8100 | macros/latex-dev/base/ltnews.tex
-2020/08/31 | 79110 | macros/latex-dev/base/ltfssbas.dtx
-2020/08/31 | 7526 | macros/latex-dev/base/ltxguide.cls
-2020/08/31 | 749702 | macros/latex-dev/base/ltshipout-code.pdf
-2020/08/31 | 747549 | macros/latex-dev/base/ltfilehook-code.pdf
-2020/08/31 | 74156 | systems/texlive/tlnet/archive/totalcount.doc.r56214.tar.xz
-2020/08/31 | 73960 | macros/latex-dev/base/ltfssini.dtx
-2020/08/31 | 7326 | macros/latex-dev/base/ltnews20.tex
-2020/08/31 | 7242 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex
-2020/08/31 | 7222 | macros/latex-dev/base/exscale.dtx
-2020/08/31 | 72225 | macros/latex-dev/required/tools/longtable.dtx
-2020/08/31 | 72142 | macros/latex-dev/required/tools/verbatim.dtx
-2020/08/31 | 7200 | macros/latex-dev/base/sample2e.tex
-2020/08/31 | 69774 | macros/latex-dev/required/graphics/graphics.dtx
-2020/08/31 | 69720 | macros/latex-dev/required/amsmath/amstex.sty
-2020/08/31 | 6968251 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
-2020/08/31 | 693130 | install/macros/latex/contrib/biblatex-contrib/biblatex-ieee.tds.zip
-2020/08/31 | 691839 | macros/latex/contrib/biblatex-contrib/biblatex-ieee.zip
-2020/08/31 | 69051 | macros/latex-dev/base/clsguide.tex
-2020/08/31 | 68914 | macros/latex-dev/base/ltpictur.dtx
-2020/08/31 | 6886532 | macros/latex-dev/required/tools.zip
-2020/08/31 | 6872 | macros/latex-dev/base/ltnews13.tex
-2020/08/31 | 68428 | macros/latex-dev/base/usrguide.tex
-2020/08/31 | 68285 | macros/latex-dev/required/tools/tools-overview.pdf
-2020/08/31 | 6795 | macros/latex-dev/required/tools/delarray.dtx
-2020/08/31 | 6764 | macros/latex-dev/base/slides.ins
-2020/08/31 | 67333 | macros/latex-dev/base/ltfsstrc.dtx
-2020/08/31 | 6715 | macros/latex-dev/base/latexsym.dtx
-2020/08/31 | 6654 | macros/latex-dev/base/alltt.dtx
-2020/08/31 | 66063688 | systems/win32/w32tex/biblatex-biber.tar.xz
-2020/08/31 | 65165 | macros/latex/contrib/edichokey/edichokey-doc-en.pdf
-2020/08/31 | 6440 | macros/latex-dev/required/amsmath/subeqn.tex
-2020/08/31 | 64404 | macros/latex-dev/base/ltluatex.dtx
-2020/08/31 | 6367 | macros/latex-dev/base/source2edoc.cls
-2020/08/31 | 6363 | macros/latex-dev/base/newlfont.dtx
-2020/08/31 | 631616 | macros/latex-dev/base/doc.pdf
-2020/08/31 | 6274 | macros/latex-dev/base/ltnews14.tex
-2020/08/31 | 62436 | macros/latex-dev/base/letter.dtx
-2020/08/31 | 6224 | macros/latex-dev/required/tools/xr.dtx
-2020/08/31 | 61221 | macros/latex-dev/base/ltfssdcl.dtx
-2020/08/31 | 60475 | macros/latex-dev/base/ltshipout.dtx
-2020/08/31 | 60334 | macros/latex-dev/base/fontdef.dtx
-2020/08/31 | 602334 | macros/latex-dev/base/lthooks-doc.pdf
-2020/08/31 | 59453 | macros/latex-dev/base/ltfilehook.dtx
-2020/08/31 | 59410 | macros/latex-dev/required/tools/bm.dtx
-2020/08/31 | 5883 | macros/latex-dev/required/amsmath/changes.txt
-2020/08/31 | 5865 | macros/latex-dev/base/ltidxglo.dtx
-2020/08/31 | 5860 | macros/latex-dev/required/amsmath/ams-internal.txt
-2020/08/31 | 5854 | macros/latex-dev/base/ltpar.dtx
-2020/08/31 | 5840 | macros/latex-dev/base/ltnews15.tex
-2020/08/31 | 5797 | macros/latex-dev/required/tools/somedefs.dtx
-2020/08/31 | 5777 | macros/latex-dev/base/ltnews16.tex
-2020/08/31 | 57583 | macros/latex-dev/base/ltmiscen.dtx
-2020/08/31 | 57417 | macros/latex-dev/required/tools/changes.txt
-2020/08/31 | 5716 | macros/latex-dev/base/inputenc.ins
-2020/08/31 | 5696 | macros/latex-dev/base/ltnews08.tex
-2020/08/31 | 5682 | macros/latex-dev/required/tools/tools.ins
-2020/08/31 | 5660 | macros/latex-dev/base/ltnews10.tex
-2020/08/31 | 5609 | macros/latex-dev/base/ltnews05.tex
-2020/08/31 | 5600 | macros/latex-dev/base/latexrelease.ins
-2020/08/31 | 5530 | macros/latex-dev/base/ltnews11.tex
-2020/08/31 | 5515 | macros/latex-dev/base/graphpap.dtx
-2020/08/31 | 5507 | macros/latex-dev/base/ltnews27.tex
-2020/08/31 | 5507 | macros/latex-dev/base/ltnews04.tex
-2020/08/31 | 5474 | macros/latex-dev/base/ltnews25.tex
-2020/08/31 | 5426 | macros/latex-dev/base/ltnews07.tex
-2020/08/31 | 5418 | macros/latex-dev/base/ltnews12.tex
-2020/08/31 | 5391 | macros/latex-dev/base/ltnews06.tex
-2020/08/31 | 5323 | macros/latex-dev/required/amsmath/ams-external.txt
-2020/08/31 | 53174 | macros/latex-dev/required/tools/calc.dtx
-2020/08/31 | 5294 | macros/latex-dev/base/ltnews09.tex
-2020/08/31 | 529433 | macros/latex-dev/base/ltnews32.pdf
-2020/08/31 | 5284 | macros/latex-dev/base/ltnews02.tex
-2020/08/31 | 52814 | macros/latex-dev/base/encguide.tex
-2020/08/31 | 5275 | macros/latex-dev/base/cmextra.ins
-2020/08/31 | 52532 | macros/latex-dev/base/lb2.err
-2020/08/31 | 52517 | macros/latex-dev/base/ltfiles.dtx
-2020/08/31 | 5239 | macros/latex-dev/base/ltnews01.tex
-2020/08/31 | 5213 | macros/latex-dev/required/tools/tools-overview.tex
-2020/08/31 | 520851 | macros/latex-dev/base/classes.pdf
-2020/08/31 | 5201 | macros/latex-dev/base/ltnews03.tex
-2020/08/31 | 517421 | macros/latex-dev/base/ltfilehook-doc.pdf
-2020/08/31 | 51314 | macros/latex-dev/base/ltfloat.dtx
-2020/08/31 | 50759 | macros/latex-dev/required/graphics/drivers.dtx
-2020/08/31 | 504786 | macros/latex-dev/base/ltshipout-doc.pdf
-2020/08/31 | 5044 | macros/latex-dev/base/latexsym.ins
-2020/08/31 | 500919 | macros/latex-dev/base/ltnews31.pdf
-2020/08/31 | 49967 | macros/latex-dev/base/ltfssaxes.dtx
-2020/08/31 | 4965 | macros/latex-dev/required/tools/fileerr.dtx
-2020/08/31 | 4952 | macros/latex-dev/base/lthyphen.dtx
-2020/08/31 | 491466 | macros/latex-dev/required/tools/multicol.pdf
-2020/08/31 | 491246 | macros/latex-dev/base/ltnews30.pdf
-2020/08/31 | 48645 | macros/latex-dev/base/ltplain.dtx
-2020/08/31 | 483280 | macros/latex-dev/required/tools/array.pdf
-2020/08/31 | 479710 | macros/latex-dev/base/docstrip.pdf
-2020/08/31 | 47704 | macros/latex-dev/base/lttab.dtx
-2020/08/31 | 4762 | macros/latex-dev/base/ltlength.dtx
-2020/08/31 | 476032 | macros/latex-dev/required/amsmath/amsldoc.pdf
-2020/08/31 | 4616 | systems/texlive/tlnet/archive/totalcount.source.r56214.tar.xz
-2020/08/31 | 45246 | macros/latex-dev/base/ltspace.dtx
-2020/08/31 | 446 | info/tlmgrbasics/README
-2020/08/31 | 444 | systems/texlive/tlnet/archive/collection-langarabic.r56215.tar.xz
-2020/08/31 | 4392 | macros/latex-dev/base/ec.ins
-2020/08/31 | 43637 | macros/latex-dev/base/cmfonts.fdd
-2020/08/31 | 43454 | macros/latex-dev/required/tools/theorem.dtx
-2020/08/31 | 4343 | macros/latex-dev/required/amsmath/amsxtra.dtx
-2020/08/31 | 433004 | macros/latex-dev/base/ltnews29.pdf
-2020/08/31 | 4326 | macros/latex-dev/base/cmfonts.ins
-2020/08/31 | 4320779 | macros/latex-dev/base/source2e.pdf
-2020/08/31 | 4304 | macros/latex-dev/base/ltalloc.dtx
-2020/08/31 | 429026 | macros/latex-dev/required/amsmath/testmath.pdf
-2020/08/31 | 42708 | macros/latex-dev/base/changes.old.txt
-2020/08/31 | 4256 | macros/latex-dev/base/newdc.ins
-2020/08/31 | 4223 | macros/latex-dev/base/docstrip.ins
-2020/08/31 | 4221 | macros/latex-dev/base/latex209.ins
-2020/08/31 | 417861 | macros/latex-dev/base/fntguide.pdf
-2020/08/31 | 4171 | macros/latex-dev/base/ltnews19.tex
-2020/08/31 | 41570 | macros/latex-dev/base/ltboxes.dtx
-2020/08/31 | 4089 | macros/latex-dev/base/classes.ins
-2020/08/31 | 4084 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx
-2020/08/31 | 4080 | macros/latex-dev/base/lablst.tex
-2020/08/31 | 40668 | macros/latex-dev/base/ltfinal.dtx
-2020/08/31 | 4062 | macros/latex-dev/required/graphics/epsfig.dtx
-2020/08/31 | 399035 | macros/latex-dev/base/usrguide.pdf
-2020/08/31 | 39702 | macros/latex-dev/required/tools/ftnright.dtx
-2020/08/31 | 3962 | macros/latex-dev/base/olddc.ins
-2020/08/31 | 38948 | macros/latex-dev/base/ltmath.dtx
-2020/08/31 | 3886 | macros/latex-dev/required/graphics/lscape.dtx
-2020/08/31 | 38735 | macros/latex-dev/base/latex209.dtx
-2020/08/31 | 384117 | macros/latex-dev/required/amsmath/amsmath.pdf
-2020/08/31 | 383838 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf
-2020/08/31 | 37980 | macros/latex-dev/base/latexchanges.tex
-2020/08/31 | 37919 | macros/latex-dev/required/graphics/grfguide.tex
-2020/08/31 | 3783 | macros/latex-dev/base/tulm.ins
-2020/08/31 | 3731 | macros/latex-dev/base/ltlogos.dtx
-2020/08/31 | 372555 | macros/latex-dev/base/clsguide.pdf
-2020/08/31 | 369 | macros/latex-dev/required/amsmath/manifest.txt
-2020/08/31 | 368226 | macros/latex-dev/base/ltnews28.pdf
-2020/08/31 | 363007 | macros/latex-dev/required/tools/varioref.pdf
-2020/08/31 | 362839 | macros/latex-dev/base/ltnews26.pdf
-2020/08/31 | 36154 | macros/latex-dev/base/ltlists.dtx
-2020/08/31 | 36005 | macros/latex-dev/base/ltnews18.pdf
-2020/08/31 | 35881 | macros/latex-dev/required/tools/tabularx.dtx
-2020/08/31 | 356851 | macros/latex-dev/base/changes.txt
-2020/08/31 | 35221 | macros/latex-dev/base/ltdirchk.dtx
-2020/08/31 | 351586 | macros/latex-dev/base/slides.pdf
-2020/08/31 | 3514 | macros/latex-dev/base/README.md
-2020/08/31 | 349888 | macros/latex-dev/required/tools/longtable.pdf
-2020/08/31 | 347182 | macros/latex-dev/required/tools/ftnright.pdf
-2020/08/31 | 3436 | macros/latex-dev/base/makeindx.ins
-2020/08/31 | 340889 | macros/latex-dev/required/tools/calc.pdf
-2020/08/31 | 3403 | macros/latex-dev/base/proc.ins
-2020/08/31 | 33976 | macros/latex-dev/base/ltnews32.tex
-2020/08/31 | 33864 | macros/latex-dev/required/tools/varioref-2016-02-16.sty
-2020/08/31 | 3374 | macros/latex-dev/base/letter.ins
-2020/08/31 | 3369 | macros/latex-dev/base/ltoutenc.ins
-2020/08/31 | 3340 | macros/latex-dev/base/exscale.ins
-2020/08/31 | 331397 | macros/latex-dev/base/utf8ienc.pdf
-2020/08/31 | 3294 | macros/latex-dev/base/bugs.txt
-2020/08/31 | 3281 | macros/latex-dev/required/tools/manifest.txt
-2020/08/31 | 32793 | macros/latex-dev/required/graphics/changes.txt
-2020/08/31 | 32647 | macros/latex-dev/base/ltsect.dtx
-2020/08/31 | 323500 | macros/latex-dev/required/tools/theorem.pdf
-2020/08/31 | 32164 | macros/latex-dev/base/latexrelease.dtx
-2020/08/31 | 3182 | macros/latex-dev/base/unpack.ins
-2020/08/31 | 31608 | macros/latex-dev/required/graphics/color.dtx
-2020/08/31 | 310275 | macros/latex-dev/required/graphics/grfguide.pdf
-2020/08/31 | 30962 | macros/latex-dev/required/tools/layout.dtx
-2020/08/31 | 306728 | macros/latex-dev/required/tools/bm.pdf
-2020/08/31 | 306068 | macros/latex-dev/base/letter.pdf
-2020/08/31 | 305256 | macros/latex-dev/base/ltluatex.pdf
-2020/08/31 | 30457 | macros/latex-dev/base/ltnews31.tex
-2020/08/31 | 302925 | macros/latex-dev/required/tools/verbatim.pdf
-2020/08/31 | 302836 | macros/latex-dev/base/ltnews22.pdf
-2020/08/31 | 30075 | macros/latex-dev/required/graphics/graphicx.dtx
-2020/08/31 | 2994 | macros/latex-dev/required/graphics/graphics-drivers.ins
-2020/08/31 | 29714 | macros/latex-dev/required/tools/multicol-2017-04-11.sty
-2020/08/31 | 29571 | macros/latex-dev/required/tools/showkeys.dtx
-2020/08/31 | 294900 | macros/latex-dev/base/inputenc.pdf
-2020/08/31 | 293433 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf
-2020/08/31 | 29194 | macros/latex-dev/base/ltfntcmd.dtx
-2020/08/31 | 2898 | macros/latex-dev/base/syntonly.ins
-2020/08/31 | 2895 | macros/latex-dev/base/nfssfont.ins
-2020/08/31 | 2894 | macros/latex-dev/base/graphpap.ins
-2020/08/31 | 2894 | macros/latex-dev/base/fix-cm.ins
-2020/08/31 | 2892 | macros/latex-dev/base/alltt.ins
-2020/08/31 | 2890 | macros/latex-dev/base/ifthen.ins
-2020/08/31 | 286071 | macros/latex-dev/required/graphics/graphics.pdf
-2020/08/31 | 283318 | macros/latex-dev/base/ltnews20.pdf
-2020/08/31 | 28282841 | install/macros/latex-dev/latex-base-dev.tds.zip
-2020/08/31 | 27830697 | macros/latex-dev/base.zip
-2020/08/31 | 2759 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex
-2020/08/31 | 2750 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx
-2020/08/31 | 274459 | macros/latex-dev/base/ltnews23.pdf
-2020/08/31 | 2738 | macros/latex-dev/base/tex2.txt
-2020/08/31 | 2733 | macros/latex-dev/base/ltpageno.dtx
-2020/08/31 | 2726 | macros/latex-dev/required/amsmath/README.md
-2020/08/31 | 27124 | macros/latex-dev/base/ltxcheck.tex
-2020/08/31 | 2706 | macros/latex-dev/base/idx.tex
-2020/08/31 | 264505 | macros/latex-dev/base/cmfonts.pdf
-2020/08/31 | 2643039 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
-2020/08/31 | 263761 | macros/latex-dev/required/graphics/drivers.pdf
-2020/08/31 | 262059 | macros/latex-dev/base/fix-cm.pdf
-2020/08/31 | 2612965 | macros/latex-dev/required/amsmath.zip
-2020/08/31 | 2578 | macros/latex-dev/required/tools/multicol.ins
-2020/08/31 | 254169 | macros/latex-dev/required/tools/tabularx.pdf
-2020/08/31 | 2540 | macros/latex-dev/required/tools/longtable.ins
-2020/08/31 | 2540 | macros/latex-dev/required/tools/afterpage.ins
-2020/08/31 | 2537 | macros/latex-dev/required/tools/tabularx.ins
-2020/08/31 | 2534064 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
-2020/08/31 | 2533 | macros/latex-dev/required/tools/varioref.ins
-2020/08/31 | 2526 | macros/latex-dev/required/tools/bm.ins
-2020/08/31 | 252645 | macros/latex-dev/base/ltnews24.pdf
-2020/08/31 | 246917 | macros/latex-dev/required/tools/layout.pdf
-2020/08/31 | 24649 | macros/latex-dev/required/tools/trace.dtx
-2020/08/31 | 246195 | macros/latex-dev/base/latexrelease.pdf
-2020/08/31 | 245977 | macros/latex-dev/required/graphics/rotating.pdf
-2020/08/31 | 242771 | macros/latex-dev/required/tools/showkeys.pdf
-2020/08/31 | 24016 | macros/latex-dev/base/lterror.dtx
-2020/08/31 | 239758 | macros/latex-dev/base/ltnews27.pdf
-2020/08/31 | 237978 | macros/latex-dev/required/tools/xspace.pdf
-2020/08/31 | 23652 | macros/latex-dev/base/ltnews30.tex
-2020/08/31 | 23521 | macros/latex-dev/base/fix-cm.dtx
-2020/08/31 | 235073 | macros/latex-dev/base/ltnews19.pdf
-2020/08/31 | 23386 | macros/latex-dev/base/lppl.tex
-2020/08/31 | 233492 | macros/latex-dev/base/ltnews21.pdf
-2020/08/31 | 232390 | macros/latex-dev/base/latexchanges.pdf
-2020/08/31 | 231066 | macros/latex-dev/required/graphics/graphicx.pdf
-2020/08/31 | 22676 | macros/latex-dev/base/ltcounts.dtx
-2020/08/31 | 22605 | macros/latex-dev/required/amsmath/diffs-m.txt
-2020/08/31 | 2252 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx
-2020/08/31 | 225083 | macros/latex-dev/required/amsmath/amsmath.dtx
-2020/08/31 | 22457 | macros/latex-dev/base/cfgguide.tex
-2020/08/31 | 2226 | macros/latex-dev/required/tools/indentfirst.dtx
-2020/08/31 | 222527 | macros/latex-dev/required/graphics/keyval.pdf
-2020/08/31 | 22083 | info/tlmgrbasics/doc/tlmgr.tex
-2020/08/31 | 220388 | macros/latex-dev/base/modguide.pdf
-2020/08/31 | 220217 | macros/latex-dev/base/cfgguide.pdf
-2020/08/31 | 216997 | macros/latex-dev/base/cyrguide.pdf
-2020/08/31 | 216877 | macros/latex-dev/base/proc.pdf
-2020/08/31 | 215134 | macros/latex-dev/base/ltxdoc.pdf
-2020/08/31 | 214710 | macros/latex-dev/base/slifonts.pdf
-2020/08/31 | 212721 | macros/latex-dev/required/tools/trace.pdf
-2020/08/31 | 21040 | systems/texlive/tlnet/archive/mcf2graph.r56217.tar.xz
-2020/08/31 | 20994 | macros/latex-dev/required/graphics/rotating.dtx
-2020/08/31 | 2095644 | systems/texlive/tlnet/archive/texnegar.doc.r56215.tar.xz
-2020/08/31 | 2092 | macros/latex-dev/required/graphics/README.md
-2020/08/31 | 205213 | macros/latex-dev/base/ifthen.pdf
-2020/08/31 | 20471 | macros/latex-dev/base/ltnews.cls
-2020/08/31 | 20434 | macros/latex-dev/base/lgc2.err
-2020/08/31 | 204016 | macros/latex-dev/base/doc.dtx
-2020/08/31 | 202451 | macros/latex-dev/base/nfssfont.pdf
-2020/08/31 | 200892 | macros/latex-dev/required/graphics/color.pdf
-2020/08/31 | 199218 | macros/latex-dev/required/tools/dcolumn.pdf
-2020/08/31 | 199047 | macros/latex-dev/required/tools/enumerate.pdf
-2020/08/31 | 19746 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx
-2020/08/31 | 196326 | macros/latex-dev/base/ltnews25.pdf
-2020/08/31 | 195877 | macros/latex-dev/base/exscale.pdf
-2020/08/31 | 194257 | macros/latex-dev/required/amsmath/amstext.pdf
-2020/08/31 | 1938 | macros/latex-dev/base/minimal.cls
-2020/08/31 | 192297 | macros/latex-dev/base/latexsym.pdf
-2020/08/31 | 191692 | macros/latex-dev/required/graphics/trig.pdf
-2020/08/31 | 191527 | macros/latex-dev/base/ltx3info.pdf
-2020/08/31 | 19040 | macros/latex-dev/base/lppl.txt
-2020/08/31 | 189846 | macros/latex-dev/required/tools/afterpage.pdf
-2020/08/31 | 18941 | macros/latex-dev/base/ltnews29.tex
-2020/08/31 | 18867 | macros/latex-dev/base/ltxdoc.dtx
-2020/08/31 | 18407 | macros/latex-dev/base/nfssfont.dtx
-2020/08/31 | 183426 | macros/latex-dev/required/tools/delarray.pdf
-2020/08/31 | 18305 | macros/latex-dev/base/ifthen.dtx
-2020/08/31 | 18300 | macros/latex-dev/base/ltx3info.tex
-2020/08/31 | 182355 | macros/latex-dev/required/tools/multicol.dtx
-2020/08/31 | 181980 | macros/latex-dev/base/syntonly.pdf
-2020/08/31 | 180 | macros/latex-dev/base/ltfilehook-doc.tex
-2020/08/31 | 180373 | macros/latex-dev/required/tools/fileerr.pdf
-2020/08/31 | 179 | macros/latex-dev/base/ltshipout-doc.tex
-2020/08/31 | 17862 | macros/latex-dev/required/tools/xspace.dtx
-2020/08/31 | 177 | macros/latex-dev/base/lthooks-doc.tex
-2020/08/31 | 175673 | macros/latex-dev/required/tools/hhline.pdf
-2020/08/31 | 175629 | macros/latex-dev/base/ltoutput.dtx
-2020/08/31 | 17496 | macros/latex-dev/base/cyrguide.tex
-2020/08/31 | 173079 | macros/latex-dev/base/alltt.pdf
-2020/08/31 | 172216 | macros/latex-dev/base/tlc2.err
-2020/08/31 | 170214 | macros/latex-dev/base/docstrip.dtx
-2020/08/31 | 169765 | macros/latex-dev/required/tools/shellesc.pdf
-2020/08/31 | 1694 | macros/latex-dev/base/small2e.tex
-2020/08/31 | 1666 | macros/latex-dev/required/tools/README.md
-2020/08/31 | 165745 | macros/latex-dev/required/amsmath/amscd.pdf
-2020/08/31 | 164947 | macros/latex-dev/base/tlc2.pdf
-2020/08/31 | 164345 | macros/latex-dev/required/amsmath/amsgen.pdf
-2020/08/31 | 1640 | systems/texlive/tlnet/archive/totalcount.r56214.tar.xz
-2020/08/31 | 163607 | macros/latex-dev/required/tools/xr.pdf
-2020/08/31 | 16234 | macros/latex-dev/base/modguide.tex
-2020/08/31 | 162268 | macros/latex-dev/required/graphics/rotex.pdf
-2020/08/31 | 161324 | macros/latex-dev/required/amsmath/amsbsy.pdf
-2020/08/31 | 161065 | macros/latex-dev/base/ltnews13.pdf
-2020/08/31 | 160667 | macros/latex-dev/base/makeindx.pdf
-2020/08/31 | 15737 | macros/latex-dev/required/graphics/cat.eps
-2020/08/31 | 157181 | macros/latex-dev/base/ltnews05.pdf
-2020/08/31 | 15701 | macros/latex-dev/base/slifonts.fdd
-2020/08/31 | 156546 | macros/latex-dev/base/tulm.pdf
-2020/08/31 | 156506 | macros/latex-dev/required/tools/somedefs.pdf
-2020/08/31 | 156277 | macros/latex-dev/base/graphpap.pdf
-2020/08/31 | 15623 | macros/latex-dev/base/ltxref.dtx
-2020/08/31 | 155735 | macros/latex-dev/base/classes.dtx
-2020/08/31 | 154479 | macros/latex-dev/required/graphics/epsfig.pdf
-2020/08/31 | 15430 | macros/latex-dev/required/graphics/graphics-2017-06-25.sty
-2020/08/31 | 1532144 | macros/latex-dev/base/encguide.pdf
-2020/08/31 | 151347 | macros/latex-dev/base/manual.pdf
-2020/08/31 | 150907 | macros/latex-dev/base/ltnews14.pdf
-2020/08/31 | 150615 | macros/latex-dev/required/graphics/lscape.pdf
-2020/08/31 | 150586 | info/tlmgrbasics.zip
-2020/08/31 | 150020 | macros/latex-dev/base/ltnews01.pdf
-2020/08/31 | 149838 | macros/latex-dev/base/ltnews17.pdf
-2020/08/31 | 14918 | macros/latex-dev/base/source2e.tex
-2020/08/31 | 14892 | macros/latex-dev/base/ltnews28.tex
-2020/08/31 | 1480 | macros/latex-dev/required/amsmath/amsmath.ins
-2020/08/31 | 147946 | macros/latex-dev/base/ltnews10.pdf
-2020/08/31 | 14784 | systems/texlive/tlnet/archive/texnegar.source.r56215.tar.xz
-2020/08/31 | 1468 | macros/latex-dev/required/amsmath/amsxtra.ins
-2020/08/31 | 1468 | macros/latex-dev/required/amsmath/amstext.ins
-2020/08/31 | 1466 | macros/latex-dev/required/amsmath/amsopn.ins
-2020/08/31 | 1466 | macros/latex-dev/required/amsmath/amsgen.ins
-2020/08/31 | 1466 | macros/latex-dev/required/amsmath/amsbsy.ins
-2020/08/31 | 1464 | macros/latex-dev/required/amsmath/amscd.ins
-2020/08/31 | 14575 | macros/latex-dev/required/graphics/rotex.tex
-2020/08/31 | 145163 | macros/latex-dev/base/ltoutenc.dtx
-2020/08/31 | 144779 | macros/latex-dev/required/tools/indentfirst.pdf
-2020/08/31 | 144482 | macros/latex-dev/base/ltnews08.pdf
-2020/08/31 | 144470 | info/tlmgrbasics/doc/tlmgr.pdf
-2020/08/31 | 14440 | macros/latex-dev/base/ltbibl.dtx
-2020/08/31 | 14421 | macros/latex-dev/base/lppl-1-2.txt
-2020/08/31 | 14341 | macros/latex-dev/base/lppl-1-1.txt
-2020/08/31 | 14078 | macros/latex-dev/required/tools/afterpage.dtx
-2020/08/31 | 140593 | macros/latex/contrib/edichokey.zip
-2020/08/31 | 140103 | macros/latex-dev/base/lthooks.dtx
-2020/08/31 | 138219 | macros/latex-dev/base/lb2.pdf
-2020/08/31 | 1381 | macros/latex-dev/base/legal.txt
-2020/08/31 | 138027 | macros/latex-dev/required/tools/fontsmpl.pdf
-2020/08/31 | 13799 | macros/latex-dev/required/graphics/keyval.dtx
-2020/08/31 | 137919 | macros/latex-dev/base/ltnews12.pdf
-2020/08/31 | 136159 | macros/latex-dev/base/webcomp.pdf
-2020/08/31 | 1361508 | systems/texlive/tlnet/archive/fduthesis.doc.r56216.tar.xz
-2020/08/31 | 135688 | macros/latex-dev/required/tools/rawfonts.pdf
-2020/08/31 | 134751 | macros/latex-dev/base/ltnews02.pdf
-2020/08/31 | 134742 | macros/latex-dev/base/ltnews03.pdf
-2020/08/31 | 13449 | macros/latex-dev/required/amsmath/amsgen.dtx
-2020/08/31 | 1342 | macros/latex-dev/base/ltnews18.tex
-2020/08/31 | 133138 | macros/latex-dev/base/ltnews06.pdf
-2020/08/31 | 13305 | macros/latex-dev/base/proc.dtx
-2020/08/31 | 130687 | macros/latex-dev/base/ltnews16.pdf
-2020/08/31 | 130600 | macros/latex-dev/required/amsmath/technote.pdf
-2020/08/31 | 12946 | macros/latex-dev/base/manual.err
-2020/08/31 | 129155 | macros/latex-dev/required/amsmath/amsopn.pdf
-2020/08/31 | 128772 | macros/latex-dev/base/ltnews04.pdf
-2020/08/31 | 12715 | macros/latex-dev/required/tools/dcolumn.dtx
-2020/08/31 | 125830 | macros/latex-dev/base/lppl.pdf
-2020/08/31 | 125675 | macros/latex-dev/required/tools/array.dtx
-2020/08/31 | 12560 | macros/latex-dev/required/tools/array-2020-02-10.sty
-2020/08/31 | 12521 | macros/latex-dev/base/testpage.tex
-2020/08/31 | 124029 | macros/latex-dev/base/ltnews07.pdf
-2020/08/31 | 12284 | systems/texlive/tlnet/archive/texnegar.r56215.tar.xz
-2020/08/31 | 12225 | macros/latex-dev/base/ltnews24.tex
-2020/08/31 | 122092 | macros/latex-dev/base/ltnews15.pdf
-2020/08/31 | 12120 | macros/latex-dev/base/tulm.fdd
-2020/08/31 | 120222 | macros/latex-dev/base/ltnews09.pdf
-2020/08/31 | 12005 | macros/latex-dev/required/amsmath/technote.tex
-2020/08/31 | 117899 | macros/latex-dev/base/ltclass.dtx
-2020/08/31 | 11750 | macros/latex-dev/required/tools/array-2016-10-06.sty
-2020/08/31 | 116284 | systems/texlive/tlnet/archive/fduthesis.source.r56216.tar.xz
-2020/08/31 | 11591 | macros/latex-dev/base/ltpage.dtx
-2020/08/31 | 1142224 | macros/xetex/latex/nanicolle.zip
-2020/08/31 | 114212 | macros/latex-dev/required/tools/varioref.dtx
-2020/08/31 | 11405 | macros/latex-dev/required/amsmath/amstext.dtx
-2020/08/31 | 11291 | macros/latex-dev/required/amsmath/amscd.dtx
-2020/08/31 | 1128 | macros/latex-dev/required/graphics/graphics.ins
-2020/08/31 | 11154 | macros/latex-dev/required/tools/hhline.dtx
-2020/08/31 | 108324 | systems/texlive/tlnet/archive/fduthesis.r56216.tar.xz
-2020/08/31 | 10777 | macros/latex-dev/required/tools/fontsmpl.dtx
-2020/08/31 | 10698 | macros/latex-dev/base/ltnews26.tex
-2020/08/31 | 106914 | macros/latex-dev/base/inputenc.dtx
-2020/08/31 | 10688 | macros/latex-dev/base/ltnews23.tex
-2020/08/31 | 10669 | macros/latex-dev/base/ltnews22.tex
-2020/08/31 | 10651 | macros/latex-dev/required/graphics/trig.dtx
-2020/08/31 | 10650 | macros/latex-dev/required/tools/enumerate.dtx
-2020/08/31 | 10640 | macros/latex-dev/base/manifest.txt
-2020/08/31 | 10606 | macros/latex-dev/base/makeindx.dtx
-2020/08/31 | 105 | macros/latex-dev/base/ltfilehook-code.tex
-2020/08/31 | 1059444 | systems/texlive/tlnet/archive/mcf2graph.doc.r56217.tar.xz
-2020/08/31 | 104 | macros/latex-dev/base/ltshipout-code.tex
-2020/08/31 | 104936 | macros/latex-dev/base/ltnews11.pdf
-2020/08/31 | 104677 | macros/latex-dev/required/amsmath/amsldoc.tex
-2020/08/31 | 104545 | macros/latex-dev/required/amsmath/amsxtra.pdf
-2020/08/31 | 10376 | macros/latex-dev/base/ltfsscmp.dtx
-2020/08/31 | 10365 | macros/latex-dev/base/ltvers.dtx
-2020/08/31 | 102 | macros/latex-dev/base/lthooks-code.tex
-2020/08/31 | 101343 | macros/latex-dev/base/lgc2.pdf
-2020/08/31 | 101293 | macros/latex-dev/required/amsmath/subeqn.pdf
-2020/08/31 | 10053 | macros/latex-dev/base/webcomp.err
diff --git a/language/japanese/BX/bxjscls/README-ja.md b/language/japanese/BX/bxjscls/README-ja.md
index 68a65883b3..8ab481f151 100644
--- a/language/japanese/BX/bxjscls/README-ja.md
+++ b/language/japanese/BX/bxjscls/README-ja.md
@@ -99,6 +99,14 @@ XeLaTeX / LuaLaTeX ã®ä¸Šã§ã‚‚日本語処ç†ãƒ‘ッケージã¨é€£æºã—ã¦ä½¿ç
更新履歴
--------
+ * Version 2.2 〈2020/09/04〉
+ - `\strong` 命令・`strongenv` 環境ã®è£œå¡«ã¯ standard 和文ドライãƒ
+ ã®æ©Ÿèƒ½ã«ç§»ã—ãŸã€‚
+ - pandoc 和文ドライãƒãƒ‘ラメタ `strong` を追加。
+ - `custompaper` オプションを追加。
+ - (試験的) pandoc 和文ドライãƒãƒ‘ラメタ `fix-strong`・`fix-code`
+ を追加。
+ - (試験的) 多数ã®ç”¨ç´™ã‚µã‚¤ã‚ºåオプションを追加。
* Version 2.1 〈2020/05/28〉
- fontspec ã¨äº’æ›ã® `\strong` 命令・`strongenv` 環境を追加。
- 和文等幅フォントã®æŒ™å‹•ãŒ ltjsclasses ã¨ç•°ãªã‚‹ã®ã‚’修正。
diff --git a/language/japanese/BX/bxjscls/README.md b/language/japanese/BX/bxjscls/README.md
index 286eb94408..4182afcebe 100644
--- a/language/japanese/BX/bxjscls/README.md
+++ b/language/japanese/BX/bxjscls/README.md
@@ -89,6 +89,7 @@ This package is distributed under the BSD 2-Clause License.
Revision History
----------------
+ * Version 2.2 〈2020/09/04〉
* Version 2.1 〈2020/05/28〉
* Version 2.0a 〈2020/04/04〉
* Version 2.0 〈2020/03/25〉
diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.pdf b/language/japanese/BX/bxjscls/bxjscls-manual.pdf
index 07a3706e2b..6f3faa0a54 100644
--- a/language/japanese/BX/bxjscls/bxjscls-manual.pdf
+++ b/language/japanese/BX/bxjscls/bxjscls-manual.pdf
Binary files differ
diff --git a/language/japanese/BX/bxjscls/bxjscls-manual.tex b/language/japanese/BX/bxjscls/bxjscls-manual.tex
index 20cc993bc0..b34428b16d 100644
--- a/language/japanese/BX/bxjscls/bxjscls-manual.tex
+++ b/language/japanese/BX/bxjscls/bxjscls-manual.tex
@@ -11,8 +11,8 @@
\bxtexlogoimport{*}
\usepackage{shortvrb}
\MakeShortVerb{\|}
-\newcommand{\PkgVersion}{2.1}
-\newcommand{\PkgDate}{2020/05/28}
+\newcommand{\PkgVersion}{2.2}
+\newcommand{\PkgDate}{2020/09/04}
\newcommand{\Pkg}[1]{\textsf{#1}}
\newcommand{\Meta}[1]{$\langle$\mbox{}\nobr#1\nobr\mbox{}$\rangle$}
\newcommand{\Note}{\par\noindent ※}
@@ -510,6 +510,10 @@ dvipdfmx mydoc
ãªãŠã€ã“ã“ã§ä½¿ã‚れる |zw| ã¯å¸¸ã«ï¼ˆ(u){\pLaTeX}ã§ã‚‚)
“è¦ç´„上ã®å…¨è§’å¹…â€ï¼ˆ|\jsZw|)を指ã™
(和文フォント設定ãŒæœªå®Œäº†ã®ãŸã‚)。}
+\item 真å½å€¤ã‚’引数ã«ã‚‚ã¤ã‚ªãƒ—ションã«ã¤ã„ã¦ã€
+ 引数をçœç•¥ã—ã¦ã‚­ãƒ¼åã®ã¿ã‚’指定ã—ãŸå ´åˆã¯ã€
+ 引数㫠|true| を与ãˆãŸã‚‚ã®ã¨è¦‹ãªã•ã‚Œã‚‹ã€‚
+ 例ãˆã°ã€|use-zw| ã¨ã„ã†ã‚ªãƒ—ション指定㯠|use-zw=true| ã¨ç­‰ä¾¡ã«ãªã‚‹ã€‚
\end{itemize}
%-------------------
@@ -582,8 +586,8 @@ JSクラスã«ã¯ç„¡ãBXJSクラスã§è¿½åŠ ã•ã‚ŒãŸã‚¯ãƒ©ã‚¹ã‚ªãƒ—ションã€
出力用紙サイズ設定
(DVI出力ã®å ´åˆã¯æ‰€è¬‚“papersize special出力â€ï¼‰
を抑止ã™ã‚‹ã€‚
- \Note JSクラスã¨ã¯ç•°ãªã‚Šã€å‡ºåŠ›ç”¨ç´™ã‚µã‚¤ã‚ºè¨­å®šã®ã‚ªãƒ—ション |papersize|
- ã¯æ—¢å®šã§æœ‰åŠ¹ã§ã‚る。
+ \Note JSクラス㮠|papersize| オプションã®å¦å®šã«ç›¸å½“ã™ã‚‹ã€‚
+ JSクラスã¨ã¯ç•°ãªã‚Šã€|papersize| ã¯æ—¢å®šã§æœ‰åŠ¹ã§ã‚る。
\Note 出力用紙サイズ設定を行ã†ä»–ã®ãƒ‘ッケージã¨ã®å¹²æ¸‰ã«
対ã™ã‚‹å¯¾ç­–。
\item |ja=|\Meta{åå‰}\Means
@@ -684,7 +688,7 @@ JSクラスã«ã¯ç„¡ãBXJSクラスã§è¿½åŠ ã•ã‚ŒãŸã‚¯ãƒ©ã‚¹ã‚ªãƒ—ションã€
\Note ã¤ã¾ã‚Š |\zw| ã®å‘½ä»¤åãŒè¡çªã™ã‚‹å ´åˆã«ã€
|use-zw=false| を指定ã™ã‚‹ã€‚
\item |disguise-js=|\Meta{真å½å€¤}\Means
- JSクラス(例ãˆã°\Pkg{bxjsreport}ã®å ´åˆã¯\Pkg{jsbook})
+ 継承元ã®JSクラス(例ãˆã°\Pkg{bxjsbook}ã®å ´åˆã¯\Pkg{jsbook})
ãŒèª­è¾¼æ¸ˆã§ã‚るよã†ã«æŒ¯èˆžã†ã‹å¦ã‹ã€‚
既定値ã¯çœŸã€‚
\Note ã¤ã¾ã‚Šã€ŒJSクラスã®ä¸€ç¨®ã§ã‚ã‚‹ã€ã¨åˆ¤å®šã•ã‚Œã‚‹ã¨ä¸éƒ½åˆãªå ´åˆã«ã€
@@ -720,6 +724,11 @@ JSクラスã«ã¯ç„¡ãBXJSクラスã§è¿½åŠ ã•ã‚ŒãŸã‚¯ãƒ©ã‚¹ã‚ªãƒ—ションã€
\item |a4varpaper|ã€|b5varpaper|\Means
用紙サイズ指定オプション |a4var|ã€|b5var| ã®åˆ¥å。
\Note Pandoc㧠|-V papersize=a4var| ã®æŒ‡å®šã‚’å¯èƒ½ã«ã™ã‚‹ãŸã‚。
+\item |custompaper|\Means
+ 実際ã«ã¯ä½•ã‚‚ã—ãªã„用紙サイズ指定オプション。
+ \Note Pandocを使ã†éš›ã«ã€Œç”¨ç´™ã‚µã‚¤ã‚ºã¯ |classoption=paper=...|
+ ã§æŒ‡å®šã™ã‚‹ã‹ã‚‰ |papersize| ã¯ä¸è¦ã ãŒä½•ã‹æŒ‡å®šã—ãªã„ã¨ã„ã‘ãªã„ã€
+ ã¨ã„ã†å ´åˆã« |-V papersize=custom| を指定ã™ã‚‹ã€‚
\item |mag=|\Meta{æ•´æ•°}\Means
版é¢æ‹¡å¤§çŽ‡ï¼ˆmag値)ã®ç›´æŽ¥è¨­å®šã€‚
既定ã¯åŸºåº•ãƒ•ã‚©ãƒ³ãƒˆã‚µã‚¤ã‚ºã‹ã‚‰ç®—出ã™ã‚‹ã€‚
@@ -824,9 +833,6 @@ JSクラスã«ã¯ç„¡ãBXJSクラスã§è¿½åŠ ã•ã‚ŒãŸã‚¯ãƒ©ã‚¹ã‚ªãƒ—ションã€
\end{itemize}
\item ãれ以外ã®ã‚¯ãƒ©ã‚¹ã§ã¯ã€æœ¬ã‚ªãƒ—ションã¯ç„¡åŠ¹ã§ã‚る。
\end{itemize}
-\item |strong-cmd=|\Meta{真å½å€¤}\Means
- \Pkg{fontspec}パッケージã¨äº’æ›ã®\,|\strong|命令ã¨
- |strongenv|環境を定義ã™ã‚‹ã‹ã€‚
\end{itemize}
\paragraph{jlreq文書クラスã¨ã®äº’æ›ç”¨ã®ã‚ªãƒ—ション}\mbox{}
@@ -867,7 +873,7 @@ JSクラスã«ã¯ç„¡ãBXJSクラスã§è¿½åŠ ã•ã‚ŒãŸã‚¯ãƒ©ã‚¹ã‚ªãƒ—ションã€
|simple-ja-setup=false| ã¨åŒå€¤ã€‚
\Note 以上ã®8個ã¯1.9版よりå‰ã§ä½¿ã‚ã‚ŒãŸã€‚
\item |textwidth-limit=|\Meta{æ•´æ•°}\Means
- |textwidth-limit=|\Meta{æ•´æ•°}|zw| ã¨åŒå€¤ã€‚
+ |textwidth=|\Meta{æ•´æ•°}|zw| ã¨åŒå€¤ã€‚
\Note 1.8版よりå‰ã§ä½¿ã‚ã‚ŒãŸã€‚
\item |dvipdfmx-if-dvi|\Means
|dvi=dvipdfmx| ã¨åŒå€¤ã€‚
@@ -1173,18 +1179,18 @@ minimalã«é…ç½®ã—ã¦ã„る。}%
明æœãƒ»ã‚´ã‚·ãƒƒã‚¯ã®ãƒ•ã‚¡ãƒŸãƒªã¨ã—ã¦ç”¨ã„られる物ç†ãƒ•ã‚©ãƒ³ãƒˆã®
割当(マッピング)ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚‹ï¼š
\begin{itemize}
-\item \pLaTeXã€\upLaTeX{}ã®å ´åˆ\Means
+\item \pLaTeXã€\upLaTeX{}\Means
クラスã§ã¯ä½•ã‚‚マッピングを設定ã—ãªã„。
従ã£ã¦ã€DVIウェアã§ã®è¨­å®šãŒé©ç”¨ã•ã‚Œã‚‹ã€‚
-\item \pdfLaTeX{}ã®å ´åˆ\Means
+\item \pdfLaTeX\Means
\Pkg{bxcjkjatype}パッケージã®æ—¢å®šè¨­å®šã¨ãªã‚Šã€
従ã£ã¦ã€Type1å½¢å¼ã®IPAexフォント(\Pkg{ipaex-type1}ã§æä¾›ã•ã‚Œã‚‹ï¼‰
ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚
-\item \XeLaTeX{}ã®å ´åˆ\Means
+\item \XeLaTeX\Means
「原ノ味フォントã€ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚
\Pkg{zxjafont}パッケージ㮠|haranoaji| プリセットã®
å˜ã‚¦ã‚§ã‚¤ãƒˆä½¿ç”¨ã¨åŒç­‰ã§ã‚ã‚‹ãŒã€ãƒ‘ッケージãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹ã‚ã‘ã§ã¯ãªã„。
-\item \LuaLaTeX{}ã®å ´åˆ\Means
+\item \LuaLaTeX\Means
「原ノ味フォントã€ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚
\Pkg{luatexja-preset}パッケージ㮠|haranoaji| プリセットã®
å˜ã‚¦ã‚§ã‚¤ãƒˆä½¿ç”¨ã¨åŒç­‰ã§ã‚ã‚‹ãŒã€ãƒ‘ッケージãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹ã‚ã‘ã§ã¯ãªã„。
@@ -1206,15 +1212,15 @@ minimalã«é…ç½®ã—ã¦ã„る。}%
和文フォントプリセット(|jafont|)を指定ã—ãŸå ´åˆã€
具体的ã«ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å‡¦ç†ã•ã‚Œã‚‹ï¼š
\begin{itemize}
-\item \pLaTeXã€\upLaTeX{}ã®å ´åˆ\Means
+\item \pLaTeXã€\upLaTeX\Means
\Pkg{pxchfon}パッケージãŒã€Œ|jafont| ã®å€¤ã€ã‚’オプション
ã«æŒ‡å®šã—ãŸå½¢ã§èª­ã¿è¾¼ã¾ã‚Œã‚‹ã€‚
-\item \pdfLaTeX{}ã®å ´åˆ\Means
+\item \pdfLaTeX\Means
\Pkg{bxcjkjatype}ã®ã‚ªãƒ—ションã«ã€Œ|jafont| ã®å€¤ã€ãŒæŒ‡å®šã•ã‚Œã‚‹ã€‚
-\item \XeLaTeX{}ã®å ´åˆ\Means
+\item \XeLaTeX\Means
\Pkg{zxjafont}パッケージãŒã€Œ|jafont| ã®å€¤ã€ã‚’オプション
ã«æŒ‡å®šã—ãŸå½¢ã§èª­ã¿è¾¼ã¾ã‚Œã‚‹ã€‚
-\item \LuaLaTeX{}ã®å ´åˆ\Means
+\item \LuaLaTeX\Means
\Pkg{luatexja-preset}パッケージãŒã€Œ|jafont| ã®å€¤ã€ã‚’オプション
ã«æŒ‡å®šã—ãŸå½¢ã§èª­ã¿è¾¼ã¾ã‚Œã‚‹ã€‚
\end{itemize}
@@ -1281,6 +1287,31 @@ minimal和文ドライãƒã«ã¯æœ‰åŠ¹ãªå’Œæ–‡ãƒ‰ãƒ©ã‚¤ãƒãƒ‘ラメタã¯å­˜åœ¨ã
\item |font={|\Meta{文字列}|}|\Means
standard和文ドライãƒãŒåˆ©ç”¨ã™ã‚‹å’Œæ–‡ãƒ•ã‚©ãƒ³ãƒˆãƒ‘ッケージã«ã¤ã„ã¦
追加ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã€‚
+\item |strong-cmd=|\Meta{真å½å€¤}\Means
+ \Pkg{fontspec}パッケージã¨äº’æ›ã®\,|\strong|命令ã¨
+ |strongenv|環境を定義ã™ã‚‹ã‹ã€‚
+ 既定値ã¯çœŸã€‚
+\end{itemize}
+
+%-------------------
+\subsection{pandoc和文ドライãƒã®å ´åˆ}
+
+standard用ã®ã‚‚ã®ã«åŠ ãˆã¦ã€ä»¥ä¸‹ã®å’Œæ–‡ãƒ‰ãƒ©ã‚¤ãƒãƒ‘ラメタãŒå­˜åœ¨ã™ã‚‹ã€‚
+
+\begin{itemize}
+\item |strong=|\Meta{値}\Means
+ |\strong| 命令・|strongenv| 環境ã§å®Ÿéš›ã«é©ç”¨ã•ã‚Œã‚‹æ›¸ä½“
+ (フォント変更命令)をé¸æŠžã™ã‚‹ã€‚
+ \begin{itemize}
+ \item |bold|(既定)\Means
+ 太字(|\bfseries|)。
+ \item |sans|\Means
+ サンセリフ(|\sffamily|)。
+ \item |boldsans|\Means
+ 太字サンセリフ(|\sffamily\bfseries|)。
+ \end{itemize}
+ \Note Pandocモードã§ã¯Pandocã®é‡è¦ï¼ˆStrong)è¦ç´ ã¯ |\strong| 命令
+ ã§å®Ÿç¾ã•ã‚Œã‚‹ã®ã§ã€ã“ã®ãƒ‘ラメタã®è¨­å®šã«è¿½éšã™ã‚‹ã€‚
\end{itemize}
%===========================================================
@@ -1405,17 +1436,6 @@ vscale=0.944, vmarginratio=1:1
和暦表示(|\和暦|)ãŒæœ‰åŠ¹ãªæ™‚ã® |\today| ã®ãƒ†ã‚­ã‚¹ãƒˆä¸­ã®å¹´å·
(「年ã€ã‚ˆã‚Šå‰ã®éƒ¨åˆ†ã€ä¾‹ãˆã°ã€Œå¹³æˆ28ã€ï¼‰
ã®éƒ¨åˆ†ã‚’表ã™ãƒžã‚¯ãƒ­ã€‚
-
-\item |\strong{|\Meta{テキスト}|}|\Means
- 引数ã®ãƒ†ã‚­ã‚¹ãƒˆã«ã€é‡è¦æ€§ã‚’表ã™è£…飾を施ã™ã€‚
- 具体的ã«ã¯\,|\bfseries|(太字)ãŒé©ç”¨ã•ã‚Œã‚‹ã€‚
-\item |strongenv|環境\Means
- |\strong|ã®ç’°å¢ƒç‰ˆã€‚
- \Note 以上ã®2ã¤ã®æ©Ÿèƒ½ã¯\Pkg{fontspec}パッケージã¨ã®äº’æ›ã‚’
- 目的ã¨ã—ãŸã‚‚ã®ã§ã‚る。
- |strong-cmd=false| 指定時ã¯ã“れらã®æ©Ÿèƒ½ã¯ç„¡åŠ¹ã«ãªã‚‹ã€‚
- ãŸã ã—ã€\Pkg{fontspec}ãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€
- 常ã«ãã¡ã‚‰ã®å®šç¾©ãŒç¶­æŒã•ã‚Œã‚‹ã€‚
\end{itemize}
|label-section=modern| ã®å ´åˆã«é™ã‚Šã€ä»¥ä¸‹ã®å‘½ä»¤ãŒåˆ©ç”¨ã§ãる。
@@ -1446,6 +1466,21 @@ vscale=0.944, vmarginratio=1:1
未定義ã®å ´åˆã¯ |\thesub(sub)section| ã§ä»£ç”¨ã•ã‚Œã‚‹ã€‚
\end{itemize}
+\subsubsection{standard和文ドライãƒã§è¿½åŠ ã•ã‚Œã‚‹å‘½ä»¤}
+
+\begin{itemize}
+\item |\strong{|\Meta{テキスト}|}|\Means
+ 引数ã®ãƒ†ã‚­ã‚¹ãƒˆã«ã€é‡è¦æ€§ã‚’表ã™è£…飾を施ã™ã€‚
+ 具体的ã«ã¯\,|\bfseries|(太字)ãŒé©ç”¨ã•ã‚Œã‚‹ã€‚
+\item |strongenv|環境\Means
+ |\strong|ã®ç’°å¢ƒç‰ˆã€‚
+ \Note 以上ã®2ã¤ã®æ©Ÿèƒ½ã¯\Pkg{fontspec}パッケージã¨ã®äº’æ›ã‚’
+ 目的ã¨ã—ãŸã‚‚ã®ã§ã‚る。
+ |strong-cmd=false| 指定時ã¯ã“れらã®æ©Ÿèƒ½ã¯ç„¡åŠ¹ã«ãªã‚‹ã€‚
+ ãŸã ã—ã€\Pkg{fontspec}ãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€
+ 常ã«ãã¡ã‚‰ã®å®šç¾©ãŒç¶­æŒã•ã‚Œã‚‹ã€‚
+\end{itemize}
+
%-------------------
\subsection{和文用設定関連}
\label{ssec:ja-settings}
@@ -1720,7 +1755,7 @@ Class bxjsarticle Warning: Some old font commands were used in text:
\end{itemize}
ã¾ãŸã€ä»¥ä¸‹ã®å‘½ä»¤ã«ã‚ˆã‚Šã€æ–‡æ›¸ä¸­ã§ä¸€æ™‚çš„ã«è­¦å‘Šã®è¨­å®šã‚’変ãˆã‚‰ã‚Œã‚‹ã€‚
-\footnote{ã“れらã®å‘½ä»¤ã®åŠ¹æžœã¯ã‚°ãƒ«ãƒ¼ãƒ”ングã®å½±éŸ¿ã‚’å—ã‘る。}
+%\footnote{ã“れらã®å‘½ä»¤ã®åŠ¹æžœã¯ã‚°ãƒ«ãƒ¼ãƒ”ングã®å½±éŸ¿ã‚’å—ã‘る。}
\begin{itemize}
\item |\allowoldfontcommands|\Means
diff --git a/language/japanese/BX/bxjscls/bxjscls.dtx b/language/japanese/BX/bxjscls/bxjscls.dtx
index 6c76dbe6ee..2b949d2c92 100644
--- a/language/japanese/BX/bxjscls/bxjscls.dtx
+++ b/language/japanese/BX/bxjscls/bxjscls.dtx
@@ -56,7 +56,8 @@
%<*driver>
\ProvidesFile{bxjscls.dtx}
%</driver>
- [2020/05/28 v2.1 BXJS document classes]
+ [2020/09/04 v2.2 BXJS document classes]
+% [2020/05/28 v2.1 BXJS document classes]
% [2020/04/04 v2.0a BXJS document classes]
% [2020/03/25 v2.0 BXJS document classes]
% [2020/02/15 v1.9k BXJS document classes]
@@ -782,23 +783,52 @@
\DeclareOption{a4paper}{\bxjs@setpaper{a4paper}}
\DeclareOption{a5paper}{\bxjs@setpaper{a5paper}}
\DeclareOption{a6paper}{\bxjs@setpaper{a6paper}}
-\DeclareOption{b4paper}{\bxjs@setpaper{{257truemm}{364truemm}}}
-\DeclareOption{b5paper}{\bxjs@setpaper{{182truemm}{257truemm}}}
-\DeclareOption{b6paper}{\bxjs@setpaper{{128truemm}{182truemm}}}
+\DeclareOption{b4paper}{\bxjs@setpaper{b4j}}
+\DeclareOption{b5paper}{\bxjs@setpaper{b5j}}
+\DeclareOption{b6paper}{\bxjs@setpaper{b6j}}
\DeclareOption{a4j}{\bxjs@setpaper{a4paper}}
\DeclareOption{a5j}{\bxjs@setpaper{a5paper}}
-\DeclareOption{b4j}{\bxjs@setpaper{{257truemm}{364truemm}}}
-\DeclareOption{b5j}{\bxjs@setpaper{{182truemm}{257truemm}}}
+\DeclareOption{b4j}{\bxjs@setpaper{b4j}}
+\DeclareOption{b5j}{\bxjs@setpaper{b5j}}
\DeclareOption{a4var}{\bxjs@setpaper{{210truemm}{283truemm}}}
\DeclareOption{b5var}{\bxjs@setpaper{{182truemm}{230truemm}}}
+\DeclareOption{letterpaper}{\bxjs@setpaper{letterpaper}}
+\DeclareOption{legalpaper}{\bxjs@setpaper{legalpaper}}
+\DeclareOption{executivepaper}{\bxjs@setpaper{executivepaper}}
+% \end{macrocode}
+% |geometry| ã®ç”¨ç´™ã‚µã‚¤ã‚ºã®ã‚ªãƒ—ションåã‚’å…¨ã¦ã‚µãƒãƒ¼ãƒˆã™ã‚‹ã€‚
+% \begin{macrocode}
+\def\bxjs@tmpb#1#2{\DeclareOption{#1}{\bxjs@setpaper{#2}}}
+\@for\bxjs@tmpa:={%
+ a0,a1,a2,c0,c1,c2,c3,c4,c5,c6,ansia,ansib,ansic,ansid,ansie%
+}\do{\edef\bxjs@next{%
+ \noexpand\bxjs@tmpb{\bxjs@tmpa paper}{\bxjs@tmpa paper}%
+}\bxjs@next}
+\bxjs@tmpb{screen}{screen}
+% \end{macrocode}
+% ãŸã ã— |b?paper| ã¯JISã®B列ã«å¾“ã†ã€‚
+% \begin{macrocode}
+\@for\bxjs@tmpa:={0,1,2,3}\do{\edef\bxjs@next{%
+ \noexpand\bxjs@tmpb{b\bxjs@tmpa paper}{b\bxjs@tmpa j}%
+}\bxjs@next}
% \end{macrocode}
-% \Note |...var| ã‚’Pandocã§ä½¿ãˆã‚‹ã‚ˆã†ã«å¾Œã‚ã« |paper| ã‚’ã¤ã‘ãŸå½¢ã‚’用æ„ã™ã‚‹ã€‚
+% |B?paper| ã§ISOã®B列を指定ã§ãるよã†ã«ã™ã‚‹ã€‚
+% \begin{macrocode}
+\@for\bxjs@tmpa:={0,1,2,3,4,5,6}\do{\edef\bxjs@next{%
+ \noexpand\bxjs@tmpb{A\bxjs@tmpa paper}{a\bxjs@tmpa paper}%
+ \noexpand\bxjs@tmpb{B\bxjs@tmpa paper}{b\bxjs@tmpa paper}%
+}\bxjs@next}
+% \end{macrocode}
+% Pandocã§ã¯ç”¨ç´™ã‚µã‚¤ã‚ºæŒ‡å®šã«ã¤ã„ã¦ã€Œå¾Œã‚ã« |paper| を付ã‘ãŸåå‰
+% ã®ã‚ªãƒ—ションã€ã‚’指定ã™ã‚‹ã€‚
+% ã“ã‚Œã«å¯¾å‡¦ã™ã‚‹ãŸã‚ã€å¾Œã‚ã« |paper| ã‚’ã¤ã‘ãŸå½¢ã‚’用æ„ã™ã‚‹ã€‚
+% ã•ã‚‰ã«ã€ã€Œç”¨ç´™ã‚µã‚¤ã‚ºã‚’ |custom| ã¨ã™ã‚‹ã¨ä½•ã‚‚設定ã—ãªã„ã€ã‚ˆã†ã«
+% ã™ã‚‹ãŸã‚ |custompaper| ã¨ã„ã†ã‚ªãƒ—ションを用æ„ã™ã‚‹ã€‚
% \begin{macrocode}
\DeclareOption{a4varpaper}{\bxjs@setpaper{{210truemm}{283truemm}}}
\DeclareOption{b5varpaper}{\bxjs@setpaper{{182truemm}{230truemm}}}
-\DeclareOption{letterpaper}{\bxjs@setpaper{letterpaper}}
-\DeclareOption{legalpaper}{\bxjs@setpaper{legalpaper}}
-\DeclareOption{executivepaper}{\bxjs@setpaper{executivepaper}}
+\DeclareOption{screenpaper}{\bxjs@setpaper{screen}}
+\DeclareOption{custompaper}{}
% \end{macrocode}
% \end{ZRnote}
%
@@ -1977,16 +2007,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\ifbxjs@strong@cmd}
-% 〔スイッãƒã€• |strong-cmd| ã®æŒ‡å®šå€¤ã€‚
-% \begin{macrocode}
-\newif\ifbxjs@strong@cmd \bxjs@strong@cmdtrue
-\let\bxjs@kv@strongcmd@true\bxjs@strong@cmdtrue
-\let\bxjs@kv@strongcmd@false\bxjs@strong@cmdfalse
-\define@key{bxjs}{strong-cmd}[true]{\bxjs@set@keyval{strongcmd}{#1}{}}
-% \end{macrocode}
-% \end{macro}
-%
% \end{ZRnote}
%
% \paragraph{オプションã®å®Ÿè¡Œ}
@@ -2679,35 +2699,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{ZRnote}
-% \begin{macro}{\strong}
-% \begin{environment}{strongenv}
-% |fontspec| ã§æä¾›ã•ã‚Œã‚‹ |\strong| 命令㨠|strongenv| 環境を
-% å…¨ã¦ã®ã‚¨ãƒ³ã‚¸ãƒ³ã§ä½¿ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ã€‚
-% \Note
-% \begin{macrocode}
-\ifbxjs@strong@cmd\jsAtEndOfClass{%
- \ifx\strong\@undefined\ifx\strongenv\@undefined
- \DeclareRobustCommand{\strongenv}{\bxjs@strong@font}%
- \DeclareTextFontCommand{\strong}{\strongenv}%
-% \end{macrocode}
-% |fontspec| ã¨äº’æ›ã® |\strongfontdeclare| 命令もæä¾›ã™ã‚‹ã€‚
-% ãŸã ã—ã€BXJSã§ã® |\strong| ã¯å¤šæ®µéšŽã«ã¯å¯¾å¿œã—ãªã„ã®ã§ã€
-% 引数ã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã®ã†ã¡ã®å…ˆé ­ã®é …ç›®ã ã‘ãŒæ„味をもã¤ã€‚
-% 既定ã®è¨­å®šã¯ |\bfseries|(太字)ã§ã‚る。
-% \Note |\strongfontdeclare| ã¯è©¦é¨“的機能ã¨ã™ã‚‹ã€‚
-% \begin{macrocode}
- \@ifdefinable{\strongfontdeclare}{\bxjs@protected\def\strongfontdeclare#1{%
- \bxjs@strong@font@declare@a#1,\@nil}}%
- \def\bxjs@strong@font@declare@a#1,#2\@nil{\def\bxjs@strong@font{#1}}%
- \def\bxjs@strong@font{\bfseries}%
- \fi\fi
-}\fi
-% \end{macrocode}
-% \end{environment}
-% \end{macro}
-% \end{ZRnote}
-%
% \section{フォントサイズ}
%
% フォントサイズを変ãˆã‚‹å‘½ä»¤ï¼ˆ|\normalsize|,|\small| ãªã©ï¼‰
@@ -8945,15 +8936,8 @@
%
% \paragraph{和文フォント指定ã®æ‰±ã„}
%
-% |standard| 和文ドライãƒã§ã¯ |\jsJaFont| ã®å€¤ã‚’和文フォントã®
-% “プリセットâ€ã®æŒ‡å®šã¨ã—ã¦ç”¨ã„る。
-% プリセットã®å€¤ã¯ã€{\TeX} Liveã® |kanji-config-updmap| コマンドã§
-% 使ã†â€œãƒ•ã‚¡ãƒŸãƒªâ€ã¨åŒã˜ã«ã™ã‚‹ã“ã¨ã‚’想定ã™ã‚‹ã€‚
-% 特別ãªå€¤ã¨ã—ã¦ã€|auto| 㯠|kanji-config-updmap| ã§ç¾åœ¨æŒ‡å®š
-% ã•ã‚Œã¦ã„るファミリを表ã™ã€‚
-%
%^^A----------------
-% \subsection{共通処ç†(1)}
+% \subsection{準備}
%
% ã¾ãš minimal ドライãƒã‚’読ã¿è¾¼ã‚€ã€‚
% \begin{macrocode}
@@ -8967,7 +8951,8 @@
\bxjs@simplejasetupfalse
% \end{macrocode}
%
-% \paragraph{japaramオプションã®å‡¦ç†}
+%^^A----------------
+% \subsection{和文ドライãƒãƒ‘ラメタ}
%
% |japaram| ã®å€¤ã‚’key-valueリストã¨ã—ã¦è§£é‡ˆã™ã‚‹ã€‚
% keyvalã®ãƒ•ã‚¡ãƒŸãƒªã¯ |bxjsStd| ã¨ã™ã‚‹ã€‚
@@ -9016,12 +9001,29 @@
\edef\bxjs@jp@font{#1}}
% \end{macrocode}
%
+% \begin{macro}{\ifbxjs@jp@strong@cmd}
+% |\strong| 命令を補填ã™ã‚‹ã‹ã€‚
+% \begin{macrocode}
+\newif\ifbxjs@jp@strong@cmd \bxjs@jp@strong@cmdtrue
+% \end{macrocode}
+%
+% |strong-cmd| オプションã®å‡¦ç†ã€‚
+% \begin{macrocode}
+\let\bxjs@kv@strongcmd@true\bxjs@jp@strong@cmdtrue
+\let\bxjs@kv@strongcmd@false\bxjs@jp@strong@cmdfalse
+\define@key{bxjs}{strong-cmd}[true]{\bxjs@set@keyval{strongcmd}{#1}{}}
+% \end{macrocode}
+% \end{macro}
+%
% 実際㮠|japaram| ã®å€¤ã‚’é©ç”¨ã™ã‚‹ã€‚
% \begin{macrocode}
\def\bxjs@next#1{\bxjs@safe@setkeys{bxjsStd}{#1}}
\expandafter\bxjs@next\expandafter{\jsJaParam}
% \end{macrocode}
%
+%^^A----------------
+% \subsection{共通処ç†(1)}
+%
% \paragraph{jis2004パラメタ}
%
% |jis2004| パラメタãŒæœ‰åŠ¹ã®å ´åˆã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚ªãƒ—ション㫠|jis2004|
@@ -9091,6 +9093,35 @@
% \end{macrocode}
% \end{macro}
%
+% \paragraph{\textbackslash strong命令ã®è£œå¡«}
+%
+% \begin{macro}{\strong}
+% \begin{environment}{strongenv}
+% |fontspec| ã§æä¾›ã•ã‚Œã‚‹ |\strong| 命令㨠|strongenv| 環境を
+% å…¨ã¦ã®ã‚¨ãƒ³ã‚¸ãƒ³ã§ä½¿ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ã€‚
+% \Note
+% \begin{macrocode}
+\ifbxjs@jp@strong@cmd\jsAtEndOfClass{%
+ \ifx\strong\@undefined\ifx\strongenv\@undefined
+ \DeclareRobustCommand{\strongenv}{\bxjs@strong@font}%
+ \DeclareTextFontCommand{\strong}{\strongenv}%
+% \end{macrocode}
+% |fontspec| ã¨äº’æ›ã® |\strongfontdeclare| 命令もæä¾›ã™ã‚‹ã€‚
+% ãŸã ã—ã€BXJSã§ã® |\strong| ã¯å¤šæ®µéšŽã«ã¯å¯¾å¿œã—ãªã„ã®ã§ã€
+% 引数ã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã®ã†ã¡ã®å…ˆé ­ã®é …ç›®ã ã‘ãŒæ„味をもã¤ã€‚
+% 既定ã®è¨­å®šã¯ |\bfseries|(太字)ã§ã‚る。
+% \Note |\strongfontdeclare| ã¯è©¦é¨“的機能ã¨ã™ã‚‹ã€‚
+% \begin{macrocode}
+ \@ifdefinable{\strongfontdeclare}{\bxjs@protected\def\strongfontdeclare#1{%
+ \bxjs@strong@font@declare@a#1,\@nil}}%
+ \def\bxjs@strong@font@declare@a#1,#2\@nil{\def\bxjs@strong@font{#1}}%
+ \def\bxjs@strong@font{\bfseries}%
+ \fi\fi
+}\fi
+% \end{macrocode}
+% \end{environment}
+% \end{macro}
+%
% \paragraph{共通命令ã®å®Ÿè£…}
%
% |\jQ| ç­‰ã®ã€Œå˜ä½ã€ç³»ã®å…±é€šå‘½ä»¤ã‚’実装ã™ã‚‹ã€‚
@@ -9281,6 +9312,13 @@
%
% \paragraph{和文フォント指定ã®æ‰±ã„}
%
+% |standard| 和文ドライãƒã§ã¯ |\jsJaFont| ã®å€¤ã‚’和文フォントã®
+% “プリセットâ€ã®æŒ‡å®šã¨ã—ã¦ç”¨ã„る。
+% プリセットã®å€¤ã¯ã€{\TeX} Liveã® |kanji-config-updmap| コマンドã§
+% 使ã†â€œãƒ•ã‚¡ãƒŸãƒªâ€ã¨åŒã˜ã«ã™ã‚‹ã“ã¨ã‚’想定ã™ã‚‹ã€‚
+% 特別ãªå€¤ã¨ã—ã¦ã€|auto| 㯠|kanji-config-updmap| ã§ç¾åœ¨æŒ‡å®š
+% ã•ã‚Œã¦ã„るファミリを表ã™ã€‚
+%
% \begin{macro}{\bxjs@adjust@jafont}
% |\jsJaFont| ã«å…¥ã£ã¦ã„る和文フォント設定ã®å€¤ã‚’“調整â€ã—ã¦ã€
% ãã®çµæžœã‚’ |\bxjs@tmpa| ã«è¿”ã™ã€‚
@@ -9369,6 +9407,29 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\bxjs@resolve@jafont@paren}
+% |jafont|パラメタ値内ã®|()|を解決ã™ã‚‹ã€‚
+% |\bxjs@resolve@jafont@paren\CS| ã§ã€|\CS| ã®å†…容中㮠|(...)|
+% ã‚’ |\bxjs@jafont@paren{...}| ã«ç½®ãæ›ãˆã‚‹ã€‚
+% \begin{macrocode}
+\@onlypreamble\bxjs@resolve@jafont@paren
+\def\bxjs@resolve@jafont@paren#1{%
+ \def\bxjs@tmpb{\let#1}%
+ \expandafter\bxjs@resolve@jafont@paren@a#1\@nil()\@nil\relax}
+\@onlypreamble\bxjs@resolve@jafont@paren@a
+\def\bxjs@resolve@jafont@paren@a#1(#2)#3\@nil#4\relax{%
+ \ifx\relax#4\relax \bxjs@tmpb\jsJaFont
+ \else
+ \edef\bxjs@tmpa{#1\bxjs@jafont@paren{#2}#3}%
+ \bxjs@tmpb\bxjs@tmpa
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{和文ã¨ã—ã¦å‡ºåŠ›}
+%
+% 「欧文扱ã„ã€ã¨ãªã£ã¦ã„る文字を和文ã¨ã—ã¦å‡ºåŠ›ã™ã‚‹ãŸã‚ã®æ©Ÿèƒ½ã€‚
+%
% \begin{macro}{\jachar}
% |\jachar{|\meta{文字}|}|\Means
% 和文文字ã¨ã—ã¦å‡ºåŠ›ã™ã‚‹ã€‚
@@ -9478,25 +9539,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\bxjs@resolve@jafont@paren}
-% |jafont|パラメタ値内ã®|()|を解決ã™ã‚‹ã€‚
-% |\bxjs@resolve@jafont@paren\CS| ã§ã€|\CS| ã®å†…容中㮠|(...)|
-% ã‚’ |\bxjs@jafont@paren{...}| ã«ç½®ãæ›ãˆã‚‹ã€‚
-% \begin{macrocode}
-\@onlypreamble\bxjs@resolve@jafont@paren
-\def\bxjs@resolve@jafont@paren#1{%
- \def\bxjs@tmpb{\let#1}%
- \expandafter\bxjs@resolve@jafont@paren@a#1\@nil()\@nil\relax}
-\@onlypreamble\bxjs@resolve@jafont@paren@a
-\def\bxjs@resolve@jafont@paren@a#1(#2)#3\@nil#4\relax{%
- \ifx\relax#4\relax \bxjs@tmpb\jsJaFont
- \else
- \edef\bxjs@tmpa{#1\bxjs@jafont@paren{#2}#3}%
- \bxjs@tmpb\bxjs@tmpa
- \fi}
-% \end{macrocode}
-% \end{macro}
-%
%^^A----------------
% \subsection{{\pTeX}用設定}
%
@@ -10275,7 +10317,7 @@
% \end{macrocode}
%
%^^A----------------
-%\subsection{フォント設定}
+% \subsection{フォント設定}
%
% T1エンコーディングã«å¤‰æ›´ã™ã‚‹ã€‚
% \Note 以下ã®ã‚³ãƒ¼ãƒ‰ã¯ |\usepackage[T1]{fontenc}| ã¨åŒç­‰ã€‚
@@ -10340,7 +10382,13 @@
%^^A========================================================
% \section{和文ドライãƒï¼špandoc \ZRX}
%
-% Pandoc用ã®ä½•ã‹ã€‚
+% 「Pandocモードã€ã§ä½¿ç”¨ã•ã‚Œã‚‹å’Œæ–‡ãƒ‰ãƒ©ã‚¤ãƒã€‚
+% standardドライãƒã®æ©Ÿèƒ½ã‚’継承ã™ã‚‹ãŒã€
+% 「Pandocã®æ—¢å®šã®latexテンプレートã€ãŒä½¿ã‚れるã“ã¨ã‚’å‰æã¨ã—ã¦ã€
+% ãã‚Œã¨BXJSã®è¨­å®šã‚’æ•´åˆã•ã›ã‚‹ãŸã‚ã®æŽªç½®ã‚’加ãˆã¦ã„る。
+%
+%^^A----------------
+% \subsection{準備}
%
% standardドライãƒã®è¨­å®šã‚’引ã継ã。
% \begin{macrocode}
@@ -10368,7 +10416,64 @@
% \end{macro}
%
%^^A----------------
-%\subsection{duploadシステム}
+% \subsection{和文ドライãƒãƒ‘ラメタ}
+%
+% keyvalã®ãƒ•ã‚¡ãƒŸãƒªã¯ |bxjsPan| ã¨ã™ã‚‹ã€‚
+%
+% \begin{macro}{\ifbxjs@jp@fix@strong}
+% é‡è¦è¦ç´ ã‚’補正ã™ã‚‹ã‹ã€‚
+% \begin{macrocode}
+\newif\ifbxjs@jp@fix@strong \bxjs@jp@fix@strongtrue
+% \end{macrocode}
+% \end{macro}
+%
+% |fix-strong| オプションã®å‡¦ç†ã€‚
+% \begin{macrocode}
+\let\bxjs@kv@fixstrong@true\bxjs@jp@fix@strongtrue
+\let\bxjs@kv@fixstrong@false\bxjs@jp@fix@strongfalse
+\define@key{bxjsPan}{fix-strong}[true]{%
+ \bxjs@set@keyval{fixstrong}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\ifbxjs@jp@fix@code}
+% インラインコードè¦ç´ ã‚’補正ã™ã‚‹ã‹ã€‚
+% \begin{macrocode}
+\newif\ifbxjs@jp@fix@code \bxjs@jp@fix@codetrue
+% \end{macrocode}
+% \end{macro}
+%
+% |fix-code| オプションã®å‡¦ç†ã€‚
+% \begin{macrocode}
+\let\bxjs@kv@fixcode@true\bxjs@jp@fix@codetrue
+\let\bxjs@kv@fixcode@false\bxjs@jp@fix@codefalse
+\define@key{bxjsPan}{fix-code}[true]{%
+ \bxjs@set@keyval{fixcode}{#1}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\bxjs@jp@strong}
+% é‡è¦è¦ç´ ã«é©ç”¨ã•ã‚Œã‚‹æ›¸ä½“変更ã®ç¨®é¡žã€‚
+% \begin{macrocode}
+\chardef\bxjs@jp@strong=0
+% \end{macrocode}
+% \end{macro}
+%
+% |strong| オプションã®å‡¦ç†ã€‚
+% \begin{macrocode}
+\def\bxjs@kv@strong@bold{\chardef\bxjs@jp@strong=0 }
+\def\bxjs@kv@strong@sans{\chardef\bxjs@jp@strong=1 }
+\def\bxjs@kv@strong@boldsans{\chardef\bxjs@jp@strong=2 }
+\define@key{bxjsPan}{strong}{%
+ \bxjs@set@keyval{strong}{#1}{}}
+% \end{macrocode}
+%
+% 実際㮠|japaram| ã®å€¤ã‚’é©ç”¨ã™ã‚‹ã€‚
+% \begin{macrocode}
+\def\bxjs@next#1{\bxjs@safe@setkeys{bxjsPan}{#1}}
+\expandafter\bxjs@next\expandafter{\jsJaParam}
+% \end{macrocode}
+%
+%^^A----------------
+% \subsection{duploadシステム}
%
% パッケージãŒé‡è¤‡ã—ã¦èª­ã¿è¾¼ã¾ã‚ŒãŸã¨ãã«â€œoption clashâ€ã®
% 検査をスキップã™ã‚‹ã€‚
@@ -10424,7 +10529,7 @@
% \end{macro}
%
%^^A----------------
-%\subsection{lang変数}
+% \subsection{lang変数}
% |lang=ja| ã¨ã„ã†è¨€èªžæŒ‡å®šãŒè¡Œã‚れるã¨ã€
% Pandocã¯ã“ã‚Œã«å¯¾å¿œã—ã¦ã„ãªã„ãŸã‚
% ä¸å®Œå…¨ãªBabelã‚„Polyglossiaã®è¨­å®šã‚’出力ã—ã¦ã—ã¾ã†ã€‚
@@ -10607,7 +10712,7 @@
% \end{macrocode}
%
%^^A----------------
-%\subsection{geometry変数}
+% \subsection{geometry変数}
% |geometry| を“å†åº¦èª­ã¿è¾¼ã‚“ã â€å ´åˆã«ã€
% ãã®ãƒ‘ラメタ㧠|\setpagelayout*| ãŒå‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹ã€‚
%
@@ -10617,7 +10722,7 @@
% \end{macrocode}
%
%^^A----------------
-%\subsection{CJKmainfont変数}
+% \subsection{CJKmainfont変数}
% Lua{\TeX}(+ Lua{TeX}-ja)ã®å ´åˆã« CJKmainfont 変数ãŒ
% 指定ã•ã‚ŒãŸå ´åˆã¯ |\setmainjfont| ã®æŒ‡å®šã«ã¾ã‚ã™ã€‚
% \begin{macrocode}
@@ -10626,7 +10731,14 @@
\providecommand*{\setCJKmainfont}{\setmainjfont}
\fi
% \end{macrocode}
-% ムニャムニャムニャ。
+%
+%^^A----------------
+% \subsection{Option clash対策}
+%
+% |xeCJK| パッケージã«ã¤ã„ã¦ã€‚
+% \Note |xeCJK| ã¯ã‚¯ãƒ©ã‚¹å†…ã§æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ã®ã§ã€
+% |space| ã¯ï¼ˆæ„図通りã«ï¼‰ç„¡åŠ¹ã«ãªã‚‹ã€‚
+% \Note v2.8~v2.9.2ã®é–“。
% \begin{macrocode}
\if x\jsEngine
\expandafter\g@addto@macro\csname opt@xeCJK.sty\endcsname{%
@@ -10635,7 +10747,7 @@
% \end{macrocode}
%
%^^A----------------
-%\subsection{paragraphã®ãƒžãƒ¼ã‚¯}
+% \subsection{paragraphã®ãƒžãƒ¼ã‚¯}
%
% BXJSクラスã§ã¯ |\paragraph| ã®è¦‹å‡ºã—ã®å‰ã« |\jsParagraphMark|
% ã§æŒ‡å®šã—ãŸãƒžãƒ¼ã‚¯ãŒä»˜åŠ ã•ã‚Œã€æ—¢å®šã§ã¯ã“ã‚Œã¯â€œâ– â€ã§ã‚る。
@@ -10675,7 +10787,7 @@
% \end{macrocode}
%
%^^A----------------
-%\subsection{全角空白文字}
+% \subsection{全角空白文字}
%
% \begin{macrocode}
\ifnum0\if x\jsEngine1\fi\if l\jsEngine1\fi>\z@
@@ -10690,7 +10802,7 @@
% \end{macrocode}
%
%^^A----------------
-% \paragraph{hyperref対策}
+% \subsection{hyperref対策}
%
% |hyperref| ã® |unicode| オプションã®å›ºå®šã‚’è¡Œã†ã€‚
% \begin{macrocode}
@@ -10702,6 +10814,74 @@
% \end{macrocode}
%
%^^A----------------
+% \subsection{Pandocè¦ç´ ã«å¯¾ã™ã‚‹å’Œæ–‡ç”¨ã®è£œæ­£}
+%
+% \paragraph{é‡è¦è¦ç´ }
+% é‡è¦(Strong)è¦ç´ ã«å¯¾ã™ã‚‹{\LaTeX}出力㯠|\textbf| ã¨ãªã‚‹ãŒã€
+% 代ã‚ã‚Šã« |\strong| を使ã„ãŸã„ãŸã‚ã€
+% |\textbf| を書ãæ›ãˆã¦ã—ã¾ã†ï¼ˆã†ã‚ã)。
+% \begin{macrocode}
+\ifbxjs@jp@fix@strong\ifbxjs@jp@strong@cmd
+ \let\orgtextbf\textbf
+ \DeclareRobustCommand\bxjstextbf[1]{%
+ \begingroup
+ \let\textbf\orgtextbf
+ \strong{#1}%
+ \endgroup}%
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \let\textbf\bxjstextbf}
+\fi\fi
+% \end{macrocode}
+%
+% |\strong| ã®æ›¸ä½“を設定ã™ã‚‹ã€‚
+% \begin{macrocode}
+\jsAtEndOfClass{%
+ \ifx\strongfontdeclare\@undefined\else
+ \ifcase\bxjs@jp@strong
+ \or \strongfontdeclare{\sffamily}%
+ \or \strongfontdeclare{\sffamily\bfseries}%
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% \paragraph{インラインコードè¦ç´ }
+%
+% インラインコード(Code)è¦ç´ ã«å¯¾ã™ã‚‹{\LaTeX}出力㯠|\texttt| ã¨ãªã‚‹ã€‚
+% |\texttt| ã®ä¸¡ç«¯ã«æ¬§æ–‡ã‚´ãƒ¼ã‚¹ãƒˆãŒå…¥ã‚‹ã‚ˆã†ã«ã™ã‚‹ã€‚
+% \begin{macrocode}
+\ifbxjs@jp@fix@code
+ \chardef\bxjs@eghost@c=23
+ \ifx j\jsEngine \xspcode\bxjs@eghost@c=3
+ \else\ifx l\jsEngine \ltjsetparameter{alxspmode={\bxjs@eghost@c,3}}
+ \else\ifx x\jsEngine %no-op
+ \else \let\bxjs@eghost@c\@undefined
+ \fi\fi\fi
+ \ifx\bxjs@eghost@c\@undefined\else
+ \font\bxjs@eghost@f=ec-lmr10 at 1.23456pt
+ \def\bxjs@pan@eghost{\bxjs@eghost@f\bxjs@eghost@c}
+ \let\orgtexttt\texttt
+ \DeclareRobustCommand\bxjstexttt[1]{%
+ \ifmmode \nfss@text{\ttfamily #1}%
+ \else
+ \ifvmode \leavevmode \fi
+ \bxjs@pan@eghost\null
+ \begingroup \ttfamily #1\endgroup
+ \null\bxjs@pan@eghost
+ \fi}
+ \g@addto@macro\bxjs@begin@document@hook{%
+ \let\texttt\bxjstexttt}
+% \end{macrocode}
+% ã•ã‚‰ã« |\verb| ã®å¤–å´ã«ã‚‚欧文ゴーストãŒå…¥ã‚‹ã‚ˆã†ã«ã™ã‚‹ã€‚
+% \Note |bxjaghost| ã®å®Ÿè£…ã‚’å‚考ã«ã—ãŸã€‚
+% \begin{macrocode}
+ \expandafter\def\expandafter\verb\expandafter{%
+ \expandafter\bxjs@pan@eghost\verb}
+ \g@addto@macro\verb@egroup{\bxjs@pan@eghost}
+ \fi
+\fi
+% \end{macrocode}
+%
+%^^A----------------
% \subsection{完了}
% ãŠã—ã¾ã„。
% \begin{macrocode}
diff --git a/language/japanese/BX/bxjscls/bxjscls.pdf b/language/japanese/BX/bxjscls/bxjscls.pdf
index 6e6e090132..5c979592ae 100644
--- a/language/japanese/BX/bxjscls/bxjscls.pdf
+++ b/language/japanese/BX/bxjscls/bxjscls.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index c3fe7c7141..1c8206f28f 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,9 +7,12 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
-## [2020-09-03]
+## [2020-09-06]
+
+### Fixed
+- Loading in generic mode (issue #800)
-## [2020-01-03]
+## [2020-09-03]
### Fixed
- Save primitive definition of `\pdfoutput` with CSLaTeX
@@ -762,9 +765,9 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-09-03...HEAD
-[2020-09-03]: https://github.com/latex3/latex3/compare/2020-01-03...2020-09-03
-[2020-01-03]: https://github.com/latex3/latex3/compare/2020-09-01...2020-01-03
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-09-06...HEAD
+[2020-09-06]: https://github.com/latex3/latex3/compare/2020-09-03...2020-09-06
+[2020-09-03]: https://github.com/latex3/latex3/compare/2020-09-01...2020-09-03
[2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01
[2020-08-07]: https://github.com/latex3/latex3/compare/2020-07-17...2020-08-07
[2020-07-17]: https://github.com/latex3/latex3/compare/2020-06-18...2020-07-17
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 0bcb85a677..d90d237fe6 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2020-09-03
+Release 2020-09-06
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 25639b4690..140e507b63 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2020-09-03}%
+\def\ExplFileDate{2020-09-06}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
@@ -1065,13 +1065,23 @@
% It seems to be common to have stray format files in the user tree
% which trigger errors due to mismatched versions (\emph{e.g.}
% \url{https://github.com/latex3/latex3/issues/781}).
+%
+% This block also goes to the generic loader, as \pkg{expl3} isn't
+% preloaded there, so the kernel date should be equal to the loader
+% date.
% \begin{macrocode}
-%<*2ekernel>
-\unless\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
- \global\expandafter\let\csname\detokenize
- {c__kernel_expl_date_tl}\endcsname\ExplFileDate
-\fi
-%</2ekernel>
+%<*2ekernel|generic>
+\begingroup
+ \catcode`\>=12
+ \def\aux#1>{}
+ \def\auxi{c__kernel_expl_date_tl}%
+ \edef\auxi{\expandafter\aux\meaning\auxi}%
+ \expandafter
+ \ifx\csname\auxi\endcsname\relax
+ \global\expandafter\let\csname\auxi\endcsname\ExplFileDate
+ \fi
+\endgroup
+%</2ekernel|generic>
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index eea5fcfaff..b48b54946a 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index 43115927b3..79ba503768 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index 213ccdbca2..8a163631f1 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -54,7 +54,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-09-03}
+\date{Released 2020-09-06}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index cbc62b895a..b167eb6dcf 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index ee955fcd4d..810de9812c 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index e890c7c931..d3a00d00f3 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 55dc608771..7c745269ec 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index 1f00ceda74..79f1f45fcd 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index b8169e2847..b125b7f2f8 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 186bd2c60f..849eddaaea 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color-base.dtx b/macros/latex/contrib/l3kernel/l3color-base.dtx
index 462b452ab2..f34fab4020 100644
--- a/macros/latex/contrib/l3kernel/l3color-base.dtx
+++ b/macros/latex/contrib/l3kernel/l3color-base.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index ecea4a9e77..5a214de133 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 1e39888d48..be0f204446 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 01a08a806e..60f5e465c3 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -79,7 +79,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index de570c03a6..c0e139cb3b 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index a11d13f2de..6eaac9700b 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index 38f75a3584..41af274e8b 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index bbfd23957f..67d708da28 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
@@ -3597,37 +3597,43 @@
kpsewhich ~ --all ~
--engine = \c_sys_engine_exec_str
\c_space_tl \c_sys_engine_format_str
- \tl_if_empty:NF \development@branch@name { -dev } .fmt
+ \bool_lazy_and:nnF
+ { \tl_if_exist_p:N \development@branch@name }
+ { ! \tl_if_empty_p:N \development@branch@name }
+ { -dev } .fmt
}
\seq_clear:N \l_@@_tmp_seq
\ior_map_inline:Nn \g_@@_internal_ior
{ \seq_put_right:Nn \l_@@_tmp_seq {##1} }
\ior_close:N \g_@@_internal_ior
+ \__kernel_msg_error:nnnn { kernel } { mismatched-support-file }
+ {#1} {#2}
% \end{macrocode}
-% Now define a some shorthands so that we can use \cs{@latex@error}
-% (almost) easily:
+% And finish by ending the current file.
% \begin{macrocode}
- \group_begin:
- \cs_set:Npn \\ { \MessageBreak }
- \cs_set_eq:NN \ \c_space_tl
- \@latex@error
- {
- Mismatched~LaTeX~support~files~detected. \\
- Loading~'#2'~aborted!
+ \tex_endinput:D
+ }
+% \begin{macrocode}
+%
+% Now define the actual error message:
+% \begin{macrocode}
+\__kernel_msg_new:nnnn { kernel } { mismatched-support-file }
+ {
+ Mismatched~LaTeX~support~files~detected. \\
+ Loading~'#2'~aborted!
% \end{macrocode}
% \cs{c__kernel_expl_date_tl} may not exist, due to an older format,
% so only print the dates when the sentinel token list exists:
% \begin{macrocode}
- \tl_if_exist:NT \c__kernel_expl_date_tl
- {
- \\ \\
- The~L3~programming~layer~in~the~LaTeX~format \\
- is~dated~\c__kernel_expl_date_tl,~but~in~your~TeX~
- tree~the~files~require \\ at~least~#1.
- }
- \use_none:n
- }
- {
+ \tl_if_exist:NT \c__kernel_expl_date_tl
+ {
+ \\ \\
+ The~L3~programming~layer~in~the~LaTeX~format \\
+ is~dated~\c__kernel_expl_date_tl,~but~in~your~TeX~
+ tree~the~files~require \\ at~least~#1.
+ }
+ }
+ {
% \end{macrocode}
% The sequence containing the format files should have exactly one
% item: the format file currently being run. If that's the case, the
@@ -3636,31 +3642,25 @@
% the list to the user, with appropriate indications of what's in the
% system and what's in the user tree.
% \begin{macrocode}
- \int_compare:nNnTF { \seq_count:N \l_@@_tmp_seq } > 1
- {
- The~cause~seems~to~be~an~old~format~file~in~the~user~tree. \\
- LaTeX~found~these~files:
- \seq_map_tokens:Nn \l_@@_tmp_seq { \\~-~\use:n } \\
- Try~deleting~the~file~in~the~user~tree~then~run~LaTeX~again.
- }
- {
- The~most~likely~causes~are:
- \\~-~A~recent~format~generation~failed;
- \\~-~A~stray~format~file~in~the~user~tree~which~needs~
- to~be~removed~or~rebuilt;
- \\~-~You~are~running~a~manually~installed~version~of~#2 \\
- \ \ \ which~is~incompatible~with~the~version~in~LaTeX. \\
- }
- \\
- LaTeX~will~abort~loading~the~incompatible~support~files~
- but~this~may~lead~to \\ later~errors.~Please~ensure~that~
- your~LaTeX~format~is~correctly~regenerated.
- }
- \group_end:
-% \end{macrocode}
-% And finish by ending the current file.
-% \begin{macrocode}
- \tex_endinput:D
+ \int_compare:nNnTF { \seq_count:N \l_@@_tmp_seq } > 1
+ {
+ The~cause~seems~to~be~an~old~format~file~in~the~user~tree. \\
+ LaTeX~found~these~files:
+ \seq_map_tokens:Nn \l_@@_tmp_seq { \\~-~\use:n } \\
+ Try~deleting~the~file~in~the~user~tree~then~run~LaTeX~again.
+ }
+ {
+ The~most~likely~causes~are:
+ \\~-~A~recent~format~generation~failed;
+ \\~-~A~stray~format~file~in~the~user~tree~which~needs~
+ to~be~removed~or~rebuilt;
+ \\~-~You~are~running~a~manually~installed~version~of~#2 \\
+ \ \ \ which~is~incompatible~with~the~version~in~LaTeX. \\
+ }
+ \\
+ LaTeX~will~abort~loading~the~incompatible~support~files~
+ but~this~may~lead~to \\ later~errors.~Please~ensure~that~
+ your~LaTeX~format~is~correctly~regenerated.
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 1051a13cfc..697a9bd0de 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index dcf1a91a57..4635d8a5af 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index b493e809d9..a01a2aa3a3 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index 2d917ea017..e0a2b26b1a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 4c38963d42..a18213f911 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index c59e18e17b..b7e4e1bb29 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 27d603f026..f801c860b5 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 131652e9b6..daf38c1a39 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 3f407c59d8..0753398abc 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 10cdb8f6ee..4b86d9aa07 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 5ec8f14fd9..76400b3bac 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 010e56cb70..6948b7104a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index db1eb4cd03..3719dd113d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index c6a59f5673..f19f21c1c3 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 5f7659ee98..449f786201 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index efb01e35c3..02c29627da 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 226d69667f..e41a839d39 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 5a1ece81d9..e73b8d6c55 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index 0cfd1eabbb..812b0941e1 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 0ad9794d44..0dcb0a5cb6 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index 8f9b25e4b0..b8f00b1187 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index 0bcddab852..748aa87885 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 1c65f6839c..08dad0f48d 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index a511841ae9..c33a4eeb9b 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index 03331351d2..3c03c1e8aa 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 3df2abeff5..837f5d75a7 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index 03f24f254d..1ff9ae5d1d 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index 38342aa9b6..b1338bc9b7 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index 42aa52c844..c23deb667e 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index d819c31935..3baec319d1 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index e4f86d86a3..95a233af7a 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index 94963487b3..b7c4726818 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 565221a7f6..ae6753d976 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index 412459b151..2891b8cbf2 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index e9e4bbac55..92eeb57981 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index f3a18ae2e0..e71980d1cf 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index f89808da3a..2e60fc555c 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index 8345aeed89..6003f49343 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 6bb93e9738..9125c5ec8e 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index df5b3d8dd6..8361fa47f2 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index d17ab25cf8..faa41bc68a 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 45424fb54f..0201692ebb 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 26a27c5b87..3ecd3004d0 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index cdbb13c721..4c981becf9 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 0d85d89c62..324f9f8b92 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 971746e70b..84d2e2d7ae 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index 5dc6b6b38b..75a93c51d5 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index 5013d07852..096b29e3e7 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-09-03}
+\date{Released 2020-09-06}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 26e081ca79..c86eef33d3 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index a41a431e0e..ee8f8abed3 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-09-03}
+\date{Released 2020-09-06}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 347e51e754..9c9b8fa84b 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index b7388d7b44..10cb4d25f8 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index 0f60f77a98..59b3a89bbe 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-09-03}
+\date{Released 2020-09-06}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index cffe7b60b1..c44bede9f7 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 800ac8ae74..5b0770e6f3 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index b80ead9476..e062326286 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index d39f6d686f..532c514263 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 81715a3b2e..095a51d948 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 8b7bc70e02..473cd48a82 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index 3a38610e75..4b024350af 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-09-03}
+% \date{Released 2020-09-06}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index 790d04ca5a..cf1f926b77 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 9804ff7def..33b5ecbb45 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-09-03}
+\date{Released 2020-09-06}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/semantex/README.md b/macros/latex/contrib/semantex/README.md
index 6da44d3d9c..8e177e4f7b 100644
--- a/macros/latex/contrib/semantex/README.md
+++ b/macros/latex/contrib/semantex/README.md
@@ -1,15 +1,24 @@
-SemanTeX - semantic mathematics
+SemanTeX -- semantic, keyval-based mathematics
--------------------------------------
The SemanTeX package for LaTeX delivers a more semantic,
-systematized way of writing mathematics compared to the
-ordinary math syntax in LaTeX. The system uses keyval syntax
-and is highly customizable. At the same time, care has been
-taken to make it the syntax as simple, natural, practical,
-and lightweight as possible.
+systematized way of writing mathematics, compared to the
+classical math syntax in LaTeX. The system uses keyval
+syntax, and the user can define their own keys and
+customize the system down to the last detail. At the same
+time, care has been taken to make the syntax as simple,
+natural, practical, and lightweight as possible.
+
+Furthermore, the package has a companion package,
+called stripsemantex, which allows you to completely strip
+your documents of SemanTeX markup to prepare them e.g. for publication.
+
+The package is still in beta, but is considered feature-complete
+and more or less stable, so using it at this point should be safe.
+Still, suggestions, ideas, and bug reports are more than welcome!
----------------------------------------------------------------
-SemanTeX --- object-oriented mathematics
+SemanTeX -- semantic, keyval-based mathematics
Maintained by Sebastian Ørsted
E-mail: sorsted@gmail.com
Released under the LaTeX Project Public License v1.3c or later
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 240ae06b3c..860064bf45 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 e5125e921f..c2ca6e552b 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,104 +1,115 @@
-\RequirePackage{expl3,xparse}
-\ProvidesExplPackage{semantex}{2020/07/21}{0.3alpha}{}
+\RequirePackage{xparse,l3keys2e,semtex,leftindex}
+\ProvidesExplPackage{semantex}{2020/09/07}{0.4beta}{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SemanTeX -- semantic, keyval-based mathematics %
+% https://ctan.org/pkg/semantex %
+% (C) 2020 Sebastian Ørsted %
+% sorsted@gmail.com %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% SemanTeX -- semantic mathematics %
-% https://ctan.org/pkg/semantex %
-% (C) 2020 Sebastian Ørsted %
-% sorsted@gmail.com %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cs_set_eq:NN \semantex_keyval_parse:NNn \keyval_parse:NNn
+
+\keys_define:nn { semantex }
+{
+ keyvalparser .code:n = \cs_set_eq:NN \semantex_keyval_parse:NNn #1,
+ keyvalparser .value_required:n = true,
+ semtexfile .choice:,
+ semtexfile / true .code:n = \semantex_turn_semtex_file_on:,
+ semtexfile / false .code:n = \semantex_turn_semtex_file_off:,
+ semtexfile / unknown .code:n = \msg_error:nnnn { semantex } { semantex_setup_key_value_not_found } { semtexfile } { #1 },
+ unknown .code:n = \msg_error:nnx { semantex } { semantex_setup_key_not_found } { \l_keys_key_str }
+}
+
+\DeclareDocumentCommand\SemantexSetup { m }
+{
+ \keys_set:nn { semantex } { #1 }
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ERROR MESSAGES
+% THE .semtex FILE
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bool_new:N \g__semantex_semtex_file_was_opened
-\msg_new:nnnn { semantex } { valuekey_not_found } { Unknown~key~#2~passed~to~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { arg_valuekey_not_found } { Unknown~argument~key~#2~passed~to~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { data_tl_not_found } { Unknown~data~#2~requested~from~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { data_int_not_found } { Unknown~integer~#2~requested~from~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { data_bool_not_found } { Unknown~boolean~#2~requested~from~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { data_cs_not_found } { Unknown~command~sequence~#2~requested~from~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { data_prop_not_found } { Unknown~property~list~#2~requested~from~#1~on~line~\msg_line_number: } {}
+\iow_new:N \g__semantex_semtex_file_stream_temp_iow
-\msg_new:nnnn { semantex } { key_value_not_found } { Unknown~value~#3~passed~to~key~#2~in~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { class_already_defined } { Class~#1~already~defined;~you~tried~defining~it~again~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { object_already_defined } { Object~#1~already~defined;~you~tried~defining~it~again~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { class_not_found } { Unknown~class~#3~declared~as~#2~of~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { object_not_found } { You~set~#1~as~#2~of~unknown~object~#3~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { created_object_of_unknown_class } { Unknown~class~#1~declared~as~class~of~#2~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { setup_unknown_class } { You~tried~setting~up~an~unknown~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { setup_unknown_object } { You~tried~setting~up~an~unknown~#1~on~line~\msg_line_number: } {}
-
-\msg_new:nnnn { semantex } { created_a_SemantexBaseObject } { Never~create~objects~of~class~\SemantexBaseObject;~create~a~new~class~yourself~instead.~You~created~the~object~#1~on~line~\msg_line_number: } {}
+\cs_new_protected:Npn \semantex_turn_semtex_file_on:
+{
+ \bool_if:NF \g__semantex_semtex_file_was_opened
+ {
+ \iow_open:Nn \g__semantex_semtex_file_stream_temp_iow { \jobname.semtex }
+ \iow_now:Nn \g__semantex_semtex_file_stream_temp_iow { \DeclareClass {\SemantexBaseObject } }
+ }
+
+ \cs_set:Npn\semantex_write_to_semtex_file:n##1
+ {
+ \iow_now:Nn \g__semantex_semtex_file_stream_temp_iow { ##1 }
+ }
+
+ \bool_set_true:N \g__semantex_semtex_file_was_opened
+}
-\msg_new:nnnn { semantex } { generic_error } { #2~#1~on~line~\msg_line_number: } {}
+\cs_new_protected:Npn \semantex_turn_semtex_file_off:
+{
+ \bool_if:NT \g__semantex_semtex_file_was_opened
+ {
+ \iow_close:N \g__semantex_semtex_file_stream_temp_iow
+ }
+
+ \cs_set:Npn\semantex_write_to_semtex_file:n##1 {}
-\cs_generate_variant:Nn \msg_error:nnnn { nnnx }
+ \bool_set_false:N \g__semantex_semtex_file_was_opened
+}
-\tl_new:N\l__semantex_error_output_format_temp
+\semantex_turn_semtex_file_off:
-\cs_new:Npn\semantex_error_output_format:nN#1#2
+\cs_new_protected:Npn\semantex_write_original_source_to_semtex_file:n#1
{
- \tl_set:Nn \l__semantex_error_output_format_temp { #1 }
- \tl_replace_all:Nnn \l__semantex_error_output_format_temp { object_ } { object~\cs:w }
- \tl_replace_all:Nnn \l__semantex_error_output_format_temp { class_ } { class~\cs:w }
- \tl_put_right:Nn \l__semantex_error_output_format_temp { \cs_end: }
- \tl_trim_spaces:N \l__semantex_error_output_format_temp
- \tl_set_eq:NN #2 \l__semantex_error_output_format_temp
+ \semantex_write_to_semtex_file:n { \BeginSource }
+ \semantex_write_to_semtex_file:n { #1 }
}
-\cs_generate_variant:Nn \semantex_error_output_format:nN { xN }
-
-\cs_generate_variant:Nn \msg_error:nnnnn { nnxnn }
+\cs_set_eq:NN\SemantexRecordSource\semantex_write_original_source_to_semtex_file:n
-\cs_generate_variant:Nn \msg_error:nnnn { nnxn }
+\cs_new_protected:Npn\semantex_add_to_existing_original_source_in_semtex_file:n#1
+{
+ \semantex_write_to_semtex_file:n { #1 }
+}
-\cs_generate_variant:Nn \msg_error:nnn { nnx }
+\cs_new_protected:Npn\semantex_write_output_to_semtex_file:n#1
+{
+ \semantex_write_to_semtex_file:n { \EndSource }
+ \semantex_write_to_semtex_file:n { \BeginOutput }
+ \semantex_write_to_semtex_file:n { #1 }
+ \semantex_write_to_semtex_file:n { \EndOutput }
+}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% COMMANDS FOR BULLETS AND SLOTS
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cs_generate_variant:Nn\semantex_write_output_to_semtex_file:n { V }
+\cs_generate_variant:Nn\semantex_write_original_source_to_semtex_file:n { o }
-\box_new:N \l__semantex_bullet_box
-\hbox_set:Nn \l__semantex_bullet_box { $\cdot$ }
-\box_scale:Nnn \l__semantex_bullet_box {1.2} {1.2}
-\tl_set:Nn\g_semantex_bullet
+\cs_new_protected:Npn\semantex_write_class_declaration_to_semtex_file:n#1
{
- \box_move_up:nn{-0.25ex}{\box_use:N \l__semantex_bullet_box}
+ \semantex_write_to_semtex_file:n { \DeclareClass{#1} }
}
-\tl_set:Nn\g_semantex_double_bullet{\g_semantex_bullet \g_semantex_bullet}
-
-\tl_set_eq:NN\SemantexBullet \g_semantex_bullet
-
-\tl_set_eq:NN \SemantexDoubleBullet \g_semantex_double_bullet
+\cs_new_protected:Npn\semantex_write_object_declaration_to_semtex_file:n#1
+{
+ \semantex_write_to_semtex_file:n { \DeclareObject{#1} }
+}
-\tl_set:Nn \g_semantex_slot { \mathord{-} }
+\cs_new_protected:Npn\SemantexIDcommand#1
+{
+ \semantex_write_to_semtex_file:n { \SemantexID{#1} }
+}
-\tl_set_eq:NN \SemantexSlot \g_semantex_slot
+\cs_set_eq:NN\SemantexRecordObject\semantex_write_object_declaration_to_semtex_file:n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -106,25 +117,28 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DeclareDocumentCommand\semantex_new_plain_class:Nw{mO{}} % new simple-type class
+\DeclareDocumentCommand\semantex_new_simple_class:Nw{mO{}} % new simple-type class
{
% #1 = class name
% #2 = options
\semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
- %\semantex_new_class:Nn { #1 } { #2 }
- \DeclareDocumentCommand{#1}{m}{
+ \DeclareDocumentCommand{#1}{m}
+ {
% the actual \#1 command
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } }
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##1 }
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mm}{
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw}{mm}
+ {
+ %\semantex_add_to_existing_original_source_in_semtex_file:n { } % add nothing to file
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_\semantex_class_to_register:N #1:Nw}{mgO{}}
{
% the command for creating a new object of class #1
% ##1 = command name, with backslash
@@ -143,25 +157,28 @@
}
}
% create the object with name ##1
- \DeclareDocumentCommand{##1}{}{
+ \DeclareDocumentCommand{##1}{}
+ {
% the actual \##1 command
+ \semantex_write_original_source_to_semtex_file:n { ##1 }
\semantex_render_object:Nn ##1 { }
}
}
}
-\tl_set_eq:NN\NewPlainClass\semantex_new_plain_class:Nw
+\tl_set_eq:NN\NewSimpleClass\semantex_new_simple_class:Nw
-\DeclareDocumentCommand\semantex_new_simple_class:Nw{mO{}} % new simple-type class
+\DeclareDocumentCommand\semantex_new_symbol_class:Nw{mO{}} % new symbol-type class
{
% #1 = class name
% #2 = options
\semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
- %\semantex_new_class:Nn { #1 } { #2 }
- \DeclareDocumentCommand{#1}{mo}{
+ \DeclareDocumentCommand{#1}{mo}
+ {
% the actual \#1 command
\IfValueTF{##2}
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } { ##2 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -169,14 +186,17 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } }
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##1 }
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mmo}{
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw}{mmo}
+ {
\IfValueTF{##3}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n { [##3] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -185,13 +205,14 @@
}
}
{
+ %\semantex_add_to_existing_original_source_in_semtex_file:n { } % write nothing to file
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_\semantex_class_to_register:N #1:Nw}{mgO{}}
{
% the command for creating a new object of class #1
% ##1 = command name, with backslash
@@ -210,25 +231,26 @@
}
}
% create the object with name ##1
- \DeclareDocumentCommand{##1}{o}{
+ \DeclareDocumentCommand{##1}{o}
+ {
% the actual \##1 command
\IfValueTF { ####1 }
{
+ \semantex_write_original_source_to_semtex_file:n { ##1 [ ####1 ] }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
}
}
{
+ \semantex_write_original_source_to_semtex_file:n { ##1 }
\semantex_render_object:Nn ##1 { }
}
}
}
}
-\tl_set_eq:NN\NewSimpleClass\semantex_new_simple_class:Nw
-
-%IM Consider using \semantexIfNoValueOrDotTF on the argument
+\tl_set_eq:NN\NewSymbolClass\semantex_new_symbol_class:Nw
\DeclareDocumentCommand\semantex_new_variable_class:Nw{mO{}} % new variable-type class
{
@@ -236,12 +258,14 @@
% #2 = options
\semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
%\semantex_new_class:Nn #1 { #2 }
- \DeclareDocumentCommand{#1}{mog}{
+ \DeclareDocumentCommand{#1}{mog}
+ {
% the actual \#1 command
\IfValueTF { ##2 }
{
\IfValueTF { ##3 }
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } [ ##2 ] { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -250,6 +274,7 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } [ ##2 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -260,6 +285,7 @@
{
\IfValueTF { ##3 }
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -267,16 +293,19 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n { #1 { ##1 } }
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##1 }
}
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mmog}{
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw}{mmog}
+ {
\IfValueTF { ##3 }
{
\IfValueTF { ##4 }{
+ \semantex_add_to_existing_original_source_in_semtex_file:n { [ ##3 ] { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -286,6 +315,7 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n { [ ##3 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -297,6 +327,7 @@
{
\IfValueTF { ##4 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n { { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -305,6 +336,7 @@
}
}
{
+ % \semantex_add_to_existing_original_source_in_semtex_file:n { } % write nothing to file
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
@@ -312,7 +344,7 @@
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_\semantex_class_to_register:N #1:Nw}{mgO{}}
{
% the command for creating a new object of class #1
% ##1 = command name, with backslash
@@ -336,6 +368,10 @@
\IfValueTF{####1}{
\IfValueTF{####2}
{
+ \semantex_write_original_source_to_semtex_file:n
+ {
+ ##1 [ ####1 ] { ####2 }
+ }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -343,6 +379,10 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ {
+ ##1 [ ####1 ]
+ }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -352,12 +392,20 @@
{
\IfValueTF{####2}
{
+ \semantex_write_original_source_to_semtex_file:n
+ {
+ ##1 {####2}
+ }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_arg:Nn ##1 { ####2 }
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ {
+ ##1
+ }
\semantex_render_object:Nn ##1 {}
}
}
@@ -378,10 +426,12 @@
{
\IfValueTF { ##3 }
{
- \tl_if_eq:nnTF { ##3 }{ * }
+ \str_if_eq:nnTF { ##3 }{ * }
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { * } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -391,6 +441,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { * } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -400,10 +452,12 @@
}
}
{
- \tl_if_eq:nnTF { ##3 }{ ** }
+ \str_if_eq:nnTF { ##3 }{ ** }
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ** } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -413,6 +467,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ** } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -424,6 +480,8 @@
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ##3 } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -433,6 +491,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -446,6 +506,8 @@
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -454,6 +516,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -465,10 +529,12 @@
{
\IfValueTF { ##3 }
{
- \tl_if_eq:nnTF { ##3 }{ * }
+ \str_if_eq:nnTF { ##3 }{ * }
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { * } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -477,6 +543,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { * } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -485,10 +553,12 @@
}
}
{
- \tl_if_eq:nnTF { ##3 }{ ** }
+ \str_if_eq:nnTF { ##3 }{ ** }
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ** } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -497,6 +567,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ** } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -507,6 +579,8 @@
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ##3 } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -515,6 +589,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:N #1 { ##1 }
@@ -527,6 +603,8 @@
{
\IfValueTF { ##4 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -534,6 +612,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } }
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##1 }
}
@@ -541,15 +621,18 @@
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mmogg}{
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw}{mmogg}
+ {
\IfValueTF{##3}
{
\IfValueTF { ##4 }
{
- \tl_if_eq:nnTF { ##4 }{ * }
+ \str_if_eq:nnTF { ##4 }{ * }
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { * } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -560,6 +643,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { * } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -570,10 +655,12 @@
}
}
{
- \tl_if_eq:nnTF { ##4 }{ ** }
+ \str_if_eq:nnTF { ##4 }{ ** }
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ** } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -584,6 +671,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ** } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -596,6 +685,8 @@
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ##4 } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -606,6 +697,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -620,6 +713,8 @@
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -629,6 +724,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -641,10 +738,12 @@
{
\IfValueTF { ##4 }
{
- \tl_if_eq:nnTF { ##4 }{ * }
+ \str_if_eq:nnTF { ##4 }{ * }
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { * } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -654,6 +753,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { * } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -663,10 +764,12 @@
}
}
{
- \tl_if_eq:nnTF { ##4 }{ ** }
+ \str_if_eq:nnTF { ##4 }{ ** }
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ** } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -676,6 +779,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ** } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -687,6 +792,8 @@
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ##4 } { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -696,6 +803,8 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -709,6 +818,8 @@
{
\IfValueTF { ##5 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ##5 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -717,6 +828,7 @@
}
}
{
+ % \semantex_add_to_existing_original_source_in_semtex_file:n { } % write nothing to file
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
@@ -725,7 +837,7 @@
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_\semantex_class_to_register:N #1:Nw}{mgO{}}
{
% the command for creating a new object of class #1
% ##1 = command name, with backslash
@@ -744,16 +856,19 @@
}
}
% creates the object with name ##1
- \DeclareDocumentCommand{##1}{ogg}{
+ \DeclareDocumentCommand{##1}{ogg}
+ {
% the actual \##1 command
\IfValueTF{####1}
{
\IfValueTF{####2}
{
- \tl_if_eq:nnTF { ####2 } { * }
+ \str_if_eq:nnTF { ####2 } { * }
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { * } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -762,6 +877,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { * } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -770,10 +887,12 @@
}
}
{
- \tl_if_eq:nnTF { ####2 } { ** }
+ \str_if_eq:nnTF { ####2 } { ** }
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { ** } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -782,6 +901,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { ** } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -792,6 +913,8 @@
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { ####2 } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -800,6 +923,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { ####2 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -812,6 +937,8 @@
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -819,6 +946,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1 ] }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -829,10 +958,12 @@
{
\IfValueTF{####2}
{
- \tl_if_eq:nnTF { ####2 } { * }
+ \str_if_eq:nnTF { ####2 } { * }
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { * } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_use_bullet:N ##1
@@ -840,6 +971,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { * } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_use_bullet:N ##1
@@ -847,10 +980,12 @@
}
}
{
- \tl_if_eq:nnTF { ####2 } { ** }
+ \str_if_eq:nnTF { ####2 } { ** }
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ** } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_use_double_bullet:N ##1
@@ -858,6 +993,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ** } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_use_double_bullet:N ##1
@@ -867,6 +1004,8 @@
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ####2 } { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_degreedefault:Nn ##1 { ####2 }
@@ -874,6 +1013,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ####2 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_degreedefault:Nn ##1 { ####2 }
@@ -885,12 +1026,16 @@
{
\IfValueTF{####3}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ####3 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_arg:Nn ##1 { ####3 }
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 }
\semantex_render_object:Nn ##1 { }
}
}
@@ -912,6 +1057,8 @@
{
\IfValueTF { ##3 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -920,6 +1067,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } [ ##2 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -930,6 +1079,8 @@
{
\IfValueTF { ##3 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } { ##3 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##1 }
@@ -937,6 +1088,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { #1 { ##1 } }
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##1 }
}
@@ -944,12 +1097,14 @@
}
}
% the actual \#1 command
- \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mmog}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw}{mmog}
{
\IfValueTF { ##3 }
{
\IfValueTF { ##4 }
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] { ##4 } }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
@@ -959,11 +1114,13 @@
}
}
{
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { [ ##3 ] }
\semantex_render_class:Nn #1 {
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
- \semantex_class_set_keys:Nn #1{ ##3 }
+ \semantex_class_set_keys:Nn #1 { ##3 }
}
}
}
@@ -971,6 +1128,8 @@
\IfValueTF { ##4 }
{
\semantex_render_class:Nn #1 {
+ \semantex_add_to_existing_original_source_in_semtex_file:n
+ { { ##4 } }
\semantex_class_do_output:N #1
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
@@ -978,6 +1137,7 @@
}
}
{
+ % \semantex_add_to_existing_original_source_in_semtex_file:n { } % write nothing to file
\semantex_render_class:Nn #1 {
\semantex_class_set_symbol:Nn #1 { ##2 }
##1
@@ -985,7 +1145,7 @@
}
}
}
- \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mmmO{}}
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_\semantex_class_to_register:N #1:Nw}{mmmO{}}
{
% the command for creating a new object of class #1
% ##1 = command name, with backslash
@@ -997,12 +1157,15 @@
\semantex_object_set_keys:Nn ##1 { ##4 }
}
% creates the object with name ##1
- \DeclareDocumentCommand{##1}{og}{
+ \DeclareDocumentCommand{##1}{og}
+ {
% the actual \##1 command
\IfValueTF { ####1 }
{
\IfValueTF { ####2 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1] { ####2 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -1010,6 +1173,8 @@
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 [ ####1] }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_keys:Nn ##1 { ####1 }
@@ -1019,12 +1184,16 @@
{
\IfValueTF { ####2 }
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 { ####2 } }
\semantex_render_object:Nn ##1 {
\semantex_object_do_output:N ##1
\semantex_object_set_arg:Nn ##1 { ####2 }
}
}
{
+ \semantex_write_original_source_to_semtex_file:n
+ { ##1 }
\semantex_render_object:Nn ##1 { }
}
}
@@ -1040,72 +1209,128 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_new:Npn\NewObject#1
+% Internally, objects and classes are both special cases of what we call "registers".
+% A register is a collection of data and key definitions, and different registers can
+% inherit from each other. Each register has a name which is a token list, with no
+% backslash. The class \<MyClass> corresponds to the register "class_<MyClass>",
+% and the object \<MyObject> corresponds to the register "object_<MyObject>".
+% Firstly, we need a couple of commands to convert class and object names into
+% register names.
+
+\cs_new:Npn\semantex_class_to_register:N#1
+{
+ % #1 = name of class
+ class_\cs_to_str:N #1
+}
+
+\cs_new:Npn\semantex_object_to_register:N#1
{
- \cs_if_exist_use:cF { __semantex_new_object_of_class_\cs_to_str:N#1:Nw }
+ % #1 = name of object
+ object_\cs_to_str:N #1
+}
+
+\DeclareDocumentCommand\NewObject { m }
+{
+ % #1 = name of object
+ \semantex_class_if_exist:NTF #1
+ {
+ \use:c { __semantex_new_object_of_\semantex_class_to_register:N #1:Nw }
+ }
{
\msg_error:nnnn { semantex } { created_object_of_unknown_class } { #1 }
}
}
-\cs_new:Npn \__semantex_new_class_or_object:nn#1#2
+\DeclareDocumentCommand\UseClassInCommand { mo }
{
- % create new object
- % #1 = name of command, without backslash
+ \semantex_class_if_exist:NTF #1
+ {
+ \IfValueTF { #2 }
+ {
+ \use:c { __semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw }
+ {
+ \semantex_keys_set:nn { \semantex_class_to_register:N #1 } { #2 }
+ }
+ }
+ {
+ \use:c { __semantex_make_object_of_\semantex_class_to_register:N #1_with_options:nnw } {}
+ }
+ }
+ {
+ \msg_error:nnnn { semantex } { used_unknown_class } { #1 }
+ }
+}
+
+\cs_new_protected:Npn \semantex_new_register:nn#1#2
+{
+ % create new register
+ % #1 = name of register
% #2 = standard keyval setup
\semantex_data_tl_provide:nn { #1 } { parent }
\semantex_data_tl_set:nnn { #1 } { parent } { class_SemantexBaseObject }
+ % The parent class by default is \SemantexBaseObject
\cs_set:cpn { __semantex_data_cs_#1_valuekey:nn } ##1##2 % command controlling valuekeys
- { \semantex_valuekey:nnn { #1 } { ##1 } { ##2 } }
+ { \semantex_valuekey:nnn { #1 } { ##1 } { ##2 } }
\cs_set:cpn { __semantex_data_cs_#1_singlekey:n } ##1 % command controlling singlekeys
- { \semantex_singlekey:nn { #1 } { ##1 } }
+ { \semantex_singlekey:nn { #1 } { ##1 } }
+
+ \cs_generate_variant:cn { __semantex_data_cs_#1_valuekey:nn } { nx }
+
+ \cs_set:cpn { __semantex_data_cs_#1_singlekey_x:n } ##1 % command controlling executed singlekeys
+ { \semantex_singlekey_x:nn { #1 } { ##1 } }
% Now a similar collection of keyval commands for the *argument*
\cs_set:cpn { __semantex_data_cs_#1_arg_valuekey:nn } ##1##2
- { \semantex_arg_valuekey:nnn { #1 } { ##1 } { ##2 } }
+ { \semantex_arg_valuekey:nnn { #1 } { ##1 } { ##2 } }
\cs_set:cpn { __semantex_data_cs_#1_arg_singlekey:n } ##1
- { \semantex_arg_singlekey:nn { #1 } { ##1 } }
+ { \semantex_arg_singlekey:nn { #1 } { ##1 } }
- \cs_set:cpn { __semantex_data_cs_#1_outputoptions:n } ##1 {}
+ \cs_generate_variant:cn { __semantex_data_cs_#1_arg_valuekey:nn } { nx }
- \cs_set:cpn { __semantex_data_cs_#1_parseoptions:n } ##1 {}
+ \cs_set:cpn { __semantex_data_cs_#1_arg_singlekey_x:n } ##1
+ { \semantex_arg_singlekey_x:nn { #1 } { ##1 } }
- % This is used to set up the class/object when creating it
+ % This is used to set up the register when creating it
#2
}
-\cs_generate_variant:Nn \__semantex_new_class_or_object:nn { xn }
+\cs_generate_variant:Nn \semantex_new_register:nn { xn }
-\cs_new:Npn \semantex_new_class:Nn#1#2{
+\cs_new_protected:Npn \semantex_new_class:Nn#1#2
+{
% create a new class
% #1 = name of class
- % #2 = standard keyval setup; the parent class by default is SemantexBaseObject
+ % #2 = standard keyval setup
\semantex_class_if_exist:NTF #1
{
\msg_error:nnn { semantex } { class_already_defined } { #1 }
}
{
- \semantex_class_register:N #1
- \__semantex_new_class_or_object:xn { class_\cs_to_str:N #1 } { #2 }
+ \semantex_add_to_list_of_classes:N #1
+ \semantex_new_register:xn { \semantex_class_to_register:N #1 } { #2 }
}
}
-\cs_set:Npn \semantex_new_object:NNn#1#2#3
+\cs_set_protected:Npn \semantex_new_object:NNn#1#2#3
{
+ % create a new object
+ % #1 = name of class
+ % #2 = name of object
+ % #3 = standard keyval setup
\semantex_object_if_exist:NTF #2
{
\msg_error:nnn { semantex } { object_already_defined } { #2 }
}
{
- \semantex_object_register:N #2
- \__semantex_new_class_or_object:xn { object_\cs_to_str:N #2 } {
- %class=#1, #3
+ \semantex_add_to_list_of_objects:N #2
+ \semantex_new_register:xn { \semantex_object_to_register:N #2 }
+ {
\semantex_object_set_class:Nn #2 { #1 }
#3
}
@@ -1113,246 +1338,272 @@
}
% The following commands are used in the code for creating class types:
+% Writing the actual content of the commands is not that much more
+% complicated, but I've decided to use them anyway to make it more
+% user-friendly to create your own class type.
-\cs_set:Npn\semantex_class_set_symbol:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_symbol:Nn#1#2
{
- %\semantex_data_tl_set:xnn { class_\cs_to_str:N#1 } { symbol } { #2 }
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:xn { class_\cs_to_str:N #1 } { #2 }
+ \semantex_valuekey:nnn { \semantex_class_to_register:N #1 } { symbol } { #2 }
}
-\cs_set:Npn\semantex_object_set_symbol:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_symbol:Nn#1#2
{
- %\semantex_data_tl_set:xnn { object_\cs_to_str:N#1 } { symbol } { #2 }
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:xn { object_\cs_to_str:N #1 } { #2 }
+ \semantex_valuekey:nnn { \semantex_object_to_register:N #1 } { symbol } { #2 }
}
-\cs_set:Npn\semantex_class_do_output:N#1
+\cs_new_protected:Npn\semantex_class_do_output:N#1
{
- \semantex_data_bool_set_true:xn { class_\cs_to_str:N#1 } { output }
+ \semantex_data_bool_set_true:nn { \semantex_class_to_register:N #1 } { output }
}
-\cs_set:Npn\semantex_object_do_output:N#1
+\cs_new_protected:Npn\semantex_object_do_output:N#1
{
- \semantex_data_bool_set_true:xn { object_\cs_to_str:N#1 } { output }
+ \semantex_data_bool_set_true:nn { \semantex_object_to_register:N #1 } { output }
}
-\cs_set:Npn\semantex_class_set_keys:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_keys:Nn#1#2
{
- \semantex_keys_set:xn { class_\cs_to_str:N #1 } { #2 }
+ \semantex_keys_set:nn { \semantex_class_to_register:N #1 } { #2 }
}
-\cs_set:Npn\semantex_object_set_keys:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_keys:Nn#1#2
{
- \semantex_keys_set:xn { object_\cs_to_str:N #1 } { #2 }
+ \semantex_keys_set:nn { \semantex_object_to_register:N #1 } { #2 }
}
-\cs_set:Npn\semantex_class_set_arg:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_arg:Nn#1#2
{
- \semantex_valuekey:xnn { class_\cs_to_str:N#1 } { arg } { #2 }
+ \semantex_valuekey:nnn { \semantex_class_to_register:N #1 } { arg } { #2 }
}
-\cs_set:Npn\semantex_object_set_arg:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_arg:Nn#1#2
{
- \semantex_valuekey:xnn { object_\cs_to_str:N#1 } { arg } { #2 }
+ \semantex_valuekey:nnn { \semantex_object_to_register:N #1 } { arg } { #2 }
}
-\cs_set:Npn\semantex_class_set_degreedefault:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_degreedefault:Nn#1#2
{
- \semantex_valuekey:xnn { class_\cs_to_str:N#1 } { degreedefault } { #2 }
- % should there be \exp_not:n around #2? Probably not, based on the above
+ \semantex_valuekey:nnn { \semantex_class_to_register:N #1 } { degreedefault } { #2 }
}
-\cs_set:Npn\semantex_object_set_degreedefault:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_degreedefault:Nn#1#2
{
- \semantex_valuekey:xnn { object_\cs_to_str:N#1 } { degreedefault } { #2 }
- % should there be \exp_not:n around #2? Probably not, based on the above
+ \semantex_valuekey:nnn { \semantex_object_to_register:N #1 } { degreedefault } { #2 }
}
-\cs_set:Npn\semantex_class_use_bullet:N#1
+\cs_new_protected:Npn\semantex_class_use_bullet:N#1
{
- \semantex_singlekey:xn { class_\cs_to_str:N#1 } { * }
+ \semantex_singlekey:nn { \semantex_class_to_register:N #1 } { * }
}
-\cs_set:Npn\semantex_object_use_bullet:N#1
+\cs_new_protected:Npn\semantex_object_use_bullet:N#1
{
- \semantex_singlekey:xn { object_\cs_to_str:N#1 } { * }
+ \semantex_singlekey:nn { \semantex_object_to_register:N #1 } { * }
}
-\cs_set:Npn\semantex_class_use_double_bullet:N#1
+\cs_new_protected:Npn\semantex_class_use_double_bullet:N#1
{
- \semantex_singlekey:xn { class_\cs_to_str:N#1 } { * }
+ \semantex_singlekey:nn { \semantex_class_to_register:N #1 } { * }
}
-\cs_set:Npn\semantex_object_use_double_bullet:N#1
+\cs_new_protected:Npn\semantex_object_use_double_bullet:N#1
{
- \semantex_singlekey:xn { object_\cs_to_str:N#1 } { * }
+ \semantex_singlekey:nn { \semantex_object_to_register:N #1 } { * }
}
-\cs_set:Npn\semantex_class_set_leftpar:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_leftpar:Nn#1#2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:xn { class_\cs_to_str:N#1 } { #2 }
+ \semantex_data_tl_set:nnn { \semantex_class_to_register:N #1 } { leftpar } { #2 }
}
-\cs_set:Npn\semantex_object_set_leftpar:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_leftpar:Nn#1#2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:xn { object_\cs_to_str:N#1 } { #2 }
+ \semantex_data_tl_set:nnn { \semantex_object_to_register:N #1 } { leftpar } { #2 }
}
-\cs_set:Npn\semantex_class_set_rightpar:Nn#1#2
+\cs_new_protected:Npn\semantex_class_set_rightpar:Nn#1#2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:xn { class_\cs_to_str:N#1 } { #2 }
+ \semantex_data_tl_set:nnn { \semantex_class_to_register:N #1 } { rightpar } { #2 }
}
-\cs_set:Npn\semantex_object_set_rightpar:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_rightpar:Nn#1#2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:xn { object_\cs_to_str:N#1 } { #2 }
+ \semantex_data_tl_set:nnn { \semantex_object_to_register:N #1 } { rightpar } { #2 }
}
-\cs_set:Npn\semantex_object_set_class:Nn#1#2
+\cs_new_protected:Npn\semantex_object_set_class:Nn#1#2
{
- \semantex_data_class_set:xn { object_\cs_to_str:N #1 } { #2 }
+ \semantex_data_class_set:nn { \semantex_object_to_register:N #1 } { #2 }
}
-\seq_new:N \g__semantex_all_classes_seq % a register for all objects created
+\seq_new:N \g__semantex_all_classes_seq % a list of all objects created
-\cs_new:Npn\semantex_class_register:N#1
+\cs_new_protected:Npn\semantex_add_to_list_of_classes:N#1
{
- \seq_put_right:Nx\g__semantex_all_classes_seq { class_\cs_to_str:N #1 }
+ \seq_put_right:Nx\g__semantex_all_classes_seq { \semantex_class_to_register:N #1 }
+ \semantex_write_class_declaration_to_semtex_file:n { #1 }
}
-\cs_new:Npn\semantex_class_if_exist:NTF#1#2#3
+\cs_new_protected:Npn\semantex_class_if_exist:NTF#1#2#3
{
- \seq_if_in:NxTF\g__semantex_all_classes_seq { class_\cs_to_str:N#1 } { #2 } { #3 }
+ \seq_if_in:NxTF\g__semantex_all_classes_seq { \semantex_class_to_register:N #1 } { #2 } { #3 }
}
-\seq_new:N \g__semantex_all_objects_seq % a register for all objects created
+\seq_new:N \g__semantex_all_objects_seq % a list of all objects created
-\cs_new:Npn\semantex_object_register:N#1
+\cs_new_protected:Npn\semantex_add_to_list_of_objects:N#1
{
- \seq_put_right:Nx\g__semantex_all_objects_seq { object_\cs_to_str:N #1 }
+ \seq_put_right:Nx\g__semantex_all_objects_seq { \semantex_object_to_register:N #1 }
+ \semantex_write_object_declaration_to_semtex_file:n { #1 }
}
-\cs_new:Npn\semantex_object_if_exist:NTF#1#2#3
+\cs_new_protected:Npn\semantex_object_if_exist:NTF#1#2#3
{
- \seq_if_in:NxTF\g__semantex_all_objects_seq { object_\cs_to_str:N#1 } { #2 } { #3 }
+ \seq_if_in:NxTF\g__semantex_all_objects_seq { \semantex_object_to_register:N #1 } { #2 } { #3 }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% COMMANDS FOR RENDERING OBJECTS AND CLASSES
+% COMMANDS FOR RENDERING REGISTERS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cs_generate_variant:Nn\tl_if_blank:nTF { xTF }
-\cs_new_protected:Npn \__semantex_render:nn#1#2
+\cs_new_protected:Npn \semantex_render_register:nn#1#2
{
- % the main command for rendering a class/object
- % #1 = name of object
+ % the main command for rendering a register
+ % #1 = name of register
% #2 = options
\group_begin:
- \semantex_provide_user_commands:n { #1 }
+ \cs_set:Nn\semantex_this: { #1 }
\semantex_data_tl_inherit:nn { #1 } { symbol } % Inherit the symbol from parent if not done already
- %\semantex_keys_set:nn { #1 } { #2 } % Setup the keys
- #2
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parse:nn { #1 } { } % Run the "parse" routine, i.e. the collection of code that the user has added to the parse register
- \semantex_data_bool_get:nnTF { #1 } { output } % Checks if the object/class is supposed to output
+ #2 % This is where keys can be set up
+ \semantex_parse:n { #1 } % Run the "parse" routine, i.e. run the collection of code that the user has added via the key "parseoptions"
+ \semantex_data_bool_get:nnTF { #1 } { output } % Checks if the register is supposed to output
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn { #1 }{}
+ \semantex_inner_return:n { #1 }
\semantex_data_int_if_positive:nnTF { #1 } { numberofarguments } % Checks if more than one argument has been received, i.e. whether we want to render any argument
{
\semantex_data_bool_get:nnTF { #1 } { leftargument } % Checks if left or right argument
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn { #1 }{}
+ \semantex_left_return:n { #1 }
}
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn { #1 }{}
+ \semantex_right_return:n { #1 }
}
}
{
% do nothing
}
- \tl_set:Nx\l__semantex_render_symbol_temp { \semantex_data_tl_get:nn { #1 } { symbol } } % Stores the symbol in a temporary command
- \tl_set:Nx \l__semantex_render_temp
+ \tl_set:Nx\l__semantex_render_symbol_temp_tl { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } } % Stores the symbol in a temporary command
+ \tl_set:Nx \l__semantex_render_output_class_temp_tl { \semantex_data_tl_get:nn { #1 } { output } } % The output class
+ \exp_args:NNx\cs_set:Nn\l__semantex_render_outputoptions_temp_cs:n
+ { \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions } }
+ % \cs_set:Nx did not work here, as it changes ##1 to #1, which we don't want.
+ \tl_set:Nn\l__semantex_render_outputoptions_temp_tl
+ {
+ \l__semantex_render_outputoptions_temp_cs:n
+ }
+ \tl_put_right:Nx \l__semantex_render_outputoptions_temp_tl
+ {
+ { \l__semantex_render_output_class_temp_tl }
+ }
+ \exp_args:NNo\tl_set:No \l__semantex_render_outputoptions_temp_tl
+ {
+ \l__semantex_render_outputoptions_temp_tl
+ } % This was necessary, trust me.
+ \tl_set:Nx \l__semantex_render_temp_tl
{
\exp_not:c {
- __semantex_make_object_of_\semantex_data_tl_get:nn { #1 } { output }_with_options:nnw
- } % This is for outputting -- the command \__semantex_make_object_of_class_???_with_options:nnw makes a one-time object of class ??? and allows us to immediately parse options to it
- {
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { upper } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { lower } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { upperleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { preupper } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postupper } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { prelower } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postlower } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft } }
- \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get:nn { #1 } { texclass } }
- %\exp_not:N\semantex_keys_set:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions } }
- %\semantex_data_tl_get_exp_not:nn { #1 } { outputoptions }
- %\exp_not:c
-% \exp_args:Nc\exp_not:N
-% { __semantex_data_cs_#1_outputoptions:n } {
-% \semantex_data_tl_get:nn { #1 } { output }
-% }
-% \semantex_data_cs_get_exp_not:nn { #1 } { outputoptions:n } { \semantex_data_tl_get:nn { #1 } { output } }
- \semantex_data_cs_get:nn { #1 } { outputoptions:n } { \semantex_data_tl_get:nn { #1 } { output } }
- % These are the options we parse to our object -- this is all
- % information that we pass on to the output class so that it
+ __semantex_make_object_of_\l__semantex_render_output_class_temp_tl _with_options:nnw
+ }
+ % This is for outputting -- the command
+ % \__semantex_make_object_of_class_???_with_options:nnw
+ % makes a one-time object of class ??? and allows us to
+ % immediately pass options to it
+ {
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { upperputleft } { \semantex_data_tl_get_exp_not:nn { #1 } { upper } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { lowerputleft } { \semantex_data_tl_get_exp_not:nn { #1 } { lower } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { upperleftputright } { \semantex_data_tl_get_exp_not:nn { #1 } { upperleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { lowerleftputright } { \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { preupper } { \semantex_data_tl_get_exp_not:nn { #1 } { preupper } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { postupper } { \semantex_data_tl_get_exp_not:nn { #1 } { postupper } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { prelower } { \semantex_data_tl_get_exp_not:nn { #1 } { prelower } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { postlower } { \semantex_data_tl_get_exp_not:nn { #1 } { postlower } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { preupperleft } { \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { postupperleft } { \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { prelowerleft } { \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { postlowerleft } { \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { heightphantom } { \semantex_data_tl_get_exp_not:nn { #1 } { heightphantom } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { slantingphantom } { \semantex_data_tl_get_exp_not:nn { #1 } { slantingphantom } }
+ \exp_not:N\semantex_base_object_valuekey:nnn { \l__semantex_render_output_class_temp_tl }
+ { texclass } { \semantex_data_tl_get_exp_not:nn { #1 } { texclass } }
+ \exp_not:V \l__semantex_render_outputoptions_temp_tl
+ % These are the options we pass to the output class so that it
% can eventually render it
}
- { \exp_not:V \l__semantex_render_symbol_temp }
+ { \exp_not:V \l__semantex_render_symbol_temp_tl }
}
}
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{} % Returns the object/class, i.e. adds all remaining indices and arguments to it
- \tl_if_blank:xTF { \semantex_data_tl_get:nn { #1 } { texclass } }
+ \semantex_pre_return:n { #1 } % Performs the pre_return routine, i.e. adds all remaining indices and arguments to the symbol
+ \tl_if_blank:xTF { \semantex_data_tl_get_exp_not:nn { #1 } { texclass } }
% Checks whether the texclass register has been declared -- this is
% where you store \mathord, \mathbin, \mathrel, etc., if you want
% the object to be eventually wrapped in this.
{
- \tl_set:Nx\l__semantex_render_symbol_temp { \semantex_data_tl_get:nn { #1 } { symbol } }
+ \tl_set:Nx\l__semantex_render_temp_tl
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ }
}
{
- \tl_set:Nx\l__semantex_render_symbol_temp { \semantex_data_tl_get:nn { #1 } { texclass } { \semantex_data_tl_get:nn { #1 } { symbol } } }
- }
- \tl_set:Nx\l__semantex_render_temp {
- \exp_not:V \l__semantex_render_symbol_temp
+ \tl_set:Nx\l__semantex_render_temp_tl
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { texclass }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
+ }
}
+ \group_begin:
+ \semantex_write_output_to_semtex_file:V \l__semantex_render_temp_tl
+ % Adds the output to the .semtex file, if this has been turned on,
+ % which it is not by default.
+ \group_end:
}
\exp_last_unbraced:NV
\group_end:
- \l__semantex_render_temp % This neat trick allows outputting to different classes to work as expected
+ \l__semantex_render_temp_tl
+ % This neat trick allows outputting to different classes to work as expected
}
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn { nx }
-%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn { nx }
-
-\cs_generate_variant:Nn \__semantex_render:nn { xn }
+\cs_generate_variant:Nn \semantex_render_register:nn { xn }
-\cs_set:Npn\semantex_render_class:Nn#1#2 % a front-end command
+\cs_new_protected:Npn\semantex_render_class:Nn#1#2 % a front-end command
{
- \__semantex_render:xn { class_\cs_to_str:N #1 } { #2 }
+ \semantex_render_register:xn { \semantex_class_to_register:N #1 } { #2 }
}
-\cs_set:Npn\semantex_render_object:Nn#1#2
+\cs_new_protected:Npn\semantex_render_object:Nn#1#2
{
- \__semantex_render:xn { object_\cs_to_str:N #1 } { #2 } % Actually, it seems to all still work out fine with n-type instead of x-type, but better be sure
+ \semantex_render_register:xn { \semantex_object_to_register:N #1 } { #2 }
+ % Actually, it seems to all still work out fine with n-type
+ % instead of x-type, but better be sure
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1361,338 +1612,642 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\tl_new:N\SemantexDelimiterSize
-
-%%So far, this is experimental:
-%%\makeatletter %this part requires amsmath
-%\tl_set:Nn\semantexnormalscaling{\bBigg@{0.8}}
-%\tl_set:Nn\semantexnormalscalingl{\mathopen\semantexnormalscaling}
-%\tl_set:Nn\semantexnormalscalingr{\mathclose\semantexnormalscaling}
-%\tl_set:Nn\semantexnormalscalingm{\mathrel\semantexnormalscaling}
-%%\makeatother
-
-\cs_new:Npn \__semantex_parentheses_normal:nnn#1#2#3
+\cs_new_protected:Npn \semantex_parentheses_store:nN#1#2
{
- \group_begin:
- %\semantexnormalscalingl#2 #4 #5 #6 \semantexnormalscalingr#3
- \mathopen#1 #3 \mathclose#2
- \group_end:
+ \semantex_data_tl_get_store:nnN { #1 } { parsize } \l__semantex_parentheses_store_temp_tl
+ \semantex_data_bool_get:nnTF { #1 } { allowSemantexDelimiterSize }
+ {
+ \tl_set:Nn#2 { \SemantexParentheses }
+ \tl_put_right:Nx#2
+ {
+ { \exp_not:V \l__semantex_parentheses_store_temp_tl }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } }
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ }
+ }
+ }
+ {
+ \str_case:VnF { \l__semantex_parentheses_store_temp_tl } % This is where \big,\Big, etc. go.
+ {
+ { normal } {
+ \tl_set:Nx#2
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ }
+ \str_if_eq:xnF { \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } } { . }
+ {
+ \tl_put_left:Nx#2
+ {
+ \exp_not:N \mathopen \semantex_data_tl_get_exp_not:nn { #1 } { leftpar }
+ }
+ }
+ \str_if_eq:xnF { \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } } { . }
+ {
+ \tl_put_right:Nx#2
+ {
+ \exp_not:N \mathclose \semantex_data_tl_get_exp_not:nn { #1 } { rightpar }
+ }
+ }
+ }
+ { auto } {
+ \tl_set:Nx#2
+ {
+ \exp_not:N \SemantexLeft \semantex_data_tl_get_exp_not:nn { #1 } { leftpar }
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \exp_not:N \SemantexRight \semantex_data_tl_get_exp_not:nn { #1 } { rightpar }
+ }
+ }
+ { * } {
+ \tl_set:Nx#2
+ {
+ \exp_not:N \SemantexLeft \semantex_data_tl_get_exp_not:nn { #1 } { leftpar }
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \exp_not:N \SemantexRight \semantex_data_tl_get_exp_not:nn { #1 } { rightpar }
+ }
+ }
+ }
+ {
+ \tl_set:Nx#2
+ {
+ \exp_not:N \mathopen
+ \exp_not:V \l__semantex_parentheses_store_temp_tl
+ \semantex_data_tl_get_exp_not:nn { #1 } { leftpar }
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \exp_not:N \mathclose
+ \exp_not:V \l__semantex_parentheses_store_temp_tl
+ \semantex_data_tl_get_exp_not:nn { #1 } { rightpar }
+ }
+ }
+ }
}
-\cs_new:Npn \__semantex_parentheses_auto:nnn#1#2#3
-{
- \group_begin:
- \tl_set:Nn\SemantexDelimiterSize{\middle}
- %\tl_set_eq:NN\SemantexDelimiterSize\middle
- \mathopen{}\mathclose\bgroup\left#1
- #3
- \aftergroup\egroup\right#2
- \group_end:
-}
+\cs_generate_variant:Nn \str_case:nnF { VnF }
+\cs_generate_variant:Nn \str_if_eq:nnF { xnF }
-\cs_new:Npn \__semantex_parentheses_other:nnnn#1#2#3#4
+\cs_new_protected:Npn \semantex_no_parentheses_store:nN#1#2
+% The central command for handling the rendering of arguments with no parentheses around
{
- \group_begin:
- \tl_set_eq:NN\SemantexDelimiterSize#4
- %\tl_set:Nx\SemantexDelimiterSize{\exp_not:N#1}
- \mathopen#4#1 #3 \mathclose#4#2
- \group_end:
+ \semantex_data_bool_get:nnTF { #1 } { allowSemantexDelimiterSize }
+ {
+ \tl_set:Nn#2 { \SemantexNoParentheses }
+ \tl_put_right:Nx#2
+ {
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ }
+ }
+ }
+ {
+ \tl_set:Nx#2
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { arg }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ }
+ }
}
-
-\cs_generate_variant:Nn \str_case:nnF { xnF }
-
-\cs_new:Npn \__semantex_parentheses_store:nnnnN#1#2#3#4#5
-% The central command handling the rendering of argument parentheses
+\cs_new_protected:Npn \__semantex_symbol_parentheses_store:nnnnN#1#2#3#4#5
+% The central command handling the rendering of symbol parentheses
{
- \tl_set:Nx#5
- {
- { #2 }
- { #3 }
- { #4 }
- }
- \str_case:xnF { #1 } % This is where \big,\Big, etc. go. To my surprise, an x-type expansion did not cause any issues with this
+ \str_case:nnF { #1 } % This is where \big,\Big, etc. go.
{
{ normal } {
- \tl_put_left:Nn#5
+ \tl_set:Nn#5
{
- \exp_not:N
- \__semantex_parentheses_normal:nnn
+ #4
+ }
+ \str_if_eq:nnF { #2 } { . }
+ {
+ \tl_put_left:Nn#5
+ {
+ \mathopen #2
+ }
+ }
+ \str_if_eq:nnF { #3 } { . }
+ {
+ \tl_put_right:Nn#5
+ {
+ \mathclose #3
+ }
}
}
{ auto } {
- \tl_put_left:Nn#5
+ \tl_set:Nn#5
{
- \exp_not:N
- \__semantex_parentheses_auto:nnn
+ \SemantexLeft #2
+ #4
+ \SemantexRight #3
}
}
{ * } {
- \tl_put_left:Nn#5
+ \tl_set:Nn#5
{
- \exp_not:N
- \__semantex_parentheses_auto:nnn
+ \SemantexLeft #2
+ #4
+ \SemantexRight #3
}
}
}
{
- \tl_put_right:Nx#5
- {
- { \exp_not:V #1 }
- }
- \tl_put_left:Nn#5
+ \tl_set:Nn#5
{
- \exp_not:N
- \__semantex_parentheses_other:nnnn
+ \mathopen #1 #2
+ #4
+ \mathclose #1 #3
}
}
}
-\cs_new:Npn \__semantex_no_parentheses:n#1
+\cs_generate_variant:Nn \__semantex_symbol_parentheses_store:nnnnN { xxxxN }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMMANDS FOR THE RETURN ROUTINES
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\cs_new_protected:Npn\semantex_return:n#1
{
- \group_begin:
- \tl_clear:N\SemantexDelimiterSize
- #1
- \group_end:
+ % This is an umbrella key that runs all of the three
+ % return routines, innerreturn, rightreturn, and leftreturn
+ \semantex_inner_return:n { #1 }
+ \semantex_left_return:n { #1 }
+ \semantex_right_return:n { #1 }
}
-\cs_new:Npn \__semantex_no_parentheses_store:nN#1#2
-% The central command for handling the rendering of arguments with no parentheses around
+\cs_new_protected:Npn\semantex_pre_return:n#1
{
- \tl_set:Nx#2
- {
- { #1 }
- }
- \tl_put_left:Nn#2
+ % The pre-return routines are like the return routines, except
+ % they do not reset all the parameters we need. This is only
+ % intended for use when rendering and not outputting, as
+ % resetting parameters in this case would just waste
+ % time.
+ \semantex_inner_pre_return:n { #1 }
+ \semantex_left_pre_return:n { #1 }
+ \semantex_right_pre_return:n { #1 }
+}
+
+\cs_new_protected:Npn\semantex_inner_return:n#1
+{
+ \semantex_inner_pre_return:n { #1 }
+ \semantex_data_seq_clear:nn { #1 } { commands_sequence }
+}
+
+\cs_new_protected:Npn\semantex_inner_pre_return:n#1
+{
+ % This adds all of the commands added via the command key
+ % to the symbol
+ \semantex_data_seq_get_store:nnN { #1 } { commands_sequence }
+ \l__semantex_data_seq_commands_sequence_temp
+ \seq_map_inline:Nn \l__semantex_data_seq_commands_sequence_temp
{
- \exp_not:N
- \__semantex_no_parentheses:n
+ \semantex_data_tl_set:nnx { #1 } { symbol }
+ {
+ \exp_not:N ##1
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ }
+ }
}
+ \semantex_data_seq_clear:nn { #1 } { commands_sequence }
}
-\cs_new:Npn \__semantex_symbol_parentheses_normal:nnn#1#2#3
+\cs_new_protected:Npn\semantex_right_return:n#1
{
- \mathopen#1 #3 \mathclose#2
+ \semantex_right_indices_return_store:nN { #1 }
+ \l__semantex_rightreturn_right_indices_temp
+ \semantex_data_tl_put_right:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_rightreturn_right_indices_temp
+ }
+ \semantex_data_bool_get:nnTF { #1 } { leftargument }
+ {
+ % do nothing
+ }
+ {
+ \semantex_arg_return_store:nN { #1 } \l__semantex_rightreturn_arg_temp
+ \semantex_data_tl_put_right:nnx { #1 } { symbol }
+ {
+ \exp_not:V
+ \l__semantex_rightreturn_arg_temp
+ }
+ \semantex_data_tl_clear:nn { #1 } { arg }
+ \semantex_data_tl_clear:nn { #1 } { prearg }
+ \semantex_data_tl_clear:nn { #1 } { postarg }
+ \semantex_data_int_clear:nn { #1 } { numberofarguments }
+ \semantex_data_bool_set_false:nn { #1 } { nextargwithsep }
+ }
+ \semantex_data_tl_clear:nn { #1 } { upper }
+ \semantex_data_tl_clear:nn { #1 } { preupper }
+ \semantex_data_tl_clear:nn { #1 } { postupper }
+ \semantex_data_bool_set_false:nn { #1 } { nextupperwithsep }
+ \semantex_data_int_clear:nn { #1 } { numberofupperindices }
+ \semantex_data_tl_clear:nn { #1 } { lower }
+ \semantex_data_tl_clear:nn { #1 } { prelower }
+ \semantex_data_tl_clear:nn { #1 } { postlower }
+ \semantex_data_bool_set_false:nn { #1 } { nextlowerwithsep }
+ \semantex_data_int_clear:nn { #1 } { numberoflowerindices }
}
-\cs_new:Npn \__semantex_symbol_parentheses_auto:nnn#1#2#3
+\cs_new_protected:Npn\semantex_right_pre_return:n#1
{
- \mathopen{}\mathclose\bgroup\left#1
- #3
- \aftergroup\egroup\right#2
+ \semantex_right_indices_return_store:nN { #1 }
+ \l__semantex_rightreturn_right_indices_temp
+ \semantex_data_tl_put_right:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_rightreturn_right_indices_temp
+ }
+ \semantex_data_bool_get:nnTF { #1 } { leftargument }
+ {
+ % do nothing
+ }
+ {
+ \semantex_arg_return_store:nN { #1 } \l__semantex_rightreturn_arg_temp
+ \semantex_data_tl_put_right:nnx { #1 } { symbol }
+ {
+ \exp_not:V
+ \l__semantex_rightreturn_arg_temp
+ }
+ }
}
-\cs_new:Npn \__semantex_symbol_parentheses_other:nnnn#1#2#3#4
+\cs_new_protected:Npn \semantex_right_indices_return_store:nN#1#2
{
- \mathopen#4#1 #3 \mathclose#4#2
+ \tl_set:Nn#2{}
+ \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerindices }
+ {
+ \tl_put_right:Nx#2
+ {
+ \sb{
+ \semantex_data_tl_get_exp_not:nn { #1 } { prelower }
+ \semantex_data_tl_get_exp_not:nn { #1 } { lower }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postlower }
+ }
+ }
+ }
+ {
+ % do nothing
+ }
+ \semantex_data_int_if_positive:nnTF { #1 } { numberofupperindices }
+ {
+ \tl_put_right:Nx#2
+ {
+ \sp{
+ \semantex_data_tl_get_exp_not:nn { #1 } { preupper }
+ \semantex_data_tl_get_exp_not:nn { #1 } { upper }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postupper }
+ }
+ }
+ }
+ {
+ % do nothing
+ }
}
+\cs_new_protected:Npn\semantex_left_return:n#1
+{
+ \semantex_left_indices_return_store:nN { #1 }
+ \l__semantex_leftreturn_left_indices_temp
+ \semantex_data_tl_put_left:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_leftreturn_left_indices_temp
+ }
+ \semantex_data_bool_get:nnTF { #1 } { leftargument }
+ {
+ \semantex_arg_return_store:nN { #1 } \l__semantex_leftreturn_arg_temp
+ \semantex_data_tl_put_left:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_leftreturn_arg_temp
+ }
+ \semantex_data_tl_clear:nn { #1 } { arg }
+ \semantex_data_tl_clear:nn { #1 } { prearg }
+ \semantex_data_tl_clear:nn { #1 } { postarg }
+ \semantex_data_int_clear:nn { #1 } { numberofarguments }
+ \semantex_data_bool_set_false:nn { #1 } { nextargwithsep }
+ }
+ {
+ % do nothing
+ }
+ \semantex_data_tl_clear:nn { #1 } { upperleft }
+ \semantex_data_tl_clear:nn { #1 } { preupperleft }
+ \semantex_data_tl_clear:nn { #1 } { postupperleft }
+ \semantex_data_bool_set_false:nn { #1 } { nextupperleftwithsep }
+ \semantex_data_int_clear:nn { #1 } { numberofupperleftindices }
+ \semantex_data_tl_clear:nn { #1 } { lowerleft }
+ \semantex_data_tl_clear:nn { #1 } { prelowerleft }
+ \semantex_data_tl_clear:nn { #1 } { postlowerleft }
+ \semantex_data_bool_set_false:nn { #1 } { nextlowerleftwithsep }
+ \semantex_data_int_clear:nn { #1 } { numberoflowerleftindices }
+ \semantex_data_tl_set:nnx { #1 } { heightphantom }
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ }
+ \semantex_data_tl_clear:nn { #1 } { slantingphantom }
+}
-\cs_new:Npn \__semantex_symbol_parentheses_store:nnnnN#1#2#3#4#5
-% The central command handling the rendering of symbol parentheses
+\cs_new_protected:Npn\semantex_left_pre_return:n#1
{
- \tl_set:Nx#5
+ \semantex_left_indices_return_store:nN { #1 }
+ \l__semantex_leftreturn_left_indices_temp
+ \semantex_data_tl_put_left:nnx { #1 } { symbol }
{
- { #2 }
- { #3 }
- { #4 }
+ \exp_not:V \l__semantex_leftreturn_left_indices_temp
}
- \str_case:xnF { #1 } % This is where \big,\Big, etc. go. To my surprise, an x-type expansion did not cause any issues with this
+ \semantex_data_bool_get:nnTF { #1 } { leftargument }
{
- { normal } {
- \tl_put_left:Nn#5
+ \semantex_arg_return_store:nN { #1 } \l__semantex_leftreturn_arg_temp
+ \semantex_data_tl_put_left:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_leftreturn_arg_temp
+ }
+ }
+ {
+ % do nothing
+ }
+}
+
+\cs_new_protected:Npn \semantex_left_indices_return_store:nN#1#2
+{
+ \tl_set:Nn#2{}
+ \semantex_data_int_if_positive:nnTF { #1 } { numberofupperleftindices }
+ {
+ \tl_put_right:Nn #2 { \manualleftindex }
+ \tl_put_right:Nx #2
+ {
+ { \semantex_data_tl_get_exp_not:nn { #1 } { heightphantom } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { slantingphantom} }
{
- \exp_not:N
- \__semantex_symbol_parentheses_normal:nnn
+ \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { upperleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft }
}
}
- { auto } {
- \tl_put_left:Nn#5
+ \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerleftindices }
+ {
+ \tl_put_right:Nx#2
{
- \exp_not:N
- \__semantex_symbol_parentheses_auto:nnn
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft }
+ }
}
}
- { * } {
- \tl_put_left:Nn#5
+ {
+ \tl_put_right:Nn#2
{
- \exp_not:N
- \__semantex_symbol_parentheses_auto:nnn
+ { }
}
}
}
{
- \tl_put_right:Nx#5
+ \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerleftindices }
{
- { \exp_not:V #1 }
+ \tl_put_right:Nn #2 { \manualleftindex }
+ \tl_put_right:Nx #2
+ {
+ { \semantex_data_tl_get_exp_not:nn { #1 } { heightphantom } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { slantingphantom} }
+ { }
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft }
+ \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft }
+ }
+ }
}
- \tl_put_left:Nn#5
{
- \exp_not:N
- \__semantex_symbol_parentheses_other:nnnn
+ % do nothing
}
}
}
+\cs_new_protected:Npn \semantex_arg_return_store:nN#1#2
+{
+ \semantex_data_tl_get_store:nnN { #1 } { parsize } \l__arg_return_store_parsize_temp_tl
+ \semantex_data_bool_get:nnTF { #1 } { par }
+ {
+ \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
+ {
+ \semantex_parentheses_store:nN { #1 } #2
+ }
+ {
+ \tl_set:Nn#2{}
+ }
+ }
+ {
+ \semantex_data_bool_get:nnTF { #1 } { flexpar }
+ {
+ \semantex_data_int_if_greater_than_one:nnTF { #1 } { numberofarguments }
+ {
+ \semantex_parentheses_store:nN { #1 } #2
+ }
+ {
+ \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
+ {
+ \semantex_no_parentheses_store:nN { #1 } #2
+ }
+ {
+ \tl_set:Nn#2{}
+ }
+ }
+ }
+ {
+ \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
+ {
+ \semantex_no_parentheses_store:nN { #1 } #2
+ }
+ {
+ \tl_set:Nn#2{}
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn \__semantex_parentheses_store:nnnnN { xxxxN , ooooN }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% COMMANDS FOR MODIFYING AND OBTAINING DATA
+% COMMANDS HADNLING "spar" -- SYMBOL PARENTHESES
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%--------------------------------------------
-% Commands to modify and obtain data
-
-%\cs_new:Npn \semantex_data_tl_get_proto:nnn#1#2#3
-%{
-% % #1 = name of object
-% % #2 = the data to get
-% % #3 = also the name of object, but being stored
-% % when passing to the parent, in order to make
-% % error messages meaningful
-% \tl_if_exist:cTF { g__semantex_data_tl_#1_#2 }
-% {
-% \use:c { g__semantex_data_tl_#1_#2 }
-% }
-% {
-% \tl_if_eq:nnTF { #1 } { SemantexBaseObject }
-% {
-% \msg_error:nnnn { semantex } { data_tl_not_found } { #2 } { #3 }
-% }
-% {
-% \semantex_data_tl_get_proto:nnn { \semantex_data_tl_get:nn { #1 } { parent } } { #2 } { #1 }
-% }
-% }
-%}
-%
-%\cs_new:Npn \semantex_data_tl_get:nn#1#2
-%{
-% \semantex_data_tl_get_proto:nnn { #1 } { #2 } { #1 }
-%}
-
-
-
-% COMMANDS FOR HANDLING THE PARENT OF A CLASS/OBJECT:
-
-\cs_new:Npn \semantex_data_parent_get:n#1
-{
- % #1 = object
- % A command to get the parent of an object
- \use:c { g__semantex_data_tl_#1_parent }
-}
-
-\cs_new:Npn \semantex_data_parent_set:nn#1#2
+\cs_new_protected:Npn\semantex_spar:nn#1#2
{
- \semantex_class_if_exist:NTF { #2 }
+ % Abbreviation for "symbol parentheses"
+ % Adds parentheses around the current symbol
+ \semantex_return:n { #1 }
+ \tl_if_blank:nTF { #2 }
{
- \tl_set:cx { g__semantex_data_tl_#1_parent } { class_\cs_to_str:N#2 }
+ \semantex_data_tl_get_store:nnN { #1 } { sparsize }
+ \l__semantex_spar_sparsize_temp_tl
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_parent_set_temp_tl
- \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_parent_set_temp_tl } { parent } { #2 }
+ \tl_set:Nn \l__semantex_spar_sparsize_temp_tl { #2 }
}
+ \__semantex_symbol_parentheses_store:xxxxN
+ { \exp_not:V\l__semantex_spar_sparsize_temp_tl }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { leftspar } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { rightspar } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
+ \l__semantex_spar_temp_tl
+ \semantex_data_tl_set:nnx { #1 } { symbol }
+ {
+ \exp_not:V \l__semantex_spar_temp_tl
+ }
+ \semantex_spar_set_height_phantom_to_parentheses_size:nx { #1 }
+ { \exp_not:V \l__semantex_spar_sparsize_temp_tl }
}
-\cs_new:Npn \semantex_data_class_set:nn#1#2
+\cs_new_protected:Npn\semantex_other_spar:nnn#1#2#3
{
- \semantex_class_if_exist:NTF { #2 }
- {
- \tl_set:cx { g__semantex_data_tl_#1_parent } { class_\cs_to_str:N#2 }
- }
+ \semantex_return:n { #1 }
+ \semantex_data_tl_get_store:nnN { #1 } { sparsize }
+ \l__semantex_other_spar_sparsize_temp_tl
+ \__semantex_symbol_parentheses_store:xxxxN
+ { \exp_not:V \l__semantex_other_spar_sparsize_temp_tl }
+ { \exp_not:n { #2 } }
+ { \exp_not:n { #3 } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
+ \l__semantex_other_spar_temp_tl
+ \semantex_data_tl_set:nnx { #1 } { symbol }
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_class_set_temp_tl
- \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_class_set_temp_tl } { class } { #2 }
+ \exp_not:V \l__semantex_other_spar_temp_tl
}
+ \semantex_spar_set_height_phantom_to_parentheses_size:nx { #1 }
+ { \exp_not:V \l__semantex_other_spar_sparsize_temp_tl }
}
-\cs_generate_variant:Nn \semantex_data_class_set:nn { xn }
-
-\cs_new:Npn \semantex_data_copy_object:nn#1#2
+\cs_new_protected:Npn\semantex_other_spar_with_size:nnnn#1#2#3#4
{
- \semantex_object_if_exist:NTF { #2 }
- {
- \tl_set:cx { g__semantex_data_tl_#1_parent } { object_\cs_to_str:N#2 }
- }
+ \semantex_return:n { #1 }
+ \__semantex_symbol_parentheses_store:xxxxN
+ { \exp_not:n { #4 } }
+ { \exp_not:n { #2 } }
+ { \exp_not:n { #3 } }
+ { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
+ \l__semantex_other_spar_with_size_temp_tl
+ \semantex_data_tl_set:nnx { #1 } { symbol }
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_copy_object_temp_tl
- \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_copy_object_temp_tl } { copy } { #2 }
+ \exp_not:V \l__semantex_other_spar_with_size_temp_tl
}
+ \semantex_spar_set_height_phantom_to_parentheses_size:nn { #1 }
+ { #4 }
}
-\cs_new:Npn \semantex_data_clone_object:nn#1#2
+\cs_new_protected:Npn\semantex_spar_set_height_phantom_to_parentheses_size:nn#1#2
{
- \semantex_object_if_exist:NTF { #2 }
+ % #1 = register
+ % #2 = parentheses size
+ \str_case:nnF { #2 }
{
- \tl_set:cx { g__semantex_data_tl_#1_parent } { object_\cs_to_str:N#2 }
+ { normal } {
+ \semantex_data_tl_set:nnn { #1 } { heightphantom } { \vert }
+ }
+ { auto } {
+ \semantex_data_tl_set:nnx { #1 } { heightphantom }
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ }
+ }
+ { * } {
+ \semantex_data_tl_set:nnx { #1 } { heightphantom }
+ {
+ \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ }
+ }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_clone_object_temp_tl
- \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_clone_object_temp_tl } { clone } { #2 }
+ \semantex_data_tl_set:nnx { #1 } { heightphantom }
+ {
+ \exp_not:n { #2 \vert }
+ }
}
}
-% COMMANDS FOR HANDLING DATA CONSISTING OF COMMAND SEQUENCES:
+\cs_generate_variant:Nn \semantex_spar_set_height_phantom_to_parentheses_size:nn { nx }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMMANDS FOR MODIFYING AND OBTAINING DATA
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% COMMANDS FOR HANDLING THE PARENT OF A CLASS/OBJECT:
-\cs_new:Npn\semantex_data_cs_set:nnn#1#2#3
+\cs_new:Npn \semantex_data_parent_get:n#1
{
- \cs_set:cn { __semantex_data_cs_#1_#2 } { #3 }
+ % #1 = register
+ % A command to get the parent of an object
+ \use:c { g__semantex_data_tl_#1_parent }
}
-\cs_generate_variant:Nn \cs_set:Nn { cn }
-
-\cs_generate_variant:Nn \semantex_data_cs_set:nnn { nno , nnV , nnv }
+\cs_new_protected:Npn \semantex_data_parent_set:nn#1#2
+{
+ % #1 = reigster
+ % Sets the parent
+ \semantex_class_if_exist:NTF { #2 }
+ {
+ \tl_set:cx { g__semantex_data_tl_#1_parent } { \semantex_class_to_register:N #2 }
+ }
+ {
+ \semantex_msg_error:nnnn { #1 } { class_not_found } { parent } { #2 }
+ }
+}
-\cs_new:Npn\semantex_data_cs_get:nn#1#2
+\cs_new_protected:Npn \semantex_data_class_set:nn#1#2
{
- % #1 = name of the object
- % #2 = command sequence to get
- \cs_if_exist:cTF { __semantex_data_cs_#1_#2 }
+ % #1 = register
+ % Sets the parent to be a class
+ \semantex_class_if_exist:NTF { #2 }
{
- \use:c { __semantex_data_cs_#1_#2 }
+ \tl_set:cx { g__semantex_data_tl_#1_parent } { \semantex_class_to_register:N #2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- % should probably throw an error by now, but later!
- }
- {
- \semantex_data_cs_get:fn { \semantex_data_parent_get:n {#1} } { #2 }
- }
+ \semantex_msg_error:nnnn { #1 } { class_not_found } { class } { #2 }
}
}
-\cs_generate_variant:Nn \semantex_data_cs_get:nn { fn }
+\cs_generate_variant:Nn \semantex_data_class_set:nn { xn }
-\cs_new:Npn\semantex_data_cs_get_exp_not:nn#1#2
+\cs_new_protected:Npn \semantex_data_copy_object:nn#1#2
{
- % #1 = name of the object
- % #2 = command sequence to get
- \cs_if_exist:cTF { __semantex_data_cs_#1_#2 }
+ \semantex_object_if_exist:NTF { #2 }
{
- \exp_not:c { __semantex_data_cs_#1_#2 }
+ \tl_set:cx { g__semantex_data_tl_#1_parent } { \semantex_object_to_register:N #2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- % should probably throw an error by now, but later!
- }
- {
- \semantex_data_cs_get_exp_not:fn { \semantex_data_parent_get:n {#1} } { #2 }
- }
+ \semantex_msg_error:nnnn { #1 } { object_not_found } { copy } { #2 }
}
}
-\cs_generate_variant:Nn \semantex_data_cs_get_exp_not:nn { fn }
-
-\cs_new:Npn\semantex_data_cs_clear:nn#1#2
+\cs_new_protected:Npn \semantex_data_clone_object:nn#1#2
{
- \cs_set:cn { __semantex_data_cs_#1_#2 } {}
+ \semantex_object_if_exist:NTF { #2 }
+ {
+ \tl_set:cx { g__semantex_data_tl_#1_parent } { \semantex_object_to_register:N #2 }
+ }
+ {
+ \semantex_msg_error:nnnn { #1 } { object_not_found } { clone } { #2 }
+ }
}
% COMMANDS FOR HANDLING DATA CONSISTING OF TOKEN LISTS
@@ -1704,24 +2259,19 @@
\__semantex_data_tl_get_auxiliary:nnn { #1 } { #2 } { #1 }
}
-\cs_generate_variant:Nn \str_if_eq:nnTF { fnTF }
-
-\cs_generate_variant:Nn \tl_if_eq:nnTF { fnTF }
-
\cs_new:Npn \__semantex_data_tl_get_auxiliary:nnn#1#2#3
{
- % #1 = name of class/object
+ % #1 = name of register
% #2 = the data to get
- % #3 = the original class/object, used for error messaging
+ % #3 = the original register, used for error messaging
\tl_if_exist:cTF { g__semantex_data_tl_#1_#2 }
{
\use:c { g__semantex_data_tl_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexBaseObject } % Apparently, f-type expansion seemed to work here for once
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \l__semantex_data_tl_get_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #3 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1731,40 +2281,26 @@
\cs_generate_variant:Nn \__semantex_data_tl_get_auxiliary:nnn { fnn }
-%\cs_new:Npn \semantex_data_tl_get_exp_not:nn#1#2
-%{
-% % #1 = name of object
-% % #2 = the data to get
-% \tl_if_exist:cTF { g__semantex_data_tl_#1_#2 }
-% {
-% \exp_not:v { g__semantex_data_tl_#1_#2 }
-% }
-% {
-% \semantex_data_tl_get:nn { \semantex_data_parent_get:n { #1 } } { #2 }
-% }
-%}
-
\cs_new:Npn \semantex_data_tl_get_exp_not:nn#1#2
{
- % #1 = name of object
+ % #1 = name of register
% #2 = the data to get
\__semantex_data_tl_get_exp_not_auxiliary:nnn { #1 } { #2 } { #1 }
}
\cs_new:Npn \__semantex_data_tl_get_exp_not_auxiliary:nnn#1#2#3
{
- % #1 = name of class/object
+ % #1 = name of register
% #2 = the data to get
- % #3 = the original class/object, used for error messaging
+ % #3 = the original register, used for error messaging
\tl_if_exist:cTF { g__semantex_data_tl_#1_#2 }
{
\exp_not:v { g__semantex_data_tl_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexBaseObject } % Apparently, f-type expansion seemed to work here for once
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \l__semantex_data_tl_get_exp_not_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_exp_not_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #3 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_exp_not_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1774,8 +2310,7 @@
\cs_generate_variant:Nn \__semantex_data_tl_get_exp_not_auxiliary:nnn { fnn }
-
-\cs_new:Npn \semantex_data_tl_get_store:nnN#1#2#3% maybe should be PROTECTED??
+\cs_new_protected:Npn \semantex_data_tl_get_store:nnN#1#2#3
{
% #1 = name of object
% #2 = the data to get
@@ -1783,11 +2318,12 @@
\__semantex_data_tl_get_store_auxiliary:nnNn { #1 } { #2 } #3 { #1 }
}
-\cs_new:Npn \__semantex_data_tl_get_store_auxiliary:nnNn#1#2#3#4% maybe should be PROTECTED??
+\cs_new_protected:Npn \__semantex_data_tl_get_store_auxiliary:nnNn#1#2#3#4
{
- % #1 = name of object
+ % #1 = name of register
% #2 = the data to get
% #3 = where to store it
+ % #4 = name of original register, for error message purposes
\tl_if_exist:cTF { g__semantex_data_tl_#1_#2 }
{
\tl_set_eq:Nc #3 { g__semantex_data_tl_#1_#2 }
@@ -1795,8 +2331,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_tl_get_store_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_store_auxiliary_temp_tl } { #2 }
+ \msg_error:nnn { #4 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1808,17 +2343,19 @@
\cs_generate_variant:Nn \semantex_data_tl_get_store:nnN { nnc }
-\cs_new:Npn\semantex_data_tl_provide:nn#1#2
+\cs_new_protected:Npn\semantex_data_tl_provide:nn#1#2
{
+ % #1 = name of register
+ % #2 = the data to provide
\tl_if_exist:cF { g__semantex_data_tl_#1_#2 }
{
\tl_set:cn { g__semantex_data_tl_#1_#2 } {}
}
}
-\cs_new:Npn\semantex_data_tl_inherit:nn#1#2
+\cs_new_protected:Npn\semantex_data_tl_inherit:nn#1#2
{
- % #1 = object
+ % #1 = register
% #2 = piece of token list data
% Takes the data #2 from the parent of #1 and saves it locally
% to the object #1. After this, no more inheritance is taking place
@@ -1830,21 +2367,15 @@
}
}
-\cs_set_eq:NN\semantex_data_tl_inherit_x:nn\semantex_data_tl_inherit:nn
- % The same as inherit; historically, this one did an x type
- % expansion first, but after changes in other places, this
- % no longer appeard to be necessary. I decided to keep up the
- % separation of the two, just in case.
-
-\cs_new:Npn \semantex_data_tl_set:nnn#1#2#3
+\cs_new_protected:Npn \semantex_data_tl_set:nnn#1#2#3
{
\tl_set:cn { g__semantex_data_tl_#1_#2 } { #3 }
}
-\cs_generate_variant:Nn \semantex_data_tl_set:nnn { nnx , xnn , xnx }
+\cs_generate_variant:Nn \semantex_data_tl_set:nnn { nnx }
-\cs_new:Npn \semantex_data_tl_put_right:nnn#1#2#3
+\cs_new_protected:Npn \semantex_data_tl_put_right:nnn#1#2#3
{
\semantex_data_tl_inherit:nn { #1 } { #2 }
\tl_put_right:cn { g__semantex_data_tl_#1_#2 } { #3 }
@@ -1852,7 +2383,7 @@
\cs_generate_variant:Nn \semantex_data_tl_put_right:nnn { nnx }
-\cs_new:Npn \semantex_data_tl_put_left:nnn#1#2#3
+\cs_new_protected:Npn \semantex_data_tl_put_left:nnn#1#2#3
{
\semantex_data_tl_inherit:nn { #1 } { #2 }
\tl_put_left:cn { g__semantex_data_tl_#1_#2 } { #3 }
@@ -1860,7 +2391,7 @@
\cs_generate_variant:Nn \semantex_data_tl_put_left:nnn { nnx }
-\cs_new:Npn \semantex_data_tl_clear:nn#1#2
+\cs_new_protected:Npn \semantex_data_tl_clear:nn#1#2
{
\semantex_data_tl_provide:nn { #1 } { #2 }
\tl_clear:c { g__semantex_data_tl_#1_#2 }
@@ -1868,7 +2399,7 @@
% DATA OF TYPE INTEGER:
-\cs_new:Npn\semantex_data_int_provide:nn#1#2
+\cs_new_protected:Npn\semantex_data_int_provide:nn#1#2
{
\bool_if_exist:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
{
@@ -1884,13 +2415,14 @@
}
}
-\cs_new:Npn\semantex_data_int_inherit:nn#1#2
+\cs_new_protected:Npn\semantex_data_int_inherit:nn#1#2
{
\bool_if_exist:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
{
\bool_if:cF { g__semantex_data_int_#1_#2_bool_if_provided }
{
- \semantex_data_int_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 } { g__semantex_data_int_#1_#2 }
+ \semantex_data_int_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 }
+ { g__semantex_data_int_#1_#2 }
\bool_set_true:c { g__semantex_data_int_#1_#2_bool_if_provided }
}
}
@@ -1898,21 +2430,21 @@
\bool_new:c { g__semantex_data_int_#1_#2_bool_if_provided }
\bool_set_true:c { g__semantex_data_int_#1_#2_bool_if_provided }
\int_new:c { g__semantex_data_int_#1_#2 }
- \semantex_data_int_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 } { g__semantex_data_int_#1_#2 }
+ \semantex_data_int_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 }
+ { g__semantex_data_int_#1_#2 }
}
}
-\cs_new:Npn \semantex_data_int_get:nn#1#2{% maybe should be PROTECTED??
+\cs_new:Npn \semantex_data_int_get:nn#1#2{
% #1 = name of object
% #2 = the intuence to get
- % #3 = the command to store it in
\__semantex_data_int_get_auxiliary:nnn { #1 } { #2 } { #1 }
}
-\cs_new:Npn \__semantex_data_int_get_auxiliary:nnn#1#2#3{% maybe should be PROTECTED??
+\cs_new:Npn \__semantex_data_int_get_auxiliary:nnn#1#2#3{
% #1 = name of object
% #2 = the intuence to get
- % #3 = the command to store it in
+ % #3 = stores the original register, for error message purposes
\bool_if_exist:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
{
\bool_if:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
@@ -1922,8 +2454,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #3 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1933,8 +2464,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #3 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1945,14 +2475,14 @@
\cs_generate_variant:Nn \__semantex_data_int_get_auxiliary:nnn { fnn }
-\cs_new:Npn \semantex_data_int_get_store:nnN#1#2#3{% maybe should be PROTECTED??
+\cs_new_protected:Npn \semantex_data_int_get_store:nnN#1#2#3{
% #1 = name of object
% #2 = the intuence to get
% #3 = the command to store it in
\__semantex_data_int_get_store_auxiliary:nnNn { #1 } { #2 } #3 { #1 }
}
-\cs_new:Npn\__semantex_data_int_get_store_auxiliary:nnNn#1#2#3#4{% maybe should be PROTECTED??
+\cs_new_protected:Npn\__semantex_data_int_get_store_auxiliary:nnNn#1#2#3#4{
% #1 = name of object
% #2 = the intuence to get
% #3 = the command to store it in
@@ -1965,8 +2495,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #4 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1976,8 +2505,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp_tl
- \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #4 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1989,59 +2517,29 @@
\cs_generate_variant:Nn \semantex_data_int_get_store:nnN { nnc }
-\cs_new:Npn\semantex_data_int_incr:nn#1#2
+\cs_new_protected:Npn\semantex_data_int_incr:nn#1#2
{
\semantex_data_int_inherit:nn { #1 } { #2 }
\int_incr:c { g__semantex_data_int_#1_#2 }
}
-\cs_new:Npn\semantex_data_int_set:nnn#1#2#3
+\cs_new_protected:Npn\semantex_data_int_set:nnn#1#2#3
{
\semantex_data_int_provide:nn { #1 } { #2 }
\int_set:cn { g__semantex_data_int_#1_#2 } { #3 }
}
-\cs_new:Npn\semantex_data_int_if_positive:nnTF#1#2#3#4
+\cs_new_protected:Npn\semantex_data_int_if_positive:nnTF#1#2#3#4
{
-% \semantex_data_int_inherit:nn { #1 } { #2 } % This should not be necessary, ubt is, for unkonwn reasons
\int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } > { 0 } { #3 } { #4 }
}
-\cs_generate_variant:Nn\semantex_data_int_if_positive:nnTF { nnT }
-
-\cs_new:Npn\semantex_data_int_if_positive:nnF#1#2#3
-{
- \semantex_data_int_if_positive:nnTF { #1 } { #2 } { } { #3 }
-}
-
-\cs_new:Npn\semantex_data_int_if_greater_than_one:nnTF#1#2#3#4
+\cs_new_protected:Npn\semantex_data_int_if_greater_than_one:nnTF#1#2#3#4
{
\int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } > { 1 } { #3 } { #4 }
}
-\cs_generate_variant:Nn\semantex_data_int_if_greater_than_one:nnTF { nnT }
-
-\cs_new:Npn\semantex_data_int_if_greater_than_one:nnF#1#2#3
-{
- \semantex_data_int_if_greater_than_one:nnTF { #1 } { #2 } { } { #3 }
-}
-
-\cs_new:Npn\semantex_data_int_if_greater_than:nnnTF#1#2#3#4#5
-{
- \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } > { #3 } { #4 } { #5 }
-}
-
-\cs_new:Npn\semantex_data_int_if_less_than:nnnTF#1#2#3#4#5
-{
- \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } < { #3 } { #4 } { #5 }
-}
-
-\cs_new:Npn\semantex_data_int_if_equal:nnnTF#1#2#3#4#5
-{
- \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } < { #3 } { #4 } { #5 }
-}
-
-\cs_new:Npn\semantex_data_int_clear:nn#1#2
+\cs_new_protected:Npn\semantex_data_int_clear:nn#1#2
{
\semantex_data_int_provide:nn { #1 } { #2 }
\int_zero:c { g__semantex_data_int_#1_#2 }
@@ -2049,7 +2547,7 @@
% COMMANDS FOR HANDLING DATA OF SEQUENCE TYPE
-\cs_new:Npn \semantex_data_seq_get_store:nnN#1#2#3{% maybe should be PROTECTED??
+\cs_new_protected:Npn \semantex_data_seq_get_store:nnN#1#2#3{
% #1 = name of object
% #2 = the sequence to get
% #3 = the command to store it in
@@ -2060,17 +2558,17 @@
\seq_set_eq:Nc#3 { g__semantex_data_seq_#1_#2 }
}
{
- \semantex_data_seq_get_store:nnN{ \semantex_data_parent_get:n { #1 } }{#2}#3
+ \semantex_data_seq_get_store:nnN { \semantex_data_parent_get:n { #1 } } { #2 } #3
}
}
{
- \semantex_data_seq_get_store:nnN{ \semantex_data_parent_get:n { #1 } }{#2}#3%
+ \semantex_data_seq_get_store:nnN { \semantex_data_parent_get:n { #1 } } { #2 } #3
}
}
-\cs_generate_variant:Nn \semantex_data_seq_get_store:nnN { vnN, nnc, vnc } % Remove these later
+\cs_generate_variant:Nn \semantex_data_seq_get_store:nnN { nnc }
-\cs_new:Npn\semantex_data_seq_provide:nn#1#2
+\cs_new_protected:Npn\semantex_data_seq_provide:nn#1#2
{
\bool_if_exist:cTF { g__semantex_data_seq_#1_#2_bool_if_provided }
{
@@ -2086,7 +2584,7 @@
}
}
-\cs_new:Npn\semantex_data_seq_inherit:nn#1#2
+\cs_new_protected:Npn\semantex_data_seq_inherit:nn#1#2
{
\bool_if_exist:cTF { g__semantex_data_seq_#1_#2_bool_if_provided }
{
@@ -2097,20 +2595,20 @@
}
}
{
- \semantex_data_seq_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 } { g__semantex_data_seq_#1_#2 }
\bool_new:c { g__semantex_data_seq_#1_#2_bool_if_provided }
\bool_set_true:c { g__semantex_data_seq_#1_#2_bool_if_provided }
\seq_if_exist:cF { g__semantex_data_seq_#1_#2 } { \seq_new:c { g__semantex_data_seq_#1_#2 } }
+ \semantex_data_seq_get_store:nnc { \semantex_data_parent_get:n { #1 } } { #2 } { g__semantex_data_seq_#1_#2 }
}
}
-\cs_new:Npn\semantex_data_seq_put_right:nnn#1#2#3
+\cs_new_protected:Npn\semantex_data_seq_put_right:nnn#1#2#3
{
\semantex_data_seq_inherit:nn { #1 } { #2 }
\seq_put_right:cn { g__semantex_data_seq_#1_#2 } { #3 }
}
-\cs_new:Npn\semantex_data_seq_clear:nn#1#2
+\cs_new_protected:Npn\semantex_data_seq_clear:nn#1#2
{
\semantex_data_seq_provide:nn { #1 } { #2 }
\seq_clear:c { g__semantex_data_seq_#1_#2 }
@@ -2151,16 +2649,16 @@
}
}
-\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { onTF, fnTF, xnTF, vnTF, nnT }
+\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { fnTF, nnT }
\cs_new:Npn\semantex_data_bool_get:nnF#1#2#3
{
\semantex_data_bool_get:nnTF { #1 } { #2 } { } { #3 }
}
-\cs_new:Npn\semantex_data_bool_provide:nn#1#2
+\cs_new_protected:Npn\semantex_data_bool_provide:nn#1#2
{
- % #1 = name of the object
+ % #1 = name of the register
% #2 = boolean to provide
\bool_if_exist:cTF { g__semantex_data_bool_#1_if_#2_bool_if_provided }
{
@@ -2176,73 +2674,99 @@
}
}
-\cs_new:Npn\semantex_data_bool_set_true:nn#1#2
+\cs_new_protected:Npn\semantex_data_bool_set_true:nn#1#2
{
- % #1 = name of the object
- % #2 = boolean to provide
+ % #1 = name of the register
+ % #2 = boolean to set true
\semantex_data_bool_provide:nn { #1 } { #2 }
\bool_set_true:c { g__semantex_data_bool_#1_if_#2 }
}
-\cs_generate_variant:Nn \semantex_data_bool_set_true:nn { xn }
-
-\cs_new:Npn\semantex_data_bool_set_false:nn#1#2
+\cs_new_protected:Npn\semantex_data_bool_set_false:nn#1#2
{
- % #1 = name of the object
- % #2 = boolean to provide
+ % #1 = name of the register
+ % #2 = boolean to set false
\semantex_data_bool_provide:nn { #1 } { #2 }
\bool_set_false:c { g__semantex_data_bool_#1_if_#2 }
}
-% COMMANDS FOR HANDLING COMMAND SEQUENCE DATA AND KEYVAL SYNTAX:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMMANDS FOR HANDLING KEYVAL INTERFACES
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_generate_variant:Nn \keyval_parse:NNn { cco , ccn }
+\cs_generate_variant:Nn \semantex_keyval_parse:NNn { ccn }
-\cs_new:Npn \semantex_keys_set:nn#1#2
+\cs_new_protected:Npn \semantex_keys_set:nn#1#2
{
- \semantex_provide_user_commands:n { #1 }
+ \cs_set_eq:NN\l__semantex_keys_set_old_this_temp_cs:\semantex_this:
+ \cs_set:Nn\semantex_this:{#1}
% The central command for doing keyval setup
% #1 = object
% #2 = keys
- \keyval_parse:ccn % Used to use o-type expansions, but no longer seems necessary
- { __semantex_data_cs_#1_singlekey:n }
- { __semantex_data_cs_#1_valuekey:nn }
- { #2 }
+ \semantex_keyval_parse:ccn % Used to use o-type expansions, but no longer seems necessary
+ { __semantex_data_cs_#1_singlekey:n }
+ { __semantex_data_cs_#1_valuekey:nn }
+ { #2 }
+ \cs_set_eq:NN\semantex_this:\l__semantex_keys_set_old_this_temp_cs:
}
-\cs_new:Npn \semantex_arg_keys_set:nn#1#2
+\cs_new_protected:Npn \semantex_keys_set_x:nn#1#2
+{
+ \cs_set_eq:NN\l__semantex_keys_set_old_this_temp_cs:\semantex_this:
+ \cs_set:Nn\semantex_this:{#1}
+ % The central command for doing expanded keyval setup
+ % #1 = object
+ % #2 = keys
+ \semantex_keyval_parse:ccn % Used to use o-type expansions, but no longer seems necessary
+ { __semantex_data_cs_#1_singlekey_x:n }
+ { __semantex_data_cs_#1_valuekey:nx }
+ { #2 }
+ \cs_set_eq:NN\semantex_this:\l__semantex_keys_set_old_this_temp_cs:
+}
+
+\cs_new_protected:Npn \semantex_arg_keys_set:nn#1#2
{
% The central command for doing keyval setup for the argument
% #1 = object
% #2 = keys
- \keyval_parse:ccn % See last command
- { __semantex_data_cs_#1_arg_singlekey:n }
- { __semantex_data_cs_#1_arg_valuekey:nn }
- { #2 }
+ \semantex_keyval_parse:ccn % See last command
+ { __semantex_data_cs_#1_arg_singlekey:n }
+ { __semantex_data_cs_#1_arg_valuekey:nn }
+ { #2 }
+}
+
+\cs_new_protected:Npn \semantex_arg_keys_set_x:nn#1#2
+{
+ % The central command for doing expanded keyval setup for the argument
+ % #1 = object
+ % #2 = keys
+ \semantex_keyval_parse:ccn % See last command
+ { __semantex_data_cs_#1_arg_singlekey_x:n }
+ { __semantex_data_cs_#1_arg_valuekey:nx }
+ { #2 }
}
\cs_generate_variant:Nn \clist_map_function:nN { nc }
-\cs_new:Npn \semantex_arg_singlekeys_set:nn#1#2
+\cs_new_protected:Npn \semantex_arg_singlekeys_set:nn#1#2
{
% This command is necessary because you sometimes want to only allow singlekeys
% and not valuekeys in arguments (for instance, if you allow valuekeys, anything
- % containing an equality sign will die horribly in the argument of any object
+ % containing an equality sign will die horribly in the argument of any object)
\clist_map_function:nc {#2} { __semantex_data_cs_#1_arg_singlekey:n }
}
-\cs_generate_variant:Nn \semantex_keys_set:nn { xn }
-
\DeclareDocumentCommand\SetupClass{mm}{ % a user-level command for setting up the object
% #1 = class
% #2 = setup
\semantex_class_if_exist:NTF #1
{
- \semantex_keys_set:xn { class_\cs_to_str:N #1 }{ #2 }
+ \semantex_keys_set:nn { \semantex_class_to_register:N #1 }{ #2 }
}
{
- \semantex_error_output_format:xN { class_\cs_to_str:N #1 } \l__setup_class_temp_tl
- \msg_error:nnx { semantex } { setup_unknown_class } { \l__setup_class_temp_tl }
+ \semantex_msg_error:nn { \semantex_class_to_register:N #1 } { setup_unknown_class }
}
}
@@ -2251,25 +2775,25 @@
% #2 = setup
\semantex_object_if_exist:NTF #1
{
- \semantex_keys_set:xn { object_\cs_to_str:N #1 }{ #2 }
+ \semantex_keys_set:nn { \semantex_object_to_register:N #1 }{ #2 }
}
{
- \semantex_error_output_format:xN { object_\cs_to_str:N #1 } \l__setup_object_temp_tl
- \msg_error:nnx { semantex } { setup_unknown_object } { \l__setup_object_temp_tl }
+ \semantex_msg_error:nn { \semantex_object_to_register:N #1 } { setup_unknown_object }
}
}
-\cs_new:Npn\semantex_valuekey:nnn#1#2#3
+\cs_new_protected:Npn\semantex_valuekey:nnn#1#2#3
{
+ % The central command for executing valuekeys,
+ % i.e. keys taking a value
+ % #1 = register
+ % #2 = name of the key
+ % #3 = value
\__semantex_valuekey:nnnn { #1 } { #2 } { #3 } { #1 }
}
-\cs_new:Npn \__semantex_valuekey:nnnn#1#2#3#4
+\cs_new_protected:Npn \__semantex_valuekey:nnnn#1#2#3#4
{
- % Takes care of valuekeys, keys taking a value
- % #1 = class/object
- % #2 = name of the key
- % #3 = value
\cs_if_exist:cTF { __semantex_data_cs_custom_valuekey_#1_#2:nn }
{
\use:c { __semantex_data_cs_custom_valuekey_#1_#2:nn } { #4 } { #3 }
@@ -2277,8 +2801,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_valuekey_unknown_key_temp_tl
- \msg_error:nnxn { semantex } { valuekey_not_found } { \l__semantex_valuekey_unknown_key_temp_tl } { #2 }
+ \semantex_msg_error:nnn { #4 } { valuekey_not_found } { #2 }
}
{
\__semantex_valuekey:fnnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
@@ -2288,18 +2811,37 @@
\cs_generate_variant:Nn \__semantex_valuekey:nnnn { fnnn }
-\cs_generate_variant:Nn \semantex_valuekey:nnn { xnn }
+\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-\cs_new:Npn\semantex_singlekey:nn#1#2
+\cs_new_protected:Npn\semantex_base_object_valuekey:nnn#1#2#3
{
- \__semantex_singlekey:nnn { #1 } { #2 } { #1 }
+ % Skips through the steps above to go directly to the
+ % valuekey as defined by \SemantexBaseObject.
+ % This is only being used in the rendering routine,
+ % so so far, an corresponding command for singlekeys
+ % has not been needed.
+ % #1 = register
+ % #2 = key
+ % #3 = value
+ \use:c { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_#2:nn } { #1 } { #3 }
}
-\cs_new:Npn\__semantex_singlekey:nnn#1#2#3
+\cs_new_protected:Npn\semantex_singlekey:nn#1#2
{
- % #1 = class/object
+ % The central command for executing singlekeys,
+ % i.e. keys taking no
+ % #1 = register
% #2 = name of the key
- \cs_if_exist:cTF { \tl_to_str:n{__semantex_data_cs_custom_singlekey_#1_#2:n } }
+ \__semantex_singlekey:nnn { #1 } { #2 } { #1 }
+}
+
+\cs_new_protected:Npn\__semantex_singlekey:nnn#1#2#3
+{
+ \cs_if_exist:cTF { __semantex_data_cs_custom_singlekey_#1_\tl_to_str:n{ #2 }:n }
+ % This is necessary in order to allow the case where something nasty
+ % and unexpandable gets passed as singlekey -- this often happens
+ % because of the convention that \<Object>[<something not a key>]
+ % just prints <something not a key>
{
\use:c { __semantex_data_cs_custom_singlekey_#1_#2:n } { #3 }
}
@@ -2307,7 +2849,6 @@
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
\semantex_valuekey:nnn { #3 } { default } { #2 }
- %#2
}
{
\__semantex_singlekey:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2317,22 +2858,48 @@
\cs_generate_variant:Nn \__semantex_singlekey:nnn { fnn }
-\cs_generate_variant:Nn \semantex_singlekey:nn { xn }
+\cs_new_protected:Npn\semantex_singlekey_x:nn#1#2
+{
+ % The central command for executing expanded singlekeys,
+ % i.e. keys taking no
+ % #1 = register
+ % #2 = name of the key
+ \__semantex_singlekey_x:nnn { #1 } { #2 } { #1 }
+}
-\cs_new:Npn\semantex_arg_valuekey:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_singlekey_x:nnn#1#2#3
{
- % CHANGE ORDER OF KEYS
- \__semantex_arg_valuekey:nnnn { #1 } { #2 } { #3 } { #1 }
+ \cs_if_exist:cTF { __semantex_data_cs_custom_singlekey_#1_\tl_to_str:n{ #2 }:n }
+ {
+ \use:c { __semantex_data_cs_custom_singlekey_#1_#2:n } { #3 }
+ % and no, we don't want :x here; we don't need to expand
+ % the name of the register
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_valuekey:nnx { #3 } { default } { #2 }
+ }
+ {
+ \__semantex_singlekey_x:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
+ }
+ }
}
-\cs_new:Npn \__semantex_arg_valuekey:nnnn#1#2#3#4
+\cs_generate_variant:Nn \__semantex_singlekey_x:nnn { fnn }
+
+\cs_new_protected:Npn\semantex_arg_valuekey:nnn#1#2#3
{
- % Takes care of valuekeys, keys with a value
- % For the sake of implementation, the arguments
- % come in a strange order
- % #1 = class/object
+ % Takes care of argument valuekeys,
+ % i.e. argument keys with a value
+ % #1 = register
% #2 = name of the key
% #3 = value of the key
+ \__semantex_arg_valuekey:nnnn { #1 } { #2 } { #3 } { #1 }
+}
+
+\cs_new_protected:Npn \__semantex_arg_valuekey:nnnn#1#2#3#4
+{
\cs_if_exist:cTF { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn }
{
\use:c { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn } { #4 } { #3 }
@@ -2340,8 +2907,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_valuekey_unknown_arg_key_temp_tl
- \msg_error:nnxn { semantex } { arg_valuekey_not_found } { \l__semantex_valuekey_unknown_arg_key_temp_tl } { #2 }
+ \msg_error:nnn { #1 } { arg_valuekey_not_found } { #2 }
}
{
\__semantex_arg_valuekey:fnnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
@@ -2351,16 +2917,20 @@
\cs_generate_variant:Nn \__semantex_arg_valuekey:nnnn { fnnn }
-\cs_new:Npn \semantex_arg_singlekey:nn#1#2
+\cs_generate_variant:Nn \semantex_arg_valuekey:nnn { nnx }
+
+\cs_new_protected:Npn \semantex_arg_singlekey:nn#1#2
{
+ % The central command for executing argument singlekeys,
+ % i.e. keys taking no
+ % #1 = register
+ % #2 = name of the key
\__semantex_arg_singlekey:nnn { #1 } { #2 } { #1 }
}
-\cs_new:Npn \__semantex_arg_singlekey:nnn#1#2#3
+\cs_new_protected:Npn \__semantex_arg_singlekey:nnn#1#2#3
{
- % #1 = class/object
- % #2 = name of the key
- \cs_if_exist:cTF { \tl_to_str:n{__semantex_data_cs_custom_arg_singlekey_#1_#2:n } }
+ \cs_if_exist:cTF { __semantex_data_cs_custom_arg_singlekey_#1_\tl_to_str:n{ #2 }:n }
{
\use:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n } { #3 }
}
@@ -2368,7 +2938,6 @@
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
\semantex_arg_valuekey:nnn { #3 } { default } { #2 }
- %#2
}
{
\__semantex_arg_singlekey:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2378,4018 +2947,2734 @@
\cs_generate_variant:Nn \__semantex_arg_singlekey:nnn { fnn }
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% THE VALUEKEYS FOR \SemantexBaseObject
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Now for the commands that are the basis of the keyval interface,
-% namely the keys providing the keyval interface for the
-% class \SemantexBaseObject. For historical reasons, they are defined
-% as below as standalone commands and not when delcaring the
-% class \SemantexBaseObject. I hope to change this in the future, but
-% this is purely a matter of aesthetics, with no practical consequences.
-
-% For all of them, #1 = name of the class/object, and #2 = value of
-% the key.
-
-% First, some very simple keys that we shall need over and over again:
-
-\cs_new:Npn\semantex_grab_first_argument_of_two:nn#1#2{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_two:nn#1#2{#2}
-
-\cs_new:Npn\semantex_grab_first_argument_of_three:nnn#1#2#3{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_three:nnn#1#2#3{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_three:nnn#1#2#3{#3}
-
-\cs_new:Npn\semantex_grab_first_argument_of_four:nnnn#1#2#3#4{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_four:nnnn#1#2#3#4{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_four:nnnn#1#2#3#4{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_four:nnnn#1#2#3#4{#4}
-
-\cs_new:Npn\semantex_grab_first_argument_of_five:nnnnn#1#2#3#4#5{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_five:nnnnn#1#2#3#4#5{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_five:nnnnn#1#2#3#4#5{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_five:nnnnn#1#2#3#4#5{#4}
-\cs_new:Npn\semantex_grab_fifth_argument_of_five:nnnnn#1#2#3#4#5{#5}
-
-\cs_new:Npn\semantex_grab_first_argument_of_six:nnnnnn#1#2#3#4#5#6{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_six:nnnnnn#1#2#3#4#5#6{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_six:nnnnnn#1#2#3#4#5#6{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_six:nnnnnn#1#2#3#4#5#6{#4}
-\cs_new:Npn\semantex_grab_fifth_argument_of_six:nnnnnn#1#2#3#4#5#6{#5}
-\cs_new:Npn\semantex_grab_sixth_argument_of_six:nnnnnn#1#2#3#4#5#6{#6}
-
-\cs_new:Npn\semantex_grab_first_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#4}
-\cs_new:Npn\semantex_grab_fifth_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#5}
-\cs_new:Npn\semantex_grab_sixth_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#6}
-\cs_new:Npn\semantex_grab_seventh_argument_of_seven:nnnnnnn#1#2#3#4#5#6#7{#7}
-
-\cs_new:Npn\semantex_grab_first_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#4}
-\cs_new:Npn\semantex_grab_fifth_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#5}
-\cs_new:Npn\semantex_grab_sixth_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#6}
-\cs_new:Npn\semantex_grab_seventh_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#7}
-\cs_new:Npn\semantex_grab_eighth_argument_of_eight:nnnnnnnn#1#2#3#4#5#6#7#8{#8}
-
-\cs_new:Npn\semantex_grab_first_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#1}
-\cs_new:Npn\semantex_grab_second_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#2}
-\cs_new:Npn\semantex_grab_third_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#3}
-\cs_new:Npn\semantex_grab_fourth_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#4}
-\cs_new:Npn\semantex_grab_fifth_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#5}
-\cs_new:Npn\semantex_grab_sixth_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#6}
-\cs_new:Npn\semantex_grab_seventh_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#7}
-\cs_new:Npn\semantex_grab_eighth_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#8}
-\cs_new:Npn\semantex_grab_ninth_argument_of_nine:nnnnnnnnn#1#2#3#4#5#6#7#8#9{#9}
-
-
-\cs_generate_variant:Nn\str_if_eq:nnTF {xxTF,ooTF}
-
-\cs_generate_variant:Nn\str_if_eq:nnT {xxT, ooT}
-
-\cs_generate_variant:Nn\str_if_eq:nnF {xxF, ooF}
-
-\cs_generate_variant:Nn\tl_if_blank:nTF { xTF, xT }
-
-\cs_generate_variant:Nn \tl_if_blank:nF { xF }
-
-\cs_new:Npn\semantex_provide_user_commands:n#1
-{
- % This keys just executes whatever data you plug into it.
- % Possibly, going forward, it might make more sense to define all
- % of these commands in the keyval handling command
- % so that the get commands are accessible from all keys.
- \cs_set:Npn\SemantexDataProvide##1{\semantex_data_tl_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexDataSet##1##2{\semantex_data_tl_set:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataSetx##1##2{\semantex_data_tl_set:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataPutRight##1##2{\semantex_data_tl_put_right:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataPutRightx##1##2{\semantex_data_tl_put_right:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataPutLeft##1##2{\semantex_data_tl_put_left:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataPutLeftx##1##2{\semantex_data_tl_put_left:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexDataGet##1{\semantex_data_tl_get:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexDataGetExpNot##1{\semantex_data_tl_get_exp_not:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexDataClear##1{\semantex_data_tl_clear:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexKeysSet##1{\semantex_keys_set:nn{#1}{##1}}
- \cs_set:Npn\SemantexKeysSetx##1{\semantex_keys_set:nx{#1}{##1}}
- \cs_set:Npn\SemantexStrIfEqTF##1##2##3##4{\str_if_eq:xxTF{##1}{##2}{##3}{##4}}
- \cs_set:Npn\SemantexStrIfEqT##1##2##3{\str_if_eq:xxT{##1}{##2}{##3}}
- \cs_set:Npn\SemantexStrIfEqF##1##2##3{\str_if_eq:xxF{##1}{##2}{##3}}
- \cs_set:Npn\SemantexIfBlankTF##1##2##3{\tl_if_blank:xTF{##1}{##2}{##3}}
- \cs_set:Npn\SemantexIfBlankT##1##2{\tl_if_blank:xT{##1}{##2}}
- \cs_set:Npn\SemantexIfBlankF##1##2{\tl_if_blank:xF{##1}{##2}}
- \cs_set:Npn\SemantexBoolProvide##1{\semantex_data_bool_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexBoolSetTrue##1{\semantex_data_bool_set_true:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexBoolSetFalse##1{\semantex_data_bool_set_false:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexBoolIfTF##1##2##3{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{##2}{##3}}
- \cs_set:Npn\SemantexBoolIfT##1##2{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{##2}{}}
- \cs_set:Npn\SemantexBoolIfF##1##2{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{}{##2}}
- \cs_set:Npn\SemantexIntProvide##1{\semantex_data_int_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexIntGet##1{\semantex_data_int_get:nn{#1}{\tl_trim_spaces:n{\tl_trim_spaces:n{##1}}}}
- \cs_set:Npn\SemantexIntClear##1{\semantex_data_int_clear:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexIntIncr##1{\semantex_data_int_incr:nn{#1}{\tl_trim_spaces:n{##1}}}
- \cs_set:Npn\SemantexIntSet##1##2{\semantex_data_int_set:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
- \cs_set:Npn\SemantexIntIfGreaterThanTF##1##2##3##4
- {
- \int_compare:nNnTF
- { ##1 }
- >
- { ##2 }
- { ##3 }
- { ##4 }
- }
- \cs_set:Npn\SemantexIntIfGreaterThanT##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- >
- { ##2 }
- { ##3 }
- { }
- }
- \cs_set:Npn\SemantexIntIfGreaterThanF##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- >
- { ##2 }
- { }
- { ##3 }
- }
- \cs_set:Npn\SemantexIntIfEqualTF##1##2##3##4
- {
- \int_compare:nNnTF
- { ##1 }
- =
- { ##2 }
- { ##3 }
- { ##4 }
- }
- \cs_set:Npn\SemantexIntIfEqualT##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- =
- { ##2 }
- { ##3 }
- { }
- }
- \cs_set:Npn\SemantexIntIfEqualF##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- =
- { ##2 }
- { }
- { ##3 }
- }
- \cs_set:Npn\SemantexIntIfLessThanTF##1##2##3##4
- {
- \int_compare:nNnTF
- { ##1 }
- <
- { ##2 }
- { ##3 }
- { ##4 }
- }
- \cs_set:Npn\SemantexIntIfLessThanT##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- <
- { ##2 }
- { ##3 }
- { }
- }
- \cs_set:Npn\SemantexIntIfLessThanF##1##2##3
- {
- \int_compare:nNnTF
- { ##1 }
- <
- { ##2 }
- { }
- { ##3 }
- }
- \cs_set:Npn\SemantexExpNot##1{\exp_not:n{##1}}
- \cs_set:Npn\SemantexERRORKeyValueNotFound##1
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl
- \msg_error:nnxoo { semantex } { key_value_not_found }
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl }
- { \semantex_grab_first_argument_of_two:nn ##1 }
- { \semantex_grab_second_argument_of_two:nn ##1 }
- }
-
- \cs_set:Npn\SemantexERROR##1
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl
- \msg_error:nnxoo { semantex } { generic_error }
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl }
- { \semantex_grab_first_argument_of_two:nn ##1 }
- { \semantex_grab_second_argument_of_two:nn ##1 }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataprovide:nn#1#2
-{
- \semantex_data_tl_provide:nn { #1 } { #2 }
-}
-
-\cs_generate_variant:Nn \semantex_data_tl_set:nnn { noo , nox , nno , nnx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataset:nn#1#2
-{
- \semantex_data_tl_set:nno { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_datasetx:nn#1#2
-{
- \semantex_data_tl_set:nnx { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_generate_variant:Nn \semantex_data_tl_put_right:nnn { noo , nox }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputright:nn#1#2{
- \semantex_data_tl_put_right:nno { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputrightx:nn#1#2{
- \semantex_data_tl_put_right:nnx { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_generate_variant:Nn \semantex_data_tl_put_left:nnn { noo , nox }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputleft:nn#1#2
-{
- \semantex_data_tl_put_left:nno { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputleftx:nn#1#2
-{
- \semantex_data_tl_put_left:nnx { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataclear:nn#1#2
-{
- \semantex_data_tl_clear:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keysset:nn#1#2
-{
- \semantex_keys_set:nn { #1 } { #2 }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setkeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keysset:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keyssetx:nn#1#2
-{
- \semantex_keys_set:nx { #1 }{ #2 }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setkeysx:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keyssetx:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqTF:nn#1#2
-{
- \str_if_eq:xxTF
- { \semantex_grab_first_argument_of_four:nnnn #2 }
- { \semantex_grab_second_argument_of_four:nnnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
-}
-
-\cs_generate_variant:Nn \str_if_eq:nnTF { ffTF }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqT:nn#1#2
-{
- \str_if_eq:xxTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
- { }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqF:nn#1#2
-{
- \str_if_eq:xxTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
-}
-
-\cs_generate_variant:Nn \semantex_keys_set:nn { no }
-
-\cs_generate_variant:Nn \tl_if_blank:nTF { fTF }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankTF:nn#1#2
-{
- \tl_if_blank:xTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_three:nnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankT:nn#1#2
-{
- \tl_if_blank:xTF
- { \semantex_grab_first_argument_of_two:nn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
- { }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankF:nn#1#2
-{
- \tl_if_blank:xTF
- { \semantex_grab_first_argument_of_two:nn #2 }
- { }
- { semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolprovide:nn#1#2
-{
- \semantex_data_bool_provide:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolsettrue:nn#1#2
-{
- \semantex_data_bool_set_true:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolsetfalse:nn#1#2
-{
- \semantex_data_bool_set_false:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { noTF, nfTF , neTF , ffTF }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifTF:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_three:nnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_three:nnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifT:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
- { }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifF:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { }
- { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intprovide:nn#1#2
-{
- \semantex_data_int_provide:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intclear:nn#1#2
-{
- \semantex_data_int_clear:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intincr:nn#1#2
-{
- \semantex_data_int_incr:nn { #1 } { \tl_trim_spaces:n { #2 } }
-}
-
-\cs_generate_variant:Nn \semantex_data_int_set:nnn { noo , nno }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intset:nn#1#2
-{
- \semantex_data_int_set:noo { #1 }
- { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
-
-\cs_generate_variant:Nn \int_compare:nNnTF { oNoTF , fNfTF , xNxTF }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanTF:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_four:nnnn #2 }
- >
- { \semantex_grab_second_argument_of_four:nnnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanT:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- >
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
- { }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanF:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- >
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalTF:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_four:nnnn #2 }
- =
- { \semantex_grab_second_argument_of_four:nnnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalT:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- =
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
- { }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalF:nn#1#2
+\cs_new_protected:Npn \semantex_arg_singlekey_x:nn#1#2
{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- =
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ % The central command for executing expanded argument singlekeys,
+ % i.e. keys taking no
+ % #1 = register
+ % #2 = name of the key
+ \__semantex_arg_singlekey_x:nnn { #1 } { #2 } { #1 }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanTF:nn#1#2
+\cs_new_protected:Npn \__semantex_arg_singlekey_x:nnn#1#2#3
{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_four:nnnn #2 }
- <
- { \semantex_grab_second_argument_of_four:nnnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
- { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
+ \cs_if_exist:cTF { \tl_to_str:n{__semantex_data_cs_custom_arg_singlekey_#1_#2:n } }
+ {
+ \use:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n } { #3 }
+ % and no, we don't want :x here; we don't need to expand
+ % the name of the register
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_arg_valuekey:nnx { #3 } { default } { #2 }
+ }
+ {
+ \__semantex_arg_singlekey:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
+ }
+ }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanT:nn#1#2
-{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- <
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
- { }
-}
+\cs_generate_variant:Nn \__semantex_arg_singlekey_x:nnn { fnn }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanF:nn#1#2
+\cs_new_protected:Npn\semantex_arg_without_keyval:nn#1#2
{
- \int_compare:oNoTF
- { \semantex_grab_first_argument_of_three:nnn #2 }
- <
- { \semantex_grab_second_argument_of_three:nnn #2 }
- { }
- { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ % Sets the argument (no keyval interface allowed)
+ \semantex_data_tl_put_right:nnn { #1 } { arg } { #2 }
+ \semantex_data_int_incr:nn { #1 } { numberofarguments }
+ \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
}
-\cs_generate_variant:Nn\msg_error:nnnnn { nnxoo }
+\cs_generate_variant:Nn \semantex_arg_without_keyval:nn { nx }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound:nn#1#2
-{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl
- \msg_error:nnxoo { semantex } { key_value_not_found }
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl }
- { \semantex_grab_first_argument_of_two:nn #2 }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
+% NOW SOME KEYS FOR DEFINING NEW KEYS:
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR:nn#1#2
-{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl
- \msg_error:nnxoo { semantex } { generic_error }
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl }
- { \semantex_grab_first_argument_of_two:nn #2 }
- { \semantex_grab_second_argument_of_two:nn #2 }
-}
+% First, we define the central commands for preprocessing keys
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_execute:nn#1#2
-{
- %\exp_not:n{#2}
- % how about forget?
- #2
-}
+\cs_generate_variant:Nn \semantex_keyval_parse:NNn { NNo }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parse:nn#1#2
+\cs_new_protected:Npn\semantex_preprocess_keys:nN#1#2
{
- % This command runs all the keys that the user may have
- % stored via the parseoptions key
- %\semantex_data_tl_inherit:nn { #1 } { parseoptions }
-% \semantex_keys_set:nx { #1 } {
-% \semantex_data_tl_get_exp_not:nn { #1 } { parseoptions }
-% }
-% \semantex_data_tl_clear:nn { #1 } { parseoptions } % this is probably necessary
- \semantex_data_cs_get:nn { #1 } { parseoptions:n } { #1 }
- \semantex_data_tl_clear:nn { #1 } { parseoptions } % this is probably necessary
- \semantex_data_cs_clear:nn { #1 } { parseoptions:n }
-}
-
-%\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parseoptions:nn#1#2
-%{
-% % This adds keys to the parseoptions token list
-% \semantex_data_tl_put_right:nnn { #1 } { parseoptions } { #2 }
-%}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parseoptions:nn#1#2{
- \tl_set:Nn\l__semantex_parseoptions_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_parseoptions_auxiliary_singlekey_temp_cs:n##1
- {
- \__semantex_parseoptions_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_parseoptions_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_parseoptions_auxiliary_valuekey_temp_cs:nn##1##2
+ \cs_set:Npn\l__semantex_preprocess_singlekey_temp_cs:n##1
{
- \__semantex_parseoptions_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_parseoptions_auxiliary_temp_tl
+ \__semantex_preprocess_singlekey:nnN { ####1 } { ##1 } #2
}
- \keyval_parse:NNn
- \l__semantex_parseoptions_auxiliary_singlekey_temp_cs:n
- \l__semantex_parseoptions_auxiliary_valuekey_temp_cs:nn
- { #2 }
- \semantex_data_tl_put_right:nno { #1 } { parseoptions } { \l__semantex_parseoptions_auxiliary_temp_tl }
- %\exp_args:NNno\exp_args:Nno\cs_set:co { __semantex_data_cs_#1_parseoptions:n }
- %\exp_args:Nnno
- \semantex_data_cs_set:nnx { #1 } { parseoptions:n }
+ \cs_set:Npn\l__semantex_preprocess_valuekey_temp_cs:nn##1##2
{
-% g__semantex_data_tl_#1_parseoptions
-% \semantex_data_tl_get:nn { #1 } { parseoptions }
- \semantex_data_tl_get_exp_not:nn { #1 } { parseoptions }
- %\l__semantex_parseoptions_auxiliary_temp_tl
+ \__semantex_preprocess_valuekey:nnnN { ####1 } { ##1 } { ##2 } #2
}
+ \semantex_keyval_parse:NNn
+ \l__semantex_preprocess_singlekey_temp_cs:n
+ \l__semantex_preprocess_valuekey_temp_cs:nn
+ { #1 }
}
+\cs_generate_variant:Nn \semantex_preprocess_keys:nN { oN }
-\cs_new:Npn\__semantex_parseoptions_process_singlekey:nnN#1#2#3
+\cs_new_protected:Npn\__semantex_preprocess_singlekey:nnN#1#2#3
{
\tl_put_right:Nn#3
{
\semantex_singlekey:nn { #1 } { #2 }
}
}
-
-\cs_new:Npn\__semantex_parseoptions_process_valuekey:nnnN#1#2#3#4
+\cs_new_protected:Npn\__semantex_preprocess_valuekey:nnnN#1#2#3#4
{
- \tl_if_eq:nnTF { #2 } { execute }
+ \str_case:nnF { #2 }
{
- \tl_put_right:Nn#4
- {
- #3
+ { execute }{
+ \tl_put_right:Nn #4 { #3 }
}
- }
- {
- \tl_put_right:Nn#4
- {
- \semantex_valuekey:nnn { #1 } { #2 } { #3 }
+ { setkeys }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn#1#2
-{
- % This is an umbrella key that runs all of the three
- % return routines, innerreturn, rightreturn, and leftreturn
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn { #1 }{}
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn { #1 }{}
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn { #1 }{}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn#1#2
-{
- % This adds all of the commands added via the command key
- % to the symbol
- \semantex_data_tl_inherit:nn { #1 } { symbol }
- \semantex_data_seq_inherit:nn { #1 } { commands_sequence }
- \semantex_data_seq_get_store:nnN { #1 } { commands_sequence } \l__semantex_data_seq_commands_sequence_temp
- \seq_map_inline:Nn \l__semantex_data_seq_commands_sequence_temp
- {
- \semantex_data_tl_set:nnx { #1 } { symbol }
+ { keysset }{
+ \semantex_preprocess_keys:nN { #3 } #4
+ }
+ { setkeysx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
+ }
+ { keyssetx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
+ }
+ { setargkeys }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
+ }
+ { argkeysset }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
+ }
+ { setargkeysx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
+ }
+ { argkeyssetx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
+ }
+ { setargsinglekeys }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
+ }
+ { argsinglekeysset }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
+ }
+ { setargsinglekeysx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
+ }
+ { argsinglekeyssetx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
+ }
+ { parseoptions }{
+ \tl_put_right:Nn#4
{
- \exp_not:n {\exp_not:N ##1} {
- \semantex_data_tl_get_exp_not:nn { #1 } { symbol }
+ \semantex_add_raw_commands_to_parse_options:nn { #1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { #3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ { outputoptions }{
+ \tl_put_right:Nn#4
+ {
+ \semantex_add_raw_commands_to_output_options:nn { #1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_pre_temp_tl {}
+ \semantex_preprocess_keys:nN { #3 } \l__semantex_preprocess_valuekey_keys_pre_temp_tl
+ \cs_set:Npo\l__semantex_preprocess_valuekey_keys_temp_cs:nn##1##2
+ {
+ \l__semantex_preprocess_valuekey_keys_pre_temp_tl
+ }
+ \tl_set:No\l__semantex_preprocess_valuekey_keys_temp_tl
+ {
+ \l__semantex_preprocess_valuekey_keys_temp_cs:nn { ###1 } { ##2 }
}
- % This was the solution that happened to solve
- % the expansion issues best
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
}
}
- \semantex_data_seq_clear:nn { #1 } { commands_sequence }
-}
-
-\cs_generate_variant:Nn \semantex_keys_set:nn { nx , no }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn#1#2
-{
- \semantex_right_indices_return_store:nN { #1 } \l_semantex_rightreturn_right_indices_temp
- \semantex_data_tl_put_right:nnx { #1 } { symbol }
- {
- \exp_not:V\l_semantex_rightreturn_right_indices_temp
- }
- \semantex_data_bool_get:nnTF { #1 } { leftargument }
- {
- % do nothing
- }
- {
- \semantex_arg_return_store:nN { #1 } \l_semantex_rightreturn_arg_temp
- \semantex_data_tl_put_right:nnx { #1 } { symbol }
- {
- \exp_not:V\l_semantex_rightreturn_arg_temp
+ { boolifTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifTF_temp_cs:nTF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_boolifTF_temp_cs:nTF #3
}
- }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn#1#2
-{
- \semantex_left_indices_return_store:nN { #1 } \l_semantex_leftreturn_left_indices_temp
- \semantex_data_tl_put_left:nnx { #1 } { symbol }
- {
- \exp_not:V\l_semantex_leftreturn_left_indices_temp
- }
- \semantex_data_bool_get:nnTF { #1 } { leftargument }
- {
- \semantex_arg_return_store:nN { #1 } \l_semantex_leftreturn_arg_temp
- \semantex_data_tl_put_left:nnx { #1 } { symbol }
- {
- \exp_not:V\l_semantex_leftreturn_arg_temp
+ { boolifT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifT_temp_cs:nT##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_boolifT_temp_cs:nT #3
}
- }
- {
- % do nothing
- }
-}
-
-\cs_new:Npn \semantex_left_indices_return_store:nN#1#2
-{
- \semantex_data_tl_inherit_x:nn { #1 } { upperleft }
- \semantex_data_tl_inherit_x:nn { #1 } { lowerleft }
- \semantex_data_tl_inherit_x:nn { #1 } { preupperleft }
- \semantex_data_tl_inherit_x:nn { #1 } { postupperleft }
- \semantex_data_tl_inherit_x:nn { #1 } { prelowerleft }
- \semantex_data_tl_inherit_x:nn { #1 } { postlowerleft }
- \tl_set:Nn#2{}
- \semantex_data_int_if_positive:nnTF { #1 } { numberofupperleftindices }
- {
- \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerleftindices }
- {
- \tl_put_right:Nx#2
+ { boolifF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifF_temp_cs:nF##1##2
{
- {}\sp{
- \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { upperleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft }
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
}
- \sb{
- \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
}
}
+ \l__semantex_preprocess_valuekey_boolifF_temp_cs:nF #3
}
- {
- \tl_put_right:Nx#2
+ { ifblankTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankTF_temp_cs:nTF##1##2##3
{
- {}\sp{
- \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { upperleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft }
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
}
}
+ \l__semantex_preprocess_valuekey_ifblankTF_temp_cs:nTF #3
}
- }
- {
- \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerleftindices }
- {
- \tl_put_right:Nx#2
+ { ifblankT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankT_temp_cs:nT##1##2
{
- {}\sb{
- \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft }
- \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft }
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
}
}
+ \l__semantex_preprocess_valuekey_ifblankT_temp_cs:nT #3
}
- {
- % do nothing
+ { ifblankF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankF_temp_cs:nF##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_ifblankF_temp_cs:nF #3
}
- }
- \semantex_data_tl_clear:nn { #1 } { upperleft }
- \semantex_data_bool_provide:nn { #1 } { nextupperleftwithsep } % is it necessary to provide it before declaring it false?
- \semantex_data_bool_set_false:nn { #1 } { nextupperleftwithsep }
- \semantex_data_tl_clear:nn { #1 } { lowerleft }
- \semantex_data_bool_provide:nn { #1 } { nextlowerleftwithsep } % is it necessary to provide it before declaring it false?
- \semantex_data_bool_set_false:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_tl_clear:nn { #1 } { preupperleft }
- \semantex_data_tl_clear:nn { #1 } { postupperleft }
- \semantex_data_tl_clear:nn { #1 } { prelowerleft }
- \semantex_data_tl_clear:nn { #1 } { postlowerleft }
- \semantex_data_int_clear:nn { #1 } { numberofupperleftindices }
- \semantex_data_int_clear:nn { #1 } { numberoflowerleftindices }
-}
-
-
-\cs_new:Npn \semantex_arg_return_store:nN#1#2
-{
- \semantex_data_tl_inherit_x:nn { #1 } { arg }
- \semantex_data_int_inherit:nn { #1 } { numberofarguments }
- %\semantex_data_tl_inherit:nn { #1 } { parsize } % This was necessary for unkonwn reasons -- otherwise it will fail when doing inheritance
- \semantex_data_tl_get_store:nnN { #1 } { parsize } \l__arg_return_store_parsize_temp_tl
- \semantex_data_bool_get:nnTF { #1 } { par }
- {
- \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
- {
- \__semantex_parentheses_store:nnnnN
- { \l__arg_return_store_parsize_temp_tl }
- { \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } }
+ { strifeqTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqTF_temp_cs:nnTF##1##2##3##4
{
- \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
- \semantex_data_tl_get_exp_not:nn { #1 } { arg }
- \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \tl_put_right:Nn#4
+ {
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
}
- #2
+ \l__semantex_preprocess_valuekey_strifeqTF_temp_cs:nnTF #3
}
- {
- \tl_set:Nn#2{}
+ { strifeqT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_strifeqT_temp_cs:nnT #3
}
- }
- {
- \semantex_data_bool_get:nnTF { #1 } { flexpar }
- {
- \semantex_data_int_if_greater_than_one:nnTF { #1 } { numberofarguments }
+ { strifeqF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqF_temp_cs:nnF##1##2##3
{
- \__semantex_parentheses_store:nnnnN
- { \l__arg_return_store_parsize_temp_tl }
- { \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } }
+ \tl_put_right:Nn#4
{
- \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
- \semantex_data_tl_get_exp_not:nn { #1 } { arg }
- \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
}
- #2
}
+ \l__semantex_preprocess_valuekey_strifeqF_temp_cs:nnF #3
+ }
+ { intifgreaterTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterTF_temp_cs:nnTF##1##2##3##4
{
- \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
+ \tl_put_right:Nn#4
{
- \__semantex_no_parentheses_store:nN
- {
- \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
- \semantex_data_tl_get_exp_not:nn { #1 } { arg }
- \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
- }
- #2
+ \int_compare:nNnTF { ##1 } > { ##2 }
}
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
{
- \tl_set:Nn#2{}
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
}
}
+ \l__semantex_preprocess_valuekey_intifgreaterTF_temp_cs:nnTF #3
}
- {
- \semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
+ { intifgreaterT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterT_temp_cs:nnT##1##2##3
{
- \__semantex_no_parentheses_store:nN
+ \tl_put_right:Nn#4
{
- \semantex_data_tl_get_exp_not:nn { #1 } { prearg }
- \semantex_data_tl_get_exp_not:nn { #1 } { arg }
- \semantex_data_tl_get_exp_not:nn { #1 } { postarg }
+ \int_compare:nNnTF { ##1 } > { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
}
- #2
}
+ \l__semantex_preprocess_valuekey_intifgreaterT_temp_cs:nnT #3
+ }
+ { intifgreaterF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterF_temp_cs:nnF##1##2##3
{
- \tl_set:Nn#2{}
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } > { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
}
+ \l__semantex_preprocess_valuekey_intifgreaterF_temp_cs:nnF #3
}
- }
- \semantex_data_tl_clear:nn { #1 } { arg }
- \semantex_data_tl_clear:nn { #1 } { prearg } % Is it right to clear these?
- \semantex_data_tl_clear:nn { #1 } { postarg }
- \semantex_data_int_clear:nn { #1 } { numberofarguments }
- \semantex_data_bool_provide:nn { #1 } { nextargwithsep } % is it necessary to provide it before declaring it false?
- \semantex_data_bool_set_false:nn { #1 } { nextargwithsep }
-}
-
-\cs_new:Npn \semantex_right_indices_return_store:nN#1#2
-{
- \semantex_data_tl_inherit_x:nn { #1 } { upper }
- \semantex_data_tl_inherit_x:nn { #1 } { lower }
- \semantex_data_tl_inherit_x:nn { #1 } { preupper }
- \semantex_data_tl_inherit_x:nn { #1 } { postupper }
- \semantex_data_tl_inherit_x:nn { #1 } { prelower }
- \semantex_data_tl_inherit_x:nn { #1 } { postlower }
- \tl_set:Nn#2{}
- \semantex_data_int_if_positive:nnTF { #1 } { numberofupperindices }
- {
- \tl_put_right:Nx#2
- {
- \sp{
- \semantex_data_tl_get_exp_not:nn { #1 } { preupper }
- \semantex_data_tl_get_exp_not:nn { #1 } { upper }
- \semantex_data_tl_get_exp_not:nn { #1 } { postupper }
+ { intifeqTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
}
+ \l__semantex_preprocess_valuekey_intifeqTF_temp_cs:nnTF #3
}
- }
- {
- % do nothing
- }
- \semantex_data_int_if_positive:nnTF { #1 } { numberoflowerindices }
- {
- \tl_put_right:Nx#2
- {
- \sb{
- \semantex_data_tl_get_exp_not:nn { #1 } { prelower }
- \semantex_data_tl_get_exp_not:nn { #1 } { lower }
- \semantex_data_tl_get_exp_not:nn { #1 } { postlower }
+ { intifeqT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
}
+ \l__semantex_preprocess_valuekey_intifeqT_temp_cs:nnT #3
}
- }
- {
- % do nothing
- }
- \semantex_data_tl_clear:nn { #1 } { upper }
- \semantex_data_bool_provide:nn { #1 } { nextupperwithsep } % is it necessary to provide it before declaring it false?
- \semantex_data_bool_set_false:nn { #1 } { nextupperwithsep }
- \semantex_data_tl_clear:nn { #1 } { lower }
- \semantex_data_bool_provide:nn { #1 } { nextlowerwithsep } % is it necessary to provide it before declaring it false?
- \semantex_data_bool_set_false:nn { #1 } { nextlowerwithsep }
- \semantex_data_tl_clear:nn { #1 } { preupper }
- \semantex_data_tl_clear:nn { #1 } { postupper }
- \semantex_data_tl_clear:nn { #1 } { prelower }
- \semantex_data_tl_clear:nn { #1 } { postlower }
- \semantex_data_int_clear:nn { #1 } { numberofupperindices }
- \semantex_data_int_clear:nn { #1 } { numberoflowerindices }
-}
-
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parent:nn#1#2{
- % Must inherit everything from the parent class
- \semantex_data_parent_set:nn { #1 } { #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_class:nn#1#2{
- % Must inherit everything from the parent class
- \semantex_data_class_set:nn { #1 } { #2 }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_class:nn { xn }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_copy:nn#1#2{
- % Similarly to parent and class, but inherits from other objects rather than classes
- \semantex_data_copy_object:nn { #1 } { #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clone:nn#1#2{
- % Similarly to parent and class, but inherits from other objects rather than classes
- \semantex_data_clone_object:nn { #1 } { #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_valuekeys:nn#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_process_singlekey:nnN#1#2#3
-{
- \tl_put_right:Nn#3
- {
- \semantex_singlekey:nn { #1 } { #2 }
- }
-}
-
-\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-
-\cs_new:Npn\__semantex_process_valuekey:nnnN#1#2#3#4
-{
- \tl_if_eq:nnTF { #2 } { execute }
- {
- \tl_put_right:Nn#4
- {
- #3
+ { intifeqF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifeqF_temp_cs:nnF #3
+ }
+ { intiflessTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessTF_temp_cs:nnTF #3
+ }
+ { intiflessT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessT_temp_cs:nnT #3
+ }
+ { intiflessF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessF_temp_cs:nnF #3
}
}
{
\tl_put_right:Nn#4
{
\semantex_valuekey:nnn { #1 } { #2 } { #3 }
- }
- }
-}
-
-\cs_new:Npn\__semantex_valuekey_format_auxiliary:nnn#1#2#3
-{
- \tl_set:Nn\l__semantex_valuekey_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_valuekey_auxiliary_singlekey_temp_cs:n##1
- {
- \__semantex_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_valuekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
- {
- \__semantex_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_valuekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_valuekey_auxiliary_temp_cs:n##1 { #3 }
- \keyval_parse:NNo
- \l__semantex_valuekey_auxiliary_singlekey_temp_cs:n
- \l__semantex_valuekey_auxiliary_valuekey_temp_cs:nn
- {
- \l__semantex_valuekey_auxiliary_temp_cs:n { ##2 }
}
- \cs_set:cpo { __semantex_data_cs_custom_valuekey_#1_#2:nn } ##1##2 {
- \l__semantex_valuekey_auxiliary_temp_tl
}
- % remove spaces
}
-\cs_generate_variant:Nn \cs_set:Npn { cpo }
-
-\cs_generate_variant:Nn \keyval_parse:NNn { NNo }
+% The x version:
-%CHECK
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn#1#2{
- % Add keys taking no values
- \clist_map_inline:nn { #2 }{
- \__semantex_singlekeys_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn \__semantex_singlekeys_format_auxiliary:nnn#1#2#3{
- \tl_set:Nn\l__semantex_singlekey_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_singlekey_auxiliary_singlekey_temp_cs:n##1
+\cs_new_protected:Npn\semantex_preprocess_keys_x:nN#1#2
+{
+ \cs_set:Npn\l__semantex_preprocess_singlekey_x_temp_cs:n##1
{
- \__semantex_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_singlekey_auxiliary_temp_tl
+ \__semantex_preprocess_singlekey_x:nnN { ####1 } { ##1 } #2
}
- \cs_set:Npn\l__semantex_singlekey_auxiliary_valuekey_temp_cs:nn##1##2
+ \cs_set:Npn\l__semantex_preprocess_valuekey_x_temp_cs:nn##1##2
{
- \__semantex_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_singlekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_singlekey_auxiliary_temp_cs: { #3 }
- \keyval_parse:NNo
- \l__semantex_singlekey_auxiliary_singlekey_temp_cs:n
- \l__semantex_singlekey_auxiliary_valuekey_temp_cs:nn
- { \l__semantex_singlekey_auxiliary_temp_cs: }
- \cs_set:cpo { __semantex_data_cs_custom_singlekey_#1_#2:n } ##1 {
- \l__semantex_singlekey_auxiliary_temp_tl
- }
-% \seq_put_right:cn { g__semantex_data_seq_#1_list_of_singlekeys } { #2 }
-% %IM Remove spaces in #2
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn#1#2
-{
- \cs_undefine:c { __semantex_data_cs_custom_singlekey_#1_#2:n }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removevaluekey:nn#1#2
-{
- \cs_undefine:c { __semantex_data_cs_custom_valuekey_#1_#2:nn }
-}
-
-\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_1valuekeys:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_valuekeys:nn
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_2valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_two_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_preprocess_valuekey_x:nnnN { ####1 } { ##1 } { ##2 } #2
}
+ \semantex_keyval_parse:NNn
+ \l__semantex_preprocess_singlekey_x_temp_cs:n
+ \l__semantex_preprocess_valuekey_x_temp_cs:nn
+ { #1 }
}
-\cs_new:Npn\__semantex_two_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_preprocess_singlekey_x:nnN#1#2#3
{
- \cs_set:Npn\l__semantex_two_valuekey_format_auxiliary_temp:nn##1##2{#3}
- %IM Remove spaces in #2
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \tl_put_right:Nn#3
{
- \l__semantex_two_valuekey_format_auxiliary_temp:nn
- {
- \semantex_grab_first_argument_of_two:nn ##1
- }
- {
- \semantex_grab_second_argument_of_two:nn ##1
- }
- }
-}
-\cs_generate_variant:Nn \__semantex_valuekey_format_auxiliary:nnn { nno }
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_3valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_three_valuekey_format_auxiliary:nnn{#1}##1
+ \semantex_singlekey_x:nn { #1 } { #2 }
}
}
-\cs_new:Npn\__semantex_three_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_preprocess_valuekey_x:nnnN#1#2#3#4
{
- \cs_set:Npn\l__semantex_three_valuekey_format_auxiliary_temp:nnn##1##2##3{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \str_case:nnF { #2 }
{
- \l__semantex_three_valuekey_format_auxiliary_temp:nnn
- {
- \semantex_grab_first_argument_of_three:nnn ##1
+ { execute } {
+ \tl_put_right:Nn#4
+ {
+ #3
+ }
}
- {
- \semantex_grab_second_argument_of_three:nnn ##1
+ { setkeys }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- {
- \semantex_grab_third_argument_of_three:nnn ##1
+ { keysset }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_4valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_four_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_four_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_four_valuekey_format_auxiliary_temp:nnnn##1##2##3##4{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
- {
- \l__semantex_four_valuekey_format_auxiliary_temp:nnnn
- {
- \semantex_grab_first_argument_of_four:nnnn ##1
+ { setkeysx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- {
- \semantex_grab_second_argument_of_four:nnnn ##1
+ { keyssetx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- {
- \semantex_grab_third_argument_of_four:nnnn ##1
+ { setargkeys }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- {
- \semantex_grab_fourth_argument_of_four:nnnn ##1
+ { argkeysset }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_5valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_five_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_five_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_five_valuekey_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
- {
- \l__semantex_five_valuekey_format_auxiliary_temp:nnnnn
- {
- \semantex_grab_first_argument_of_five:nnnnn ##1
+ { setargkeysx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- {
- \semantex_grab_second_argument_of_five:nnnnn ##1
+ { argkeyssetx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- {
- \semantex_grab_third_argument_of_five:nnnnn ##1
+ { setargsinglekeys }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- {
- \semantex_grab_fourth_argument_of_five:nnnnn ##1
+ { argsinglekeysset }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- {
- \semantex_grab_fifth_argument_of_five:nnnnn ##1
+ { setargsinglekeysx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
}
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_6valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_six_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_six_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_six_valuekey_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
- {
- \l__semantex_six_valuekey_format_auxiliary_temp:nnnnnn
- {
- \semantex_grab_first_argument_of_six:nnnnnn ##1
+ { argsinglekeyssetx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
}
- {
- \semantex_grab_second_argument_of_six:nnnnnn ##1
+ { parseoptions }{
+ \tl_put_right:Nn#4
+ {
+ \semantex_add_raw_commands_to_parse_options:nn { #1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { #3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
}
- {
- \semantex_grab_third_argument_of_six:nnnnnn ##1
+ { outputoptions }{
+ \tl_put_right:Nn#4
+ {
+ \semantex_add_raw_commands_to_output_options:nn { #1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_pre_temp_tl {}
+ \semantex_preprocess_keys_x:nN { #3 } \l__semantex_preprocess_valuekey_keys_pre_temp_tl
+ \cs_set:Npo\l__semantex_preprocess_valuekey_keys_temp_cs:nn##1##2
+ {
+ \l__semantex_preprocess_valuekey_keys_pre_temp_tl
+ }
+ \tl_set:No\l__semantex_preprocess_valuekey_keys_temp_tl
+ {
+ \l__semantex_preprocess_valuekey_keys_temp_cs:nn { ###1 } { ##2 }
+ }
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
}
- {
- \semantex_grab_fourth_argument_of_six:nnnnnn ##1
+ { boolifTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifTF_temp_cs:nTF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_boolifTF_temp_cs:nTF #3
}
- {
- \semantex_grab_fifth_argument_of_six:nnnnnn ##1
+ { boolifT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifT_temp_cs:nT##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_boolifT_temp_cs:nT #3
}
- {
- \semantex_grab_sixth_argument_of_six:nnnnnn ##1
+ { boolifF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_boolifF_temp_cs:nF##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_data_bool_get:nnTF { ####1 } { \tl_trim_spaces:n { ##1 } }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_boolifF_temp_cs:nF #3
}
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_7valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_seven_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_seven_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_seven_valuekey_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
- {
- \l__semantex_seven_valuekey_format_auxiliary_temp:nnnnnnn
- {
- \semantex_grab_first_argument_of_seven:nnnnnnn ##1
+ { ifblankTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankTF_temp_cs:nTF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_ifblankTF_temp_cs:nTF #3
}
- {
- \semantex_grab_second_argument_of_seven:nnnnnnn ##1
+ { ifblankT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankT_temp_cs:nT##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_ifblankT_temp_cs:nT #3
}
- {
- \semantex_grab_third_argument_of_seven:nnnnnnn ##1
+ { ifblankF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_ifblankF_temp_cs:nF##1##2
+ {
+ \tl_put_right:Nn#4
+ {
+ \tl_if_blank:xTF { ##1 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##2 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_ifblankF_temp_cs:nF #3
}
- {
- \semantex_grab_fourth_argument_of_seven:nnnnnnn ##1
+ { strifeqTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_strifeqTF_temp_cs:nnTF #3
}
- {
- \semantex_grab_fifth_argument_of_seven:nnnnnnn ##1
+ { strifeqT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_strifeqT_temp_cs:nnT #3
}
- {
- \semantex_grab_sixth_argument_of_seven:nnnnnnn ##1
+ { strifeqF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_strifeqF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \str_if_eq:xxTF { ##1 } { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_strifeqF_temp_cs:nnF #3
}
- {
- \semantex_grab_seventh_argument_of_seven:nnnnnnn ##1
+ { intifgreaterTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } > { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifgreaterTF_temp_cs:nnTF #3
}
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_8valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_eight_valuekey_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn\__semantex_eight_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_eight_valuekey_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
- {
- \l__semantex_eight_valuekey_format_auxiliary_temp:nnnnnnnn
- {
- \semantex_grab_first_argument_of_eight:nnnnnnnn ##1
+ { intifgreaterT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } > { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifgreaterT_temp_cs:nnT #3
}
- {
- \semantex_grab_second_argument_of_eight:nnnnnnnn ##1
+ { intifgreaterF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifgreaterF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } > { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifgreaterF_temp_cs:nnF #3
}
- {
- \semantex_grab_third_argument_of_eight:nnnnnnnn ##1
+ { intifeqTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifeqTF_temp_cs:nnTF #3
}
- {
- \semantex_grab_fourth_argument_of_eight:nnnnnnnn ##1
+ { intifeqT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifeqT_temp_cs:nnT #3
}
- {
- \semantex_grab_fifth_argument_of_eight:nnnnnnnn ##1
+ { intifeqF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intifeqF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } = { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intifeqF_temp_cs:nnF #3
}
- {
- \semantex_grab_sixth_argument_of_eight:nnnnnnnn ##1
+ { intiflessTF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessTF_temp_cs:nnTF##1##2##3##4
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##4 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V \l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessTF_temp_cs:nnTF #3
}
- {
- \semantex_grab_seventh_argument_of_eight:nnnnnnnn ##1
+ { intiflessT }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessT_temp_cs:nnT##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ { }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessT_temp_cs:nnT #3
+ }
+ { intiflessF }{
+ \cs_set:Npn \l__semantex_preprocess_valuekey_intiflessF_temp_cs:nnF##1##2##3
+ {
+ \tl_put_right:Nn#4
+ {
+ \int_compare:nNnTF { ##1 } < { ##2 }
+ }
+ \group_begin:
+ \tl_set:Nn\l__semantex_preprocess_valuekey_keys_temp_tl {}
+ \semantex_preprocess_keys_x:nN { ##3 } \l__semantex_preprocess_valuekey_keys_temp_tl
+ \exp_args:NNNx
+ \group_end:
+ \tl_put_right:Nn#4
+ {
+ { }
+ { \exp_not:V\l__semantex_preprocess_valuekey_keys_temp_tl }
+ }
+ }
+ \l__semantex_preprocess_valuekey_intiflessF_temp_cs:nnF #3
}
+ }
+ {
+ \tl_put_right:Nn#4
{
- \semantex_grab_eighth_argument_of_eight:nnnnnnnn ##1
+ \semantex_valuekey:nnx { #1 } { #2 } { #3 }
}
}
- %IM Remove spaces in #2
}
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_9valuekeys:nn }#1#2{
+\cs_new_protected:Npn\semantex_define_valuekeys:nn#1#2
+{
% Add new valuekeys
\clist_map_inline:nn { #2 }{
- \__semantex_nine_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_valuekey_format_auxiliary:nnn { #1 } ##1
}
}
-\cs_new:Npn\__semantex_nine_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_nine_valuekey_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
- \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set:Npn\l__semantex_valuekey_auxiliary_temp_cs:n##1 { #3 }
+ \tl_set:Nn \l__semantex_valuekey_auxiliary_temp_tl {}
+ \semantex_preprocess_keys:oN
{
- \l__semantex_nine_valuekey_format_auxiliary_temp:nnnnnnnnn
- {
- \semantex_grab_first_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_sixth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_seventh_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_eighth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_ninth_argument_of_nine:nnnnnnnnn ##1
- }
+ \l__semantex_valuekey_auxiliary_temp_cs:n { ##2 }
+ } \l__semantex_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
+ {
+ \l__semantex_valuekey_auxiliary_temp_tl
}
- %IM Remove spaces in #2
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_novaluekeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-
-\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_0valuekeys:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn
-
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removenovaluekey:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
+\cs_generate_variant:Nn \cs_set:Npn { Npo }
-\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_remove0valuekey:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn
+\cs_generate_variant:Nn \cs_set_protected:Npn { cpo , Npo }
-% KEYS FOR SETTING UP THE ARGUMENT KEYVAL INTERFACE:
-
-\cs_new:Npn\__semantex_process_arg_singlekey:nnN#1#2#3
+\cs_new_protected:Npn\semantex_remove_valuekey:nn#1#2
{
- \tl_put_right:Nn#3
- {
- \semantex_arg_singlekey:nn { #1 } { #2 }
- }
+ \cs_undefine:c { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn }
}
-\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-
-\cs_new:Npn\__semantex_process_arg_valuekey:nnnN#1#2#3#4
+\cs_new_protected:Npn\semantex_define_singlekeys:nn#1#2
{
- \tl_put_right:Nn#4
- {
- \semantex_arg_valuekey:nnn { #1 } { #2 } { #3 }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argvaluekeys:nn#1#2{
- % Add argument valuekeys
+ % Add keys taking no values
\clist_map_inline:nn { #2 }{
- \__semantex_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_singlekeys_format_auxiliary:nnn { #1 } ##1
}
}
-\cs_new:Npn \__semantex_arg_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn \__semantex_singlekeys_format_auxiliary:nnn#1#2#3
{
- \tl_set:Nn\l__semantex_arg_valuekey_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_singlekey_temp_cs:n##1
- {
- \__semantex_process_arg_singlekey:nnN { ####1 } { ##1 } \l__semantex_arg_valuekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
- {
- \__semantex_process_arg_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_arg_valuekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_temp_cs:n##1 { #3 }
- \keyval_parse:NNo
- \l__semantex_arg_valuekey_auxiliary_singlekey_temp_cs:n
- \l__semantex_arg_valuekey_auxiliary_valuekey_temp_cs:nn
- {
- \l__semantex_arg_valuekey_auxiliary_temp_cs:n { ##2 }
- }
- \cs_set:cpo { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn } ##1##2 {
- \l__semantex_arg_valuekey_auxiliary_temp_tl
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argsinglekeys:nn#1#2{
- % Add argument keys taking no values
- \clist_map_inline:nn { #2 }{
- \__semantex_arg_singlekeys_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn \__semantex_arg_singlekeys_format_auxiliary:nnn#1#2#3{
- \tl_set:Nn\l__semantex_arg_singlekey_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_singlekey_temp_cs:n##1
+ \cs_set:Npn\l__semantex_singlekey_auxiliary_temp_cs: { #3 }
+ \tl_set:Nn \l__semantex_singlekey_auxiliary_temp_tl {}
+ \semantex_preprocess_keys:oN
{
- \__semantex_process_arg_singlekey:nnN { ####1 } { ##1 } \l__semantex_arg_singlekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_valuekey_temp_cs:nn##1##2
+ \l__semantex_singlekey_auxiliary_temp_cs:
+ } \l__semantex_singlekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_singlekey_#1_\tl_trim_spaces:n{#2}:n } ##1
{
- \__semantex_process_arg_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_arg_singlekey_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_temp_cs: { #3 }
- \keyval_parse:NNo
- \l__semantex_arg_singlekey_auxiliary_singlekey_temp_cs:n
- \l__semantex_arg_singlekey_auxiliary_valuekey_temp_cs:nn
- { \l__semantex_arg_singlekey_auxiliary_temp_cs: }
- \cs_set:cpo { __semantex_data_cs_custom_arg_singlekey_#1_#2:n } ##1 {
- \l__semantex_arg_singlekey_auxiliary_temp_tl
+ \l__semantex_singlekey_auxiliary_temp_tl
}
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn#1#2
+\cs_new_protected:Npn\semantex_remove_singlekey:nn#1#2
{
- \cs_undefine:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n }
+ \cs_undefine:c { __semantex_data_cs_custom_singlekey_#1_#2:n }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargvaluekey:nn#1#2
+\cs_new_protected:Npn\semantex_define_two_valuekeys:nn#1#2
{
- \cs_undefine:c { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn }
-}
-
-\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg1valuekeys:nn } \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_arg_valuekeys:nn
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg2valuekeys:nn }#1#2{
- % Add new valuekeys
+ % Add new valuekeys with 2 values
\clist_map_inline:nn { #2 }{
- \__semantex_two_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_two_valuekey_format_auxiliary:nnn { #1 } ##1
}
}
-\cs_generate_variant:Nn \__semantex_arg_valuekey_format_auxiliary:nnn { nno }
-
-\cs_new:Npn\__semantex_two_arg_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_two_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_two_arg_valuekey_format_auxiliary_temp:nn##1##2{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set:Npn\l__semantex_two_valuekey_auxiliary_temp_cs:nn##1##2 { #3 }
+ \tl_set:Nn\l__semantex_two_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \l__semantex_two_arg_valuekey_format_auxiliary_temp:nn
- {
- \semantex_grab_first_argument_of_two:nn ##1
- }
- {
- \semantex_grab_second_argument_of_two:nn ##1
- }
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg3valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_three_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \l__semantex_two_valuekey_auxiliary_temp_cs:nn { ##2 } { ##3 }
+ } \l__semantex_two_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_two_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnn } ##1##2##3
+ {
+ \l__semantex_two_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_three_arg_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_three_arg_valuekey_format_auxiliary_temp:nnn##1##2##3{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \l__semantex_three_arg_valuekey_format_auxiliary_temp:nnn
- {
- \semantex_grab_first_argument_of_three:nnn ##1
- }
- {
- \semantex_grab_second_argument_of_three:nnn ##1
- }
- {
- \semantex_grab_third_argument_of_three:nnn ##1
- }
+ \use:c { __semantex_data_cs_custom_two_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnn } { ##1 } ##2
}
- %IM Remove spaces in #2
}
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg4valuekeys:nn }#1#2{
- % Add new valuekeys
+\cs_new_protected:Npn\semantex_define_three_valuekeys:nn#1#2
+{
+ % Add new valuekeys with 3 values
\clist_map_inline:nn { #2 }{
- \__semantex_four_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_three_valuekey_format_auxiliary:nnn {#1} ##1
}
}
-\cs_new:Npn\__semantex_four_arg_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_three_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_four_arg_valuekey_format_auxiliary_temp:nnnn##1##2##3##4{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set:Npn\l__semantex_three_valuekey_auxiliary_temp_cs:nnn##1##2##3 { #3 }
+ \tl_set:Nn\l__semantex_three_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \l__semantex_four_arg_valuekey_format_auxiliary_temp:nnnn
- {
- \semantex_grab_first_argument_of_four:nnnn ##1
- }
- {
- \semantex_grab_second_argument_of_four:nnnn ##1
- }
- {
- \semantex_grab_third_argument_of_four:nnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_four:nnnn ##1
- }
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg5valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_five_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \l__semantex_three_valuekey_auxiliary_temp_cs:nnn { ##2 } { ##3 } { ##4 }
+ } \l__semantex_three_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_three_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnn } ##1##2##3##4
+ {
+ \l__semantex_three_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_five_arg_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_five_arg_valuekey_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \l__semantex_five_arg_valuekey_format_auxiliary_temp:nnnnn
- {
- \semantex_grab_first_argument_of_five:nnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_five:nnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_five:nnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_five:nnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_five:nnnnn ##1
- }
+ \use:c { __semantex_data_cs_custom_three_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnn } { ##1 } ##2
}
- %IM Remove spaces in #2
}
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg6valuekeys:nn }#1#2{
- % Add new valuekeys
+\cs_new_protected:Npn\semantex_define_four_valuekeys:nn#1#2
+{
+ % Add new valuekeys with 4 values
\clist_map_inline:nn { #2 }{
- \__semantex_six_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_four_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_six_arg_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_four_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_six_arg_valuekey_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set:Npn\l__semantex_four_valuekey_auxiliary_temp_cs:nnnn##1##2##3##4 { #3 }
+ \tl_set:Nn\l__semantex_four_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \l__semantex_six_arg_valuekey_format_auxiliary_temp:nnnnnn
- {
- \semantex_grab_first_argument_of_six:nnnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_six:nnnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_six:nnnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_six:nnnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_six:nnnnnn ##1
- }
- {
- \semantex_grab_sixth_argument_of_six:nnnnnn ##1
- }
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg7valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_seven_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \l__semantex_four_valuekey_auxiliary_temp_cs:nnnn { ##2 } { ##3 } { ##4 } { ##5 }
+ } \l__semantex_four_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_four_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnn } ##1##2##3##4##5
+ {
+ \l__semantex_four_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_seven_arg_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_seven_arg_valuekey_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \l__semantex_seven_arg_valuekey_format_auxiliary_temp:nnnnnnn
- {
- \semantex_grab_first_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_sixth_argument_of_seven:nnnnnnn ##1
- }
- {
- \semantex_grab_seventh_argument_of_seven:nnnnnnn ##1
- }
+ \use:c { __semantex_data_cs_custom_four_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnn } { ##1 } ##2
}
- %IM Remove spaces in #2
}
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg8valuekeys:nn }#1#2{
- % Add new valuekeys
+\cs_new_protected:Npn\semantex_define_five_valuekeys:nn#1#2
+{
+ % Add new valuekeys with 5 values
\clist_map_inline:nn { #2 }{
- \__semantex_eight_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \__semantex_five_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_eight_arg_valuekey_format_auxiliary:nnn#1#2#3
+\cs_new_protected:Npn\__semantex_five_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_eight_arg_valuekey_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set:Npn\l__semantex_five_valuekey_auxiliary_temp_cs:nnnnn##1##2##3##4##5 { #3 }
+ \tl_set:Nn\l__semantex_five_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \l__semantex_eight_arg_valuekey_format_auxiliary_temp:nnnnnnnn
- {
- \semantex_grab_first_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_sixth_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_seventh_argument_of_eight:nnnnnnnn ##1
- }
- {
- \semantex_grab_eighth_argument_of_eight:nnnnnnnn ##1
- }
- }
- %IM Remove spaces in #2
-}
-
-\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg9valuekeys:nn }#1#2{
- % Add new valuekeys
- \clist_map_inline:nn { #2 }{
- \__semantex_nine_arg_valuekey_format_auxiliary:nnn{#1}##1
+ \l__semantex_five_valuekey_auxiliary_temp_cs:nnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 }
+ } \l__semantex_five_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_five_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnn } ##1##2##3##4##5##6
+ {
+ \l__semantex_five_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_nine_arg_valuekey_format_auxiliary:nnn#1#2#3
-{
- \cs_set:Npn\l__semantex_nine_arg_valuekey_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
- \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \l__semantex_nine_arg_valuekey_format_auxiliary_temp:nnnnnnnnn
- {
- \semantex_grab_first_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_second_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_third_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_fourth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_fifth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_sixth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_seventh_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_eighth_argument_of_nine:nnnnnnnnn ##1
- }
- {
- \semantex_grab_ninth_argument_of_nine:nnnnnnnnn ##1
- }
+ \use:c { __semantex_data_cs_custom_five_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnn } { ##1 } ##2
}
- %IM Remove spaces in #2
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argnovaluekeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argsinglekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargnovaluekey:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-
-\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removearg0valuekey:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn
-
-% THESE ARE REALLY THE COMMANDS MANIPULATING DATA:
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:nn#1#2{
- % Sets the value of the symbol
- \semantex_data_tl_set:nnn { #1 } { symbol } { \exp_not:n { #2 } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:nn { xn }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn#1#2{
- % Sets the TeX class of the output, e.g. \mathord, \mathbin, \mathop etc.
- \semantex_data_tl_set:nnn { #1 } { texclass } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setslot:nn#1#2{
- % Sets the argument slot, i.e. the - in f(-,x)
- \semantex_data_tl_set:nnn { #1 } { argslot } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbolputright:nn#1#2{
- % Add something to the right of the symbol
- \semantex_data_tl_put_right:nnn { #1 } { symbol } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbolputleft:nn#1#2{
- % Add something to the left of the symbol
- \semantex_data_tl_put_left:nnn { #1 } { symbol } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_command:nn#1#2{
- % Adds one entry on the left of the command
- % sequence to be applied to the symbol
- \semantex_data_seq_put_right:nnn { #1 } { commands_sequence } { #2 } %IM maybe \exp_not:n { #2 }?
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearcommand:nn#1#2{
- % Adds one entry on the left of the command
- % sequence to be applied to the symbol
- \semantex_data_seq_clear:nn { #1 } { commands_sequence }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithkeyval:nn#1#2{
- % Sets the argument (allows keyval interface)
- \semantex_arg_keys_set:nn { #1 } { #2 }
- %IMPORTANT: Previously, we needed three braces around #2, but suddenly
- % this changed, even though I did not really change anything related
- % to this (except I added _auxiliary_ in the command names related
- % to arg keyvals)
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithsinglekeys:nn#1#2{
- % Sets the argument (only allows singlekeys)
- \semantex_arg_singlekeys_set:nn { #1 } { #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithonesinglekey:nn#1#2{
- % Sets the argument (only allows one singlekey)
- \use:c { __semantex_data_cs_#1_arg_singlekey:n } { #2 }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithoutkeyval:nn#1#2{
- % Sets the argument (no keyval interface allowed)
- \semantex_data_tl_put_right:nnn { #1 } { arg } { \exp_not:n { #2 } }
- \semantex_data_int_incr:nn { #1 } { numberofarguments } % Check if this has been added elsewhere
- \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargsep:nn#1#2
+\cs_new_protected:Npn\semantex_define_six_valuekeys:nn#1#2
{
- % Sets the argument separator
- \semantex_data_tl_set:nnn { #1 } { argsep } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargdots:nn#1#2
-{
- % Sets the argument dot command
- \semantex_data_tl_set:nnn { #1 } { argdots } { \exp_not:n { #2 } }
+ % Add new valuekeys with 6 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_six_valuekey_format_auxiliary:nnn{#1}##1
+ }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargslot:nn#1#2
+\cs_new_protected:Npn\__semantex_six_valuekey_format_auxiliary:nnn#1#2#3
{
- % Sets the argument dot command
- \semantex_data_tl_set:nnn { #1 } { argslot } { \exp_not:n { #2 } }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prearg:nn#1#2{
- % Sets something to write before the argument
- \tl_if_blank:nF{#2}
+ \cs_set:Npn\l__semantex_six_valuekey_auxiliary_temp_cs:nnnnnn##1##2##3##4##5##6 { #3 }
+ \tl_set:Nn\l__semantex_six_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
+ {
+ \l__semantex_six_valuekey_auxiliary_temp_cs:nnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 }
+ } \l__semantex_six_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_six_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnn } ##1##2##3##4##5##6##7
{
- \semantex_data_tl_put_left:nnn { #1 } { prearg } { \exp_not:n { #2 } }
+ \l__semantex_six_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprearg:nn#1#2
-{
- \semantex_data_tl_clear:nn { #1 } { prearg }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postarg:nn#1#2{
- % Sets something to write after the argument
- \tl_if_blank:nF{#2}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \semantex_data_tl_put_right:nnn { #1 } { postarg } { \exp_not:n{ #2 } }
+ \use:c { __semantex_data_cs_custom_six_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnn } { ##1 } ##2
}
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostarg:nn#1#2
-{
- \semantex_data_tl_clear:nn { #1 } { postarg }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output:nn#1#2
+\cs_new_protected:Npn\semantex_define_seven_valuekeys:nn#1#2
{
- % Tells what class the object is supposed to output
- \semantex_class_if_exist:NTF { #2 }
- {
- \semantex_data_tl_set:nnx { #1 } { output } { class_\cs_to_str:N #2 }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output_temp_tl
- \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output_temp_tl } { output } { #2 }
+ % Add new valuekeys with 7 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_seven_valuekey_format_auxiliary:nnn{#1}##1
}
- % Maybe allow output=self
}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_outputoptions:nn#1#2{
- \tl_set:Nn\l__semantex_outputoptions_auxiliary_temp_tl{}
- \cs_set:Npn\l__semantex_outputoptions_auxiliary_singlekey_temp_cs:n##1
+\cs_new_protected:Npn\__semantex_seven_valuekey_format_auxiliary:nnn#1#2#3
+{
+ \cs_set:Npn\l__semantex_seven_valuekey_auxiliary_temp_cs:nnnnnnn##1##2##3##4##5##6##7 { #3 }
+ \tl_set:Nn\l__semantex_seven_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \__semantex_outputoptions_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_outputoptions_auxiliary_temp_tl
- }
- \cs_set:Npn\l__semantex_outputoptions_auxiliary_valuekey_temp_cs:nn##1##2
+ \l__semantex_seven_valuekey_auxiliary_temp_cs:nnnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 }
+ } \l__semantex_seven_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_seven_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnn } ##1##2##3##4##5##6##7##8
{
- \__semantex_outputoptions_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_outputoptions_auxiliary_temp_tl
+ \l__semantex_seven_valuekey_auxiliary_temp_tl
}
- \keyval_parse:NNn
- \l__semantex_outputoptions_auxiliary_singlekey_temp_cs:n
- \l__semantex_outputoptions_auxiliary_valuekey_temp_cs:nn
- { #2 }
- \semantex_data_tl_put_right:nno { #1 } { outputoptions } { \l__semantex_outputoptions_auxiliary_temp_tl }
- %\exp_args:NNno\exp_args:Nno\cs_set:co { __semantex_data_cs_#1_outputoptions:n }
- %\exp_args:Nnno
- \semantex_data_cs_set:nnx { #1 } { outputoptions:n }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
-% g__semantex_data_tl_#1_outputoptions
-% \semantex_data_tl_get:nn { #1 } { outputoptions }
- \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions }
- %\l__semantex_outputoptions_auxiliary_temp_tl
+ \use:c { __semantex_data_cs_custom_seven_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnn } { ##1 } ##2
}
}
-\cs_generate_variant:Nn \semantex_data_cs_set:nnn { nnf , nnv , nnx }
-
-\cs_generate_variant:Nn \semantex_data_tl_put_right:nnn { nno }
-
-
-\cs_new:Npn\__semantex_outputoptions_process_singlekey:nnN#1#2#3
+\cs_new_protected:Npn\semantex_define_eight_valuekeys:nn#1#2
{
- \tl_put_right:Nn#3
- {
- \exp_not:N\semantex_singlekey:nn { #1 } { \exp_not:n { #2 } }
+ % Add new valuekeys with 8 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_eight_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-
-\cs_new:Npn\__semantex_outputoptions_process_valuekey:nnnN#1#2#3#4
+\cs_new_protected:Npn\__semantex_eight_valuekey_format_auxiliary:nnn#1#2#3
{
- \tl_if_eq:nnTF { #2 } { execute }
+ \cs_set:Npn\l__semantex_eight_valuekey_auxiliary_temp_cs:nnnnnnnn##1##2##3##4##5##6##7##8 { #3 }
+ \tl_set:Nn\l__semantex_eight_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:oN
{
- \tl_put_right:Nn#4
- {
- \exp_not:n { #3 }
- }
+ \l__semantex_eight_valuekey_auxiliary_temp_cs:nnnnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 } { ##9 }
+ } \l__semantex_eight_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_eight_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##1##2##3##4##5##6##7##8##9
+ {
+ \l__semantex_eight_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \tl_put_right:Nn#4
- {
- \exp_not:N\semantex_valuekey:nnn { #1 } { #2 } { \exp_not:n { #3 } }
- }
+ \use:c { __semantex_data_cs_custom_eight_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } { ##1 } ##2
}
}
-%----------------
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargument:nn#1#2{
- % Tells whether to rightreturn before rendering the output.
- \str_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { leftargument }
- }
- {
- \str_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { leftargument }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargumen_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargumen_temp_tl } { ifleftargument } { #2 }
- }
+\cs_new_protected:Npn\semantex_define_nine_valuekeys:nn#1#2
+{
+ % Add new valuekeys with 9 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_nine_valuekey_format_auxiliary:nnn{#1}##1
}
}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn#1#2{ %IMPLEMENT THIS
- % Tells whether to output or not
- \str_if_eq:nnTF { #2 } { true }
+
+\cs_new_protected:Npn\__semantex_nine_valuekey_format_auxiliary:nnn#1#2#3
+{
+ \cs_set:Npn\l__semantex_nine_valuekey_auxiliary_temp_cs:nnnnnnnnn##1##2##3##4##5##6##7##8##9 { #3 }
+ \tl_set:Nn\l__semantex_nine_valuekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_nine_valuekey_auxiliary_singlekey_temp_cs:n##1
{
- \semantex_data_bool_set_true:nn { #1 } { output }
+ \__semantex_preprocess_singlekey:nnN { \__semantex_nine_valuekey_format_auxiliary_name_of_register_temp_tl } { ##1 } \l__semantex_nine_valuekey_auxiliary_temp_tl
}
+ \cs_set:Npn\l__semantex_nine_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
{
- \str_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { output }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput_temp_tl } { ifoutput } { #2 }
- }
+ \__semantex_preprocess_valuekey:nnnN { \__semantex_nine_valuekey_format_auxiliary_name_of_register_temp_tl } { ##1 } { ##2 } \l__semantex_nine_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition:nn#1#2{
- % Tells whether to use upper or lower indices
- \semantex_data_bool_provide:nn { #1 } { uppergrading }
- \str_if_eq:nnTF { #2 } { upper }
- {
- \semantex_data_bool_set_true:nn { #1 } { uppergrading }
- }
+ \semantex_keyval_parse:NNo
+ \l__semantex_nine_valuekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_nine_valuekey_auxiliary_valuekey_temp_cs:nn
{
- \str_if_eq:nnTF { #2 } { lower }
- {
- \semantex_data_bool_set_false:nn { #1 } { uppergrading }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition_temp_tl } { gradingposition } { #2 }
- }
+ \l__semantex_nine_valuekey_auxiliary_temp_cs:nnnnnnnnn { ##1 } { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 } { ##9 }
}
-}
-
-\cs_set_eq:NN \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingpos:nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition:nn
-
-% Upper and lower right indices:
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn#1#2{
- % adds to the upper index
- \tl_if_blank:nF{#2}{
- \semantex_data_tl_put_right:nnn { #1 } { upper } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
- }
-}
-
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn#1#2{
- % Adds to the upper index, with a separator
- \tl_if_blank:nF{#2}
+ \cs_set_protected:cpo { __semantex_data_cs_custom_nine_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##1##2##3##4##5##6##7##8##9
{
- \semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
- {
- \semantex_data_tl_put_right:nnx { #1 } { upper }
- { \exp_not:n { \semantex_data_tl_get:nn { #1 } { uppersep } } }
- \semantex_data_tl_put_right:nnn { #1 } { upper } { \exp_not:n { #2 } }
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { upper } { \exp_not:n { #2 } }
- }
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn#1#2{
- % Adds to the left of the upper index
- \tl_if_blank:nF{#2}{
- \semantex_data_tl_put_left:nnn { #1 } { upper } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
+ \l__semantex_nine_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn#1#2{
- % Sets what to write before upper
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_left:nnn { #1 } { preupper } { \exp_not:n{ #2 } }
- }
-}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn#1#2{
- % Sets what to write after upper
- \tl_if_blank:nF{#2}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \semantex_data_tl_put_right:nnn { #1 } { postupper } { \exp_not:n{ #2 } }
+ \tl_set:Nn \__semantex_nine_valuekey_format_auxiliary_name_of_register_temp_tl { ##1 }
+ \use:c { __semantex_data_cs_custom_nine_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##2
}
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { upper }
- \semantex_data_bool_set_false:nn { #1 } { nextupperwithsep }
- \semantex_data_int_clear:nn { #1 } { numberofupperindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { preupper }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { postupper }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperdots:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { upperdots } { \exp_not:n { #2 } }
-}
-
-\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { upperslot } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
-}
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { nx }
+% SETTING UP THE ARGUMENT KEYVAL INTERFACE
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn#1#2
+\cs_new_protected:Npn\semantex_preprocess_arg_keys:nN#1#2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperdots } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperslot } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn#1#2{
- % Adds to the lower index
- \tl_if_blank:nF{#2}
+ \cs_set:Npn\l__semantex_preprocess_arg_singlekey_temp_cs:n##1
{
- \semantex_data_tl_put_right:nnn { #1 } { lower } { \exp_not:n { #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerindices }
+ \__semantex_preprocess_arg_singlekey:nnN { ####1 } { ##1 } #2
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn#1#2{
- % Adds to the lower index, with a separator
- \tl_if_blank:nF{#2}
+ \cs_set:Npn\l__semantex_preprocess_arg_valuekey_temp_cs:nn##1##2
{
- \semantex_data_bool_get:nnTF { #1 } { nextlowerwithsep }
- {
- \semantex_data_tl_put_right:nnx { #1 } { lower }
- { \exp_not:n { \semantex_data_tl_get:nn { #1 } { lowersep } } }
- \semantex_data_tl_put_right:nnn { #1 } { lower } { \exp_not:n { #2 } }
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { lower } { \exp_not:n { #2 } }
- }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn#1#2{
- % Adds to the lower index
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_left:nnn { #1 } { lower } { \exp_not:n { #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerindices }
+ \__semantex_preprocess_arg_valuekey:nnnN { ####1 } { ##1 } { ##2 } #2
}
+ \semantex_keyval_parse:NNn
+ \l__semantex_preprocess_arg_singlekey_temp_cs:n
+ \l__semantex_preprocess_arg_valuekey_temp_cs:nn
+ { #1 }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn#1#2{
- % Sets what to write before the lower index
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_left:nnn { #1 } { prelower } { \exp_not:n { #2 } }
- }
-}
+\cs_generate_variant:Nn \semantex_preprocess_arg_keys:nN { oN }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn#1#2{
- % Sets what to write after the lower index
- \tl_if_blank:nF{#2}
+\cs_new_protected:Npn\semantex_preprocess_arg_singlekeys:nN#1#2
+{
+ \cs_set:Npn\l__semantex_preprocess_arg_singlekey_temp_cs:n##1
{
- \semantex_data_tl_put_right:nnn { #1 } { postlower } { \exp_not:n{ #2 } }
+ \__semantex_preprocess_arg_singlekey:nnN { ####1 } { ##1 } #2
}
+ \clist_map_function:nN { #1 } \l__semantex_preprocess_arg_singlekey_temp_cs:n
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { lower }
- \semantex_data_bool_set_false:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_clear:nn { #1 } { numberoflowerindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { prelower }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { postlower }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerdots:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { lowerdots } { \exp_not:n { #2 } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { lowerslot } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { nx }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn#1#2
+\cs_new_protected:Npn\__semantex_preprocess_arg_singlekey:nnN#1#2#3
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
+ \tl_put_right:Nn#3
+ {
+ \semantex_arg_singlekey:nn { #1 } { #2 }
+ }
}
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerdots } } }
-}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn#1#2
+\cs_new_protected:Npn\__semantex_preprocess_arg_valuekey:nnnN#1#2#3#4
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerslot } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn#1#2{
- % upperwithsep={separator}{contents} adds contents to the upper index
- % with the appropriate index separator
- \semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
+ \str_case:nnF { #2 }
{
- \semantex_data_tl_put_right:nnn { #1 } { upper } {
- \exp_not:n {
- \semantex_grab_first_argument_of_two:nn #2
- \semantex_grab_second_argument_of_two:nn #2
+ { execute }{
+ \tl_put_right:Nn#4
+ {
+ #3
}
}
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { upper } {
- \exp_not:n {
- \semantex_grab_second_argument_of_two:nn #2
- }
+ { setkeys }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn#1#2{
- % lowerwithsep={separator}{contents} adds contents to the lower index
- % with the appropriate index separator
- \semantex_data_bool_get:nnTF { #1 } { nextlowerwithsep }
- {
- \semantex_data_tl_put_right:nnn { #1 } { lower } {
- \exp_not:n {
- \semantex_grab_first_argument_of_two:nn #2
- \semantex_grab_second_argument_of_two:nn #2
- }
+ { keysset }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { lower } {
- \exp_not:n {
- \semantex_grab_second_argument_of_two:nn #2
- }
+ { setkeysx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn#1#2{
- % Adds to the upper index, with a comma as separator
- \tl_if_blank:nF{#2}
- {
- \semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
- {
- \semantex_data_tl_put_right:nnn { #1 } { upper } { , \exp_not:n { #2 } }
+ { keyssetx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- {
- \semantex_data_tl_put_right:nnn { #1 } { upper } { \exp_not:n { #2 } }
+ { setargkeys }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperindices }
- }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn#1#2{
- % Adds to the lower index, with a comma as separator
- \tl_if_blank:nF{#2}
- {
- \semantex_data_bool_get:nnTF { #1 } { nextlowerwithsep }
- {
- \semantex_data_tl_put_right:nnn { #1 } { lower } { , \exp_not:n { #2 } }
+ { argkeysset }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- {
- \semantex_data_tl_put_right:nnn { #1 } { lower } { \exp_not:n { #2 } }
+ { setargkeysx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn#1#2
-{
- % Tells whether the upper index is the first one
- \tl_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { nextupperwithsep }
- }
- {
- \tl_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
+ { argkeyssetx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep_temp_tl } { ifnextupperwithsep } { #2 }
+ { setargsinglekeys }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn#1#2 % should be removed later
-{
- % Tells whether the lower index is the first one
- \tl_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { nextlowerwithsep }
- }
- {
- \tl_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
+ { argsinglekeysset }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep_temp_tl } { ifnextlowerwithsep } { #2 }
+ { setargsinglekeysx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
+ }
+ { argsinglekeyssetx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
}
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn#1#2
-{
- % Sets the separator for the upper index
- \semantex_data_tl_set:nnn { #1 } { uppersep } { \exp_not:n { #2 }}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn#1#2
-{
- % Sets the separator for the lower index
- \semantex_data_tl_set:nnn { #1 } { lowersep } { \exp_not:n { #2 }}
-}
-
-%--------------- Left indices: (I don't repeat all of the documentation)
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nn#1#2{
- % adds to the upper left index
- \tl_if_blank:nF{#2}{
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperleftindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nn#1#2{
- \tl_if_blank:nF{#2}
{
- \semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
- {
- \semantex_data_tl_put_left:nnx { #1 } { upperleft }
- { \exp_not:n { \semantex_data_tl_get:nn { #1 } { uppersep } } }
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n { #2 } }
- }
+ \tl_put_right:Nn#4
{
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n { #2 } }
+ \semantex_arg_valuekey:nnn { #1 } { #2 } { #3 }
}
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperleftindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn#1#2{
- \tl_if_blank:nF{#2}{
- \semantex_data_tl_put_right:nnn { #1 } { upperleft } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperleftindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn#1#2{
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_left:nnn { #1 } { preupperleft } { \exp_not:n{ #2 } }
}
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn#1#2{
- % adds to the lower index
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_right:nnn { #1 } { postupperleft } { \exp_not:n{ #2 } }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupperleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { upperleft }
- \semantex_data_bool_set_false:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_clear:nn { #1 } { numberofupperleftindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupperleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { preupperleft }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupperleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { preupperleft }
-}
+% The x version:
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftdots:nn#1#2
+\cs_new_protected:Npn\semantex_preprocess_arg_keys_x:nN#1#2
{
- \semantex_data_tl_set:nnn { #1 } { upperleftdots } { \exp_not:n { #2 } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftslot:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { upperleftslot } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftdotswithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftdots } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftslotwithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftslot } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nn#1#2{
- \tl_if_blank:nF{#2}
+ \cs_set:Npn\l__semantex_preprocess_arg_singlekey_x_temp_cs:n##1
{
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
+ \__semantex_preprocess_arg_singlekey_x:nnN { ####1 } { ##1 } #2
}
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nn#1#2{
- \tl_if_blank:nF{#2}
+ \cs_set:Npn\l__semantex_preprocess_arg_valuekey_x_temp_cs:nn##1##2
{
- \semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
- {
- \semantex_data_tl_put_left:nnx { #1 } { lowerleft }
- { \exp_not:n { \semantex_data_tl_get:nn { #1 } { lowerleftsep } } }
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n { #2 } }
- }
- {
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n { #2 } }
- }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
+ \__semantex_preprocess_arg_valuekey_x:nnnN { ####1 } { ##1 } { ##2 } #2
}
+ \semantex_keyval_parse:NNn
+ \l__semantex_preprocess_arg_singlekey_x_temp_cs:n
+ \l__semantex_preprocess_arg_valuekey_x_temp_cs:nn
+ { #1 }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn#1#2{
- \tl_if_blank:nF{#2} %This test really shouldn’t be made.
+\cs_new_protected:Npn\semantex_preprocess_arg_singlekeys_x:nN#1#2
+{
+ \cs_set:Npn\l__semantex_preprocess_arg_singlekey_x_temp_cs:n##1
{
- \semantex_data_tl_put_right:nnn { #1 } { lowerleft } { \exp_not:n{ #2 } }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
+ \__semantex_preprocess_arg_singlekey_x:nnN { ####1 } { ##1 } #2
}
+ \clist_map_function:nN { #1 } \l__semantex_preprocess_arg_singlekey_x_temp_cs:n
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn#1#2{
- \tl_if_blank:nF{#2}
- {
- \semantex_data_tl_put_left:nnn { #1 } { prelowerleft } { \exp_not:n{ #2 } }
- }
-}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn#1#2{
- \tl_if_blank:nF{#2}
+\cs_new_protected:Npn\__semantex_preprocess_arg_singlekey_x:nnN#1#2#3
+{
+ \tl_put_right:Nn#3
{
- \semantex_data_tl_put_right:nnn { #1 } { postlowerleft } { \exp_not:n{ #2 } }
+ \semantex_arg_singlekey_x:nn { #1 } { #2 }
}
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nn#1#2{
- \semantex_data_bool_get:nnTF { #1 } { nextupperleftwithsep }
- {
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } {
- \exp_not:n { \semantex_grab_second_argument_of_two:nn #2 \semantex_grab_first_argument_of_two:nn #2 }
- }
- }
+\cs_new_protected:Npn\__semantex_preprocess_arg_valuekey_x:nnnN#1#2#3#4
+{
+ \str_case:nnF { #2 }
{
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } {
- \exp_not:n { \semantex_grab_second_argument_of_two:nn #2 }
+ { execute } {
+ \tl_put_right:Nn#4
+ {
+ #3
+ }
}
- }
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperleftindices }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nn#1#2{
- \semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
- {
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } {
- \exp_not:n { \semantex_grab_second_argument_of_two:nn #2 \semantex_grab_first_argument_of_two:nn #2 }
+ { setkeys }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
- {
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } {
- \exp_not:n { \semantex_grab_second_argument_of_two:nn #2 }
+ { keysset }{
+ \semantex_preprocess_keys:nN { #3 } #4
}
- }
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlowerleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { lowerleft }
- \semantex_data_bool_set_false:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_clear:nn { #1 } { numberoflowerleftindices }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelowerleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { prelowerleft }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlowerleft:nn#1#2{
- \semantex_data_tl_clear:nn { #1 } { prelowerleft }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftdots:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { lowerleftdots } { \exp_not:n { #2 } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftslot:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { lowerleftslot } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleftdots:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleftslot:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
-}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nn { nx }
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftdotswithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftslotwithothersep:nn#1#2
-{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nn#1#2{
- \tl_if_blank:nF{#2}
- {
- \semantex_data_bool_get:nnTF { #1 } { nextupperleftwithsep }
- {
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n { #2 } , }
+ { setkeysx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- {
- \semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n { #2 } }
+ { keyssetx }{
+ \semantex_preprocess_keys_x:nN { #3 } #4
}
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberofupperleftindices }
- }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nn#1#2{
- \tl_if_blank:nF{#2}
- {
- \semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
- {
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n { #2 } , }
+ { setargkeys }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- {
- \semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n { #2 } }
+ { argkeysset }{
+ \semantex_preprocess_arg_keys:nN { #3 } #4
}
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
- \semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep:nn#1#2
-{
- \tl_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { nextupperleftwithsep }
- }
- {
- \tl_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
+ { setargkeysx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep_temp_tl } { ifnextupperleftwithsep } { #2 }
+ { argkeyssetx }{
+ \semantex_preprocess_arg_keys_x:nN { #3 } #4
}
- }
-}
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep:nn#1#2
-{
- \tl_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { nextlowerleftwithsep }
- }
- {
- \tl_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
+ { setargsinglekeys }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- {
- semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep_temp_tl } { ifnextlowerleftwithsep } { #2 }
+ { argsinglekeysset }{
+ \semantex_preprocess_arg_singlekeys:nN { #3 } #4
}
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftsep:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { upperleftsep } { \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftsep:nn#1#2
-{
- \semantex_data_tl_set:nnn { #1 } { lowerleftsep } { \exp_not:n { #2 } }
-}
-
-% Contrary to what you might think, the following commands ARE
-% sometimes needed.
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep:nn#1#2 % should be removed later
-{
- % Tells whether the d (degree) is empty or not
- \str_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
- }
- {
- \str_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
+ { setargsinglekeysx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
}
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep_temp_tl } { ifnextdwithsep } { #2 }
+ { argsinglekeyssetx }{
+ \semantex_preprocess_arg_singlekeys_x:nN { #3 } #4
}
}
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdegwithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdegreewithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep:nn#1#2
-{
- % Tells whether the i (index) is empty or not
- \str_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
- }
{
- \str_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
- { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
- }
+ \tl_put_right:Nn#4
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep_temp_tl } { ifnextiwithsep } { #2 }
+ \semantex_arg_valuekey:nnx { #1 } { #2 } { #3 }
}
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextindexwithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_valuekeys:nn#1#2
{
- % adds to the d-index (upper by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { #1 } { #2 }
+ % Add new valuekeys
+ \clist_map_inline:nn { #2 }{
+ \__semantex_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_deg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn
+\cs_generate_variant:Nn \l__semantex_auxiliary_preprocess_arg_keys_temp:n { o }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn#1#2
+\cs_new_protected:Npn\__semantex_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- % adds to the d-index (upper by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn#1#2{ %IM Maybe remove this.
- % adds to the d-index (upper by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_i:nn#1#2{
- % adds to the i-index (lower by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_index:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_i:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_si:nn#1#2{
- % adds to the i-index (lower by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { #1 } { #2 }
- }
+ \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_temp_cs:n##1 { #3 }
+ \tl_set:Nn \l__semantex_arg_valuekey_auxiliary_temp_tl {}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_si:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ci:nn#1#2{
- % adds to the i-index (lower by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \l__semantex_arg_valuekey_auxiliary_temp_cs:n { ##2 }
+ } \l__semantex_arg_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { #1 } { #2 }
+ \l__semantex_arg_valuekey_auxiliary_temp_tl
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ci:nn
-
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn#1#2
+\cs_new_protected:Npn\semantex_remove_arg_valuekey:nn#1#2
{
- % adds to the d-index (upper by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreewithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_iwithothersep:nn#1#2{
- % adds to the i-index (lower by default)
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { #1 } { #2 }
- }
+ \cs_undefine:c { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn }
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_iwithothersep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_singlekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn { #1 } { #2 }
+ % Add keys taking no values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_arg_singlekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreesep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setisep:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+\cs_new_protected:Npn \__semantex_arg_singlekey_format_auxiliary:nnn#1#2#3{
+ \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_temp_cs: { #3 }
+ \tl_set:Nn \l__semantex_arg_singlekey_auxiliary_temp_tl {}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn { #1 } { #2 }
- }
+ \l__semantex_arg_singlekey_auxiliary_temp_cs:
+ } \l__semantex_arg_singlekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_singlekey_#1_\tl_trim_spaces:n{#2}:n } ##1
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn { #1 } { #2 }
+ \l__semantex_arg_singlekey_auxiliary_temp_tl
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setisep:nn
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn#1#2
+\cs_new_protected:Npn\semantex_remove_arg_singlekey:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { #1 } { #2 }
- }
+ \cs_undefine:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n }
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_predeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_predegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_two_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { #1 } { #2 }
+ % Add new argument valuekeys with 2 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_arg_two_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn
-
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn#1#2
+\cs_new_protected:Npn\__semantex_arg_two_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_two_valuekey_auxiliary_temp_cs:nn##1##2 { #3 }
+ \tl_set:Nn\l__semantex_arg_two_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn { #1 } { #2 }
- }
+ \l__semantex_arg_two_valuekey_auxiliary_temp_cs:nn { ##2 } { ##3 }
+ } \l__semantex_arg_two_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_two_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnn } ##1##2##3
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleardeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleardegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn
-
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn { #1 } { #2 }
+ \l__semantex_arg_two_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_two_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpredeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpredegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn
-
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_three_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn { #1 } { #2 }
+ % Add new argument valuekeys with 3 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_three_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prei:nn#1#2
+\cs_new_protected:Npn\__semantex_three_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_three_valuekey_auxiliary_temp_cs:nnn##1##2##3 { #3 }
+ \tl_set:Nn\l__semantex_arg_three_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { #1 } { #2 }
- }
+ \l__semantex_arg_three_valuekey_auxiliary_temp_cs:nnn { ##2 } { ##3 } { ##4 }
+ } \l__semantex_arg_three_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_three_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnn } ##1##2##3##4
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prei:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_posti:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { #1 } { #2 }
+ \l__semantex_arg_three_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_three_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_posti:nn
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleari:nn#1#2
+\cs_new:Npn\semantex_define_arg_four_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn { #1 } { #2 }
+ % Add new argument valuekeys with 4 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_four_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleari:nn
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprei:nn#1#2
+\cs_new_protected:Npn\__semantex_four_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn { #1 } { #2 }
- }
+ \cs_set:Npn\l__semantex_arg_four_valuekey_auxiliary_temp_cs:nnnn##1##2##3##4 { #3 }
+ \tl_set:Nn\l__semantex_arg_four_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprei:nn
-
-\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearposti:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \l__semantex_arg_four_valuekey_auxiliary_temp_cs:nnnn { ##2 } { ##3 } { ##4 } { ##5 }
+ } \l__semantex_arg_four_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_four_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnn } ##1##2##3##4##5
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn { #1 } { #2 }
+ \l__semantex_arg_four_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_four_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearposti:nn
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_five_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \semantex_data_tl_set:nnn { #1 } { upperdots } { \exp_not:n s{ #2 } }
- }
- {
- \semantex_data_tl_set:nnn { #1 } { lowerdots } { \exp_not:n { #2 } }
+ % Add new argument valuekeys with 5 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_five_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn#1#2
+\cs_new_protected:Npn\__semantex_five_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_five_valuekey_auxiliary_temp_cs:nnnnn##1##2##3##4##5 { #3 }
+ \tl_set:Nn\l__semantex_arg_five_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn { #1 } { #2 }
- }
+ \l__semantex_arg_five_valuekey_auxiliary_temp_cs:nnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 }
+ } \l__semantex_arg_five_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_five_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnn } ##1##2##3##4##5##6
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn { #1 } { #2 }
+ \l__semantex_arg_five_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_five_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_six_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn { #1 } { #2 }
+ % Add new argument valuekeys with 6 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_six_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn#1#2
+\cs_new_protected:Npn\__semantex_six_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_six_valuekey_auxiliary_temp_cs:nnnnnn##1##2##3##4##5##6 { #3 }
+ \tl_set:Nn\l__semantex_arg_six_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn { #1 } { #2 }
- }
+ \l__semantex_arg_six_valuekey_auxiliary_temp_cs:nnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 }
+ } \l__semantex_arg_six_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_six_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnn } ##1##2##3##4##5##6##7
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn
-
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn { #1 } { #2 }
+ \l__semantex_arg_six_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_six_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_seven_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn { #1 } { #2 }
+ % Add new argument valuekeys with 7 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_seven_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn#1#2
+\cs_new_protected:Npn\__semantex_seven_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn { #1 } { #2 }
- }
+ \cs_set:Npn\l__semantex_arg_seven_valuekey_auxiliary_temp_cs:nnnnnnn##1##2##3##4##5##6##7 { #3 }
+ \tl_set:Nn\l__semantex_arg_seven_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn { #1 } { #2 }
- }
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \l__semantex_arg_seven_valuekey_auxiliary_temp_cs:nnnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 }
+ } \l__semantex_arg_seven_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_seven_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnn } ##1##2##3##4##5##6##7##8
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn { #1 } { #2 }
+ \l__semantex_arg_seven_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_seven_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degdotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_eight_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn { #1 } { #2 }
+ % Add new argument valuekeys with 8 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_eight_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-
-
-%----------------------------------------------------------
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn#1#2
+\cs_new_protected:Npn\__semantex_eight_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_eight_valuekey_auxiliary_temp_cs:nnnnnnnn##1##2##3##4##5##6##7##8 { #3 }
+ \tl_set:Nn\l__semantex_arg_eight_valuekey_auxiliary_temp_tl{}
+ \semantex_preprocess_arg_keys:oN
{
- \semantex_data_tl_set:nnn { #1 } { lowerdots } { \exp_not:n { #2 } }
- }
+ \l__semantex_arg_eight_valuekey_auxiliary_temp_cs:nnnnnnnn { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 } { ##9 }
+ } \l__semantex_arg_eight_valuekey_auxiliary_temp_tl
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_eight_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##1##2##3##4##5##6##7##8##9
{
- \semantex_data_tl_set:nnn { #1 } { upperdots } { \exp_not:n { #2 } }
+ \l__semantex_arg_eight_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn { #1 } { #2 }
+ \use:c { __semantex_data_cs_custom_arg_eight_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } { ##1 } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn#1#2
+\cs_new_protected:Npn\semantex_define_arg_nine_valuekeys:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn { #1 } { #2 }
+ % Add new argument valuekeys with 9 values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_nine_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn#1#2
+\cs_new_protected:Npn\__semantex_nine_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \cs_set:Npn\l__semantex_arg_nine_valuekey_auxiliary_temp_cs:nnnnnnnnn##1##2##3##4##5##6##7##8##9 { #3 }
+ \tl_set:Nn\l__semantex_arg_nine_valuekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_arg_nine_valuekey_auxiliary_singlekey_temp_cs:n##1
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn { #1 } { #2 }
+ \__semantex_preprocess_arg_singlekey:nnN { \__semantex_arg_nine_valuekey_format_auxiliary_name_of_register_temp_tl } { ##1 } \l__semantex_arg_nine_valuekey_auxiliary_temp_tl
}
+ \cs_set:Npn\l__semantex_arg_nine_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn { #1 } { #2 }
+ \__semantex_preprocess_arg_valuekey:nnnN { \__semantex_arg_nine_valuekey_format_auxiliary_name_of_register_temp_tl } { ##1 } { ##2 } \l__semantex_arg_nine_valuekey_auxiliary_temp_tl
}
-}
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn#1#2
-{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ \semantex_keyval_parse:NNo
+ \l__semantex_arg_nine_valuekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_arg_nine_valuekey_auxiliary_valuekey_temp_cs:nn
+ {
+ \l__semantex_arg_nine_valuekey_auxiliary_temp_cs:nnnnnnnnn { ##1 } { ##2 } { ##3 } { ##4 } { ##5 } { ##6 } { ##7 } { ##8 } { ##9 }
+ }
+ \cs_set_protected:cpo { __semantex_data_cs_custom_arg_nine_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##1##2##3##4##5##6##7##8##9
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn { #1 } { #2 }
+ \l__semantex_arg_nine_valuekey_auxiliary_temp_tl
}
+ \cs_set_protected:cpn { __semantex_data_cs_custom_arg_valuekey_#1_\tl_trim_spaces:n{#2}:nn } ##1##2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn { #1 } { #2 }
+ \tl_set:Nn \__semantex_arg_nine_valuekey_format_auxiliary_name_of_register_temp_tl { ##1 }
+ \use:c { __semantex_data_cs_custom_arg_nine_valuekey_#1_\tl_trim_spaces:n{#2}_auxiliary:nnnnnnnnn } ##2
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMMANDS HANDLING THE PARSE ROUTINE
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn#1#2
+\cs_new_protected:Npn\semantex_parse:n#1
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn { #1 } { #2 }
- }
+ % This command runs all the keys that the user may have
+ % stored via the parseoptions key
+ \exp_args:NNx\cs_set_protected:Nn\l__semantex_parse_temp_cs:n
+ % \cs_set:Nx gave us ##1 where we wanted #1
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn { #1 } { #2 }
+ \semantex_data_tl_get_exp_not:nn { #1 } { parseoptions }
}
+ \l__semantex_parse_temp_cs:n { #1 }
+ \semantex_data_tl_clear:nn { #1 } { parseoptions }
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn#1#2
+\cs_new_protected:Npn\semantex_add_to_parse_options:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn { #1 } { #2 }
- }
+ \tl_set:Nn\l__semantex_parseoptions_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:nN { #2 } \l__semantex_parseoptions_auxiliary_temp_tl
+ \semantex_add_raw_commands_to_parse_options:no { #1 } { \l__semantex_parseoptions_auxiliary_temp_tl }
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn#1#2
+\cs_new_protected:Npn\semantex_add_raw_commands_to_parse_options:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn { #1 } { #2 }
- }
+ \semantex_data_tl_put_right:nnn { #1 } { parseoptions } { #2 }
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn
+\cs_generate_variant:Nn \semantex_add_raw_commands_to_parse_options:nn { no }
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMMANDS HANDLING OUTPUT OPTIONS
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn#1#2
+\cs_new_protected:Npn\semantex_set_output:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
+ % Tells what class the register is supposed to output
+ \semantex_class_if_exist:NTF #2
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn { #1 } { #2 }
+ \semantex_data_tl_set:nnx { #1 } { output } { \semantex_class_to_register:N #2 }
}
{
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn { #1 } { #2 }
+ \semantex_msg_error:nnnn { #1 } { class_not_found } { output } { #2 }
}
}
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexdotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islotwithothersep:nn#1#2
+\cs_new_protected:Npn\semantex_add_to_output_options:nn#1#2
{
- \semantex_data_bool_get:nnTF { #1 } { uppergrading }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn { #1 } { #2 }
- }
- {
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn { #1 } { #2 }
- }
+ \tl_set:Nn\l__semantex_output_options_auxiliary_temp_tl{}
+ \semantex_preprocess_keys:nN { #2 } \l__semantex_output_options_auxiliary_temp_tl
+ \semantex_add_raw_commands_to_output_options:no { #1 } { \l__semantex_output_options_auxiliary_temp_tl }
}
-%----------------------------------------------------------
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degslotwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn
-
-\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslotwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_par:nn#1#2{
- % Turns parentheses on, and sets their size
- \semantex_data_tl_set:nnn { #1 } { parsize }{ \exp_not:n { #2 } }
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar:nn { #1 } { true }
+\cs_new_protected:Npn\semantex_add_raw_commands_to_output_options:nn#1#2
+{
+ \semantex_data_tl_put_right:nnn { #1 } { outputoptions } { #2 }
}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parsize:nn#1#2{
- % Sets the size of the parentheses
- \semantex_data_tl_set:nnn { #1 } { parsize }{ \exp_not:n { #2 } }
-}
+\cs_generate_variant:Nn \semantex_add_raw_commands_to_output_options:nn { no }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:nn#1#2{
- \semantex_data_tl_set:nnn { #1 } { leftpar }{ \exp_not:n { #2 } }
-}
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:nn { xn }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% USER-LEVEL PROGRAMMING KEYS
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:nn#1#2{
- \semantex_data_tl_set:nnn { #1 } { rightpar }{ \exp_not:n { #2 } }
-}
+\cs_generate_variant:Nn\str_if_eq:nnTF { xxTF }
-\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:nn { xn }
+\cs_generate_variant:Nn\str_if_eq:nnT { xxT }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar:nn#1#2{ %IMPLEMENT THIS
- % tells whether to use the output class or not
- \semantex_data_bool_provide:nn { #1 } { par }
- \str_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { par }
- \semantex_data_bool_set_false:nn { #1 } { flexpar }
- }
- {
- \str_if_eq:nnTF { #2 } { never }
- {
- \semantex_data_bool_set_false:nn { #1 } { par }
- \semantex_data_bool_set_false:nn { #1 } { flexpar }
- }
- {
- \str_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { par }
- \semantex_data_bool_set_true:nn { #1 } { flexpar }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar_temp_tl } { ifpar } { #2 }
- }
- }
- }
-}
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar:nn#1#2
-{
- % Abbreviation for "symbol parentheses"
- % Adds parentheses around the current symbol
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{}
- \semantex_data_tl_inherit:nn { #1 } { symbol } % Check if really necessary
- \tl_if_blank:nTF { #2 }
- {
- \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl
- \__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl }
- { \semantex_data_tl_get:nn { #1 } { leftspar } }
- { \semantex_data_tl_get:nn { #1 } { rightspar } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
- \semantex_data_tl_set:nnx { #1 } { symbol }
- {
- \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
- }
- }
- {
- \tl_set:Nn \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl { \exp_not:n { #2 } }
- \__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl }
- { \semantex_data_tl_get:nn { #1 } { leftspar } }
- { \semantex_data_tl_get:nn { #1 } { rightspar } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
- \semantex_data_tl_set:nnx { #1 } { symbol }
- {
- \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
- }
- }
-}
+\cs_generate_variant:Nn\str_if_eq:nnF { xxF }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep:nn#1#2
-{
- % Tells whether it is the first argument or not
- \tl_if_eq:nnTF { #2 } { true }
- {
- \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
- }
- {
- \tl_if_eq:nnTF { #2 } { false }
- {
- \semantex_data_bool_set_false:nn { #1 } { nextargwithsep }
- }
- {
- \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep_temp_tl
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep_temp_tl } { ifnextargwithsep } { #2 }
- }
- }
-}
+\cs_generate_variant:Nn\tl_if_blank:nTF { xTF, xT }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar:nn#1#2
-{
- % Uses the syntax otherspar={leftpar}{rightpar}
- % Adds a new spar, but with these as parentheses
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_auxiliary:nnn { #1 } #2
-}
+\cs_generate_variant:Nn \tl_if_blank:nF { xF }
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_auxiliary:nnn#1#2#3
-{
- \semantex_data_tl_inherit:nn { #1 } { sparsize } % This is necessary for unknown reasons -- otherwise, it will crash when inheriting sparsize
- \semantex_data_tl_inherit:nn { #1 } { symbol }
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{}
- \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_sparsize_temp_tl
- \__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_sparsize_temp_tl }
- { \exp_not:n { \exp_not:n { #2 } } }
- { \exp_not:n { \exp_not:n { #3 } } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_temp_tl
- \semantex_data_tl_set:nnx { #1 } { symbol }
- {
- \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_temp_tl
- }
+\cs_generate_variant:Nn \semantex_keys_set:nn { on }
+
+\cs_generate_variant:Nn \semantex_keys_set_x:nn { on }
+
+\cs_new:Npn\semantex_this:{
+ \msg_error:nn { semantex } { SemantexThis_in_input_stream }
+}
+\cs_new:Npn\SemantexThis{\semantex_this:}
+\cs_new_protected:Npn\SemantexDataProvide#1{\semantex_data_tl_provide:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexDataSet#1#2{\semantex_data_tl_set:nnn{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new_protected:Npn\SemantexDataSetx#1#2{\semantex_data_tl_set:nnx{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new_protected:Npn\SemantexDataPutRight#1#2{\semantex_data_tl_put_right:nnn{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new_protected:Npn\SemantexDataPutRightx#1#2{\semantex_data_tl_put_right:nnx{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new_protected:Npn\SemantexDataPutLeft#1#2{\semantex_data_tl_put_left:nnn{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new_protected:Npn\SemantexDataPutLeftx#1#2{\semantex_data_tl_put_left:nnx{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new:Npn\SemantexDataGet#1{\semantex_data_tl_get:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new:Npn\SemantexDataGetExpNot#1{\semantex_data_tl_get_exp_not:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexDataClear#1{\semantex_data_tl_clear:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexSetKeys#1{\semantex_keys_set:on{\semantex_this:}{#1}}
+\cs_new_protected:Npn\SemantexKeysSet#1{\semantex_keys_set:on{\semantex_this:}{#1}}
+\cs_new_protected:Npn\SemantexSetKeysx#1{\semantex_keys_set_x:on{\semantex_this:}{#1}}
+\cs_new_protected:Npn\SemantexKeysSetx#1{\semantex_keys_set_x:on{\semantex_this:}{#1}}
+\cs_new_protected:Npn\SemantexSetArgKeys#1{\semantex_arg_keys_set:nn { \semantex_this: } { #1 }}
+\cs_new_protected:Npn\SemantexArgKeysSet#1{\semantex_arg_keys_set:nn { \semantex_this: } { #1 }}
+\cs_new_protected:Npn\SemantexSetArgKeysx#1{\semantex_arg_keys_set_x:nn { \semantex_this: } { #1 }}
+\cs_new_protected:Npn\SemantexArgKeysSetx#1{\semantex_arg_keys_set_x:nn { \semantex_this: } { #1 }}
+\cs_new_protected:Npn\SemantexSetArgSingleKeys#1{\semantex_arg_singlekeys_set:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexArgSingleKeysSet#1{\semantex_arg_singlekeys_set:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexSetArgSingleKeysx#1{\semantex_arg_singlekeys_set_x:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexArgSingleKeysSetx#1{\semantex_arg_singlekeys_set_x:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexSetOneArgSingleKey#1{\semantex_arg_singlekey:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexOneSingleArgKeySet#1{\semantex_arg_singlekey:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexSetOneArgSingleKeyx#1{\semantex_arg_singlekey_x:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexOneSingleArgKeySetx#1{\semantex_arg_singlekey_x:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexSetArgWithoutKeyval#1{\semantex_arg_without_keyval:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexArgWithoutKeyvalSet#1{\semantex_arg_without_keyval:nn { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexSetArgWithoutKeyvalx#1{\semantex_arg_without_keyval:nx { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexArgWithoutKeyvalSetx#1{\semantex_arg_without_keyval:nx { \semantex_this: } { #1 } }
+\cs_new_protected:Npn\SemantexStrIfEqTF#1#2#3#4{\str_if_eq:xxTF{#1}{#2}{#3}{#4}}
+\cs_new_protected:Npn\SemantexStrIfEqT#1#2#3{\str_if_eq:xxT{#1}{#2}{#3}}
+\cs_new_protected:Npn\SemantexStrIfEqF#1#2#3{\str_if_eq:xxF{#1}{#2}{#3}}
+\cs_new_protected:Npn\SemantexIfBlankTF#1#2#3{\tl_if_blank:xTF{#1}{#2}{#3}}
+\cs_new_protected:Npn\SemantexIfBlankT#1#2{\tl_if_blank:xT{#1}{#2}}
+\cs_new_protected:Npn\SemantexIfBlankF#1#2{\tl_if_blank:xF{#1}{#2}}
+\cs_new_protected:Npn\SemantexBoolProvide#1{\semantex_data_bool_provide:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexBoolSetTrue#1{\semantex_data_bool_set_true:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexBoolSetFalse#1{\semantex_data_bool_set_false:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new:Npn\SemantexBoolIfTF#1#2#3{\semantex_data_bool_get:nnTF{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}{#3}}
+\cs_new:Npn\SemantexBoolIfT#1#2{\semantex_data_bool_get:nnTF{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}{}}
+\cs_new:Npn\SemantexBoolIfF#1#2{\semantex_data_bool_get:nnTF{\semantex_this:}{\tl_trim_spaces:n{#1}}{}{#2}}
+\cs_new_protected:Npn\SemantexIntProvide#1{\semantex_data_int_provide:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new:Npn\SemantexIntGet#1{\semantex_data_int_get:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexIntClear#1{\semantex_data_int_clear:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexIntIncr#1{\semantex_data_int_incr:nn{\semantex_this:}{\tl_trim_spaces:n{#1}}}
+\cs_new_protected:Npn\SemantexIntSet#1#2{\semantex_data_int_set:nnn{\semantex_this:}{\tl_trim_spaces:n{#1}}{#2}}
+\cs_new:Npn\SemantexIntIfGreaterTF#1#2#3#4
+{
+ \int_compare:nNnTF
+ { #1 }
+ >
+ { #2 }
+ { #3 }
+ { #4 }
}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar:nn#1#2
+\cs_new:Npn\SemantexIntIfGreaterT#1#2#3
{
- % Uses the syntax otherspar={leftpar}{rightpar}{size}
- % Adds a new spar, but with these as parentheses and size
- \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_auxiliary:nnnn { #1 } #2
+ \int_compare:nNnTF
+ { #1 }
+ >
+ { #2 }
+ { #3 }
+ { }
}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_auxiliary:nnnn#1#2#3#4
+\cs_new:Npn\SemantexIntIfGreaterF#1#2#3
{
- \tl_set:Nn\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_sparsize_temp_tl
- { \exp_not:n { #4 } }
- \__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_sparsize_temp_tl }
- { \exp_not:n { \exp_not:n { #2 } } }
- { \exp_not:n { \exp_not:n { #3 } } }
- { \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_temp_tl
- \semantex_data_tl_set:nnx { #1 } { symbol }
- {
- \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_temp_tl
- }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sparsize:nn#1#2{
- % sets the size of the parentheses
- \semantex_data_tl_set:nnn { #1 } { sparsize }{ \exp_not:n { #2 } }
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftspar:nn#1#2{
- \semantex_data_tl_set:nnn { #1 } { leftspar }{ \exp_not:n { \exp_not:n { #2 } } }
- %IM Two \exp_not necessary for unknown reasons
- %IM Doing the same at leftpar yields an error.
-}
-
-\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightspar:nn#1#2{
- \semantex_data_tl_set:nnn { #1 } { rightspar }{ \exp_not:n { \exp_not:n { #2 } } }
- %IM Two \exp_not necessary for unknown reasons
- %IM Doing the same at leftpar yields an error.
+ \int_compare:nNnTF
+ { #1 }
+ >
+ { #2 }
+ { }
+ { #3 }
}
-
-\cs_generate_variant:Nn \semantex_keys_set:nn { nx, no, nV } % Only the first one is currently being used
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% COMMANDS CONTROLLING THE ARGUMENT KEYVAL INTERFACE
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nn#1#2
+\cs_new:Npn\SemantexIntIfEqTF#1#2#3#4
{
- % Uses syntax sep={separator}{argument}; adds an argument
- % with the specified separator
- \semantex_data_bool_get:nnTF { #1 } { nextargwithsep }
- {
- \semantex_data_tl_put_right:nnn { #1 } { arg } {
- \exp_not:n {
- \semantex_grab_first_argument_of_two:nn #2
- \semantex_grab_second_argument_of_two:nn #2
- }
- }
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { arg } {
- \exp_not:n {
- \semantex_grab_second_argument_of_two:nn #2
- }
- }
- %IM These do not use :x, unlike the ones below
- }
- \semantex_data_int_incr:nn { #1 } { numberofarguments }
- \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
+ \int_compare:nNnTF
+ { #1 }
+ =
+ { #2 }
+ { #3 }
+ { #4 }
}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nn { nx }
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nn#1#2
+\cs_new:Npn\SemantexIntIfEqT#1#2#3
{
- % Adds to the argument, with the standard separator
- \semantex_data_bool_get:nnTF { #1 } { nextargwithsep }
- {
- \semantex_data_tl_put_right:nnx { #1 } { arg } { \exp_not:n { \semantex_data_tl_get:nn { #1 } { argsep } } }
- \semantex_data_tl_put_right:nnn { #1 } { arg } {\exp_not:n { #2 } }
- % As an experiment, I tried changing cx to cn, and it failed
- % when changing the separator on the fly.
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { arg } { \exp_not:n { #2 } }
- %IM Recently corrected
- % Previously, this was cx, but I didn’t see any point of this;
- % this was mostly to create symmetry with the below case where
- % cx is strictly necessary.
- }
-% \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn { #1 } { true }
- \semantex_data_int_incr:nn { #1 } { numberofarguments }
- \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
+ \int_compare:nNnTF
+ { #1 }
+ =
+ { #2 }
+ { #3 }
+ { }
}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nn { nx }
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nn#1#2
+\cs_new:Npn\SemantexIntIfEqF#1#2#3
{
- % Adds to the argument, with the standard separator
- \semantex_data_bool_get:nnTF { #1 } { nextargwithsep }
- {
- \semantex_data_tl_put_right:nnn { #1 } { arg } { , \exp_not:n { #2 } }
- % As an experiment, I tried changing cx to cn, and it failed
- % when changing the separator on the fly.
- }
- {
- \semantex_data_tl_put_right:nnn { #1 } { arg } { \exp_not:n { #2 } }
- %IM Recently corrected
- % Previously, this was cx, but I didn’t see any point of this;
- % this was mostly to create symmetry with the below case where
- % cx is strictly necessary.
- }
-% \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn { #1 } { true }
- \semantex_data_int_incr:nn { #1 } { numberofarguments }
- \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
+ \int_compare:nNnTF
+ { #1 }
+ =
+ { #2 }
+ { }
+ { #3 }
}
-
-\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nn { nx }
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_dots:nn#1#2
+\cs_new:Npn\SemantexIntIfLessTF#1#2#3#4
{
- % Writes dots in the argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } }
+ \int_compare:nNnTF
+ { #1 }
+ <
+ { #2 }
+ { #3 }
+ { #4 }
}
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_slot:nn#1#2
+\cs_new:Npn\SemantexIntIfLessT#1#2#3
{
- % Writes the slot in teh argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } }
+ \int_compare:nNnTF
+ { #1 }
+ <
+ { #2 }
+ { #3 }
+ { }
}
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_cdots:nn#1#2
+\cs_new:Npn\SemantexIntIfLessF#1#2#3
{
- % Writes dots in the argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } }
+ \int_compare:nNnTF
+ { #1 }
+ <
+ { #2 }
+ { }
+ { #3 }
}
-
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_cslot:nn#1#2
+\cs_new:Npn\SemantexExpNot#1{\exp_not:n{#1}}
+\cs_new:Npn\SemantexERRORKeyValueNotFound#1#2
{
- % Writes the slot in teh argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } }
+ \semantex_error_key_value_not_found:nnn { \semantex_this: } { #1 } { #2 }
}
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_dotswithothersep:nn#1#2
+\cs_new:Npn\SemantexERRORArgKeyValueNotFound#1#2
{
- % Writes dots in the argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } } }
+ \semantex_error_arg_key_value_not_found:nnn { \semantex_this: } { #1 } { #2 }
}
-\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_slotwithothersep:nn#1#2
+\cs_new:Npn\SemantexERROR#1
{
- % Writes the slot in teh argument
- \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } } }
+ \semantex_error_generic:nn { \semantex_this: } { #1 }
}
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% SETTING UP THE BASE CLASS SemantexBaseObject
+% ERROR MESSAGES
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { output }
-
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { output } { class_SemantexBaseObject }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upper }
+\msg_new:nnnn { semantex } { semantex_setup_key_not_found } { Unknown~key~#1~passed~to~\SemantexSetup~on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { uppersep }
+\msg_new:nnnn { semantex } { semantex_setup_key_value_not_found } { Unknown~value~#2~passed~to~key~#1~in~\SemantexSetup~on~line~\msg_line_number: } {}
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { uppersep } { , }
+\msg_new:nnnn { semantex } { valuekey_not_found } { Unknown~key~#2~passed~to~#1 on~line~\msg_line_number: } {}
-%IM Also, need commands like forgetupperindex, reverting to the class standard
+\msg_new:nnnn { semantex } { arg_valuekey_not_found } { Unknown~argument~key~#2~passed~to~#1on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lower }
+\msg_new:nnnn { semantex } { data_tl_not_found } { Unknown~data~#2~requested~from~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowersep }
+\msg_new:nnnn { semantex } { data_int_not_found } { Unknown~integer~#2~requested~from~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { lowersep } { , }
+\msg_new:nnnn { semantex } { data_bool_not_found } { Unknown~boolean~#2~requested~from~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { preupper }
+\msg_new:nnnn { semantex } { data_cs_not_found } { Unknown~command~sequence~#2~requested~from~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postupper }
+\msg_new:nnnn { semantex } { data_prop_not_found } { Unknown~property~list~#2~requested~from~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prelower }
+\msg_new:nnnn { semantex } { key_value_not_found } { Unknown~value~#3~passed~to~key~#2~in~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postlower }
+\msg_new:nnnn { semantex } { arg_key_value_not_found } { Unknown~value~#3~passed~to~argument~key~#2~in~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleft }
+\msg_new:nnnn { semantex } { class_already_defined } { Class~#1 already~defined;~you~tried~defining~it~again~on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftsep }
+\msg_new:nnnn { semantex } { object_already_defined } { Object~#1 already~defined;~you~tried~defining~it~again~on~line~\msg_line_number: } {}
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { upperleftsep } { , }
+\msg_new:nnnn { semantex } { class_not_found } { Unknown~class~#3 declared~as~#2~of~#1 on~line~\msg_line_number: } {}
-%IM do the same with all the others, INCLUDING if_uppergrading and symbol
-%IM Also, need commands like forgetupperindex, reverting to the class standard
+\msg_new:nnnn { semantex } { object_not_found } { You~set~#1 as~#2~of~unknown~object~#3 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleft }
+\msg_new:nnnn { semantex } { created_object_of_unknown_class } { Unknown~class~#1 declared~as~class~of~#2 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftsep }
+\msg_new:nnnn { semantex } { used_unknown_class } { Unknown~class~#1 received~by~\token_to_str:N\UseClassInCommand~on~line~\msg_line_number: } {}
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { lowerleftsep } { , }
+\msg_new:nnnn { semantex } { setup_unknown_class } { You~tried~setting~up~an~unknown~#1 on~line~\msg_line_number: } {}
+\msg_new:nnnn { semantex } { setup_unknown_object } { You~tried~setting~up~an~unknown~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { preupperleft }
+\msg_new:nnnn { semantex } { created_a_SemantexBaseObject } { Never~create~objects~of~class~\token_to_str:N\SemantexBaseObject;~create~a~new~class~yourself~instead.~You~created~the~object~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postupperleft }
+\msg_new:nnnn { semantex } { SemantexThis_in_input_stream } { The~command~\token_to_str:N\SemantexThis~was~found~outside~a~class~or~object~on~line~\msg_line_number:;~did~you~forget~to~use~setkeysx={...}? } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prelowerleft }
+\msg_new:nnnn { semantex } { generic_error } { #2~#1 on~line~\msg_line_number: } {}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postlowerleft }
-
-\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofarguments }
-
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextargwithsep }
-
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextupperleftwithsep }
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextlowerleftwithsep }
-
-\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofupperleftindices }
-\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberoflowerleftindices }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prearg }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postarg }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { arg }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argsep }
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argsep } {,}
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argslot }
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argslot } { \SemantexSlot }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argdots }
-\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argdots } {\dots}
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { symbol }
-
-\semantex_data_seq_provide:nn { class_SemantexBaseObject } { commands_sequence }
-
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { uppergrading }
-\semantex_data_bool_set_true:nn { class_SemantexBaseObject } { uppergrading }
-
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { output }
-
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { outputoptions }
+\cs_generate_variant:Nn \msg_error:nnnn { nnnx }
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextupperwithsep }
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextlowerwithsep }
+\tl_new:N\l__semantex_error_output_format_temp
-\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofupperindices }
-\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberoflowerindices }
+\cs_new_protected:Npn\semantex_error_output_format:nN#1#2
+{
+ \tl_set:Nn \l__semantex_error_output_format_temp { #1 }
+ \tl_replace_all:Nnn \l__semantex_error_output_format_temp { object_ } { object~\cs:w }
+ \tl_replace_all:Nnn \l__semantex_error_output_format_temp { class_ } { class~\cs:w }
+ \tl_put_right:Nn \l__semantex_error_output_format_temp { \cs_end: }
+ \tl_trim_spaces:N \l__semantex_error_output_format_temp
+ \tl_set_eq:NN #2 \l__semantex_error_output_format_temp
+}
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { par }
-\semantex_data_bool_set_true:nn { class_SemantexBaseObject } { par }
+\cs_generate_variant:Nn \semantex_error_output_format:nN { xN }
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { flexpar }
+\cs_generate_variant:Nn \msg_error:nnn { nnx }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { parseoptions }
+\cs_generate_variant:Nn \msg_error:nnnn { nnxn }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { texclass }
+\cs_generate_variant:Nn \msg_error:nnnnn { nnxnn }
-\semantex_data_bool_provide:nn { class_SemantexBaseObject } { leftargument }
+\cs_new_protected:Npn \semantex_msg_error:nn#1#2
+{
+ \semantex_error_output_format:xN { #1 } \l__semantex_msg_error_nnn_temp_tl
+ \msg_error:nnx { semantex } { #2 }
+ {
+ \l__semantex_msg_error_nnn_temp_tl
+ }
+}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperdots }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperslot }
+\cs_new_protected:Npn \semantex_msg_error:nnn#1#2#3
+{
+ \semantex_error_output_format:xN { #1 } \l__semantex_msg_error_nnnn_temp_tl
+ \msg_error:nnxn { semantex } { #2 }
+ {
+ \l__semantex_msg_error_nnnn_temp_tl
+ } { #3 }
+}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerdots }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerslot }
+\cs_new_protected:Npn \semantex_msg_error:nnnn#1#2#3#4
+{
+ \semantex_error_output_format:xN { #1 } \l__semantex_msg_error_nnnnn_temp_tl
+ \msg_error:nnxnn { semantex } { #2 }
+ {
+ \l__semantex_msg_error_nnnnn_temp_tl
+ } { #3 } { #4 }
+}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftdots }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftslot }
+\cs_new_protected:Npn\semantex_error_key_value_not_found:nnn#1#2#3
+{
+ \semantex_msg_error:nnnn { #1 } { key_value_not_found } { #2 } { #3 }
+}
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftdots }
-\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftslot }
+\cs_new_protected:Npn\semantex_error_arg_key_value_not_found:nnn#1#2#3
+{
+ \semantex_msg_error:nnnn { #1 } { arg_key_value_not_found } { #2 } { #3 }
+}
-%\tl_set:Nn\g_objectmath_SemantexBaseObject_upper { hej }
-%\tl_set:Nn \SemantexBaseObject_output { class_SemantexBaseObject }
-%\bool_new:N \SemantexBaseObject_output_if_provided
-%\bool_set_true:N \SemantexBaseObject_output_if_provided
+\cs_new_protected:Npn\semantex_error_generic:nn#1#2
+{
+ \semantex_msg_error:nnn { #1 } { generic_error } { #2 }
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SETTING UP THE BASE CLASS \SemantexBaseObject
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\semantex_new_plain_class:Nw \SemantexBaseObject [
- %parent=SemantexBaseObject,
+\semantex_define_valuekeys:nn { \semantex_class_to_register:N \SemantexBaseObject }
+{
+ {definekeys[1]}{execute={ \semantex_define_valuekeys:nn { ##1 } { #1 } }},
+}
+
+\semantex_new_simple_class:Nw \SemantexBaseObject [
+ definekeys[1]={
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % THE MOST BASIC KEYS, INCLUDING PROGRAMMING KEYS
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ {execute}{ execute={#1} },
+ % Yes, this really does make sense
+ % -- check how \semantex_define_valuekeys:nn was defined
+ % Keys for setting up the keyval interface
+ {definekeys}{ execute={ \semantex_define_singlekeys:nn { ##1 } { #1 } } },
+ {definekeys[0]}{ execute={ \semantex_define_singlekeys:nn { ##1 } { #1 } } },
+ {definekeys[{0}]}{ execute={ \semantex_define_singlekeys:nn { ##1 } { #1 } } },
+ {definekeys[{1}]}{ execute={ \semantex_define_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[2]}{ execute={ \semantex_define_two_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{2}]}{ execute={ \semantex_define_two_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[3]}{ execute={ \semantex_define_three_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{3}]}{ execute={ \semantex_define_three_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[4]}{ execute={ \semantex_define_four_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{4}]}{ execute={ \semantex_define_four_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[5]}{ execute={ \semantex_define_five_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{5}]}{ execute={ \semantex_define_five_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[6]}{ execute={ \semantex_define_six_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{6}]}{ execute={ \semantex_define_six_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[7]}{ execute={ \semantex_define_seven_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{7}]}{ execute={ \semantex_define_seven_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[8]}{ execute={ \semantex_define_eight_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{8}]}{ execute={ \semantex_define_eight_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[9]}{ execute={ \semantex_define_nine_valuekeys:nn { ##1 } { #1 } } },
+ {definekeys[{9}]}{ execute={ \semantex_define_nine_valuekeys:nn { ##1 } { #1 } } },
+ {removekey}{ execute={ \semantex_remove_singlekey:nn { ##1 } { #1 } } },
+ {removekey[0]}{ execute={ \semantex_remove_singlekey:nn { ##1 } { #1 } } },
+ {removekey[{0}]}{ execute={ \semantex_remove_singlekey:nn { ##1 } { #1 } } },
+ {removekey[1]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{1}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[2]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{2}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[3]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{3}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[4]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{5}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[6]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{6}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[7]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{7}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[8]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{8}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[9]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ {removekey[{9}]}{ execute={ \semantex_remove_valuekey:nn { ##1 } { #1 } } },
+ % Keys for setting up the argument keyval interface:
+ {defineargkeys}{ execute={ \semantex_define_arg_singlekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[0]}{ execute={ \semantex_define_arg_singlekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{0}]}{ execute={ \semantex_define_arg_singlekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[1]}{ execute={ \semantex_define_arg_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{1}]}{ execute={ \semantex_define_arg_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[2]}{ execute={ \semantex_define_arg_two_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{2}]}{ execute={ \semantex_define_arg_two_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[3]}{ execute={ \semantex_define_arg_three_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{3}]}{ execute={ \semantex_define_arg_three_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[4]}{ execute={ \semantex_define_arg_four_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{4}]}{ execute={ \semantex_define_arg_four_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[5]}{ execute={ \semantex_define_arg_five_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{5}]}{ execute={ \semantex_define_arg_five_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[6]}{ execute={ \semantex_define_arg_six_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{6}]}{ execute={ \semantex_define_arg_six_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[7]}{ execute={ \semantex_define_arg_seven_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{7}]}{ execute={ \semantex_define_arg_seven_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[8]}{ execute={ \semantex_define_arg_eight_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{8}]}{ execute={ \semantex_define_arg_eight_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[9]}{ execute={ \semantex_define_arg_nine_valuekeys:nn { ##1 } { #1 } } },
+ {defineargkeys[{9}]}{ execute={ \semantex_define_arg_nine_valuekeys:nn { ##1 } { #1 } } },
+ {removeargkey}{ execute={ \semantex_remove_arg_singlekey:nn { ##1 } { #1 } } },
+ {removeargkey[0]}{ execute={ \semantex_remove_arg_singlekey:nn { ##1 } { #1 } } },
+ {removeargkey[{0}]}{ execute={ \semantex_remove_arg_singlekey:nn { ##1 } { #1 } } },
+ {removeargkey[1]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{1}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[2]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{2}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[3]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{3}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[4]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{5}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[6]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{6}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[7]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{7}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[8]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{8}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[9]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ {removeargkey[{9}]}{ execute={ \semantex_remove_arg_valuekey:nn { ##1 } { #1 } } },
+ % Keys for programming:
+ {dataprovide}{ execute={ \semantex_data_tl_provide:nn { ##1 } { \tl_trim_spaces:n { #1 } } } },
+ {dataclear}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { \tl_trim_spaces:n { #1 } } },
+ },
+ {keysset}{ execute={ \semantex_keys_set:nn { ##1 } { #1 } } },
+ {setkeys}{ execute={ \semantex_keys_set:nn { ##1 } { #1 } } },
+ {keyssetx}{ execute={ \semantex_keys_set_x:nn { ##1 } { #1 } } },
+ {setkeysx}{ execute={ \semantex_keys_set_x:nn { ##1 } { #1 } } },
+ {boolprovide}{
+ execute={
+ \semantex_data_bool_provide:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {boolsettrue}{
+ execute={
+ \semantex_data_bool_set_true:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {boolsetfalse}{
+ execute={
+ \semantex_data_bool_set_false:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {intprovide}{
+ execute={
+ \semantex_data_int_provide:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {intclear}{
+ execute={
+ \semantex_data_int_clear:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {intincr}{
+ execute={
+ \semantex_data_int_incr:nn { ##1 } { \tl_trim_spaces:n { #1 } }
+ },
+ },
+ {ERROR}{
+ execute={
+ \semantex_error_generic:nn { ##1 } { #1 }
+ },
+ },
+ },
+ definekeys[2]={
+ {dataset}{
+ execute={
+ \semantex_data_tl_set:nnn { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {datasetx}{
+ execute={
+ \semantex_data_tl_set:nnx { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {dataputright}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {dataputrightx}{
+ execute={
+ \semantex_data_tl_put_right:nnx { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {dataputleft}{
+ execute={
+ \semantex_data_tl_put_left:nnn { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {dataputleftx}{
+ execute={
+ \semantex_data_tl_put_left:nnx { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {ifblankT}{
+ execute={
+ \tl_if_blank:xTF { #1 }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ { }
+ },
+ },
+ {ifblankF}{
+ execute={
+ \tl_if_blank:xTF { #1 }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ },
+ },
+ {boolifT}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 }
+ { \tl_trim_spaces:n { #1 } }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ { }
+ },
+ },
+ {boolifF}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 }
+ { \tl_trim_spaces:n { #1 } }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ },
+ },
+ {intset}{
+ execute={
+ \semantex_data_int_set:nnn { ##1 } { \tl_trim_spaces:n { #1 } } { #2 }
+ },
+ },
+ {ERRORkeyvaluenotfound}{
+ execute={
+ \semantex_error_key_value_not_found:nnn { ##1 } { #1 } { #2 }
+ },
+ },
+ {ERRORargkeyvaluenotfound}{
+ execute={
+ \semantex_error_arg_key_value_not_found:nnn { ##1 } { #1 } { #2 }
+ },
+ },
+ },
+ definekeys[3]={
+ {strifeqT}{
+ execute={
+ \str_if_eq:xxTF { #1 } { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { }
+ },
+ },
+ {strifeqF}{
+ execute={
+ \str_if_eq:xxTF { #1 } { #2 }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ {ifblankTF}{
+ execute={
+ \tl_if_blank:xTF { #1 }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ {boolifTF}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 }
+ { \tl_trim_spaces:n { #1 } }
+ { \semantex_keys_set:nn { ##1 } { #2 } }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ {intifgreaterT}{
+ execute={
+ \int_compare:nNnTF { #1 } > { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { }
+ },
+ },
+ {intifgreaterF}{
+ execute={
+ \int_compare:nNnTF { #1 } > { #2 }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ {intifeqT}{
+ execute={
+ \int_compare:nNnTF { #1 } = { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { }
+ },
+ },
+ {intifeqF}{
+ execute={
+ \int_compare:nNnTF { #1 } = { #2 }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ {intiflessT}{
+ execute={
+ \int_compare:nNnTF { #1 } < { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { }
+ },
+ },
+ {intiflessF}{
+ execute={
+ \int_compare:nNnTF { #1 } < { #2 }
+ { }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ },
+ },
+ },
+ definekeys[4]={
+ {strifeqTF}{
+ execute={
+ \str_if_eq:xxTF { #1 } { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { \semantex_keys_set:nn { ##1 } { #4 } }
+ },
+ },
+ {intifgreaterTF}{
+ execute={
+ \int_compare:nNnTF { #1 } > { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { \semantex_keys_set:nn { ##1 } { #4 } }
+ },
+ },
+ {intifeqTF}{
+ execute={
+ \int_compare:nNnTF { #1 } = { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { \semantex_keys_set:nn { ##1 } { #4 } }
+ },
+ },
+ {intiflessTF}{
+ execute={
+ \int_compare:nNnTF { #1 } < { #2 }
+ { \semantex_keys_set:nn { ##1 } { #3 } }
+ { \semantex_keys_set:nn { ##1 } { #4 } }
+ },
+ },
+ },
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % THE COLLECTION OF SLIGHTLY LESS FUNDAMENTAL KEYS
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ dataprovide=symbol,
+ boolprovide=uppergrading,
+ boolsettrue=uppergrading,
+ boolprovide=output,
+ dataprovide=outputoptions,
+ boolprovide=par,
+ boolsettrue=par,
+ boolprovide=flexpar,
+ dataprovide=parseoptions,
+ dataprovide=texclass,
+ boolprovide=leftargument,
+ boolprovide=allowSemantexDelimiterSize,
+ boolsettrue=allowSemantexDelimiterSize,
+ dataprovide=heightphantom,
+ dataprovide=slantingphantom,
+ execute={ \semantex_data_seq_provide:nn { \semantex_this: } { commands_sequence } },
+ definekeys[1]={
+ {parent}{ execute={ \semantex_data_parent_set:nn { ##1 } { #1 } } },
+ {class}{ execute={ \semantex_data_class_set:nn { ##1 } { #1 } } },
+ {copy}{ execute={ \semantex_data_copy_object:nn { ##1 } { #1 } } },
+ {clone}{ execute={ \semantex_data_clone_object:nn { ##1 } { #1 } } },
+ {texclass}{ execute={ \semantex_data_tl_set:nnn { ##1 } { texclass } { #1 } } },
+ {symbol}{
+ execute={
+ \semantex_data_tl_set:nnn { ##1 } { symbol } { #1 }
+ \semantex_data_tl_set:nnn { ##1 } { heightphantom } { #1 }
+ \semantex_data_tl_set:nnn { ##1 } { slantingphantom } { #1 }
+ }
+ },
+ {symbolputright}{ execute={ \semantex_data_tl_put_right:nnn { ##1 } { symbol } { #1 } } },
+ {symbolputleft}{ execute={ \semantex_data_tl_put_left:nnn { ##1 } { symbol } { #1 } } },
+ {heightphantom}{ execute={ \semantex_data_tl_set:nnn { ##1 } { heightphantom } { #1 } } },
+ {slantingphantom}{ execute={ \semantex_data_tl_set:nnn { ##1 } { slantingphantom } { #1 } } },
+ {parseoptions}{ execute={ \semantex_add_to_parse_options:nn { ##1 } { #1 } } },
+ {command}{ execute={ \semantex_data_seq_put_right:nnn { ##1 } { commands_sequence } { #1 } } },
+ {output}{ execute={ \semantex_set_output:nn { ##1 } { #1 } } },
+ {outputoptions}{ execute={ \semantex_add_to_output_options:nn { ##1 } { #1 } } },
+ {dooutput}{
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={output},
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={output},
+ }
+ {
+ ERRORkeyvaluenotfound={dooutput}{#1},
+ }
+ },
+ },
+ {gradingposition}{
+ strifeqTF={#1}{upper}
+ {
+ boolsettrue={uppergrading},
+ }
+ {
+ strifeqTF={#1}{lower}
+ {
+ boolsetfalse={uppergrading},
+ }
+ {
+ ERRORkeyvaluenotfound={gradingposition}{#1},
+ },
+ },
+ },
+ {gradingpos}{
+ strifeqTF={#1}{upper}
+ {
+ boolsettrue={uppergrading},
+ }
+ {
+ strifeqTF={#1}{lower}
+ {
+ boolsetfalse={uppergrading},
+ }
+ {
+ ERRORkeyvaluenotfound={gradingpos}{#1},
+ },
+ },
+ },
+ {allowSemantexDelimiterSize}{
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={allowSemantexDelimiterSize},
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={allowSemantexDelimiterSize},
+ }
+ {
+ ERRORkeyvaluenotfound={allowSemantexDelimiterSize}{#1},
+ }
+ },
+ },
+ {default}{si={#1}},
+ {degreedefault}{sd={#1}},
+ {arg}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
+ {*withothersep}{
+ d*withothersep={#1},
+ },
+ {**withothersep}{
+ d**withothersep={#1},
+ },
+ },
output=\SemantexBaseObject,
- ifoutput=false,
- symbol=,
- gradingposition=upper,
- %upper=,
- %lower=,
- leftpar=(,
- rightpar=),
- par=normal,
+ definekeys={
+ {return}{ execute={ \semantex_return:n { ##1 } } },
+ {innerreturn}{ execute={ \semantex_inner_return:n { ##1 } } },
+ {rightreturn}{ execute={ \semantex_right_return:n { ##1 } } },
+ {leftreturn}{ execute={ \semantex_left_return:n { ##1 } } },
+ {parse}{ execute={ \semantex_parse:n { ##1 } } },
+ {clearcommand}{ execute={ \semantex_data_seq_clear:nn { ##1 } { commands_sequence } } },
+ {...}{sidots},
+ {-}{sislot},
+ {*}{sd*},
+ {**}{sd**},
+ },
+ % The "spar" routine:
+ definekeys={
+ {spar}{spar=},
+ },
+ definekeys[1]={
+ {spar}{ execute={ \semantex_spar:nn { ##1 } { #1 } } },
+ {sparsize}{ execute={ \semantex_data_tl_set:nnn { ##1 } { sparsize } { #1 } } },
+ {leftspar}{ execute={ \semantex_data_tl_set:nnn { ##1 } { leftspar } { #1 } } },
+ {rightspar}{ execute={ \semantex_data_tl_set:nnn { ##1 } { rightspar } { #1 } } },
+ },
+ definekeys[2]={
+ {otherspar}{ execute={ \semantex_other_spar:nnn { ##1 } { #1 } { #2 } } },
+ },
+ definekeys[3]={
+ {Otherspar}{ execute={ \semantex_other_spar_with_size:nnnn { ##1 } { #1 } { #2 } { #3 } } },
+ },
leftspar=(,
rightspar=),
sparsize=normal,
- %arg=,
- setupperdots=\dots,
- setlowerdots=\dots,
- setupperslot=\g_semantex_bullet,
- setlowerslot=\g_semantex_bullet,
- setupperleftdots=\dots,
- setlowerleftdots=\dots,
- setupperleftslot=\g_semantex_bullet,
- setlowerleftslot=\g_semantex_bullet,
- singlekeys={
- {prime}{upper={\prime}},
- {'}{prime},
- {''}{prime,prime},
- {'''}{prime,prime,prime},
- {*}{sdegree=\g_semantex_bullet},
- {**}{sdegree=\g_semantex_double_bullet},
- {degree*}{degree=\g_semantex_bullet},
- {degree**}{degree=\g_semantex_double_bullet},
- {sdegree*}{sdegree=\g_semantex_bullet},
- {sdegree**}{sdegree=\g_semantex_double_bullet},
- {cdegree*}{cdegree=\g_semantex_bullet},
- {cdegree**}{cdegree=\g_semantex_double_bullet},
- {deg*}{deg=\g_semantex_bullet},
- {deg**}{deg=\g_semantex_double_bullet},
- {sdeg*}{sdeg=\g_semantex_bullet},
- {sdeg**}{sdeg=\g_semantex_double_bullet},
- {cdeg*}{cdeg=\g_semantex_bullet},
- {cdeg**}{cdeg=\g_semantex_double_bullet},
- {d*}{d=\g_semantex_bullet},
- {d**}{d=\g_semantex_double_bullet},
- {sd*}{sd=\g_semantex_bullet},
- {sd**}{sd=\g_semantex_double_bullet},
- {cd*}{cd=\g_semantex_bullet},
- {cd**}{cd=\g_semantex_double_bullet},
- {index*}{index=\g_semantex_bullet},
- {index**}{index=\g_semantex_double_bullet},
- {sindex*}{sindex=\g_semantex_bullet},
- {sindex**}{sindex=\g_semantex_double_bullet},
- {cindex*}{cindex=\g_semantex_bullet},
- {cindex**}{cindex=\g_semantex_double_bullet},
- {i*}{i=\g_semantex_bullet},
- {i**}{i=\g_semantex_double_bullet},
- {si*}{si=\g_semantex_bullet},
- {si**}{si=\g_semantex_double_bullet},
- {ci*}{ci=\g_semantex_bullet},
- {ci**}{ci=\g_semantex_double_bullet},
- {upper*}{upper=\g_semantex_bullet},
- {upper**}{upper=\g_semantex_double_bullet},
- {supper*}{supper=\g_semantex_bullet},
- {supper**}{supper=\g_semantex_double_bullet},
- {cupper*}{cupper=\g_semantex_bullet},
- {cupper**}{cupper=\g_semantex_double_bullet},
- {lower*}{lower=\g_semantex_bullet},
- {lower**}{lower=\g_semantex_double_bullet},
- {slower*}{slower=\g_semantex_bullet},
- {slower**}{slower=\g_semantex_double_bullet},
- {clower*}{clower=\g_semantex_bullet},
- {clower**}{clower=\g_semantex_double_bullet},
- {upperleft*}{upperleft=\g_semantex_bullet},
- {upperleft**}{upperleft=\g_semantex_double_bullet},
- {supperleft*}{supperleft=\g_semantex_bullet},
- {supperleft**}{supperleft=\g_semantex_double_bullet},
- {cupperleft*}{cupperleft=\g_semantex_bullet},
- {cupperleft**}{cupperleft=\g_semantex_double_bullet},
- {lowerleft*}{lowerleft=\g_semantex_bullet},
- {lowerleft**}{lowerleft=\g_semantex_double_bullet},
- {slowerleft*}{slowerleft=\g_semantex_bullet},
- {slowerleft**}{slowerleft=\g_semantex_double_bullet},
- {clowerleft*}{clowerleft=\g_semantex_bullet},
- {clowerleft**}{clowerleft=\g_semantex_double_bullet},
- {smash}{command=\smash},
- {tilde}{command=\tilde},
- {widetilde}{command=\widetilde},
- {overline}{command=\overline},
- {bar}{command=\bar},
- {bold}{command=\mathbf},
- {roman}{command=\mathrm},
- {mathord}{texclass=\mathord},
- {mathbin}{texclass=\mathbin},
- {mathop}{texclass=\mathop},
- {mathrel}{texclass=\mathrel},
- {leftreturn}{leftreturn=},
- {innerreturn}{innerreturn=},
- {rightreturn}{rightreturn=},
- {return}{return=},
- {spar}{spar=},
- {parse}{parse=},
- {par}{ifpar=true},
- {neverpar}{ifpar=never},
- {nopar}{ifpar=false},
- {clearupper}{clearupper=},
- {clearlower}{clearlower=},
- {clearupperleft}{clearupperleft=},
- {clearlowerleft}{clearlowerleft=},
- {clearcommand}{clearcommand=},
- {cleard}{cleard=},
- {cleardeg}{cleardeg=},
- {cleardegree}{cleardegree=},
- {cleari}{cleari=},
- {clearindex}{clearindex=},
- {upperdots}{upperdots=},
- {upper...}{upperdots=},
- {upperslot}{upperslot=},
- {upper-}{upperslot=},
- {lowerdots}{lowerdots=},
- {lower...}{lowerdots=},
- {lowerslot}{lowerslot=},
- {lower-}{lowerslot=},
- {upperleftdots}{upperleftdots=},
- {upperleft...}{upperleftdots=},
- {upperleftslot}{upperleftslot=},
- {upperleft-}{upperleftslot=},
- {lowerleftdots}{lowerleftdots=},
- {lowerleft...}{lowerleftdots=},
- {lowerleftslot}{lowerleftslot=},
- {lowerleft-}{lowerleftslot=},
- {idots}{idots=},
- {indexdots}{indexdots=},
- {islot}{islot=},
- {indexslot}{indexslot=},
- {i...}{idots=},
- {index...}{indexdots=},
- {i-}{islot=},
- {index-}{indexslot=},
- {ddots}{ddots=},
- {degdots}{degdots=},
- {degreedots}{degreedots=},
- {dslot}{dslot=},
- {degslot}{degslot=},
- {degreeslot}{degreeslot=},
- {d...}{ddots=},
- {deg...}{degdots=},
- {degree...}{degreedots=},
- {d-}{dslot=},
- {deg-}{degslot=},
- {degree-}{degreeslot=},
- {cupperdots}{cupperdots=},
- {cupper...}{cupperdots=},
- {cupperslot}{cupperslot=},
- {cupper-}{cupperslot=},
- {clowerdots}{clowerdots=},
- {clower...}{clowerdots=},
- {clowerslot}{clowerslot=},
- {clower-}{clowerslot=},
- {cupperleftdots}{cupperleftdots=},
- {cupperleft...}{cupperleftdots=},
- {cupperleftslot}{cupperleftslot=},
- {cupperleft-}{cupperleftslot=},
- {clowerleftdots}{clowerleftdots=},
- {clowerleft...}{clowerleftdots=},
- {clowerleftslot}{clowerleftslot=},
- {clowerleft-}{clowerleftslot=},
- {cidots}{cidots=},
- {cindexdots}{cindexdots=},
- {cislot}{cislot=},
- {cindexslot}{cindexslot=},
- {ci...}{cidots=},
- {cindex...}{cindexdots=},
- {ci-}{cislot=},
- {cindex-}{cindexslot=},
- {cddots}{cddots=},
- {cdegdots}{cdegdots=},
- {cdegreedots}{cdegreedots=},
- {cdslot}{cdslot=},
- {cdegslot}{cdegslot=},
- {cdegreeslot}{cdegreeslot=},
- {cd...}{cddots=},
- {cdeg...}{cdegdots=},
- {cdegree...}{cdegreedots=},
- {cd-}{cdslot=},
- {cdeg-}{cdegslot=},
- {cdegree-}{cdegreeslot=},
- {supperdots}{supperdots=},
- {supper...}{supperdots=},
- {supperslot}{supperslot=},
- {supper-}{supperslot=},
- {slowerdots}{slowerdots=},
- {slower...}{slowerdots=},
- {slowerslot}{slowerslot=},
- {slower-}{slowerslot=},
- {supperleftdots}{supperleftdots=},
- {supperleft...}{supperleftdots=},
- {supperleftslot}{supperleftslot=},
- {supperleft-}{supperleftslot=},
- {slowerleftdots}{slowerleftdots=},
- {slowerleft...}{slowerleftdots=},
- {slowerleftslot}{slowerleftslot=},
- {slowerleft-}{slowerleftslot=},
- {sidots}{sidots=},
- {sindexdots}{sindexdots=},
- {sislot}{sislot=},
- {sindexslot}{sindexslot=},
- {si...}{sidots=},
- {sindex...}{sindexdots=},
- {si-}{sislot=},
- {sindex-}{sindexslot=},
- {sddots}{sddots=},
- {sdegdots}{sdegdots=},
- {sdegreedots}{sdegreedots=},
- {sdslot}{sdslot=},
- {sdegslot}{sdegslot=},
- {sdegreeslot}{sdegreeslot=},
- {sd...}{sddots=},
- {sdeg...}{sdegdots=},
- {sdegree...}{sdegreedots=},
- {sd-}{sdslot=},
- {sdeg-}{sdegslot=},
- {sdegree-}{sdegreeslot=},
- {...}{sidots=},
- {-}{sislot=},
-% {argwithkeyval}{
-% valuekeys={
-% {arg}{argwithkeyval={####1}},
-% },
-% },
-% {argwithsinglekeys}{
-% valuekeys={
-% {arg}{argwithsinglekeys={####1}},
-% },
-% },
-% {argwithoutkeyval}{
-% valuekeys={
-% {arg}{argwithoutkeyval={####1}},
-% },
-% },
-% {argwithonesinglekey}{
-% valuekeys={
-% {arg}{argwithonesinglekey={####1}},
-% },
-% },
+ % The argument:
+ dataprovide=arg,
+ boolprovide=nextargwithsep,
+ intprovide=numberofarguments,
+ dataprovide=prearg,
+ dataprovide=postarg,
+ definekeys={
+ {argdots}{setargkeys={...}},
+ {arg...}{setargkeys={dots}},
+ {cargdots}{setargkeys={cdots}},
+ {carg...}{setargkeys={c...}},
+ {argslot}{setargkeys={slot}},
+ {arg-}{setargkeys={-}},
+ {cargslot}{setargkeys={cslot}},
+ {carg-}{setargkeys={c-}},
+ {cleararg}{ execute={
+ \semantex_data_tl_clear:nn { ##1 } { arg }
+ \semantex_data_int_clear:nn { ##1 } { numberofarguments }
+ \semantex_data_bool_set_false:nn { ##1 } { nextargwithsep }
+ }
+ },
+ {clearprearg}{ execute={ \semantex_data_tl_clear:nn { ##1 } { prearg } } },
+ {clearpostarg}{ execute={ \semantex_data_tl_clear:nn { ##1 } { postarg } } },
},
- valuekeys={
- {default}{sindex={#1}},
- {arg}{argwithsinglekeys={#1}},
- {degreedefault}{sdegree={#1}},
- {*withothersep}{degreewithothersep={#1}{\g_semantex_bullet}},
- {**withothersep}{degreewithothersep={#1}{\g_semantex_double_bullet}},
- {degree*withothersep}{degreewithothersep={#1}{\g_semantex_bullet}},
- {degree**withothersep}{degreewithothersep={#1}{\g_semantex_double_bullet}},
- {deg*withothersep}{degwithothersep={#1}{\g_semantex_bullet}},
- {deg**withothersep}{degwithothersep={#1}{\g_semantex_double_bullet}},
- {d*withothersep}{dwithothersep={#1}{\g_semantex_bullet}},
- {d**withothersep}{dwithothersep={#1}{\g_semantex_double_bullet}},
- {index*withothersep}{indexwithothersep={#1}{\g_semantex_bullet}},
- {index**withothersep}{indexwithothersep={#1}{\g_semantex_double_bullet}},
- {i*withothersep}{iwithothersep={#1}{\g_semantex_bullet}},
- {i**withothersep}{iwithothersep={#1}{\g_semantex_double_bullet}},
- {upper*withothersep}{upperwithothersep={#1}{\g_semantex_bullet}},
- {upper**withothersep}{upperwithothersep={#1}{\g_semantex_double_bullet}},
- {lower*withothersep}{lowerwithothersep={#1}{\g_semantex_bullet}},
- {lower**withothersep}{lowerwithothersep={#1}{\g_semantex_double_bullet}},
- {upperleft*withothersep}{upperleftwithothersep={#1}{\g_semantex_bullet}},
- {upperleft**withothersep}{upperleftwithothersep={#1}{\g_semantex_double_bullet}},
- {lowerleft*withothersep}{lowerleftwithothersep={#1}{\g_semantex_bullet}},
- {lowerleft**withothersep}{lowerleftwithothersep={#1}{\g_semantex_double_bullet}},
- {sarg}{argwithkeyval={s={#1}}},
- {carg}{argwithkeyval={c={#1}}},
- {argwithothersep}{argwithkeyval={othersep={#1}}},
- {argdots}{argwithkeyval={...}},
- {arg...}{argwithkeyval={...}},
- {cargdots}{argwithkeyval={cdots=}},
- {carg...}{argwithkeyval={cdots=}},
- {argdotswithothersep}{argwithkeyval={dotswithothersep={#1}}},
- {arg...withothersep}{argwithkeyval={dotswithothersep={#1}}},
- {argdots}{argwithkeyval={-}},
- {arg-}{argwithkeyval={-}},
- {cargslot}{argwithkeyval={cslot=}},
- {carg-}{argwithkeyval={cslot=}},
- {argslotwithothersep}{argwithkeyval={slotwithothersep={#1}}},
- {arg-withothersep}{argwithkeyval={slotwithothersep={#1}}},
+ definekeys[1]={
+ {setargkeys}{ execute={ \semantex_arg_keys_set:nn { ##1 } { #1 } } },
+ {argkeysset}{ execute={ \semantex_arg_keys_set:nn { ##1 } { #1 } } },
+ {setargkeysx}{ execute={ \semantex_arg_keys_set_x:nn { ##1 } { #1 } } },
+ {argkeyssetx}{ execute={ \semantex_arg_keys_set_x:nn { ##1 } { #1 } } },
+ {setargsinglekeys}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
+ {argsinglekeysset}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
+ {setargsinglekeysx}{ execute={ \semantex_arg_singlekeys_set_x:nn { ##1 } { #1 } } },
+ {argsinglekeyssetx}{ execute={ \semantex_arg_singlekeys_set_x:nn { ##1 } { #1 } } },
+ {setoneargsinglekey}{ execute={ \semantex_arg_singlekey:nn { ##1 } { #1 } } },
+ {oneargsinglekeyset}{ execute={ \semantex_arg_singlekey:nn { ##1 } { #1 } } },
+ {setoneargsinglekeyx}{ execute={ \semantex_arg_singlekey_x:nn { ##1 } { #1 } } },
+ {oneargsinglekeysetx}{ execute={ \semantex_arg_singlekey_x:nn { ##1 } { #1 } } },
+ {setargwithoutkeyval}{ execute={ \semantex_arg_without_keyval:nn { ##1 } { #1 } } },
+ {argwithoutkeyvalset}{ execute={ \semantex_arg_without_keyval:nn { ##1 } { #1 } } },
+ {setargwithoutkeyvalx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
+ {argwithoutkeyvalsetx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
+ {prearg}{ execute={ \semantex_data_tl_put_left:nnn { ##1 } { prearg } { #1 } } },
+ {postarg}{ execute={ \semantex_data_tl_put_left:nnn { ##1 } { postarg } { #1 } } },
+ {setargsep}{ execute={ \semantex_data_tl_set:nnn { ##1 } { argsep } { #1 } } },
+ {setargslot}{ execute={ \semantex_data_tl_set:nnn { ##1 } { argslot } { #1 } } },
+ {setargdots}{ execute={ \semantex_data_tl_set:nnn { ##1 } { argdots } { #1 } } },
{argkeyval}{
- ifeqTF={#1}{true}
+ strifeqTF={#1}{true}
{
- valuekeys={
- {arg}{argwithkeyval={####1}},
+ definekeys[1]={
+ {arg}{execute={ \semantex_arg_keys_set:nn { ########1 } { ####1 } }},
},
}
{
- ifeqTF={#1}{false}
+ strifeqTF={#1}{false}
{
- valuekeys={
- {arg}{argwithoutkeyval={####1}},
+ definekeys[1]={
+ {arg}{ execute={ \semantex_arg_without_keyval:nn { ########1 } { ####1 } } },
},
}
{
- ifeqTF={#1}{singlekeys}
+ strifeqTF={#1}{singlekeys}
{
- valuekeys={
- {arg}{argwithsinglekeys={####1}},
+ definekeys[1]={
+ {arg}{ execute={ \semantex_arg_singlekeys_set:nn { ########1 } { ####1 } } },
},
}
{
- ifeqTF={#1}{onesinglekey}
+ strifeqTF={#1}{onesinglekey}
{
- valuekeys={
- {arg}{argwithonesinglekey={####1}},
+ definekeys[1]={
+ {arg}{ execute={ \semantex_arg_singlekey:nn { ########1 } { ####1 } } },
},
}
{
@@ -6399,29 +5684,1436 @@
},
},
},
+ {argposition}{
+ strifeqTF={#1}{left}
+ {
+ boolsettrue={leftargument},
+ }
+ {
+ strifeqTF={#1}{right}
+ {
+ boolsetfalse={leftargument},
+ }
+ {
+ ERRORkeyvaluenotfound={argposition}{#1},
+ },
+ },
+ },
+ {nextargwithsep}{
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={nextargwithsep},
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={nextargwithsep},
+ }
+ {
+ ERRORkeyvaluenotfound={nextargwithsep}{#1},
+ },
+ },
+ },
+ {sarg}{setargkeys={s={#1}}},
+ {carg}{setargkeys={c={#1}}},
+ {argdotswithothersep}{setargkeys={dotswithothersep={#1}}},
+ {arg...withothersep}{setargkeys={dotswithothersep={#1}}},
+ {argslotwithothersep}{setargkeys={slotwithothersep={#1}}},
+ {arg-withothersep}{setargkeys={slotwithothersep={#1}}},
+ },
+ definekeys[2]={
+ {argwithothersep}{setargkeys={othersep={#1}{#2}}},
+ },
+ setargsep={,},
+ setargslot={ {-} },
+ setargdots={ \dots },
+ % Parentheses:
+ definekeys={
+ {par}{usepar=true},
+ {neverpar}{usepar=never},
+ {nopar}{usepar=false},
+ },
+ definekeys[1]={
+ {par}{
+ execute={
+ \semantex_data_tl_set:nnn { ##1 } { parsize } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { par }
+ },
+ },
+ {parsize}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { parsize } { #1 } },
+ },
+ {leftpar}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { leftpar } { #1 } },
+ },
+ {rightpar}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { rightpar } { #1 } },
+ },
+ {usepar}{
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={par},
+ boolsetfalse={flexpar},
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={par},
+ boolsettrue={flexpar},
+ }
+ {
+ strifeqTF={#1}{never}
+ {
+ boolsetfalse={par},
+ boolsetfalse={flexpar},
+ }
+ {
+ ERRORkeyvaluenotfound={usepar}{#1},
+ },
+ },
+ },
+ },
+ },
+ leftpar=(,
+ rightpar=),
+ par=normal,
+ % Accents, primes, bullets, etc.:
+ definekeys={
+ {smash}{command=\smash},
+ {prime}{upper={\prime}},
+ {'}{prime},
+ {''}{prime,prime},
+ {'''}{prime,prime,prime},
+ },
+ % Upper indices:
+ dataprovide=upper,
+ boolprovide=nextupperwithsep,
+ intprovide=numberofupperindices,
+ dataprovide=preupper,
+ dataprovide=postupper,
+ definekeys={
+ {upperslot}{ setkeysx={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
+ {upper-}{upperslot},
+ {supperslot}{ setkeysx={ supper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
+ {supper-}{supperslot},
+ {cupperslot}{ setkeysx={ cupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
+ {cupper-}{cupperslot},
+ {upperdots}{ setkeysx={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
+ {upper...}{upperdots},
+ {supperdots}{ setkeysx={ supper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
+ {supper...}{supperdots},
+ {cupperdots}{ setkeysx={ cupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
+ {cupper...}{cupperdots},
+ {clearupper}{
+ execute={
+ \semantex_data_tl_clear:nn { ##1 } { upper }
+ \semantex_data_bool_set_false:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_clear:nn { ##1 } { numberofupperindices }
+ },
+ },
+ {clearpreupper}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { preupper } },
+ },
+ {clearpostupper}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { postupper } },
+ },
+ {upper*}{upper=\SemantexBullet},
+ {upper**}{upper=\SemantexDoubleBullet},
+ {supper*}{supper=\SemantexBullet},
+ {supper**}{supper=\SemantexDoubleBullet},
+ {cupper*}{cupper=\SemantexBullet},
+ {cupper**}{cupper=\SemantexDoubleBullet},
+ },
+ definekeys[1]={
+ {upper}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { upper } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperindices }
+ }
+ },
+ },
+ {supper}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperwithsep }
+ {
+ \semantex_data_tl_put_right:nnx { ##1 } { upper }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { uppersep } }
+ \semantex_data_tl_put_right:nnn { ##1 } { upper } { #1 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { upper } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperindices }
+ }
+ },
+ },
+ {cupper}{
+ execute={
+ \tl_if_blank:nF{#1}
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperwithsep }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { upper } { , #1 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { upper } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperindices }
+ }
+ }
+ },
+ {preupper}{
+ execute={
+ \semantex_data_tl_put_left:nnn { ##1 } { preupper } { #1 }
+ },
+ },
+ {postupper}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { postupper } { #1 }
+ },
+ },
+ {upperputleft}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { upper } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperindices }
+ }
+ },
+ },
+ {setupperslot}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { upperslot } { #1 } },
+ },
+ {upperslotwithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } }
+ }
+ },
+ },
+ {upper-withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } }
+ }
+ },
+ },
+ {setupperdots}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { upperdots } { #1 } },
+ },
+ {upperdotswithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } }
+ }
+ },
+ },
+ {upper...withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } }
+ }
+ },
+ },
+ {upper*withothersep}{upperwithothersep={#1}{\SemantexBullet}},
+ {upper**withothersep}{upperwithothersep={#1}{\SemantexDoubleBullet}},
+ {setuppersep}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { uppersep } { #1 } },
+ },
+ {nextupperwithsep}{
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={nextupperwithsep},
+ }
+ {
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={nextupperwithsep},
+ }
+ {
+ ERRORkeyvaluenotfound={nextupperwithsep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {upperwithothersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperwithsep }
+ { \semantex_data_tl_put_right:nnn { ##1 } { upper } { #1 #2 } }
+ { \semantex_data_tl_put_right:nnn { ##1 } { upper } { #2 } }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperindices }
+ },
+ },
},
- argvaluekeys={
+ setuppersep={ , },
+ setupperdots={ \dots },
+ setupperslot={ {-} },
+ % Lower indices:
+ dataprovide=lower,
+ boolprovide=nextlowerwithsep,
+ intprovide=numberoflowerindices,
+ dataprovide=prelower,
+ dataprovide=postlower,
+ definekeys={
+ {lowerslot}{ setkeysx={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
+ {lower-}{lowerslot},
+ {slowerslot}{ setkeysx={ slower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
+ {slower-}{slowerslot},
+ {clowerslot}{ setkeysx={ clower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
+ {clower-}{clowerslot},
+ {lowerdots}{ setkeysx={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
+ {lower...}{lowerdots},
+ {slowerdots}{ setkeysx={ slower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
+ {slower...}{slowerdots},
+ {clowerdots}{ setkeysx={ clower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
+ {clower...}{clowerdots},
+ {clearlower}{
+ execute={
+ \semantex_data_tl_clear:nn { ##1 } { lower }
+ \semantex_data_bool_set_false:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_clear:nn { ##1 } { numberoflowerindices }
+ },
+ },
+ {clearprelower}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { prelower } },
+ },
+ {clearpostlower}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { postlower } },
+ },
+ {lower*}{lower=\SemantexBullet},
+ {lower**}{lower=\SemantexDoubleBullet},
+ {slower*}{slower=\SemantexBullet},
+ {slower**}{slower=\SemantexDoubleBullet},
+ {clower*}{clower=\SemantexBullet},
+ {clower**}{clower=\SemantexDoubleBullet},
+ },
+ definekeys[1]={
+ {lower}{
+ execute={
+ \tl_if_blank:nF{#1}{
+ \semantex_data_tl_put_right:nnn { ##1 } { lower } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerindices }
+ }
+ },
+ },
+ {slower}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerwithsep }
+ {
+ \semantex_data_tl_put_right:nnx { ##1 } { lower }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowersep } }
+ \semantex_data_tl_put_right:nnn { ##1 } { lower } { #1 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { lower } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerindices }
+ }
+ },
+ },
+ {clower}{
+ execute={
+ \tl_if_blank:nF{#1}
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerwithsep }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { lower } { , #1 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { lower } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerindices }
+ }
+ }
+ },
+ {prelower}{
+ execute={
+ \semantex_data_tl_put_left:nnn { ##1 } { prelower } { #1 }
+ },
+ },
+ {postlower}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { postlower } { #1 }
+ },
+ },
+ {lowerputleft}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { lower } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerindices }
+ }
+ },
+ },
+ {setlowerslot}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowerslot } { #1 } },
+ },
+ {lowerslotwithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } }
+ }
+ },
+ },
+ {lower-withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } }
+ }
+ },
+ },
+ {setlowerdots}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowerdots } { #1 } },
+ },
+ {lowerdotswithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } }
+ }
+ },
+ },
+ {lower...withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } }
+ }
+ },
+ },
+ {lower*withothersep}{lowerwithothersep={#1}{\SemantexBullet}},
+ {lower**withothersep}{lowerwithothersep={#1}{\SemantexDoubleBullet}},
+ {setlowersep}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowersep } { #1 } },
+ },
+ {nextlowerwithsep}{
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={nextlowerwithsep},
+ }
+ {
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={nextlowerwithsep},
+ }
+ {
+ ERRORkeyvaluenotfound={nextlowerwithsep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {lowerwithothersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerwithsep }
+ { \semantex_data_tl_put_right:nnn { ##1 } { lower } { #1 #2 } }
+ { \semantex_data_tl_put_right:nnn { ##1 } { lower } { #2 } }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerindices }
+ },
+ },
+ },
+ setlowersep={ , },
+ setlowerdots={ \dots },
+ setlowerslot={ {-} },
+ % Upper left indices:
+ dataprovide=upperleft,
+ intprovide=nextupperleftwithsep,
+ intprovide=numberofupperleftindices,
+ dataprovide=preupperleft,
+ dataprovide=postupperleft,
+ definekeys={
+ {upperleftslot}{ setkeysx={ upperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
+ {upperleft-}{upperleftslot},
+ {supperleftslot}{ setkeysx={ supperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
+ {supperleft-}{supperleftslot},
+ {cupperleftslot}{ setkeysx={ cupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
+ {cupperleft-}{cupperleftslot},
+ {upperleftdots}{ setkeysx={ upperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
+ {upperleft...}{upperleftdots},
+ {supperleftdots}{ setkeysx={ supperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
+ {supperleft...}{supperleftdots},
+ {cupperleftdots}{ setkeysx={ cupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
+ {cupperleft...}{cupperleftdots},
+ {clearupperleft}{
+ execute={
+ \semantex_data_tl_clear:nn { ##1 } { upperleft }
+ \semantex_data_bool_set_false:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_clear:nn { ##1 } { numberofupperleftindices }
+ },
+ },
+ {clearpreupperleft}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { preupperleft } },
+ },
+ {clearpostupperleft}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { postupperleft } },
+ },
+ {upperleft*}{upperleft=\SemantexBullet},
+ {upperleft**}{upperleft=\SemantexDoubleBullet},
+ {supperleft*}{supperleft=\SemantexBullet},
+ {supperleft**}{supperleft=\SemantexDoubleBullet},
+ {cupperleft*}{cupperleft=\SemantexBullet},
+ {cupperleft**}{cupperleft=\SemantexDoubleBullet},
+ },
+ definekeys[1]={
+ {upperleft}{
+ execute={
+ \tl_if_blank:nF{#1}{
+ \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperleftindices }
+ }
+ },
+ },
+ {supperleft}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperleftwithsep }
+ {
+ \semantex_data_tl_put_left:nnx { ##1 } { upperleft }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperleftsep } }
+ \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #1 }
+ }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperleftindices }
+ }
+ },
+ },
+ {cupperleft}{
+ execute={
+ \tl_if_blank:nF{#1}
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperleftwithsep }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { , #1 }
+ }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperleftindices }
+ }
+ }
+ },
+ {preupperleft}{
+ execute={
+ \semantex_data_tl_put_left:nnn { ##1 } { preupperleft } { #1 }
+ },
+ },
+ {postupperleft}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { postupperleft } { #1 }
+ },
+ },
+ {upperleftputright}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { upperleft } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperleftindices }
+ }
+ },
+ },
+ {setupperleftslot}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { upperleftslot } { #1 } },
+ },
+ {upperleftslotwithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } }
+ }
+ },
+ },
+ {upperleft-withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upperleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } }
+ }
+ },
+ },
+ {setupperleftdots}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { upperleftdots } { #1 } },
+ },
+ {upperleftdotswithothersep}{
+ execute={
+ \semantex_valuekey:nnx { upperleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } }
+ }
+ },
+ },
+ {upperleft...withothersep}{
+ execute={
+ \semantex_valuekey:nnx { upperleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } }
+ }
+ },
+ },
+ {upperleft*withothersep}{upperleftwithothersep={#1}{\SemantexBullet}},
+ {upperleft**withothersep}{upperleftwithothersep={#1}{\SemantexDoubleBullet}},
+ {setupperleftsep}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { upperleftsep } { #1 } },
+ },
+ {nextupperleftwithsep}{
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={nextupperleftwithsep},
+ }
+ {
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={nextupperleftwithsep},
+ }
+ {
+ ERRORkeyvaluenotfound={nextupperleftwithsep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {upperleftwithothersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextupperleftwithsep }
+ { \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #2 #1 } }
+ { \semantex_data_tl_put_left:nnn { ##1 } { upperleft } { #2 } }
+ \semantex_data_bool_set_true:nn { ##1 } { nextupperleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberofupperleftindices }
+ },
+ },
+ },
+ setupperleftsep={ , },
+ setupperleftdots={ \dots },
+ setupperleftslot={ {-} },
+ % Lower left indices:
+ dataprovide=lowerleft,
+ boolprovide=nextlowerleftwithsep,
+ intprovide=numberoflowerleftindices,
+ dataprovide=prelowerleft,
+ dataprovide=postlowerleft,
+ definekeys={
+ {lowerleftslot}{ setkeysx={ lowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
+ {lowerleft-}{lowerleftslot},
+ {slowerleftslot}{ setkeysx={ slowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
+ {slowerleft-}{slowerleftslot},
+ {clowerleftslot}{ setkeysx={ clowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
+ {clowerleft-}{clowerleftslot},
+ {lowerleftdots}{ setkeysx={ lowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
+ {lowerleft...}{lowerleftdots},
+ {slowerleftdots}{ setkeysx={ slowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
+ {slowerleft...}{slowerleftdots},
+ {clowerleftdots}{ setkeysx={ clowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
+ {clowerleft...}{clowerleftdots},
+ {clearlowerleft}{
+ execute={
+ \semantex_data_tl_clear:nn { ##1 } { lowerleft }
+ \semantex_data_bool_set_false:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_clear:nn { ##1 } { numberoflowerleftindices }
+ },
+ },
+ {clearprelowerleft}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { prelowerleft } },
+ },
+ {clearpostlowerleft}{
+ execute={ \semantex_data_tl_clear:nn { ##1 } { postlowerleft } },
+ },
+ {lowerleft*}{lowerleft=\SemantexBullet},
+ {lowerleft**}{lowerleft=\SemantexDoubleBullet},
+ {slowerleft*}{slowerleft=\SemantexBullet},
+ {slowerleft**}{slowerleft=\SemantexDoubleBullet},
+ {clowerleft*}{clowerleft=\SemantexBullet},
+ {clowerleft**}{clowerleft=\SemantexDoubleBullet},
+ },
+ definekeys[1]={
+ {lowerleft}{
+ execute={
+ \tl_if_blank:nF{#1}{
+ \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerleftindices }
+ }
+ },
+ },
+ {slowerleft}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerleftwithsep }
+ {
+ \semantex_data_tl_put_left:nnx { ##1 } { lowerleft }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftsep } }
+ \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #1 }
+ }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerleftindices }
+ }
+ },
+ },
+ {clowerleft}{
+ execute={
+ \tl_if_blank:nF{#1}
+ {
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerleftwithsep }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { , #1 }
+ }
+ {
+ \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #1 }
+ }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerleftindices }
+ }
+ }
+ },
+ {prelowerleft}{
+ execute={
+ \semantex_data_tl_put_left:nnn { ##1 } { prelowerleft } { #1 }
+ },
+ },
+ {postlowerleft}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { postlowerleft } { #1 }
+ },
+ },
+ {lowerleftputright}{
+ execute={
+ \tl_if_blank:nF { #1 }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { lowerleft } { #1 }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerleftindices }
+ }
+ },
+ },
+ {setlowerleftslot}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowerleftslot } { #1 } },
+ },
+ {lowerleftslotwithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } },
+ }
+ },
+ },
+ {lowerleft-withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } },
+ }
+ },
+ },
+ {setlowerleftdots}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowerleftdots } { #1 } },
+ },
+ {lowerleftdotswithothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } }
+ }
+ },
+ },
+ {lowerleft...withothersep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lowerleftwithothersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } }
+ }
+ },
+ },
+ {lowerleft*withothersep}{lowerleftwithothersep={#1}{\SemantexBullet}},
+ {lowerleft**withothersep}{lowerleftwithothersep={#1}{\SemantexDoubleBullet}},
+ {setlowerleftsep}{
+ execute={ \semantex_data_tl_set:nnn { ##1 } { lowerleftsep } { #1 } },
+ },
+ {nextlowerleftwithsep}{
+ strifeqTF={#1}{false}
+ {
+ boolsetfalse={nextlowerleftwithsep},
+ }
+ {
+ strifeqTF={#1}{true}
+ {
+ boolsettrue={nextlowerleftwithsep},
+ }
+ {
+ ERRORkeyvaluenotfound={nextlowerleftwithsep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {lowerleftwithothersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextlowerleftwithsep }
+ { \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #2 #1 } }
+ { \semantex_data_tl_put_left:nnn { ##1 } { lowerleft } { #2 } }
+ \semantex_data_bool_set_true:nn { ##1 } { nextlowerleftwithsep }
+ \semantex_data_int_incr:nn { ##1 } { numberoflowerleftindices }
+ },
+ },
+ },
+ setlowerleftsep={ , },
+ setlowerleftdots={ \dots },
+ setlowerleftslot={ {-} },
+ % The "d" index:
+ definekeys={
+ {dslot}{
+ boolifTF={uppergrading}
+ { upperslot }
+ { lowerslot },
+ },
+ {d-}{dslot},
+ {sdslot}{
+ boolifTF={uppergrading}
+ { supperslot }
+ { slowerslot },
+ },
+ {sd-}{sdslot},
+ {cdslot}{
+ boolifTF={uppergrading}
+ { cupperslot }
+ { clowerslot },
+ },
+ {cd-}{cdslot},
+ {ddots}{
+ boolifTF={uppergrading}
+ { upperdots }
+ { lowerdots },
+ },
+ {d...}{ddots},
+ {sddots}{
+ boolifTF={uppergrading}
+ { supperdots }
+ { slowerdots },
+ },
+ {sd...}{sddots},
+ {cddots}{
+ boolifTF={uppergrading}
+ { cupperdots }
+ { clowerdots },
+ },
+ {cd...}{cddots},
+ {cleard}{
+ boolifTF={uppergrading}
+ { clearupper }
+ { clearlower },
+ },
+ {clearpred}{
+ boolifTF={uppergrading}
+ { clearpreupper }
+ { clearprelower },
+ },
+ {clearpostd}{
+ boolifTF={uppergrading}
+ { clearpostupper }
+ { clearpostlower },
+ },
+ {d*}{
+ boolifTF={uppergrading}
+ { upper* }
+ { lower* },
+ },
+ {d**}{
+ boolifTF={uppergrading}
+ { upper** }
+ { lower** },
+ },
+ {sd*}{
+ boolifTF={uppergrading}
+ { supper* }
+ { slower* },
+ },
+ {sd**}{
+ boolifTF={uppergrading}
+ { supper** }
+ { slower** },
+ },
+ {cd*}{
+ boolifTF={uppergrading}
+ { cupper* }
+ { clower* },
+ },
+ {cd**}{
+ boolifTF={uppergrading}
+ { cupper** }
+ { clower** },
+ },
+ },
+ definekeys[1]={
+ {d}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { upper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { lower } { #1 } }
+ },
+ },
+ {sd}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { supper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { slower } { #1 } }
+ },
+ },
+ {cd}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { cupper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { clower } { #1 } }
+ },
+ },
+ {pred}{
+ boolifTF={uppergrading}
+ {
+ preupper={#1},
+ }
+ {
+ prelower={#1},
+ },
+ },
+ {postd}{
+ boolifTF={uppergrading}
+ {
+ postupper={#1},
+ }
+ {
+ postlower={#1},
+ },
+ },
+ {dputleft}{
+ boolifTF={uppergrading}
+ {
+ upperputleft={#1},
+ }
+ {
+ lowerputleft={#1},
+ },
+ },
+ {setdslot}{
+ boolifTF={uppergrading}
+ {
+ setupperslot={#1},
+ }
+ {
+ setlowerslot={#1},
+ }
+ },
+ {dslotwithothersep}{
+ boolifTF={uppergrading}
+ {
+ upperslotwithothersep={#1},
+ }
+ {
+ lowerslotwithothersep={#1},
+ },
+ },
+ {d-withothersep}{
+ dslotwithothersep={#1},
+ },
+ {setddots}{
+ boolifTF={uppergrading}
+ {
+ setupperdots={#1},
+ }
+ {
+ setlowerdots={#1},
+ }
+ },
+ {ddotswithothersep}{
+ boolifTF={uppergrading}
+ {
+ upperdotswithothersep={#1},
+ }
+ {
+ lowerdotswithothersep={#1},
+ },
+ },
+ {d...withothersep}{
+ ddotswithothersep={#1},
+ },
+ {d*withothersep}{
+ boolifTF={uppergrading}
+ { upper*withothersep={#1} }
+ { lower*withothersep={#1} },
+ },
+ {d**withothersep}{
+ boolifTF={uppergrading}
+ { upper**withothersep={#1} }
+ { lower**withothersep={#1} },
+ },
+ {setdsep}{
+ boolifTF={uppergrading}
+ {
+ setuppersep={#1},
+ }
+ {
+ setlowersep={#1},
+ },
+ },
+ {nextdwithsep}{
+ strifeqTF={#1}{true}
+ {
+ boolifTF={uppergrading}
+ {
+ nextupperwithsep=true,
+ }
+ {
+ nextlowerwithsep=true,
+ },
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolifTF={uppergrading}
+ {
+ nextupperwithsep=false,
+ }
+ {
+ nextlowerwithsep=false,
+ },
+ }
+ {
+ ERRORkeyvaluenotfound={nextdwithothersep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {dwithothersep}{
+ boolifTF={uppergrading}
+ {
+ upperwithothersep={#1}{#2},
+ }
+ {
+ lowerwithothersep={#1}{#2},
+ },
+ },
+ },
+ % The "i" index:
+ definekeys={
+ {islot}{
+ boolifTF={uppergrading}
+ { lowerslot }
+ { upperslot },
+ },
+ {i-}{islot},
+ {sislot}{
+ boolifTF={uppergrading}
+ { slowerslot }
+ { supperslot },
+ },
+ {si-}{sislot},
+ {cislot}{
+ boolifTF={uppergrading}
+ { clowerslot }
+ { cupperslot },
+ },
+ {ci-}{cislot},
+ {idots}{
+ boolifTF={uppergrading}
+ { lowerdots }
+ { upperdots },
+ },
+ {i...}{idots},
+ {sidots}{
+ boolifTF={uppergrading}
+ { slowerdots }
+ { supperdots },
+ },
+ {si...}{sidots},
+ {cidots}{
+ boolifTF={uppergrading}
+ { clowerdots }
+ { cupperdots },
+ },
+ {ci...}{cidots},
+ {cleari}{
+ boolifTF={uppergrading}
+ { clearlower }
+ { clearupper },
+ },
+ {clearprei}{
+ boolifTF={uppergrading}
+ { clearprelower }
+ { clearpreupper },
+ },
+ {clearposti}{
+ boolifTF={uppergrading}
+ { clearpostlower }
+ { clearpostupper },
+ },
+ {i*}{
+ boolifTF={uppergrading}
+ { lower* }
+ { upper* },
+ },
+ {i**}{
+ boolifTF={uppergrading}
+ { lower** }
+ { upper** },
+ },
+ {si*}{
+ boolifTF={uppergrading}
+ { slower* }
+ { supper* },
+ },
+ {si**}{
+ boolifTF={uppergrading}
+ { slower** }
+ { supper** },
+ },
+ {ci*}{
+ boolifTF={uppergrading}
+ { clower* }
+ { cupper* },
+ },
+ {ci**}{
+ boolifTF={uppergrading}
+ { clower** }
+ { cupper** },
+ },
+ },
+ definekeys[1]={
+ {i}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { lower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { upper } { #1 } }
+ },
+ },
+ {si}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { slower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { supper } { #1 } }
+ },
+ },
+ {ci}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { clower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { cupper } { #1 } }
+ },
+ },
+ {prei}{
+ boolifTF={uppergrading}
+ {
+ prelower={#1},
+ }
+ {
+ preupper={#1},
+ },
+ },
+ {posti}{
+ boolifTF={uppergrading}
+ {
+ postlower={#1},
+ }
+ {
+ postupper={#1},
+ },
+ },
+ {iputleft}{
+ boolifTF={uppergrading}
+ {
+ lowerputleft={#1},
+ }{
+ upperputleft={#1},
+ },
+ },
+ {setislot}{
+ boolifTF={uppergrading}
+ {
+ setlowerslot={#1},
+ }
+ {
+ setupperslot={#1},
+ }
+ },
+ {islotwithothersep}{
+ boolifTF={uppergrading}
+ {
+ lowerslotwithothersep={#1},
+ }
+ {
+ upperslotwithothersep={#1},
+ },
+ },
+ {i-withothersep}{
+ islotwithothersep={#1},
+ },
+ {setidots}{
+ boolifTF={uppergrading}
+ {
+ setlowerdots={#1},
+ }
+ {
+ setupperdots={#1},
+ }
+ },
+ {idotswithothersep}{
+ boolifTF={uppergrading}
+ {
+ lowerdotswithothersep={#1},
+ }
+ {
+ upperdotswithothersep={#1},
+ },
+ },
+ {i...withothersep}{
+ idotswithothersep={#1},
+ },
+ {i*withothersep}{
+ boolifTF={uppergrading}
+ { lower*withothersep={#1} }
+ { upper*withothersep={#1} },
+ },
+ {i**withothersep}{
+ boolifTF={uppergrading}
+ { lower**withothersep={#1} }
+ { upper**withothersep={#1} },
+ },
+ {setisep}{
+ boolifTF={uppergrading}
+ {
+ setlowersep={#1},
+ }
+ {
+ setuppersep={#1},
+ },
+ },
+ {nextiwithsep}{
+ strifeqTF={#1}{true}
+ {
+ boolifTF={uppergrading}
+ {
+ nextlowerwithsep={#1},
+ }
+ {
+ nextupperwithsep={#1},
+ },
+ }
+ {
+ strifeqTF={#1}{false}
+ {
+ boolifTF={uppergrading}
+ {
+ nextupperwithsep={#1},
+ }
+ {
+ nextlowerwithsep={#1},
+ },
+ }
+ {
+ ERRORkeyvaluenotfound={nextiwithothersep}{#1},
+ },
+ },
+ },
+ },
+ definekeys[2]={
+ {iwithothersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { uppergrading }
+ { \semantex_valuekey:nnn { ##1 } { lowerwithothersep } { { #1 } { #2 } } }
+ { \semantex_valuekey:nnn { ##1 } { upperwithothersep } { { #1 } { #2 } } }
+ },
+ },
+ },
+ % Argument keyval interface
+ defineargkeys[1]={
+ {execute}{execute={#1}},
+ {setkeys}{ execute={ \semantex_keys_set:nn { ##1 } { #1 } } },
+ {keysset}{ execute={ \semantex_keys_set:nn { ##1 } { #1 } } },
+ {setkeysx}{ execute={ \semantex_keys_set_x:nn { ##1 } { #1 } } },
+ {keyssetx}{ execute={ \semantex_keys_set_x:nn { ##1 } { #1 } } },
+ {setargkeys}{ execute={ \semantex_arg_keys_set:nn { ##1 } { #1 } } },
+ {argkeysset}{ execute={ \semantex_arg_keys_set:nn { ##1 } { #1 } } },
+ {setargkeysx}{ execute={ \semantex_arg_keys_set_x:nn { ##1 } { #1 } } },
+ {argkeyssetx}{ execute={ \semantex_arg_keys_set_x:nn { ##1 } { #1 } } },
+ {setargsinglekeys}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
+ {argsinglekeysset}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
+ {setargsinglekeysx}{ execute={ \semantex_arg_singlekeys_set_x:nn { ##1 } { #1 } } },
+ {argsinglekeyssetx}{ execute={ \semantex_arg_singlekeys_set_x:nn { ##1 } { #1 } } },
+ {setoneargsinglekey}{ execute={ \semantex_arg_singlekey:nn { ##1 } { #1 } } },
+ {oneargsinglekeyset}{ execute={ \semantex_arg_singlekey:nn { ##1 } { #1 } } },
+ {setoneargsinglekeyx}{ execute={ \semantex_arg_singlekey_x:nn { ##1 } { #1 } } },
+ {oneargsinglekeysetx}{ execute={ \semantex_arg_singlekey_x:nn { ##1 } { #1 } } },
+ {setargwithoutkeyval}{ execute={ \semantex_arg_without_keyval:nn { ##1 } { #1 } } },
+ {argwithoutkeyvalset}{ execute={ \semantex_arg_without_keyval:nn { ##1 } { #1 } } },
+ {setargwithoutkeyvalx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
+ {argwithoutkeyvalsetx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{default}{s={#1}},
{-withothersep}{slotwithothersep={#1}},
{...withothersep}{dotswithothersep={#1}},
+ {s}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextargwithsep }
+ {
+ \semantex_data_tl_put_right:nnx { ##1 } { arg }
+ {
+ \semantex_data_tl_get_exp_not:nn { ##1 } { argsep }
+ }
+ }
+ {
+ % do nothing
+ }
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { #1 }
+ \semantex_data_int_incr:nn { ##1 } { numberofarguments }
+ \semantex_data_bool_set_true:nn { ##1 } { nextargwithsep }
+ }
+ },
+ {c}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextargwithsep }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { , #1 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { #1 }
+ }
+ \semantex_data_int_incr:nn { ##1 } { numberofarguments }
+ \semantex_data_bool_set_true:nn { ##1 } { nextargwithsep }
+ }
+ },
+ {dotswithothersep}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { othersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { argdots } }
+ }
+ },
+ },
+ {slotwithothersep}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { othersep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { argslot } }
+ }
+ },
+ },
},
- argsinglekeys={
- {slot}{slot=},
- {-}{slot=},
- {cslot}{cslot=},
- {c-}{cslot=},
-% {*}{slot=}, % would be confusing since * does not correspond to slot in the indices
- {dots}{dots=},
- {...}{dots=},
- {cdots}{cdots=},
- {c...}{cdots=},
+ defineargkeys={
+ {dots}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { s }
+ {
+ \semantex_data_tl_get_exp_not:nn { ##1 } { argdots }
+ }
+ },
+ },
+ {...}{dots},
+ {cdots}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { c }
+ {
+ \semantex_data_tl_get_exp_not:nn { ##1 } { argdots }
+ }
+ },
+ },
+ {c...}{cdots},
+ {slot}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { s }
+ {
+ \semantex_data_tl_get_exp_not:nn { ##1 } { argslot }
+ }
+ },
+ },
+ {-}{slot},
+ {cslot}{
+ execute={
+ \semantex_arg_valuekey:nnx { ##1 } { c }
+ {
+ \semantex_data_tl_get_exp_not:nn { ##1 } { argslot }
+ }
+ },
+ },
+ {c-}{cslot},
+ },
+ defineargkeys[2]={
+ {othersep}{
+ execute={
+ \semantex_data_bool_get:nnTF { ##1 } { nextargwithsep }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { #1 #2 }
+ }
+ {
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { #2 }
+ }
+ \semantex_data_int_incr:nn { ##1 } { numberofarguments }
+ \semantex_data_bool_set_true:nn { ##1 } { nextargwithsep }
+ },
+ },
},
]
\cs_set_eq:NN\__semantex_old_version_of_semantex_new_object_of_class_SemantexBaseObject:Nw \__semantex_new_object_of_class_SemantexBaseObject:Nw
-\cs_set:Npn \__semantex_new_object_of_class_SemantexBaseObject:Nw#1
+\cs_set_protected:Npn \__semantex_new_object_of_class_SemantexBaseObject:Nw#1
{
\msg_error:nnn { semantex } { created_a_SemantexBaseObject } { #1 }
\__semantex_old_version_of_semantex_new_object_of_class_SemantexBaseObject:Nw #1
-} \ No newline at end of file
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PROCESSING PACKAGE KEYVAL SETUP
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ProcessKeysOptions { semantex }
+
+% ... and they lived happily ever after. \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index f4cf279f0e..81064afc8e 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -23,6 +23,10 @@
\makeevenhead{headings}{\thepage}{}{\itshape\leftmark} %make headings italic instead of slanted (though we do not use headings right now)
\makeoddhead{headings}{\itshape\rightmark}{}{\thepage}
+\setlrmarginsandblock{4cm}{*}{*}
+\setulmarginsandblock{4cm}{*}{*}
+\checkandfixthelayout
+
\raggedbottomsectiontrue%less harse than \raggedbottom
%\allowdisplaybreaks %long equations may break
@@ -34,26 +38,67 @@
\usepackage[nameinlink]{cleveref}
-\title{Seman\!\TeX: Semantic mathematics (v$0.3\alpha$)}
+\title{Seman\!\TeX: semantic, keyval-based mathematics (v$0.4\beta$)}
\date{\today}
\author{Sebastian Ørsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
\hypersetup{
pdfauthor={Sebastian Ørsted},
- pdftitle={SemanTeX: Object-oriented mathematics},
+ pdftitle={SemanTeX: semantic, keyval-based mathematics},
%pdfsubject={},
%pdfkeywords={},
%pdfproducer={Latex with hyperref, or other system},
%pdfcreator={pdflatex, or other tool},
}
+\usepackage{showexpl}
+\lstset{%
+ language=[LaTeX]TeX,
+ basicstyle=\ttfamily\small,
+ commentstyle=\itshape\ttfamily\small,
+ alsoletter={\\},
+ escapechar=@,
+ breaklines=true,
+ breakindent={0pt},
+ captionpos=t,
+ pos=r,
+ tabsize=2,
+ %inputencoding=utf8,
+ explpreset={numbers=none,},
+ texcl=false,
+ wide=false,
+ width=.45\textwidth,
+}
+
+\newcommand\mylst{\lstinline[mathescape]}
+
+\def\<#1\>{\textrm{\textlangle\textit{#1}\textrangle}}
+
+\def\usercommand\<#1\>{\textrm{\textbackslash\textlangle\textit{#1}\textrangle}}
+
+\def\values\<#1\>{\textrm{\textlangle\textup{#1}\textrangle}}
+\def\num#1{\textsubscript{\textup{#1}}}
-% Settup up SemanTeX:
+\newcommand\default[1]{\smash{\underline{\smash{#1}}}}
+
+\newcommand\commandname[1]{\textbackslash\texttt{#1}}
+
+\let\pack=\texttt
+
+\newcommand\semantex{Seman\!\TeX\xspace}
+
+\newcommand\stripsemantex{\texttt{stripsemantex}\xspace}
+
+\usepackage{hologo}
+
+% Setting up SemanTeX:
\usepackage{semantex}
+\usepackage{expkv}
+
\NewVariableClass\MyVar[
output=\MyVar,
]
@@ -173,58 +218,38 @@
\NewObject\MyHomology\ho{H}
-\usepackage{showexpl,newunicodechar}
+\makeatother
-\newunicodechar{⟨}{\textlangle}
-\newunicodechar{⟩}{\textrangle}
-\makeatother
\begin{document}
\maketitle
-\lstset{%
- language=[LaTeX]TeX,
- basicstyle=\ttfamily\small,
- commentstyle=\itshape\ttfamily\small,
- extendedchars=true,
- breaklines=true,
- breakindent={0pt},
- captionpos=t,
- pos=r,
- tabsize=2,
- inputencoding=utf8,
- extendedchars=true,
- explpreset={numbers=none,},
- literate={⟨}{\textlangle}1 {⟩}{\textrangle}1,
-}
-
-
-
-\newcommand\mybs{$\backslash$}
+\noindent
+The \semantex package for \LaTeX\ delivers a more semantic, systematized way of writing mathematics, compared to the classical math syntax in~\LaTeX.
+The system uses keyval syntax, and the user can define their own keys and customize the system down to the last detail. At the same time, care has been taken to make the syntax as simple, natural, practical, and lightweight as possible.
-\newcommand\commandname[1]{\mybs\texttt{#1}}
+Furthermore, the package has a companion package,
+called \stripsemantex, which allows you to completely strip
+your documents of \semantex markup to prepare them e.g.~for publication.
-\let\pack=\texttt
-
-\newcommand\semantex{Seman\!\TeX\xspace}
+The package is still in beta, but is considered feature-complete
+and more or less stable, so using it at this point should be safe.
+Still, suggestions, ideas, and bug reports are more than welcome!
-\noindent
-The \semantex package for \LaTeX\ delivers a more semantic, systematized way of writing mathematics, compared to the classical math syntax in~\LaTeX.
-The system uses keyval syntax and is highly customizable. At the same time, care has been taken to make it the syntax as simple, natural, practical, and lightweight as possible.
-\textbf{Note: \semantex is still in its alpha stage and cannot be considered stable at this point. You are more than welcome to report bugs and come with suggestions!}
+\chapter{Introduction}
\begingroup
\SetupClass\MyVar{
- singlekeys={
- {conj}{overline},
+ definekeys={
+ {conj}{command=\overline},
{inv}{upper={-1}},
{inverseimage}{upper={-1},nopar},
},
- valuekeys={
+ definekeys[1]={
{der}{upper={ (#1) } },
- {res}{ return ,symbolputright ={|}, lower ={#1} },
+ {res}{ rightreturn ,symbolputright ={|}, lower ={#1} },
{stalk}{clower={#1}},
% "clower" means "comma lower", i.e. lower index
% separated from any previous lower index by a comma
@@ -301,17 +326,17 @@ $ \vh[inverseimage]{\sheafF}[spar,stalk=\vp]
output=\MyVar, % This means that the output of an object
% of class \MyVar is also of class \MyVar
% We add a few keys for use with the class \MyVar:
- singlekeys={ % keys taking no values
+ definekeys={ % we define a few keys
{inv}{upper={-1}},
- {conj}{overline},
+ {conj}{command=\overline}, % Applies \overline to the symbol
{inverseimage}{upper={-1},nopar},
},
- valuekeys={ % keys taking a value
+ definekeys[1]={ % we define keys taking 1 value
{der}{upper={(#1)}},
{stalk}{clower={#1}},
% "clower" means "comma lower", i.e. lower index
% separated from any previous lower index by a comma
- {res}{ return ,symbolputright ={|}, lower ={#1} },
+ {res}{ rightreturn, symbolputright={|}, lower={#1} },
},
}
@@ -341,7 +366,7 @@ You should think of this as a low-level class, the parent of all other classes.
Instead, we create a new, more high-level variable class.
We choose to call it \lstinline!\MyVar!.
It is best to always start class names with uppercase letters to separate them from objects.
-We could write \lstinline!\NewVariableClass\MyVar!, but we choose to
+We could create this class by writing \lstinline!\NewVariableClass\MyVar!, but we choose to
pass some options to it in~\lstinline![...]!:
\begin{lstlisting}
\NewVariableClass\MyVar[output=\MyVar]
@@ -350,15 +375,15 @@ This \lstinline!output=\MyVar! option will be explained better below.
Roughly speaking, it tells \semantex that everything
a variable \emph{outputs} will also be a variable.
For instance, if the function~\lstinline!\vf! (i.e.~\( \vf \)) is of class~\lstinline!\MyVar!,
-then \lstinline!\vf{\vx}!~(i.e.~\( \vf{\vx} \))~will also of class~\lstinline!\MyVar!.
+then \lstinline!\vf{\vx}!~(i.e.~\( \vf{\vx} \))~will also be of class~\lstinline!\MyVar!.
Now we have a class, but we do not have any objects.
To create the object~\lstinline!\vf! of class~\lstinline!\MyVar! with symbol~\( f \),
we write~\lstinline!\NewObject\MyVar\vf{f}!.
-In general, when you have class~\lstinline!\⟨Class⟩!, you
+In general, when you have class~\usercommand\<Class\>, you
can create objects of that class wtih the syntax
\begin{lstlisting}
-\NewObject\⟨Class⟩\⟨object⟩{⟨object symbol⟩}[⟨options⟩]
+\NewObject@\usercommand\<Class\>\usercommand\<object\>@{@\<object symbol\>@}[@\<options\>@]
\end{lstlisting}
To distinguish objects from classes, it is a good idea to denote
objects by lowercase letters.\footnote{We shall not follow this convention strictly, as we shall later create objects with names like~\commandname{Hom}; using lowercase letters for these would just look weird.}
@@ -374,13 +399,14 @@ $\vf$, $\vx$
\end{LTXexample}
Th general syntax of a variable-type object is
\begin{lstlisting}
-\⟨object⟩[⟨options⟩]{⟨argument⟩}
+@\usercommand\<object\>@[@\<options\>@]{@\<argument\>@}
\end{lstlisting}
-Both \lstinline!⟨options⟩! and \lstinline!⟨argument⟩! are optional
+Both \<options\> and \<argument\> are optional
arguments (they can be left out if you do not need them).
-The \lstinline!⟨options⟩! should consist of a list of options separated by commas, using keyval syntax. On the other hand, \lstinline!⟨argument⟩! is the actual argument of the function.
-By design, \semantex does not distinguish between variables and functions, so all variables can take arguments.
-This is a design choice to make the system easier to use; after all, it is fairly common in mathematics that something is first a variable and then a moment later takes an argument.
+The \<options\> should consist of a list of options separated by commas, using keyval syntax. Naturally, \<argument\> is the actual argument of the function.
+
+By a design choice, \semantex does not distinguish between variables and functions, so all variables can take arguments.
+This makes the system easier to use; after all, it is fairly common in mathematics that something is first a variable and then a moment later takes an argument.
So we may write:
\begin{LTXexample}
$\vf{1}$, $\vf{\vx}$,
@@ -388,20 +414,37 @@ $\vx{\vx}$
\end{LTXexample}
So far, we do not have very many options to write in the
-\lstinline!⟨options⟩! position, since we have not added any keys yet. However, we do have access
+\<options\> position, since we have not added any keys yet. However, we do have access
to the most important of all options: the \emph{index}.
There is a simple shortcut for writing an index: You simply write the index itself in the options tag:
\begin{LTXexample}
$\vf[1]$, $\vf[\vf]$,
$\vf[1,2,\vf]{2}$
\end{LTXexample}
-As long as what you write in the options tag is not recognized as a predefined key, it will be printed as the index.
+As long as what you write in the options tag is not recognized as a defined key, it will be printed as the index.
Other than that, there are two important predefined keys: \lstinline!upper! and \lstinline!lower! which simply add something to the upper and lower index:
\begin{LTXexample}
$\vf[upper=2]$,
$\vf[lower=3]$
\end{LTXexample}
+In fact, there are quite a few keys for manipulating upper and lower indices.
+Right now, apart from \lstinline!upper! and~\lstinline!lower!,
+we shall only need a couple more:
+\lstinline!supper! and~\lstinline!slower! mean
+\enquote{separator~+~upper} and \enquote{separator~+~lower}\footnote{Yes, I have noticed that the words unfortunately have other meanings already. But the notation has to be brief and consistent, and I have decided convention that \mylst!s$\<anything\>$! means \<anything\>, possibly separated from previous \<anything\> by a separator.}.
+These are like \lstinline!upper! and~\lstinline!lower!,
+but if there already was an upper or lower index,
+the new index will be separated from the old one by a separator.
+By default, this separator is a comma.
+There are also two more commands,
+\lstinline!cupper! and~\lstinline!clower!,
+which mean \enquote{comma~+~upper} and~\enquote{comma~+~lower}.
+These will use a comma as separator, even if you have changed the
+default separator.
+
+\section{Next step: Defining more variables}
+
We are soon going to need more variables
than just \( \vf \) and~\( \vx \).
In fact, I advise you to create a variable for each letter in the Latin and Greek alphabets, both uppercase and lowercase.
@@ -516,7 +559,10 @@ $\vf[par=auto]{\frac{1}{2}}$
\end{LTXexample}
Using \lstinline!par=auto! corresponds to using \lstinline!\left...\right!. Just as for ordinary math, I advice you to use manual scaling rather than automatic scaling, as \TeX\ has a tendency to scale things wrong. If you do not want parentheses at all, you can pass the key~\lstinline!nopar! (it will still print parentheses if there is more than one argument, though; to exclude this behaviour, run~\lstinline!neverpar! instead):
\begin{LTXexample}
-$\vf[nopar]{\vx}$
+$\vf[nopar]{\vx}$,
+$\vf[nopar]{\vx,\vy}$,
+$\vf[neverpar]{\vx}$,
+$\vf[neverpar]{\vx,\vy}$
\end{LTXexample}
Primes are added via the key~\lstinline!prime!
or the keys~\lstinline!'!,~\lstinline!''! and~\lstinline!'''!:
@@ -526,37 +572,101 @@ $\vf[''] = \vf[prime,prime]$
$\vf['''] = \vf[prime,prime,prime]$
\end{LTXexample}
-So far, so good, but our variables cannot really do anything yet. For this, we need to assign \emph{keys} to them. The more pieces of math notation you need, the more keys you will have to define.
-Keys are being added via two different keys:
-\begin{center}
- \lstinline!singlekeys!
- \qquad\qquad and \qquad\qquad
- \lstinline!valuekeys!.
-\end{center}
-In short, \lstinline!singlekeys! is for keys that do \emph{not} take a value (i.e.~keys using the syntax~\lstinline!\⟨object⟩[key]!), and \lstinline!valuekeys! is for keys that \emph{do} take a value
-(i.e.~keys using the syntax~\lstinline!\⟨object⟩[key=value]!)).
-We explain the syntax for using them in the next section where we show how to make keyval syntax for elementary calculus.
-
\begingroup\color{red}%
For the rest of the manual, we assume that you have already defined a class~\lstinline!\MyVar! and the variables~\lstinline!\va!, \lstinline!\vA!, \lstinline!\vb!, \lstinline!\vB!, \ldots, as above.
\endgroup
-\chapter{Example: Elementary calculus}
+\section{Defining keys}
+
+So far, so good, but our variables cannot really do anything yet. For this, we need to assign \emph{keys} to them. The more pieces of math notation you need, the more keys you will have to define.
+To define keys, we use the command~\lstinline!\SetupClass!
+(or~\lstinline!\SetupObject! if you want to define it for an individual object)
+and the key~\lstinline!definekeys!.
+The syntax is as follows:
+\begin{lstlisting}
+\SetupClass\MyVar{
+ definekeys={
+ {@\<key name\num{1}\>@}{ @\<keys to run\>@ },
+ {@\<key name\num{2}\>@}{ @\<keys to run\>@ },
+ {@\<key name\num{3}\>@}{ @\<keys to run\>@ },
+ @\ldots,@
+ },
+}
+\end{lstlisting}
+For instance, you can do
+\begin{lstlisting}
+\SetupClass\MyVar{
+ definekeys={
+ {key1}{ upper=3, lower=7 },
+ {key2}{ lower=6, upper=4 },
+ },
+}
+\end{lstlisting}
+
+Quite often, we shall also need to define
+keys that can \emph{take a value}.
+A key can take up to~\( 9 \)~values.
+To define a key taking \( n \)~values,
+use~\mylst!definekeys[$n$]!
+for~\( n = 0 , 1 , 2 , \ldots , 9 \).
+The syntax is similar to~\lstinline!definekeys!,
+except the values can be accessed
+by writing~\lstinline!#1!, \lstinline!#2!, \ldots, \lstinline!#9!.
+Except for a few special cases, you will probably only
+ever need~\lstinline!definekeys[1]!. So you can do
+\begin{lstlisting}
+\SetupClass\MyVar{
+ definekeys[1]={
+ {key3}{ upper=\{#1\} },
+ {key4}{ lower=(#1) },
+ },
+ definekeys[2]={
+ {key5}{ upper=3+#1, lower=7-#2 },
+ {key6}{ lower=6\cdot#1, upper=4/#2 },
+ },
+}
+\end{lstlisting}
+\begingroup
+\SetupClass\MyVar{
+ definekeys={
+ {key1}{ upper=3, slower=7 },
+ {key2}{ lower=6, supper=4 },
+ },
+ definekeys[1]={
+ {key3}{ supper=\{#1\} },
+ {key4}{ slower=(#1) },
+ },
+ definekeys[2]={
+ {key5}{ supper=3+#1, slower=7-#2 },
+ {key6}{ slower=6\cdot#1, supper=4/#2 },
+ },
+}
+Let us see these rather ridiculous keys in action:
+
+\begin{LTXexample}
+$ \vP[key1,key3=0,key5={3}{4}] $
+\end{LTXexample}
+
+\endgroup
+
+\chapter{Some examples}
+
+\section{Example: Elementary calculus}
One thing we might want to do to a variable
is \emph{invert} it. We therefore add a key~\lstinline!inv!
that adds an upper index~\lstinline!-1! to the symbol.
-We add this key using the key \lstinline!singlekeys!,
-which is for keys that do not take a value:
+We add this key using the key \lstinline!definekeys!
+since there is no reason for this key to take a value:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{inv}{ upper={-1} },
},
}
\end{lstlisting}
\SetupClass\MyVar{
-singlekeys={
+definekeys={
{inv}{ upper={-1} },
},
}
@@ -569,25 +679,22 @@ $\vg[1,2,inv]$,
$\vh[\va,\vb,inv]$
\end{LTXexample}
-Other keys might need to take a value.
-For defining such, we have the command~\lstinline!valuekeys!.
-%There are two different keys for adding new keys
-%to a class: \lstinline!singlekeys! and \lstinline!valuekeys!.
-%The difference is that
+Other keys might need to take one value.
+For defining these, we use the key~\lstinline!definekeys[1]!.
For instance, suppose we want a command for deriving a function \( n \)~times.
For this, we add the key~\lstinline!der!:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{inv}{ upper={-1} },
},
- valuekeys={
+ definekeys[1]={
{der}{ upper={(#1)} },
},
}
\end{lstlisting}
\SetupClass\MyVar{
-valuekeys={
+definekeys[1]={
{der}{ upper={(#1)} },
},
}
@@ -600,17 +707,17 @@ $\vf[der=\vn]{\vx}$
Maybe we also want a more elementary key~\lstinline!power! for raising a variable to a power:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{inv}{ upper={-1} },
},
- valuekeys={
+ definekeys[1]={
{der}{ upper={(#1)} },
{power}{ upper={#1} },
},
}
\end{lstlisting}
\SetupClass\MyVar{
- valuekeys={
+ definekeys[1]={
{power}{ upper={#1} },
},
}
@@ -624,26 +731,26 @@ Let us try doing something a bit more complicated: adding a key for restricting
For this, we do the following:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{inv}{ upper={-1} },
},
- valuekeys={
+ definekeys[1]={
{der}{ upper={(#1)} },
{power}{ upper={#1} },
- {res}{ return,symbolputright={|}, lower={#1} },
+ {res}{ rightreturn,symbolputright={|}, lower={#1} },
},
}
\end{lstlisting}
\SetupClass\MyVar{
- valuekeys={
- {res}{ return,symbolputright={|}, lower={#1} },
+ definekeys[1]={
+ {res}{ rightreturn,symbolputright={|}, lower={#1} },
},
}
This adds a horizonal line~\enquote{$|$}
to the right of the symbol followed by
a lower index containing whatever you passed to the key
(contained in the \mbox{command~\lstinline!#1!)}.
-(There is also an extra key, \lstinline!return!, which is a bit more advanced and should be taken for granted for now. Roughly speaking, it is there to make sure that the restriction symbol is printed \emph{after} all indices that you might have added before. More details in \cref{ch:return}.)
+(There is also an extra key, \lstinline!rightreturn!, which is a bit more advanced and should be taken for granted for now. Roughly speaking, it is there to make sure that the restriction symbol is printed \emph{after} all indices that you might have added before. More details in \cref{ch:return}.)
Now we may write the following:
\begin{LTXexample}
$\vf[res=\vU]{\vx}$,
@@ -661,15 +768,16 @@ $\vf[der=\vn]{\vx}{\vy}{\vz}
Some people prefer to be able to scale the vertical line in the restriction notation. I rarely do that, but for this purpose, we could do the following:
\begin{lstlisting}
\SetupClass\MyVar{
- valuekeys={
- {bigres}{ return, symbolputright=\big\vert, lower={#1} },
- {Bigres}{ return, symbolputright=\Big\vert, lower={#1} },
- {biggres}{ return, symbolputright=\bigg\vert, lower={#1} },
- {Biggres}{ return, symbolputright=\Bigg\vert, lower={#1} },
- {autores}{ return, Otherspar={.}{\vert}{auto},
- lower={#1} },
- % This auto scales the vertical bar. See the chapter on the
- % spar key for information about sparsize and Otherspar
+ definekeys[1]={
+ {bigres}{ rightreturn, symbolputright=\big|, lower={#1} },
+ {Bigres}{ rightreturn, symbolputright=\Big|, lower={#1} },
+ {biggres}{ rightreturn, symbolputright=\bigg|, lower={#1} },
+ {Biggres}{ rightreturn, symbolputright=\Bigg|, lower={#1} },
+ {autores}{ Otherspar={.}{|}{auto}, lower={#1} },
+ % The last key auto-scales the vertical bar. See @\textit{\cref{sec:spar}}@
+ % for information about Otherspar.
+ % Note that Otherspar automatically invokes rightreturn,
+ % so no need to run that key twice.
},
}
\end{lstlisting}
@@ -680,26 +788,25 @@ via \lstinline!\NewVariableClass! and then used \lstinline!\SetupClass! to add k
\NewVariableClass\MyVar[
output=\MyVar, % This means that the output of an object
% of class \MyVar is also of class \MyVar
- singlekeys={
+ definekeys={
{inv}{ upper={-1} },
},
- valuekeys={
+ definekeys[1]={
{der}{ upper={(#1)} },
{power}{ upper={#1} },
- {res}{ rightreturn, symbolputright={|},
- lower={#1} },
+ {res}{ rightreturn, symbolputright={|}, lower={#1} },
},
]
\end{lstlisting}
As we proceed in this guide, we shall use \lstinline!\SetupClass!
to add more and more keys to~\lstinline!\MyVar!. However, when you set up your own system, you may as well just add all of the keys at once like this when you create the class and then be done with it.
-Let me add that it is possible to create subclasses of existing classes. You just write \lstinline!parent=\⟨Class⟩! in the class declaration to tell that \lstinline!\⟨Class⟩! is the parent class. \textbf{But a word of warning:} It is a natural idea to create different classes for different mathematical entities, each with their own keyval syntax that fits whatever class you are in; for instance, you could have one class for algebraic structures like rings and modules with keys for opposite rings and algebraic closure, and you could have another class for topological spaces with keys for closure and interior. However, as the reader can probably imagine, this becomes extremely cumbersome to work with in practice since an algebraic structure might very well also carry a topology. So at the end of the day, I advice you to use a single superclass \lstinline!\MyVar! that has all the keyval syntax and mainly use subclasses for further customization. We shall see examples of this below.
+Let me add that it is possible to create subclasses of existing classes. You just write \mylst!parent=$\usercommand\<Class\>$! in the class declaration to tell that \usercommand\<Class\> is the parent class. \textbf{But a word of warning:} It is a natural idea to create different classes for different mathematical entities, each with their own keyval syntax that fits whatever class you are in; for instance, you could have one class for algebraic structures like rings and modules with keys for opposite rings and algebraic closure, and you could have another class for topological spaces with keys for closure and interior. However, as the reader can probably imagine, this becomes extremely cumbersome to work with in practice since an algebraic structure might very well also carry a topology. So at the end of the day, I advice you to use a single superclass \lstinline!\MyVar! that has all the keyval syntax and mainly use subclasses for further customization. We shall see examples of this below.
-\chapter{Example: Elementary algebra}
+\section{Example: Elementary algebra}\label{sec:algebra}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{poly}{
par, % This tells semantex to use parentheses around
% the argument in the first place, in case this
@@ -714,7 +821,7 @@ for doing algebra.
As an algebraist, one of the first things you might want to do is to create polynomial rings~\( \vk[poly]{\vx,\vy,\vz} \). Since all variables can already be used as functions (this is a design choice we discussed earlier), all we need to do is find a way to change from using parentheses to square brackets. This can be done the following way:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{poly}{
par, % This tells semantex to use parentheses around
% the argument in the first place, in case this
@@ -726,12 +833,12 @@ As an algebraist, one of the first things you might want to do is to create poly
\end{lstlisting}
Now we may write
\begin{LTXexample}
- $\vk[poly]{\vx,\vy,\vz}$
+$\vk[poly]{\vx,\vy,\vz}$
\end{LTXexample}
It is straightforward how to do adjust this to instead write the \emph{field} generated by the variables~\( x, y, z \):
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{poly}{
par, % This tells semantex to use parentheses around
% the argument in the first place, in case this
@@ -746,7 +853,7 @@ It is straightforward how to do adjust this to instead write the \emph{field} ge
}
\end{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{field}{
par,
leftpar=(,rightpar=),
@@ -759,7 +866,7 @@ key would produce the same result with the current configuration of the class~\l
Adding support for free algebras, power series, and Laurent series is almost as easy, but there is a catch:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{poly}{
par, % This tells semantex to use parentheses around
% the argument in the first place, in case this
@@ -785,7 +892,8 @@ Adding support for free algebras, power series, and Laurent series is almost as
leftpar=(, rightpar=),
prearg={\!\!\SemantexDelimiterSize(},
postarg={\SemantexDelimiterSize)\!\!},
- % These are printed before and after the argument.
+ % The "prearg" and "postarg" are printed before after
+ % the argument, if the argument is non-empty.
% The command "\SemantexDelimiterSize" is substituted
% by \big, \Big, ..., or whatever size the
% argument delimiters have
@@ -794,7 +902,7 @@ Adding support for free algebras, power series, and Laurent series is almost as
}
\end{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{freealg}{
par,
leftpar=\langle,
@@ -828,51 +936,52 @@ $\vk[laurent]{\vz}$
Let us look at some other algebraic operations that we can control via \semantex:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{op}{upper={\mathrm{op}}},
% opposite groups, rings, categories, etc.
- {algclosure}{overline},
+ {algclosure}{command=\overline},
% algebraic closure
- {conj}{overline},
+ {conj}{command=\overline},
% complex conjugation
{dual}{upper=*},
% dual vector space
{perp}{upper=\perp},
% orthogonal complement
},
- valuekeys={
- {mod}{symbolputright={/#1}},
+ definekeys[1]={
+ {mod}{rightreturn,symbolputright={/#1}},
% for modulo notation like R/I
- {dom}{symbolputleft={#1\backslash}},
+ {dom}{leftreturn,symbolputleft={#1\backslash}},
% for left modulo notation like I\R
% "dom" is "mod" spelled backwards
{oplus}{upper={\oplus#1}},
% for notation like R^{\oplus n}
{tens}{upper={\otimes#1}},
% for notation like R^{\otimes n}
- {localize}{symbolputright={ \relax [#1^{-1}] }},
+ {localize}{symbolputright={ \lbrack #1^{-1} \rbrack }},
% localization at a multiplicative subset;
- % the \relax is necessary becauese, in some cases,
- % the [...] can be interpreted as an optional argument
- {localizeprime}{lower={#1}},
+ % we use \lbrack and \rbrack rather than [ and ] since in some
+ % cases (using constructions like in @{\itshape\cref{ch:the_class_command}}@),
+ % the [...] might be interpreted as an optional argument.
+ {localizeprime}{slower={#1}},
% for localization at a prime ideal
},
}
\end{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{op}{upper={\mathrm{op}}},
% opposite groups, rings, categories, etc.
- {algclosure}{overline},
+ {algclosure}{command=\overline},
% algebraic closure
- {conj}{overline},
+ {conj}{command=\overline},
% complex conjugation
{dual}{upper=*},
% dual vector space
{perp}{upper=\perp},
% orthogonal complement
},
- valuekeys={
+ definekeys[1]={
{mod}{symbolputright={/#1}},
% for modulo notation like R/I
{dom}{symbolputleft={#1\backslash}},
@@ -882,9 +991,9 @@ Let us look at some other algebraic operations that we can control via \semantex
% for notatoin like R^{\oplus n}
{tens}{upper={\otimes#1}},
% for notation like R^{\otimes n}
- {localize}{symbolputright={ [#1^{-1}] }},
+ {localize}{symbolputright={ \lbrack #1^{-1} \rbrack }},
% localization at a multiplicative subset
- {localizeprime}{lower={#1}},
+ {localizeprime}{slower={#1}},
% for localization at a prime ideal
},
}
@@ -901,7 +1010,35 @@ $\vk[freealg]{\vS}[op]$,
$\vV[perp]$
\end{LTXexample}
-\chapter{The \texttt{spar} key}
+\section{GIT quotients}
+
+\SetupClass\MyVar{
+ definekeys[2]={
+ {projquotient}{ symbolputright={ /\!\!/ _ { #1 } #2 } },
+ }
+}
+
+We include a slightly more advanced example
+to show the use of keys with more than one value.
+Sometimes, a key with one value is simply not enough. For instance, if you
+work in geometric invariant theory~(GIT), you will eventually have to take the proj
+quotient~\( \vX[projquotient={\vchi}{\vG}] \) of~\( \vX \) with respect to the action of the group~\( \vG \) and the character~\( \vchi \). In other words, the proj quotient depends on two parameters, \( \vchi \) and~\( \vG \). For this purpose, we the the key~\lstinline!definekeys[2]!:
+\begin{lstlisting}
+\SetupClass\MyVar{
+ definekeys[2]={
+ {projquotient}{ symbolputright={ /\!\!/ _ { #1 } #2 } },
+ }
+}
+\end{lstlisting}
+
+\begin{LTXexample}
+$ \vX[projquotient={\vchi}{\vG}] $
+\end{LTXexample}
+
+
+\chapter{Some more techniques}
+
+\section{The \texttt{spar} key}\label{sec:spar}
The \lstinline!spar! key is one of the most important commands in \semantex at all. To understand why we need it, imagine you want to derive a function \( \vn \)~times and then invert it. Writing something like
\begin{LTXexample}
@@ -939,16 +1076,19 @@ Occassionally, it is useful to be able to input a particular kind of brackets ju
without adjusting any settings. For this purpose, we have the
\lstinline!otherspar! and~\lstinline!Otherspar!~keys. They use the syntax
\begin{lstlisting}
-otherspar={⟨opening bracket⟩}{⟨closing bracket⟩}
-Otherspar={⟨opening bracket⟩}{⟨closing bracket⟩}{⟨size⟩}
+otherspar={@\<opening bracket\>@}{@\<closing bracket\>@}
+Otherspar={@\<opening bracket\>@}{@\<closing bracket\>@}{@\values\<normal|auto|*|{\textit{other}}\>@}
\end{lstlisting}
+The last argument in \lstinline!Otherspar! sets the size of the
+parentheses.
Let us see them in action:
\begin{LTXexample}
-$\vf[otherspar={[}{)},otherspar={\{}{\rangle},
+$\vf[otherspar={[}{)},
+ otherspar={\{}{\rangle},
Otherspar={\langle}{\rangle}{\Bigg},spar]$
\end{LTXexample}
-\chapter{The \texorpdfstring{\texttt{$\backslash$⟨Class⟩}}{Class} command}
+\section{The \texorpdfstring{\texttt{$\backslash$\<Class\>}}{Class} command}\label{ch:the_class_command}
So far, we have learned that every mathematical entity should be treated
as an object of some class. However, then we run into issues the moment we
@@ -960,27 +1100,74 @@ We do not want to have to define a new variable
with symbol~\( \vf\circ\vg \) just to write something like this.
Fortunately, once you have created the class~\lstinline!\MyVar!,
you can actually use~\lstinline!\MyVar! as a command to create a quick instance of the class.
-More precisely \lstinline!\MyVar{⟨symbol⟩}!~creates a variable on the spot with symbol~\lstinline!⟨symbol⟩!.
+More precisely \mylst!\MyVar{$\<symbol\>$}!~creates a variable on the spot with symbol~\mylst!$\<symbol\>$!.
So the above equation can be written
\begin{LTXexample}
-$\MyVar{\vf\circ\vg}[
- spar,der=\vn]{\vx}$
+$\MyVar{\vf\circ\vg}[spar,
+ der=\vn]{\vx}$
\end{LTXexample}
-More generally, when you crate the class~\lstinline!\⟨Class⟩!,
+More generally, when you crate the class~\usercommand\<Class\>,
you can use it as a command with the following syntax:
\begin{lstlisting}
-\⟨Class⟩{⟨symbol⟩}[⟨options⟩]⟨usual syntax of class⟩
+@\usercommand\<Class\>@{@\<symbol\>@}[@\<options\>@]@\<usual syntax of class\>@
\end{lstlisting}
-\chapter{The \texttt{return} keys}\label{ch:return}
+\section{The \texttt{command} key}
+
+\begingroup
+Above, we used the key~\lstinline!command! a couple of times:
+\begin{LTXexample}
+$\va[command=\overline]$,
+$\vH[command=\widetilde]$
+\end{LTXexample}
+This key applies the given command to the symbol.
+Sometimes, it is useful to put these commands into
+keys instead. So you can do stuff like
+\begin{lstlisting}
+\SetupClass\MyVar{
+ definekeys={
+ {tilde}{command=\tilde},
+ {widetilde}{command=\widetilde},
+ {bar}{command=\bar},
+ {bold}{command=\mathbf},
+ {roman}{command=\mathrm},
+ },
+}
+\end{lstlisting}
+\SetupClass\MyVar{
+ definekeys={
+ {tilde}{command=\tilde},
+ {widetilde}{command=\widetilde},
+ {bar}{command=\bar},
+ {bold}{command=\mathbf},
+ {roman}{command=\mathrm},
+ },
+}
+Let us test:
+\begin{LTXexample}
+$\va[widetilde]$,
+$\va[bold]$,
+$\va[roman]$,
+$\va[bar]$
+\end{LTXexample}
+Note that there is a predefined key,~\lstinline!smash!,
+which is equivalent to~\lstinline!command=\smash!.
+
+\endgroup
+
+\section{The \texttt{return} keys}\label{ch:return}
+
+Let us suppose in this section that we have
+defined the key~\lstinline!conj! for complex conjugation,
+like in the introduction.
Suppose you want to take the complex conjugate of the variable~\( \vz[1] \). Then you might write something like
\begin{LTXexample}
$\vz[1,conj]$
\end{LTXexample}
Notice that the bar has only been added over the~\( \vz \), as is standard mathematical typography; you normally do not write~\( \vz[1,return,conj] \).
This reveals a design choice that has been made in \semantex:
-When you add an index or a command via the \lstinline{command} key,
+When you add an index or a command via the \lstinline!command! key,
it is not immediately applied to the symbol.
Rather, both commands and indices are added to a register and are then applied at the very last, right before the symbol is printed.
This allows us to respect standard mathematical typography, as shown above.
@@ -996,54 +1183,129 @@ $\vf[inv,return,conj]$
\end{LTXexample}
In fact, \lstinline!return! is an umbrella key that invokes three different return routines: \lstinline!leftreturn!, \lstinline!innerreturn!, and \lstinline!rightreturn!. The command \lstinline!leftreturn! adds the left indices to the symbol (we have not discussed left indices yet, though). The command \lstinline!innerreturn! adds all commands to the symbol (those defined using the \lstinline!command!~key).
Finally, \lstinline!rightreturn! adds all right indices and arguments to the symbol.
-In general, the user should probably be satisfied with just using \lstinline!return!.
+In general, most of the time, the user should probably be satisfied with just using \lstinline!return!.
+\section{Keyval syntax conflicts}
-\chapter{The \texttt{command} key}
+You can pass anything you want as key values, including other objects.
+But you quickly run into the following problem:
+Imagine you try setting~\lstinline!\vx[1,power=2]! as the lower
+index of a the object~\lstinline!\va!. If you try
+\begin{lstlisting}
+$ \va[lower=\vx[1,power=2]] $
+\end{lstlisting}
+then the system will break. Indeed, the system will see the object~\lstinline!\va!
+to which you have passed the two keys
+\begin{center}
+ \lstinline!lower=\vx[1!
+ \qquad\text{and}\qquad
+ \lstinline!power=2]!.
+\end{center}
+To avoid this behaviour, you will have to enclose the key
+value in braces:
+\begin{LTXexample}
+$ \va[lower={\vx[1,power=2]}] $
+\end{LTXexample}
-Above, we used the key \lstinline!overline! a couple of times:
+So far so good, but if you use our favourite shorthand notation
+for lower indices (simply writing the index in the options, like~\lstinline!\va[1]!),
+then it still goes wrong:
+\begin{lstlisting}
+$ \va[{\vx[1,power=2]}] $
+\end{lstlisting}
+The reason is that in \LaTeX\ (really, the \pack{xparse} package from \LaTeX3)
+interprets \lstinline![{...}]! more or less like~\lstinline![...]!
+in this case.
+To make up for this, you can use either of the following strategies:
\begin{LTXexample}
-$\va[overline]$,
-$\vH[overline]$
+$ \va[ {\vx[1,power=2]} ] $,
+$ \va[\vx[{1,power=2}]] $
\end{LTXexample}
-This command applies the command \lstinline!\overline!
-to the symbol. In fact, you can create similar commands yourself via
-the \lstinline!command! key.
-In fact, you could have defined the \lstinline!overline! yourself as follows:
+There is a similar problem in the arguments,
+since arguments also allow a kind of keyval syntax
+(the keys that need equality signs are turned off by default, though;
+more on that in \cref{ch:arg_keyval}).
+But it will still react on commas and keys like~\lstinline!...!.
+Therefore, in order to ensure the correct output, you will also have to enclose any argument containing commas with braces:
+\begin{LTXexample}
+$ \vf{ \vg[{upper=3,lower=2}] } $,
+$ \vf{ {\vg[upper=3,lower=2]} } $
+\end{LTXexample}
+As mentioned in \cref{ch:arg_keyval}, you \emph{can}
+also turn keyval syntax in arguments completely off,
+avoiding such issues. This can be done by setting
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
- {overline}{command=\overline},
- },
+ argkeyval=false,
}
\end{lstlisting}
-\SetupClass\MyVar{
- singlekeys={
- {overline}{command=\overline},
- },
-}
-This is how the key \lstinline!overline! is defined internally, except it is defined on the level of the superclass \lstinline!\SemantexBaseObject! instead.
-Here are some more examples of predefined keys that use the command key:
+
+\subsection{Cheating your way around keyval syntax conflicts}
+
+\begingroup
+If you grow tired of having to deal with such issues all the time, there
+are solutions to either partly or completely avoid this.
+The first solution we present does not solve
+the problem with~\lstinline!\va[\vx[1,power=2}]!, but
+it does solve problems like
\begin{lstlisting}
-\SetupClass\MyVar{ % do not add these -- they are already predefined!
- novalueskeys={
- {smash}{command=\smash},
- {tilde}{command=\tilde},
- {widetilde}{command=\widetilde},
- {bar}{command=\bar},
- {bold}{command=\mathbf},
- {roman}{command=\mathrm},
- },
+$ \va[lower=\vx[lower=3]] $
+\end{lstlisting}
+Normally, this will not work, as the underlying keyval machinery
+of \LaTeX3 does not allow key values to contain equality signs.
+However, there is another keyval package that does:
+the excellent package \pack{expkv}.
+To switch to the keyval parser of this package, we do
+
+\begin{lstlisting}
+\usepackage{expkv}
+\SemantexSetup{
+ keyvalparser=\ekvparse,
}
\end{lstlisting}
-Let us test:
+\SemantexSetup{
+ keyvalparser=\ekvparse,
+}
+Now you can do
\begin{LTXexample}
-$\va[widetilde]$,
-$\va[bold]$,
-$\va[roman]$,
-$\va[bar]$
+$ \va[lower=\vx[lower=3]] $
\end{LTXexample}
+In general,
+using the key
+\mylst!keyvalparser={$\<command\>$}!
+sets the keyval parser function to be the command~\<command\>.
+The \<command\> must take three arguments:
+\mylst!$\<command\>\<function\num{1}\>\<function\num{2}\>${$\<key-value list\>$}!.
+The \<function\num{1}\> must take one argument, while \<function\num{2}\>~must take two.
+For a key-value list, \<function\num{1}\>~will be applied to single keys taking no values,
+while \<function\num{2}\>~will be applied to keys taking a value. By default, this key has been set to the command \lstinline!\keyval_parse:NNn! from~\LaTeX3.
+Changing this key will only affect keys for objects and classes,
+\emph{not} keys for use inside~\lstinline!\SemantexSetup!.
+
+\endgroup
+
+A more drastic solution is to use the package~\pack{stricttex},
+which has been developed mainly as a companion package to~\semantex.
+Unfortunately, it only works in~\hologo{LuaTeX}.
+If you don't know what \hologo{LuaTeX} is, that means that you are not
+using \hologo{LuaTeX}, and you should note that switching is a rather drastic affair
+since your existing font settings might very well not work
+with LuaTeX. Also, \semantex does not exactly make your document faster,
+and \hologo{LuaTeX} makes it even slower, so think carefully before you make the switch just for this.
+
+In any case, with \pack{stricttex}, you will be able to make brackets \enquote{strict}, which means that any \lstinline![! will be replaced
+by a~\lstinline![{!, and that any~\lstinline!]! will be replaced
+by a~\lstinline!}]!. This will make all of the above work just fine:
+\begin{lstlisting}
+\StrictBracketsOn
+$ \va[lower=\vx[lower=3]] $
+$ \va[\vx[1,power=2]] $
+$ \vf{ \vg[upper=3,lower=2] } $
+\StrictBracketsOff
+\end{lstlisting}
+There is no demonstration on the right since this manual
+has not been typeset using \hologo{LuaTeX}, so it would not work.
\chapter{Example: Algebraic geometry}
@@ -1051,7 +1313,7 @@ Let us discuss how to typeset sheaves and operations on morphisms in algebraic g
First of all, adding commands for sheaves is not a big deal:
\begin{lstlisting}
\NewObject\MyVar\sheafF{\mathcal{F}}
-\NewObject\MyVar\sheafG}{\mathcal{G}}
+\NewObject\MyVar\sheafG{\mathcal{G}}
\NewObject\MyVar\sheafH{\mathcal{H}}
\NewObject\MyVar\sheafreg{\mathcal{O}}
% sheaf of regular functions
@@ -1063,7 +1325,7 @@ Next, for morphisms of schemes~\( \vf \colon \vX \to \vY \),
we need to be able to typeset comorphisms as well as the one hundred thousand different pullback and pushforward operations. For this, we add some keys to the \lstinline!\MyVar! key:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{comorphism}{upper=\#},
% comorphisms, i.e. f^{\#}
{inverseimage}{upper={-1},nopar},
@@ -1080,7 +1342,7 @@ we need to be able to typeset comorphisms as well as the one hundred thousand di
}
\end{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{comorphism}{upper=\#},
% comorphisms, i.e. f^{\#}
{inverseimage}{upper={-1},nopar},
@@ -1105,7 +1367,7 @@ comorphism~$ \vf[comorphism]
and for a sheaf~$ \sheafF $ on~$ \vY $, we can define the
pullback~$ \vf[sheafpull]{
\sheafF} $ by letting~$
-\vf[sheafpull]{ \sheafF}{\vU} = \cdots $ and the $ ! $-pullback by letting~$
+\vf[sheafpull]{\sheafF}{\vU} = \cdots $ and the $ ! $-pullback by letting~$
\vf[sheaf!pull]{\sheafF}{\vU} = \cdots $.
\end{LTXexample}
Maybe some people would write \lstinline!pull!, \lstinline!push!, etc.~instead, but there are many different kinds of pullbacks in mathematics, so I prefer to use the \lstinline!sheaf!~prefix to show that this is for sheaves.
@@ -1116,33 +1378,30 @@ There are a number of other operations we might want to do for sheaves. We alrea
However, we might need to stalk, sheafify, take dual sheaves, and twist sheaves. Let us define keys for this:
\begin{lstlisting}
\SetupClass\MyVar{
- valuekeys={
+ definekeys[1]={
{stalk}{clower={#1}},
% "clower" means "comma lower", i.e. lower index
% separated from any previous lower index by a comma
{sheaftwist}{return,symbolputright={(#1)}},
},
- singlekeys={
+ definekeys={
{sheafify}{upper=+},
{sheafdual}{upper=\vee},
},
}
\end{lstlisting}
\SetupClass\MyVar{
- valuekeys={
+ definekeys[1]={
{stalk}{clower={#1}},
% "clower" means "comma lower", i.e. lower index
% separated from any previous lower index by a comma
{sheaftwist}{return,symbolputright={(#1)}},
},
- singlekeys={
+ definekeys={
{sheafify}{upper=+},
{sheafdual}{upper=\vee},
},
}
-The key \lstinline!clower! stands for \enquote{comma lower}.
-It is like \lstinline!lower!, except that it checks whether the index
-is already non-empty, and if so, it separates the new index from the previous index by a comma. There is, of course, a \lstinline!cupper!~key that does the same with the upper index.
\begin{LTXexample}
$\sheafF[res=\vU,stalk=\vp]$,
$\sheafF[res=\vU,spar,stalk=
@@ -1150,7 +1409,7 @@ $\sheafF[res=\vU,spar,stalk=
$\sheafreg[\vX,stalk=\vp]$,
$\sheafG[sheafify]$,
$\vf[inverseimage]{\sheafreg[
-\vY]}[spar,stalk=\vx]$
+\vY]}[spar,stalk=\vx]$,
$\sheafG[sheafdual]$,
$\sheafreg[\vX][sheaftwist=-1]$,
$\sheafreg[sheaftwist=1,sheafdual]$
@@ -1174,25 +1433,27 @@ $\Hom[\vA]{\vM,\vN}$,
$\Ext[\vA]{\vM,\vN}$
\end{LTXexample}
\SetupClass\MyVar{
-valuekeys={
- {shift}{ return,symbolputright={ \relax [ {#1} ] } },
- % \relax is necessary since otherwise [...] can
- % occasionally be interpreted as an optional argument
+definekeys[1]={
+ {shift}{ rightreturn,symbolputright={ \relax [ {#1} ] } },
+ % we use \lbrack and \rbrack rather than [ and ] since in some
+ % cases (using constructions like in @{\itshape\cref{ch:the_class_command}}@),
+ % the [...] might be interpreted as an optional argument.
},
}
You will probably need several keyval interfaces, some of which will be covered below. But right now, we shall implement a shift operation~\( \vX\mapsto\vX[shift=\vn] \):
\begin{lstlisting}
\SetupClass\MyVar{
- valuekeys={
- {shift}{ return,symbolputright={ \relax [ {#1} ] } },
- % \relax is necessary since otherwise [...] can
- % occasionally be interpreted as an optional argument
+ definekeys[1]={
+ {shift}{ rightreturn,symbolputright={ \lbrack #1 \rbrack } },
+ % we use \lbrack and \rbrack rather than [ and ] since in some
+ % cases (using constructions like in @{\itshape\cref{ch:the_class_command}}@),
+ % the [...] might be interpreted as an optional argument.
},
}
\end{lstlisting}
Let us see that it works:
\begin{LTXexample}
-$\vX\mapsto\vX[shift=\vn]$
+$\vX \mapsto \vX[shift=\vn]$
\end{LTXexample}
Finally, let us define a command for the differential (in the homolgoical algebra sense):
\begin{lstlisting}
@@ -1203,38 +1464,37 @@ Finally, let us define a command for the differential (in the homolgoical algebr
$\dif{\vx} = 0$
\end{LTXexample}
-\section{The keys \texttt{i = index} and \texttt{d = deg = degree}}
+\section{The \texttt{d}-index and the \texttt{i}-index}
-Homological algebra is a place where people
-have very different opinions about the positions of the gradings.
+In branches of mathematics such as homological algebra,
+people have very different opinions about the positions of the gradings.
As an algebraist, I am used to \emph{upper} gradings (\enquote{cohomological} grading), whereas many topologists prefer \emph{lower} gradings (\enquote{homological} grading). The \semantex system
-supports both, but the default is upper gradings (the package author has the privilege to decide).
+supports both, but the default is upper gradings.
You can adjust this by writing
\lstinline!gradingposition=upper! or~\lstinline!gradingposition=lower!.
-We already learned about the keys \lstinline!upper! and~\lstinline!lower!.
-There are two more, \enquote{relative} keys that print the index either as an upper index or as a lower index, depending on your preference for cohomological or homological grading. They are called
+We already learned about the keys \lstinline!upper! and~\lstinline!lower!,
+as well as their friends \lstinline!supper!, \lstinline!slower!, \lstinline!cupper!, \lstinline!clower!, etc.
+There also exist \enquote{relative} versions of these keys that print the index either as an upper index or as a lower index, depending on your preference for cohomological or homological grading. They are called
\begin{center}
- \lstinline!index!
+ \lstinline!d!
\qquad\qquad and\qquad\qquad
- \lstinline!degree!
+ \lstinline!i!
\end{center}
-The \lstinline!degree! is the actual grading in the homological algebra
-sense. The \lstinline!index! is an additional index where you can put extra information that you might need.
+and consequently, we shall refer to the indices
+they correspond to as the \enquote{\lstinline!d!-index} and the \enquote{\lstinline!i!-index}.
+The \lstinline!d! stands for \enquote{degree} and corresponds to
+the grading. The~\lstinline!i! stands for \enquote{index}
+and corresponds to the \enquote{other} index where you may store
+additional information.\footnote{These names are not perfect; you might object that the degree is also an index, but feel free to come up with a more satisfactory naming principle, and I shall be happy to consider it.}
+
To understand the difference, keep the following two examples
-in mind: the hom complex~\( \Hom[*,index=\vA] \) and the simplicial homology~\( \ho[*,index=\vDelta] \) (we will define the command~\lstinline!\ho! for homology in the next section):
+in mind: the hom complex~\( \Hom[*,i=\vA] \) and the simplicial homology~\( \ho[*,i=\vDelta] \) (we will define the command~\lstinline!\ho! for homology in the next section):
\begin{LTXexample}
-$\Hom[index=\vA,degree=0]$,
-$\ho[index=\vDelta,degree=1]$
+$\Hom[i=\vA,d=0]$,
+$\ho[i=\vDelta,d=1]$
\end{LTXexample}
-These names are not perfect; many people would say that the degree is also
-an index, but feel free to come up with a more satisfactory naming principle, and I shall be happy to consider it. These names probably become a bit too heavy to write in the long run, so both keys have abbreviated equivalents:
-\begin{center}
- \lstinline!i! = \lstinline!index!
- \qquad\qquad and\qquad\qquad
- \lstinline!d! = \lstinline!deg! = \lstinline!degree!
-\end{center}
Let us see them in action:
\begingroup\begin{LTXexample}
$ \vX[d=3,i=\vk] $
@@ -1245,7 +1505,7 @@ $ \vX[d=3,i=\vk] $
$ \vX[d=3,i=\vk] $
\end{LTXexample}\endgroup
-\noindent (We haven't seen the command \lstinline!\SetupObject! before, but I imagine you can guess what it does).
+\noindent
If you want to print a bullet as the degree, there is the predefined key~\lstinline!*! for this:
\begingroup\begin{LTXexample}
$ \vX[*] $
@@ -1257,7 +1517,7 @@ $ \vX[*] $
$ \vX[*] $
\end{LTXexample}\endgroup
-I guess it is also time to reveal that the previously mentioned shorthand notation~\lstinline!\vx[1]! for indices always prints the~\lstinline!1! on the \lstinline{index} position. So changing the grading position changes the position of the index:
+I guess it is also time to reveal that the previously mentioned shorthand notation~\lstinline!\vx[1]! for indices always prints the~\lstinline!1! in the \lstinline!i!-index. So changing the grading position changes the position of the index:
\begingroup\begin{LTXexample}
$ \vX[1] $
@@ -1267,7 +1527,7 @@ $ \vX[1] $
$ \vX[1] $
\end{LTXexample}\endgroup
-In other words, in the first example above, we could have written
+\noindent In other words, in the first example above, we could have written
\begin{LTXexample}
$\Hom[\vA,d=0]$,
$\ho[\vDelta,d=1]$
@@ -1281,9 +1541,9 @@ $\vf[i]$, $\vf[i=]$,
$\vf[d]$, $\vf[d=]$
\end{LTXexample}
As we see, it is only when a \lstinline!d! or~\lstinline!i! key is followed by an equality sign~\lstinline!=!
-that the routines of these keys are invoked.
-In fact, \semantex carefully separates
-\lstinline!valuekeys! from \lstinline!singlekeys!.
+that the actions of these keys are invoked.
+In fact, \semantex carefully separates keys taking
+a value from keys taking no values.
\section{The \texorpdfstring{\texttt{Cohomology}}{Cohomology} class type}
@@ -1308,12 +1568,14 @@ Let us try to use it:
\NewObject\MyHomology\ho{H}
\end{lstlisting}
-The cohomology command~\lstinline!\co! in general works very much
+The cohomology command~\lstinline!\co! we just created works very much
like a command of \lstinline!Variable! type. However, the input syntax is a bit different:
\begin{lstlisting}
-\co[⟨options⟩]{⟨degree⟩}{⟨argument⟩}
+\co[@\<options\>@]{@\<degree\>@}{@\<argument\>@}
\end{lstlisting}
-All three arguments are optional. Let us see it in practice:
+All three arguments are optional. The~\<degree\> is printed
+in the \lstinline!d!-index.
+Let us see it in practice:
\begin{LTXexample}
$\co{0}$, $\co{*}$,
$\co{\vi}{\vX}$,
@@ -1335,15 +1597,15 @@ You might also want to implement feature like reduced cohomology, \v{C}ech cohom
and hypercohomology. This is quite easy with the \lstinline!command! key:
\begin{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{reduced}{command=\widetilde},
{cech}{command=\check},
- {hyper{command=\mathbb},
+ {hyper}{command=\mathbb},
},
}
\end{lstlisting}
\SetupClass\MyVar{
- singlekeys={
+ definekeys={
{reduced}{command=\widetilde},
{cech}{command=\check},
{hyper}{command=\mathbb},
@@ -1375,7 +1637,7 @@ on the level of the function itself (\( \vf \)~in this case).
This can be done the following way:
\begin{lstlisting}
\SetupClass\MyVar{
- valuekeys={
+ definekeys[1]={
{Lder} {
innerreturn,leftreturn,
symbolputleft=\mathbb{L}^{#1},
@@ -1385,7 +1647,7 @@ This can be done the following way:
symbolputleft=\mathbb{R}^{#1},
},
},
- singlekeys={
+ definekeys={
{Lder} {
innerreturn,leftreturn,
symbolputleft=\mathbb{L},
@@ -1398,7 +1660,7 @@ This can be done the following way:
}
\end{lstlisting}
\SetupClass\MyVar{
- valuekeys={
+ definekeys[1]={
{Lder} {
innerreturn,leftreturn,
symbolputleft=\mathbb{L}^{#1},
@@ -1408,7 +1670,7 @@ This can be done the following way:
symbolputleft=\mathbb{R}^{#1},
},
},
- singlekeys={
+ definekeys={
{Lder} {
innerreturn,leftreturn,
symbolputleft=\mathbb{L},
@@ -1438,19 +1700,17 @@ except it allows you to inherit the settings from an \emph{object} rather than a
$\RHom{\vX,\vY}$
\end{LTXexample}
-\chapter{Keyval syntax in arguments (Example: Cohomology with coefficients)}
+\chapter{Keyval syntax in arguments (Example: Cohomology with coefficients)}\label{ch:arg_keyval}
\SetupClass\MyVar{
- argvaluekeys={
+ defineargkeys[1]={
{coef}{ othersep={;}{#1} },
},
}
\SetupObject\co{
- valuekeys={
- {arg}{argwithkeyval={#1}},
- },
-}%
+ argkeyval=true,
+}
Imagine we want to do cohomology with coefficients in some ring~\( \vR \).
It is common to write this as~\( \co{*}{\vX,coef=\vR} \)
@@ -1459,17 +1719,19 @@ with a semicolon instead of a comma. This can be implemented, too, with the synt
$\co{*}{\vX,coef=\vR}$
\end{LTXexample}
This shows that arguments of functions also support keyval syntax.
-In order to customize this, there are two extra keys:
-\begin{center}
-\lstinline!argsinglekeys!
-\qquad\qquad\text{and}\qquad\qquad
-\lstinline!argvaluekeys!
-\end{center}
-These work exactly like \lstinline!singlekeys! and~\lstinline!valuekeys!.
+To define argument keys,
+we use the key~\lstinline!defineargkeys!,
+or~\mylst!defineargkeys[$n$]! if you want it to be
+able to take $n$~values for~$n=0,1,2,\ldots,9$. The syntax for these is
+just like the syntax for the keys~\lstinline!definekeys!
+and~\mbox{\mylst!definekeys[$n$]!}.
+However, for reasons we shall see in a moment, argument
+keys (at least those taking values) are actually turned off
+by default, so we shall have to turn them on first:
\begin{lstlisting}
\SetupClass\MyVar{
argkeyval=true, % this turns keyval syntax in arguments on
- argvaluekeys={
+ defineargkeys[1]={
{coef}{ othersep={;}{#1} },
},
}
@@ -1477,10 +1739,12 @@ These work exactly like \lstinline!singlekeys! and~\lstinline!valuekeys!.
The key \lstinline!othersep! is a key that controls the separator
between the current argument and the previous argument (it will only be printed if there was a previous argument). By default, this separator is a comma. So in the syntax~\lstinline!\co{*}{\vX,coef=\vR}!,
there are two arguments, \lstinline!\vX! and~\lstinline!\vR!, and the separator is a semicolon.
+We shall later (see~\cref{ch:parse_coho_coef})
+see another, possibly more natural way to write cohomology with coefficients, and which avoids turning on keyval syntax in the argument.
-As you see above, we had to turn keyval syntax on in order for it to work.
-By default, only singlekeys are turned on in the argument, not valuekeys.
-The reason is that valuekeys in arguments are only useful in very rare cases, like cohomology with coefficients. If such keys were turned on in general, it would mess up
+As mentioned, we had to turn keyval syntax on in order for it to work.
+By default, only keys taking no values are turned on in the argument.
+The reason is that argument keys taking values are only useful in very rare cases, such as cohomology with coefficients. If such keys were turned on in general, it would mess up
every occurrence of an equality sign in arguments, and the following
would not work:
\begin{LTXexample}
@@ -1490,97 +1754,142 @@ $\Hom[\sheafreg[\vU]]{
}$
\end{LTXexample}
-The key~\lstinline!argkeyval! can take four arguments: \lstinline!true! (as above),
-\lstinline!false! (no singlekeys or valuekeys allowed), \lstinline!singlekeys! (the default behaviour where only singlekeys are turned on), and \lstinline!onesinglekey! (only allows one singlekey).
+The key~\lstinline!argkeyval! can take four arguments: \lstinline!true! (which we used above, keyval syntax is completely on),
+\lstinline!false! (no keys allowed), \lstinline!singlekeys! (the default behaviour where only keys taking no values are allowed), and \lstinline!onesinglekey! (only allows one key, taking no value).
It should be noted that there are several predefined
-singlekeys which are defined on the level
-of the class \lstinline!\SemantexBaseObject!. The full list is:\fxfatal{Finish this}
+argument keys on the level
+of the class \lstinline!\SemantexBaseObject!.
+The full list can be found in \cref{sec:predefined_arg_keys}.
-\begin{itemize}
- \item slot, \ldots
-\end{itemize}
+\chapter{Left indices}
-We should also talk about the \lstinline!arg! key.
+Left indices are a recurring problem in all \TeX-based systems
+since \TeX\ only has metrics for the positioning of right indices, none for left indices. And it seems that even the later \TeX\ engines are making no attempts at correcting this. So most packages for left indices
+use variations of the following approach:
+\begin{LTXexample}
+$ {}^{*} f $
+\end{LTXexample}
+Notice the large space between the star and the~\( f \).
+To tackle this problem, the author has written
+the \pack{leftindex} package which at least attempts to improve
+this situation:
+\begin{LTXexample}
+$ \leftindex^{*} {f} $
+\end{LTXexample}
+Roughly, what it does is to use a \enquote{height phantom}
+and a \enquote{slanting phantom} to position the left superscript.
+The vertical positions of the left indices will be calculated using
+the height phantom, and the indentation of the left superscript will be calculated
+using the slanting phantom. More precisely, it will copy the metrics for the positioning of right indices from the slanting phantom and use that to position the left superscript. By default, both phantoms are set to be equal to the symbol, which goes fine sometimes, and at other times, another slanting phantom has to be specified. Below, the~\lstinline!I!~is the specified, custom slanting phantom:
+\begin{LTXexample}
+$ \leftindex^{*} {\Gamma} $,
+$ \leftindex[I]^* {\Gamma} $,
+$ \leftindex^* {A} $,
+$ \leftindex[P]^* {A} $
+\end{LTXexample}
+We refer to the manual of the package \pack{leftindex} for details,
+see~\url{https://ctan.org/pkg/leftindex}.
-\chapter{Multi-value keys}
+Our solution for left indices in \semantex is based directly on the one
+from \pack{leftindex}. However, it works much better if you use \semantex
+than if you just used \pack{leftindex} alone, due to the ability to centrally control all your notation. This allows you to choose height and slanting phantoms once and for all in the preamble and never have to worry about it in your document body.
-\SetupClass\MyVar{
- 2valuekeys={
- {projquotient}{ symbolputright={ /\!\!/ _ { #1 } #2 } },
- }
-}
+Just like we have keys like \lstinline!upper!, \lstinline!lower!, \lstinline!supper!, \lstinline!slower!, \lstinline!cupper!, \lstinline!clower!,
+etc., we have a similar collection of keys for the left
+indices:
+\lstinline!upperleft!, \lstinline!lowerleft!, \lstinline!supperleft!, \lstinline!slowerleft!, \lstinline!cupperleft!, \lstinline!clowerleft!:
+\begin{LTXexample}
+$ \vf[upperleft=*] $,
+$ \vGamma[upperleft=*] $,
+$ \vA[upperleft=*] $
+\end{LTXexample}
+When you create a new object in \semantex, the height and slanting phantoms
+will automatically be set to be equal to the symbol. However, as we see
+above, we sometimes need to change them.
+This can be done using the keys \lstinline!heightphantom!
+and~\lstinline!slantingphantom!:
+\begin{LTXexample}
+\SetupObject\vGamma{
+ slantingphantom=I}
+\SetupObject\vA{slantingphantom=P}
+$ \vf[upperleft=*] $,
+$ \vGamma[upperleft=*] $,
+$ \vA[upperleft=*] $
+\end{LTXexample}
-Sometimes, a key with one value is simply not enough. For instance, if you
-work in~GIT, you will eventually have to take the proj
-quotient~\( \vX[projquotient={\vchi}{\vG}] \) of~\( \vX \) with respect to the action of the group~\( \vG \) and the character~\( \vchi \). In other words, the proj quotient depends on two parameters, \( \vchi \) and~\( \vG \). For this purpose, we have the key~\lstinline!2valuekeys!. It works exactly like \lstinline!valuekeys!, except you get to use two arguments instead of one:
-\begin{lstlisting}
-\SetupClass\MyVar{
- 2valuekeys={
- {projquotient}{ symbolputright={ /\!\!/ _ { #1 } #2 } },
- }
+Sometimes, changing the slanting phantom is not quite enough.
+In the previous example, the star is still not quite close enough
+to the~\( \vA \), and there is no slanting phantom that is quite slanted enough to correct this. We solve this using
+the key~\lstinline!postupperleft!. What you add using this key
+will be printed after the upper left index, provided the upper left index
+is non-empty and hence will be printed in the first place.
+There is also a \lstinline!preupperleft!, and there are similarly \lstinline!prelowerleft!, \lstinline!postlowerleft!, \lstinline!preupper!, \lstinline!postupper!, \lstinline!prelower!, and~\lstinline!postlower!.
+Let us see it in action:
+\begin{LTXexample}
+\SetupObject\vA{
+ slantingphantom=P,
+ postupperleft=\!,
}
-\end{lstlisting}
-
+$ \vA[upperleft=*] $
+\end{LTXexample}
+Note that \semantex at least does its best to try to guess
+new height and slanting phantoms when you use operations on objects:
\begin{LTXexample}
-$\vX[projquotient={\vchi}{\vG}] $
+$ \vA[spar=\Bigg,upperleft=*] $,
+$ \vP[command=\overline,return,
+ upperleft=*] $
\end{LTXexample}
-There are also commands \lstinline!3valuekeys!, \lstinline!4valuekeys!, \ldots, \lstinline!9valuekeys!. The syntax for these is completely analoguous.
-There are also commands \lstinline!arg2valuekeys!, \lstinline!arg3valuekeys!, \ldots, \lstinline!arg9valuekeys! for keys in arguments with multiple values.
+\chapter{The \texorpdfstring{\texttt{Symbol}}{Symbol} class type (Example: Derived tensor products and fibre products)}
-\chapter{The \texttt{Simple} class type (Example: Derived tensor products and fibre products)}
-
-\NewSimpleClass\MyBinaryOperator[
- singlekeys={
+\NewSymbolClass\MyBinaryOperator[
+ definekeys={
{Lder}{upper=L},
{Rder}{upper=R},
},
- mathbin, % this makes sure that the output is wrapped in \mathbin
]
\NewObject\MyBinaryOperator\tensor{\otimes}[
- singlekeys={
+ definekeys={
{der}{Lder},
},
]
\NewObject\MyBinaryOperator\fibre{\times}[
% Americans are free to call it \fiber instead
- singlekeys={
+ definekeys={
{der}{Rder},
},
]
-The \semantex system has facilities for printing tensor products~\( \tensor \) as well as derived tensor products~\( \tensor[der] \).
-For this, we need the \lstinline!Simple! class type.
+\semantex has facilities for printing tensor products~\( \tensor \) as well as derived tensor products~\( \tensor[der] \).
+For this, we need the \lstinline!Symbol! class type.
This has exactly the same syntax as the \lstinline!Variable!
class type, except that it cannot take an argument.
In other words, its syntax is
\begin{lstlisting}
-\⟨object⟩[⟨options⟩]
+@\usercommand\<object\>@[@\<options\>@]
\end{lstlisting}
-(You should normally only use it for special constructions like binary operators and not for e.g.\ variables -- the ability to add arguments to variables comes in handy much more often than one might imagine.)
+You should normally only use it for special constructions like binary operators and not for e.g.\ variables -- the ability to add arguments to variables comes in handy much more often than one might think.
Let us try to use it to define tensor products and fibre products:
\begin{lstlisting}
-\NewSimpleClass\MyBinaryOperator[
- singlekeys={
+\NewSymbolClass\MyBinaryOperator[
+ definekeys={
{Lder}{upper=L},
{Rder}{upper=R},
},
- mathbin,
- % this makes sure that the output is wrapped in \mathbin
]
\NewObject\MyBinaryOperator\tensor{\otimes}[
- singlekeys={
+ definekeys={
{der}{Lder},
},
]
\NewObject\MyBinaryOperator\fibre{\times}[
% Americans are free to call it \fiber instead
- singlekeys={
+ definekeys={
{der}{Rder},
},
]
@@ -1596,83 +1905,6 @@ $\vk \tensor[\vA,der] \vk$,
$\vX \fibre[\vY,der] \vX$
\end{LTXexample}
-\chapter{Class types}
-
-The \semantex system uses several different \emph{class types}.
-We have been almost exclusively using the \lstinline!Variable! class type (which is by far the most important one), but in the last chpaters, we were introduced to the \lstinline!Cohomology! and the \lstinline!Simple! class types.
-
-In fact, all class types are identical internally; the low-level machinery of \semantex does not \enquote{know} what type a class has.
-The only difference between the class types is the \emph{input syntax}.
-In other words, it determines which arguments an object of that class
-can take. The syntax for creating new objects
-also varies.
-
-The current implementation has the following
-class types:
-
-\begin{itemize}
- \item \lstinline!Variable!:
- A new class is declared with the
- syntax
- \begin{lstlisting}
- \NewVariableClass{\⟨Class⟩}[⟨options⟩]
- \end{lstlisting}
- A new object is declared by
- \begin{lstlisting}
- \NewObject\⟨Class⟩\⟨object⟩{⟨symbol⟩}[⟨options⟩]
- \end{lstlisting}
- The syntax for this object is
- \begin{lstlisting}
- \⟨object⟩[⟨options⟩]{⟨argument⟩}
- \end{lstlisting}
- \item \lstinline!Cohomology!:
- A new class is declared with the
- syntax
- \begin{lstlisting}
- \NewCohomologyClass\⟨Class⟩[⟨options⟩]
- \end{lstlisting}
- A new object is declared by
- \begin{lstlisting}
- \NewObject\⟨Class⟩\⟨object⟩{⟨symbol⟩}[⟨options⟩]
- \end{lstlisting}
- The syntax for this object is
- \begin{lstlisting}
- \⟨object⟩[⟨options⟩]{⟨degree⟩}{⟨argument⟩}
- \end{lstlisting}
- \item \lstinline!Simple!:
- A new class is declared with the
- syntax
- \begin{lstlisting}
- \NewSimpleClass\⟨Class⟩[⟨options⟩]
- \end{lstlisting}
- A new object is declared by
- \begin{lstlisting}
- \NewObject\⟨Class⟩\⟨object⟩{⟨symbol⟩}[⟨options⟩]
- \end{lstlisting}
- The syntax for this object is
- \begin{lstlisting}
- \⟨object⟩[⟨options⟩]{⟨argument⟩}
- \end{lstlisting}
- \item \lstinline!Delimiter!:
- A new class is declared with the syntax
- \begin{lstlisting}
- \NewDelimiterClass\⟨Class⟩[⟨options⟩]
- \end{lstlisting}
- A new object is declared by
- \begin{lstlisting}
- \NewObject\⟨Class⟩\⟨object⟩{⟨left bracket⟩}{⟨right bracket⟩}[⟨options⟩]
- \end{lstlisting}
- The syntax for this object is
- \begin{lstlisting}
- \⟨object⟩[⟨options⟩]{⟨argument⟩}
- \end{lstlisting}
-\end{itemize}
-
-Let me add that \semantex uses a very clear separation between the input syntax and the underlying machinery. Because of this, if the user needs a different kind of class type, it is not very hard to create one. You must simply open the source code of \semantex, find the class you want to modify, and then copy the definition of the command~\lstinline!\New⟨Class type⟩Class! and modify it in whatever way you want.
-
-There is another class type, called the \lstinline!plain! class type, which is the class
-type of the class~\lstinline!\SemantexBaseObject!. This class is pretty useless as all it does is print its symbol, without allowing any keyval syntax, so don't use it.
-
\chapter{The \texorpdfstring{\texttt{Delimiter}}{Delimiter} class type}
\NewDelimiterClass\MyDelim[parent=\MyVar]
@@ -1686,7 +1918,7 @@ that are defined using brackets only. Let us define a class of type \lstinline!D
\end{lstlisting}
Now we can create instances of the class~\lstinline!\MyDelim! with the following syntax:
\begin{lstlisting}
-\NewObject\MyDelim\⟨object⟩{⟨left bracket⟩}{⟨right bracket⟩}[⟨options⟩
+\NewObject\MyDelim@\usercommand\<object\>@{@\<left bracket\>@}{@\<right bracket\>@}[@\<options\>@]
\end{lstlisting}
Now we can do the following:
\begin{lstlisting}
@@ -1712,11 +1944,9 @@ The following is inspired from the \pack{mathtools} package where a similar cons
\NewObject\MyDelim\Set{\lbrace}{\rbrace}[
prearg={\,},postarg={\,},
- % adds \, inside {...}, as recommended by D. Knuth
- valuekeys={
- {arg}{argwithoutkeyval={#1}},
+ % adds \, inside {...}, as recommended by D. Knuth
+ argkeyval=false,
% this turns off all keyval syntax in the argument
- }
]
\end{lstlisting}
\newcommand\where{
@@ -1729,25 +1959,28 @@ The following is inspired from the \pack{mathtools} package where a similar cons
\NewObject\MyDelim\Set{\lbrace}{\rbrace}[
prearg={\,},postarg={\,},
- % adds \, inside {...}, as recommended by D. Knuth
- valuekeys={
- {arg}{argwithoutkeyval={#1}},
+ % adds \, inside {...}, as recommended by D. Knuth
+ argkeyval=false,
% this turns off all keyval syntax in the argument
- }
]
+As we briefly mentioned previously,
+\lstinline!\SemantexDelimiterSize!~is a command
+that returns the size of the delimiters in the
+argument.
Now you can use
\begin{LTXexample}
-$\Set{ \vx \in \vY \where
-\vx \ge 0 }$
+$\Set{ \vx\in\vY \where \vx\ge0 }$,
+$\Set[par=\big]{ \vx\in\vY \where \vx\ge0 }$
\end{LTXexample}
-Don't forget that anything created with \semantex
-outputs as a variable-type object. So you can do stuff like
+Don't forget that, since the class~\lstinline!\MyDelim! inherits from~\lstinline!\MyVar!,
+the output of any of these commands has class~\lstinline!\MyVar!.
+So you can do stuff like
\begin{LTXexample}
$\Set{
\vx \in \vY[\vi]
\where
\vx \ge 0
-}[conj,\vi\in\vI]$
+}[command=\overline,\vi\in\vI]$
\end{LTXexample}
@@ -1772,14 +2005,15 @@ $\tup{\va,\vb,...,\vz}$,
$\pcoor{\va,\vb,...,\vz}$
\end{LTXexample}
-One can also use tuples for other, less obvious purposes, like calculus differentials:
+One can also use delimiters for other, less obvious purposes, like calculus differentials:
\begin{lstlisting}
\NewDelimiterClass\CalculusDifferential[
parent=\MyVar,
- argvaluekeys={
+ defineargkeys[1]={
{default}{s={d\!#1}},
% default is the key that is automatically applied by the
- % system to anything you write in the argument. The s key
+ % system to anything you write in the argument that is
+ % not recognized as an argument key. The s key
% is a key that prints the value of the key with the
% standard argument separator in front.
},
@@ -1790,14 +2024,25 @@ One can also use tuples for other, less obvious purposes, like calculus differen
% -- neverpar does not even print parentheses in this case
]
-\NewObject\CalculusDifferential\intD{(}{)}[setargsep={\,},iffirstarg=false]
+\NewObject\CalculusDifferential\intD{(}{)}[
+ setargsep={\,},
+ nextargwithsep=true,
+ % because of this, even the first argument will
+ % receive a separator, which in this case
+ % is a small space
+]
\NewObject\CalculusDifferential\wedgeD{(}{)}[setargsep=\wedge]
\end{lstlisting}
\NewDelimiterClass\CalculusDifferential[
parent=\MyVar,
- argvaluekeys={
+ defineargkeys[1]={
{default}{s={d\!#1}},
+ % default is the key that is automatically applied by the
+ % system to anything you write in the argument that is
+ % not recognized as an argument key. The s key
+ % is a key that prints the value of the key with the
+ % standard argument separator in front.
},
setargdots=\cdots,
neverpar,
@@ -1806,7 +2051,7 @@ One can also use tuples for other, less obvious purposes, like calculus differen
% -- neverpar does not even print parentheses in this case
]
-\NewObject\CalculusDifferential\intD{(}{)}[setargsep={\,},ifnextargwithsep=false]
+\NewObject\CalculusDifferential\intD{(}{)}[setargsep={\,},nextargwithsep=true]
\NewObject\CalculusDifferential\wedgeD{(}{)}[setargsep=\wedge]
@@ -1818,35 +2063,218 @@ $\int \vf \wedgeD{\vx[1],
\vx[2],...,\vx[n]}$
\end{LTXexample}
-\chapter{The \texttt{parse} routine}
+\chapter{Using \texorpdfstring{Seman\!\TeX}{SemanTeX} in other commands using \texorpdfstring{\texttt{\textbackslash UseClassInCommand}}{\UseClassInCommand}}\label{sec:UseClassInCommand}
-As you can see above, \semantex has a \enquote{waterfall-like} behaviour. It runs keys in the order it receives them. This works fine most of the time, but for some more complicated constructions, it is useful to be able to provide a data set in any order and have them printed in a fixed order. For this purpose, we have the \lstinline!parse! routine.
+\SemantexRecordObject{\Frac}
+\newcommand\Frac[2]{
+ \SemantexRecordSource{\Frac{#1}{#2}}
+ \UseClassInCommand\MyVar{ \frac{#1}{#2} }
+}
+Sometimes, it is useful to create other commands based on \semantex
+classes. For instance, if you grow tired of
+writing~\lstinline!\MyVar{ \frac{...}{...} }! whenever you
+want to apply keys to a fraction, it could make sense to create
+a command~\lstinline!\Frac! which automatically wraps
+the fraction in~\lstinline!\MyVar!. The first guess how to
+do that would be something like
+\begin{lstlisting}
+\newcommand\Frac[2]{ \MyVar{ \frac{#1}{#2} } }
+\end{lstlisting}
+\begin{LTXexample}
+\[
+ \Frac{1}{2}[spar=\Big,power=2]
+\]
+\end{LTXexample}
+Indeed, this will work fine for most people.
+In fact, the only case where this might cause issues
+is if you want to use the \pack{stripsemantex} algorithm to strip
+your document of \semantex markup. But in order to prepare yourself for this possibility, I recommend getting used from the start to doing it
+in a slightly more cumbersome way:
+\begin{lstlisting}
+\SemantexRecordObject{\Frac}
+\newcommand\Frac[2]{
+ \SemantexRecordSource{\Frac{#1}{#2}}
+ \UseClassInCommand\MyVar{ \frac{#1}{#2} }
+}
+\end{lstlisting}
+\begin{LTXexample}
+\[
+ \Frac{1}{2}[spar=\Big,power=2]
+\]
+\end{LTXexample}
+First things first: We used the following command in front
+of~\lstinline!\MyVar!:
+\begin{lstlisting}
+\UseClassInCommand@\usercommand\<Class\>@[@\<options\>@]{@\<symbol\>@}@\<usual syntax of the class\>@
+\end{lstlisting}
+So the first advantage to writing~\lstinline!\UseClassInCommand\MyVar!
+instead of just~\lstinline!\MyVar!
+is that you can pass an additional set of options
+to the class first. However, there is a more important
+difference, namely that this solution makes the command
+compatible with the \pack{stripsemantex} algorithm.
+
+The reason the first solution was not compatible
+with \pack{stripsemantex} is that, in this case, the algorithm
+will desperately look through your document for
+the code~\lstinline!\MyVar{ \frac{1}{2} }[spar=\Big,power=2]!
+in order to strip it from your document.
+But it will find it nowhere, as this code is hidden away
+in the \lstinline!\Frac!~command.
+Therefore, we do three things:
+\begin{itemize}
+ \item We register the command~\lstinline!\Frac!
+ as a \semantex command using the
+ line
+ \begin{lstlisting}
+\SemantexRecordObject{\Frac}
+ \end{lstlisting}
+ After this, \semantex \enquote{knows}
+ that \lstinline!\Frac!~is part of the
+ family of \semantex markup.
+ \item We use the command~\lstinline!\SemantexRecordSource!
+ to \enquote{record} the source of the command internally.
+ This way, \pack{stripsemantex} will know what to look for
+ when it moves through the document, trying to strip
+ it of \semantex markup.
+ It is therefore important that you record
+ the source exactly like it will be written in
+ the source.
+ (You need not worry about missing braces, though;
+ even if you write~\lstinline!\Frac12! in your document,
+ \pack{stripsemantex} will still recognize the code
+ and strip it as expected.)
+ \item We write~\lstinline!\UseClassInCommand\MyVar!
+ instead of just~\lstinline!\MyVar!
+ in order to correctly record the output code internally. Roughly speaking, when you use the command~\lstinline!\UseClassInCommand!,
+ \semantex \enquote{knows} that the class~\lstinline!\MyVar!
+ is now used as part of some greater construction.
+\end{itemize}
+
+\section{Example: Category theory}
+
+\newcommand\categoryformat[1]{\textsf{#1}}
+ % This means that we write categories with sans-serif fonts;
+ % -- but you can change this to your own liking
+ % We use \textsf rather than \mathsf in order
+ % to allow syntax like $R$-mod
+
+\NewVariableClass{\Category}[parent=\MyVar,command=\categoryformat]
+
+\NewObject\Category\catset{Set}
+\NewObject\Category\cattop{Top}
+\NewObject\Category\catvect{Vect}
+
+\SemantexRecordObject{\catxmod}
+\newcommand\catxmod[1]{
+ \SemantexRecordSource{\catxmod{#1}}
+ \UseClassInCommand\Category{$#1$-mod}
+}
+
+\SemantexRecordObject{\catmodx}
+\newcommand\catmodx[1]{
+ \SemantexRecordSource{\catmodx{#1}}
+ \UseClassInCommand\Category{mod-$#1$}
+}
+
+\SemantexRecordObject{\catxmody}
+\newcommand\catxmody[2]{
+ \SemantexRecordSource{\catxmody{#1}{#2}}
+ \UseClassInCommand\Category{$#1$-mod-$#2$}
+}
+
+\SemantexRecordObject{\catxmodx}
+\newcommand\catxmodx[1]{
+ \SemantexRecordSource{\catxmodx{#1}}
+ \UseClassInCommand\Category{$#1$-mod-$#1$}
+}
+
+The above method can be used to create commands
+for typing categories. First and foremost,
+it is easy to create a class for categories
+and write simple categories like~\( \catset \), \( \cattop \)~and \( \catvect \):
+\begin{lstlisting}
+\newcommand\categoryformat[1]{\textsf{#1}}
+ % This means that we write categories with sans-serif fonts;
+ % -- but you can change this to your own liking.
+ % We use \textsf rather than \mathsf in order
+ % to allow syntax like $R$-mod
+
+\NewVariableClass{\Category}[parent=\MyVar,command=\categoryformat]
+
+\NewObject\Category\catset{Set}
+\NewObject\Category\cattop{Top}
+\NewObject\Category\catvect{Vect}
+\end{lstlisting}
+\begin{LTXexample}
+$ \catset $,
+$ \cattop $,
+$ \catvect{\vk} $.
+\end{LTXexample}
+However, we run into issues with categories like~\( \catxmod{\vR} \)
+where we shall constantly have to change the ring~\( \vR \).
+For this, we use the constructions we learned at the introduction
+to this chapter:
+\begin{lstlisting}
+\SemantexRecordObject{\catxmod}
+\newcommand\catxmod[1]{
+ \SemantexRecordSource{\catxmod{#1}}
+ \UseClassInCommand\Category{$#1$-mod}
+}
+\end{lstlisting}
+\begin{LTXexample}
+$ \catxmod{\vR} $,
+$ \catxmod{\vS} $,
+$ \catxmod{\vA}[spar,op] $
+\end{LTXexample}
+(here, we used the key~\lstinline!op!
+which we defined in \cref{sec:algebra}).
+You can, of course, extend it to all sorts
+of other situations, like
+\( \catmodx{\vR} \) or~\( \catxmody{\vR}{\vS} \):
+\begin{lstlisting}
+\SemantexRecordObject{\catmodx}
+\newcommand\catmodx[1]{
+ \SemantexRecordSource{\catmodx{#1}}
+ \UseClassInCommand\Category{mod-$#1$}
+}
+
+\SemantexRecordObject{\catxmody}
+\newcommand\catxmody[2]{
+ \SemantexRecordSource{\catxmody{#1}{#2}}
+ \UseClassInCommand\Category{$#1$-mod-$#2$}
+}
+
+\SemantexRecordObject{\catxmodx}
+\newcommand\catxmodx[1]{
+ \SemantexRecordSource{\catxmodx{#1}}
+ \UseClassInCommand\Category{$#1$-mod-$#1$}
+}
+\end{lstlisting}
+
+\chapter{The \texorpdfstring{\texttt{parse}}{parse} routine}
-Suppose we want to be able to write the set of \( \vn \times \vm \)-matrices with entries in~\( \vk \) as~\( \MyVar{\operatorname{Mat}}[\vn\times\vm]{\vk} \). We can in principle do the following:
-\begingroup\begin{LTXexample}
-\NewObject\MyVar\Mat{
- \operatorname{Mat}}
-$ \Mat[\vn\times\vm]{\vk} $.
-\end{LTXexample}\endgroup%
\NewObject\MyVar\Mat{\operatorname{Mat}}[
% We provide data sets "rows" and "columns" to
% be set up by the user later
dataprovide={rows},
dataprovide={columns},
- valuekeys={
+ dataprovide={field},
+ definekeys[1]={
{rows}{ dataset={rows}{#1} }, % set the rows data set
{columns}{ dataset={columns}{#1} }, % set the columns data set
+ {field}{ dataset={field}{#1} }, % set the underlying field
+ {arg}{ field={#1} },
+ % this way, setting the argument becomes equivalent
+ % to specifying the underlying field
},
parseoptions={ % Here we add code to the parse routine
% We check whether columns = rows. If so, we only write
% the number once
- ifeqTF={\SemantexDataGetExpNot{columns}}{\SemantexDataGetExpNot{rows}}
+ strifeqTF={\SemantexDataGetExpNot{columns}}{\SemantexDataGetExpNot{rows}}
{
- % We use a very weird key called "setkeysx" -- this
- % fully executes the content of the keys before
- % setting them
setkeysx={
lower={\SemantexDataGetExpNot{columns}},
},
@@ -1860,35 +2288,190 @@ $ \Mat[\vn\times\vm]{\vk} $.
},
},
},
+ ifblankF={\SemantexDataGetExpNot{field}}
+ {
+ setargkeysx={
+ s={\SemantexDataGetExpNot{field}},
+ },
+ },
+ },
+]
+
+
+\NewObject\MyVar\GL{\operatorname{GL}}[
+ % We provide a few data sets:
+ dataprovide=order, % The "order" will be the number n in GL_n(k)
+ dataprovide=field, % The "field" is of course the k in GL_n(k)
+ definekeys[1]={
+ {order}{ dataset={order}{#1} }, % Sets the order
+ {field}{ dataset={field}{#1} }, % Sets the field
+ {arg}{ field={#1} },
+ % This way, setting the argument becomes equivalent
+ % to setting the field
},
-]%
-\noindent However, this is not quite as systematic and semantic as we might have wanted. Indeed, what if later you would like to change the notation to~\( \MyVar{\operatorname{Mat}}[\vn,\vm]{\vk} \)? (In this case, you could use multi-value keys, though.)
-In this chapter, we show how to eanble a syntax like the following instead:
+ parseoptions={
+ setkeysx={
+ % This means set the keys, but fully expand their values first
+ lower={\SemantexDataGetExpNot{order}},
+ },
+ ifblankF={\SemantexDataGetExpNot{field}}
+ {
+ setargkeysx={
+ % Set the argument keys, but fully expand their values first
+ s={\SemantexDataGetExpNot{field}},
+ },
+ },
+ },
+]
+
+\SetupObject\co{
+ dataprovide=coefficient,
+ dataprovide=space,
+ definekeys[1]={
+ {coef}{ dataset={coefficient}{#1} },
+ {space}{ dataset={space}{#1} },
+ {arg}{ space={#1} },
+ },
+ parseoptions={
+ ifblankF={\SemantexDataGetExpNot{space}}
+ {
+ setargkeysx={
+ s=\SemantexDataGetExpNot{space},
+ },
+ },
+ ifblankF={\SemantexDataGetExpNot{coefficient}}
+ {
+ setargkeysx={
+ othersep={;}{ \SemantexDataGetExpNot{coefficient} },
+ },
+ },
+ },
+}
+
+As you can see above, \semantex has a \enquote{waterfall-like} behaviour. It runs keys in the order it receives them. This works fine most of the time, but for some more complicated constructions, it is useful to be able to provide a collection of data in any order,
+and have the system take care of printing them in the right places,
+according to how you program the object in the preamble.
+For this purpose, we have the \lstinline!parse!~routine.
+Using the \lstinline!parse! routine allows for a comfortable,
+HTML-like syntax, e.g.:
\begin{LTXexample}
-$ \Mat[rows=\vn,columns=\vm]{\vk} $, $ \Mat[rows=\vn,columns=\vn]{\vk} $
+$ \GL[order=\vn,field=\vk] $,
+$ \Mat[rows=\vm,columns=\vn,
+ field=\vk] $,
+$ \co[d=0,coef=\vR,space=\vX] $
\end{LTXexample}
+The \lstinline!parse! routine is a collection of code which is
+executed right before
+an object (or class) is being rendered (but before it outputs).
+By default, the parse routine contains no code.
+However, you can add code to it using the
+key~\mylst!parseoptions={$\<keys\>$}!.
+
+\section{Example: Matrix sets and groups}
+
+Suppose we want to be able to write the group of invertible \( \vn \times \vn \)-matrices with entries in~\( \vk \)
+as~\(
+ \GL[order=\vn,field=\vk]
+\).
+We can in principle do the following:
+\begingroup
+\SetupObject\GL{
+ dataclear=parseoptions,
+ definekeys[1]={
+ {arg}{ setargkeys={s=#1} }
+ },
+}
+\begin{lstlisting}
+\NewObject\MyVar\GL{\operatorname{GL}}
+\end{lstlisting}
+\begin{LTXexample}
+$ \GL[\vn]{\vk} $.
+\end{LTXexample}%
+However, this is not quite as systematic and semantic as we might have wanted. Indeed, what if later we would like to change the notation
+to~\(
+ \GL{\vn,\vk}
+\)?
+We could in principle use a key with 2~values for this.
+However, in this section,
+we show how to use the \lstinline!parse!~routine
+to enable the syntax from the introduction to this chapter.
+
+\endgroup
+
+As mentioned there, we need to add code via the \lstinline!parse!~routine.
+However, to make proper use of it, we need some programming keys
+and programming commands.
+You can find an overview of these in~\cref{sec:programming_keys,sec:programming_commands}.
+
+To set up the notation from above, we do the following:
+\begin{lstlisting}
+\NewObject\MyVar\GL{\operatorname{GL}}[
+ % We provide a few data sets:
+ dataprovide=order, % The "order" will be the number n in GL_n(k)
+ dataprovide=field, % The "field" is of course the k in GL_n(k)
+ definekeys[1]={
+ {order}{ dataset={order}{#1} }, % Sets the order
+ {field}{ dataset={field}{#1} }, % Sets the field
+ {arg}{ field={#1} },
+ % This way, setting the argument becomes equivalent
+ % to setting the field
+ },
+ parseoptions={
+ setkeysx={
+ % This means set the keys, but fully expand their values first
+ lower={\SemantexDataGetExpNot{order}},
+ },
+ ifblankF={\SemantexDataGetExpNot{field}}
+ {
+ setargkeysx={
+ % Set the argument keys, but fully expand their values first
+ s={\SemantexDataGetExpNot{field}},
+ },
+ },
+ },
+]
+\end{lstlisting}
+
+Notice that we changed the \lstinline!arg!~key.
+This means that specifying the argument becomes equivalent to setting the field.
+This is what makes the first two pieces of syntax below equivalent:
+
+\begin{LTXexample}
+$ \GL[order=\vn,field=\vk] $,
+$ \GL[order=\vn]{\vk} $,
+$ \GL[order=\vn] $.
+\end{LTXexample}
+
+Let us look at a more complicated example:
+The set~\( \Mat[rows=\vn,columns=\vm,field=\vk] \)
+of \( \vn \times \vm \)-matrices with entries in~\( \vk \).
+What makes this example more complicated is not only that we have
+an additional piece of data, but that we require
+that if the number of rows and columns are equal,
+we want it to print~\( \Mat[rows=\vn,columns=\vn,field=\vk] \)
+rather than~\( \Mat[rows=\vn,columns={}\vn,field=\vk] \).
+We accomplish this by the following:
-The important ingredient here is the \lstinline!parse! routine. This routine is executed right before the function is being rendered, and you can add code to it via the
-key~\lstinline!parseoptions!. However, we need a bit more programming keys to make it work. Let us see it in action and explain the syntax below:
\begin{lstlisting}
\NewObject\MyVar\Mat{\operatorname{Mat}}[
% We provide data sets "rows" and "columns" to
% be set up by the user later
dataprovide={rows},
dataprovide={columns},
- valuekeys={
+ dataprovide={field},
+ definekeys[1]={
{rows}{ dataset={rows}{#1} }, % set the rows data set
{columns}{ dataset={columns}{#1} }, % set the columns data set
+ {field}{ dataset={field}{#1} }, % set the underlying field
+ {arg}{ field={#1} },
+ % this way, setting the argument becomes equivalent
+ % to specifying the underlying field
},
parseoptions={ % Here we add code to the parse routine
% We check whether columns = rows. If so, we only write
% the number once
- ifeqTF={\SemantexDataGetExpNot{columns}}
- {\SemantexDataGetExpNot{rows}}
+ strifeqTF={\SemantexDataGetExpNot{columns}}{\SemantexDataGetExpNot{rows}}
{
- % We use a very weird key called "setkeysx" -- this
- % fully executes the content of the keys before
- % setting them
setkeysx={
lower={\SemantexDataGetExpNot{columns}},
},
@@ -1902,102 +2485,62 @@ key~\lstinline!parseoptions!. However, we need a bit more programming keys to ma
},
},
},
+ ifblankF={\SemantexDataGetExpNot{field}}
+ {
+ setargkeysx={
+ s={\SemantexDataGetExpNot{field}},
+ },
+ },
},
]
\end{lstlisting}
-Here we used a lot of programmking keys. Let us see the full list of them.
-(An important notice: For some of these keys, such as \lstinline!boolifTF!, you currently cannot use spaces in the \lstinline!⟨bool⟩! argument, so e.g. \lstinline!boolifTF{ mybool } { ... } { ... }! will not work; you have to write \lstinline!boolifTF{mybool}!. I am trying to solve this problem, but have not yet been able to do so.)
-
-\begin{lstlisting}
-dataprovide={⟨data⟩}, % provides data
-dataset={⟨data⟩}{⟨value⟩}, % sets data
-datasetx={⟨data⟩}{⟨value⟩}, % sets data after expanding it
-dataputright={⟨data⟩}{⟨value⟩}, % adds to the right of data
-dataputrightx={⟨data⟩}{⟨value⟩}, % adds to the right of data after expanding it
-dataputleft={⟨data⟩}{⟨value⟩}, % adds to the left of data
-dataputleftx={⟨data⟩}{⟨value⟩}, % adds to the left of data after expanding it
-dataclear={⟨data⟩,} % clears a piece of data
-setkeys={⟨keys⟩}, % sets the keys in question, which is rather useless since you could have just written those keys directly instead
-keysset={⟨keys⟩}, % equivalent to setkeys
-setkeysx={⟨keys⟩}, % executes the keys in question after expanding them
-keysset={⟨keys⟩}, % equivalent to setkeysx
-ifeqTF={⟨str1⟩}{⟨str2⟩}{⟨if true⟩}{⟨if false⟩}, % checks if strings are equal
-ifeqT={⟨str1⟩}{⟨str2⟩}{⟨if true⟩},
-ifeqF={⟨str1⟩}{⟨str2⟩}{⟨if false⟩},
-ifblankTF={⟨str⟩}{⟨if true⟩}{⟨if false⟩}, % checks if string is blank
-ifblankT={⟨str⟩}{⟨if true⟩},
-ifblankF={⟨str⟩}{⟨if false⟩},
-boolprovide={⟨bool⟩}, % provides a boolean
-boolsettrue={⟨bool⟩}, % sets the boolean to true
-boolsetfalse={⟨bool⟩}, % sets the boolean to false
-boolifTF={⟨bool⟩}{⟨if true⟩}{⟨if false⟩}, % checks if boolean is true
-boolifT={⟨bool⟩}{⟨if true⟩},
-boolifF={⟨bool⟩}{⟨if false⟩,
-intprovide={⟨int⟩}, % provides an integer
-intclear={⟨int⟩}, % sets the integer to 0
-intincr={⟨int⟩}, % adds 1 to the integer
-intset={⟨int⟩}{⟨value⟩}, % sts the integer
-intifgreaterthanTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks which number of greater
-intifgreaterthanT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
-intifgreaterthanF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
-intifequalTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks if the numbers are equal
-intifequalT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
-intifequalF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
-intiflessthanTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks which number of less
-intiflessthanT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
-intiflessthanF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
-ERRORkeyvaluenotfound={⟨key⟩}{⟨value⟩}, % throws an error saying that the key has been set to an unkonwn value
-ERROR={⟨error text⟩}, % throws a general error with the provided error test
-execute={⟨error text⟩}, % executes the code in question
-\end{lstlisting}
-
-When using these keys (including inside the key~\lstinline!execute!), you can use a number of commands that provide and manipulate data. Most of them are just command versions of the keys above, and for now, I leave it to the reader to guess what they do based on the above picture:
-
-\begin{lstlisting}
-\SemantexDataProvide
-\SemantexDataSet
-\SemantexDataSetx
-\SemantexDataPutRight
-\SemantexDataPutRightx
-\SemantexDataPutLeft
-\SemantexDataPutLeftx
-\SemantexDataGet
-\SemantexDataGetExpNot
-\SemantexDataClear
-\SemantexKeysSet
-\SemantexKeysSetx
-\SemantexStrIfEqTF
-\SemantexStrIfEqT
-\SemantexStrIfEqF
-\SemantexIfBlankTF
-\SemantexIfBlankT
-\SemantexIfBlankF
-\SemantexBoolProvide
-\SemantexBoolSetTrue
-\SemantexBoolSetFalse
-\SemantexBoolIfTF
-\SemantexBoolIfT
-\SemantexBoolIfF
-\SemantexIntProvide
-\SemantexIntGet
-\SemantexIntClear
-\SemantexIntIncr
-\SemantexIntSet
-\SemantexIntIfGreaterThanTF
-\SemantexIntIfGreaterThanT
-\SemantexIntIfGreaterThanF
-\SemantexIntIfEqualTF
-\SemantexIntIfEqualT
-\SemantexIntIfEqualF
-\SemantexIntIfLessThanTF
-\SemantexIntIfLessThanT
-\SemantexIntIfLessThanF
-\SemantexExpNot##1
-\SemantexERRORKeyValueNotFound
-\SemantexERROR
+\begin{LTXexample}
+$ \Mat[rows=\vm,columns=\vn,
+ field=\vk] $,
+$ \Mat[rows=\vn,columns=\vn,
+ field=\vk] $.
+\end{LTXexample}
+
+\section{Example: Cohomology with coefficients, revisited}\label{ch:parse_coho_coef}
+
+As promised previously, we revisit cohomology with coefficients
+and show how to set up a syntax like the below:
+
+\begin{lstlisting}
+\SetupObject\co{
+ dataprovide=coefficient,
+ dataprovide=space,
+ definekeys[1]={
+ {coef}{ dataset={coefficient}{#1} },
+ {space}{ dataset={space}{#1} },
+ {arg}{ space={#1} },
+ },
+ parseoptions={
+ ifblankF={\SemantexDataGetExpNot{space}}
+ {
+ setargkeysx={
+ s=\SemantexDataGetExpNot{space},
+ },
+ },
+ ifblankF={\SemantexDataGetExpNot{coefficient}}
+ {
+ setargkeysx={
+ othersep={;}{ \SemantexDataGetExpNot{coefficient} },
+ },
+ },
+ },
+}
\end{lstlisting}
+\begin{LTXexample}
+$\co[d=0]$,
+$\co[d=0,space=\vX]$,
+$\co[d=0,space=\vX,coef=\vR]$
+\end{LTXexample}
+
+\section{Example: Partial derivatives}
+
Let us look at a more complicated example: Let us create a command for partial derivatives:
\NewObject\MyVar\partialdif[
@@ -2006,17 +2549,17 @@ Let us look at a more complicated example: Let us create a command for partial d
boolsettrue={raisefunction},
setidots=\cdots,
setisep=\,,
- valuekeys={
+ definekeys[1]={
{default}{
si={\partial #1},
},
{raise}{
- ifeqTF={#1}{true}
+ strifeqTF={#1}{true}
{
boolsettrue={raisefunction},
}
{
- ifeqTF={#1}{false}
+ strifeqTF={#1}{false}
{
boolsetfalse={raisefunction},
}
@@ -2027,22 +2570,22 @@ Let us look at a more complicated example: Let us create a command for partial d
},
},
parseoptions={
- ifblankTF={ \SemantexDataGet{upper} }
+ ifblankTF={ \SemantexDataGetExpNot{upper} }
{
- intifgreaterthanTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
+ intifgreaterTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
\partial ^ { \SemantexIntGet{numberoflowerindices} }
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
},
@@ -2050,16 +2593,16 @@ Let us look at a more complicated example: Let us create a command for partial d
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
\partial
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
}
@@ -2068,16 +2611,16 @@ Let us look at a more complicated example: Let us create a command for partial d
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
- \partial ^ { \SemantexDataGet{upper} }
+ \partial ^ { \SemantexDataGetExpNot{upper} }
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
},
@@ -2087,7 +2630,7 @@ Let us look at a more complicated example: Let us create a command for partial d
boolifT={raisefunction}
{
dataclear={arg},
- dataclear={numberofarguments},
+ intclear={numberofarguments},
},
},
]
@@ -2099,17 +2642,17 @@ Let us look at a more complicated example: Let us create a command for partial d
boolsettrue={raisefunction},
setidots=\cdots,
setisep=\,,
- valuekeys={
+ definekeys[1]={
{default}{
si={\partial #1},
},
{raise}{
- ifeqTF={#1}{true}
+ strifeqTF={#1}{true}
{
boolsettrue={raisefunction},
}
{
- ifeqTF={#1}{false}
+ strifeqTF={#1}{false}
{
boolsetfalse={raisefunction},
}
@@ -2120,22 +2663,22 @@ Let us look at a more complicated example: Let us create a command for partial d
},
},
parseoptions={
- ifblankTF={ \SemantexDataGet{upper} }
+ ifblankTF={ \SemantexDataGetExpNot{upper} }
{
- intifgreaterthanTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
+ intifgreaterTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
\partial ^ { \SemantexIntGet{numberoflowerindices} }
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
},
@@ -2143,16 +2686,16 @@ Let us look at a more complicated example: Let us create a command for partial d
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
\partial
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
}
@@ -2161,16 +2704,16 @@ Let us look at a more complicated example: Let us create a command for partial d
{
setkeysx={
symbol={
- \frac
+ \SemantexExpNot\frac
{
- \partial ^ { \SemantexDataGet{upper} }
+ \partial ^ { \SemantexDataGetExpNot{upper} }
\SemantexBoolIfT{raisefunction}
{
- \SemantexDataGet{arg}
+ \SemantexDataGetExpNot{arg}
}
}
{
- \SemantexDataGet{lower}
+ \SemantexDataGetExpNot{lower}
}
},
},
@@ -2180,7 +2723,7 @@ Let us look at a more complicated example: Let us create a command for partial d
boolifT={raisefunction}
{
dataclear={arg},
- dataclear={numberofarguments},
+ intclear={numberofarguments},
},
},
]
@@ -2218,14 +2761,3108 @@ As you see, we use the \lstinline!d!~key to tell the command what superscript it
\]
\end{LTXexample}
-\chapter{Bugs}
+\chapter{\texorpdfstring{\texttt{stripsemantex}}{stripsemantex} -- stripping your document of \texorpdfstring{\semantex}{SemanTeX} markup}
+
+\semantex is a big, heavy package, and it might raise eyebrows if you try using it in submissions to journals. On top of that, \url{arXiv.org}
+is using \TeX~Live~2016 at the time of writing this, and it has
+an old version of \LaTeX3 that seems unable to run \semantex.
+To address this issue, \semantex has a companion package,
+called \pack{stripsemantex}, which allows you to strip the
+\semantex markup from your document and replace it with raw \LaTeX~code.
+While no such algorithm will ever be perfect, it generally works
+very well, even for quite complicated constructions,
+as long as you use the package in the \enquote{normal}
+and supported way.
+(If you want proof, have a look at my
+recent paper which was stripped using
+the algorithm: \url{https://arxiv.org/abs/2008.04794}.)
+
+The system has the following limitations:
+
+\begin{itemize}
+ \item It is currently only able to strip the \semantex markup from your main document (so it will ignore anything in \lstinline!\input{...}! and~\lstinline!\include{...}!). So prior to running \pack{stripsemantex},
+ you should include your entire document body in your
+ main \texttt{.tex}~file.
+ \item As mentioned, as long as you do normal, supported things,
+ everything should work fine. Non-normal, non-supported
+ things are tings like
+ \begin{lstlisting}
+\va[execute={\vb}]
+ \end{lstlisting}
+ \item Occasionally, you will have to run the stripping algorithm
+ multiple times. This happens e.g.~if you have
+ a key that does stuff like \lstinline!symbolputleft=\vH[d=0]!,
+ i.e.~keys that are defined using other objects. When you run
+ \pack{stripsemantex}, such objects will remain in the text until you run it again.
+ \item Partly because of the previous point, no attempt is made to remove
+ the \emph{setup} of \semantex,
+ so commands like \lstinline!\NewObject!, \lstinline!\SetupObject!, and~\lstinline!\SetupClass!
+ will remain in the document body.
+ You will then have to remove these yourself afterwards.
+ But the \semantex markup itself should be stripped completely from your document
+ (possibly after more than one run of the algorithm).
+ \item Things might go wrong if you define new keys
+ between \lstinline!\begin{document}! and~\lstinline!\end{document}!
+ whose definitions make use of \semantex objects or classes,
+ since the algorithm will try to strip these from the definitions.
+ For instance, don't do stuff like this
+ after~\lstinline!\begin{document}!:
+ \begin{lstlisting}
+\SetupObject\va{
+ definekeys[1]={
+ {weirdkey}{ upper=\vb[ {#1} ] }
+ },
+}
+ \end{lstlisting}
+ If you do, the algorithm will then try and strip this
+ occurrence of~\lstinline!\vb! from the key definition.
+ To avoid such issues, only ever define keys in your preamble,
+ as the algorithm will ignore everything
+ before \lstinline!\begin{document}!.
+ \item When the document has just been stripped,
+ it will load a small package called \pack{semtex},
+ which contains a couple of commands that the output will need
+ in order to run. You should be able to replace most (often all) of these commands
+ by other commands and then render the package \pack{semtex}
+ unnecessary. More on this in \cref{sec:semtex_package}.
+\end{itemize}
+
+As a small proof of concept, this is what the example in the introduction
+would look like when stripped of \semantex markup:
+
+\begin{lstlisting}
+% Same preamble as before.
+
+\begin{document}
+
+$ \overline{f}^{(n)} $
+
+$ g^{-1}|_{U} (x) $
+
+$ (h^{-1} \mathcal{F})_{p}
+ = \mathcal{F}_{h(p)} $
+
+\end{document}
+\end{lstlisting}
+
+Yes, I know, this was a very simple, unconvincing example.
+If you want a less trivial example, as mentioned before,
+you can have a look at my latest paper, which was stripped with
+(a previous alpha version of) \pack{stripsemantex}:
+
+\begin{center}
+ \url{https://arxiv.org/abs/2008.04794}
+\end{center}
+
+\section{The \texttt{semtex} package}\label{sec:semtex_package}
+
+When you have stripped your document and removed all \semantex package setup, it should be safe to remove
+the loading of \semantex from your preamble.
+However, the stripping algorithm will automatically
+add the following right before~\lstinline!\begin{document}!:
+\begin{lstlisting}
+% The following was added by "stripsemantex"
+
+\usepackage{semtex,leftindex,graphicx}
+
+\providecommand\SemantexLeft{%
+ \mathopen{}\mathclose\bgroup\left
+}
+
+\providecommand\SemantexRight{%
+ \aftergroup\egroup\right
+}
+
+\providecommand\SemantexBullet{%
+ \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+}
+\providecommand\SemantexDoubleBullet{%
+ \SemantexBullet\SemantexBullet
+}
+\end{lstlisting}
+The package \pack{leftindex} is loaded to take care of any
+possible left indices. The package~\pack{graphicx}
+is loaded to provide the command~\lstinline!\scalebox!.
+This package~\pack{semtex} is a small package whose sole purpose
+is to be loaded by stripped \semantex documents.
+It contains a couple of simple commands that the document
+needs immediately after the stripping.
+Depending on your document,
+you should be able to completely replace these commands
+by commands from other packages, or define them yourself, rendering the package~\pack{semtex}
+unnecessary.
+And actually, four of those commands are the commands
+\lstinline!\SemantexLeft!, \lstinline!\SemantexRight!,
+\lstinline!\SemantexBullet!, and~\lstinline!\SemantexDoubleBullet!
+which are provided right below, making it even faster to just remove~\pack{semtex}.
+
+In total, the package~\pack{semtex} adds the following commands:
+
+\begin{itemize}
+ \item
+ \mylst!\SemantexBullet!,
+ \mylst!\SemantexDoubleBullet!
+
+ The commands that contain the bullets we use in \semantex,
+ i.e.~the superscript in~\( \co{*} \).
+ These bullets are smaller (and prettier, in my opinion)
+ than the standard \lstinline!\bullet! command from~\LaTeX.
+
+ \item
+ \mylst!\SemantexLeft!,
+ \mylst!\SemantexRight!
+
+ Like \lstinline!\left...\right!, but fixing some spacing issues
+ around these.
+ They are completely equivalent to~\lstinline!\mleft! and~\lstinline!\mright!
+ from the package~\pack{mleftright}, so it is safe to just load that package
+ and replace the above commands by \lstinline!\mleft...\mright! instead,
+ or use the redefinitions mentioned above.
+
+ \item
+ \mylst!\SemantexParentheses{$\values\<normal|auto|*|{\textit{other}}\>$}{$\<left parenthesis\>$}!\\
+ \mbox{\qquad}\mylst!{$\<right parenthesis\>$}{$\<content\>$}!,
+
+ This one writes \<content\> enclosed in the pair of parentheses
+ and with the size given by the first argument.
+ Here,~\lstinline!normal! means normal size
+ parentheses,
+ and
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using the commands~\lstinline!\SemantexLeft...\SemantexRight!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+ The important property of this command is that
+ inside the~\<content\>, you can access the delimiter size
+ at any point using the command~\lstinline!\SemantexDelimiterSize!. In other words, when
+ no~\lstinline!\SemantexDelimiterSize! is found inside the~\<content\>,
+ the command is completely redundant. We shall see
+ in a moment how to make sure it does not appear in your output
+ unless absolutely necessary.
+
+ \item
+ \mylst!\SemantexNoParentheses{$\<content\>$}!
+
+ This command prints the content with no parentheses, but importantly, it also resets
+ the command \lstinline!\SemantexDelimiterSize!
+ to~\lstinline!{}!, i.e.~blank.
+ As with the command~\lstinline!\SemantexParentheses!,
+ we shall see in a moment how to make this
+ command not appear in your output
+ unless absolutely necessary.
+\end{itemize}
+
+As you see, most of these commands can be removed completely
+or replaced by commands from other packages. The one
+issue is with the annoying
+commands \lstinline!\SemantexParentheses!
+and~\lstinline!\SemantexNoParentheses!.
+These exist solely for the purpose of allowing the use of
+the command~\lstinline!\SemantexDelimiterSize! in the content.
+However, there are very few cases, such as set constructions, where
+\lstinline!\SemantexDelimiterSize! is even necessary. Therefore,
+\textbf{it is possible to turns the use of these commands off}.
+More precisely, there is a key that can be
+activated for any object or class:
+\begin{center}
+ \mylst!allowSemantexDelimiterSize=$\values\<\default{true}|false\>$!
+\end{center}
+When this is set to false, \semantex will not use the
+commands~\lstinline!\SemantexParentheses!
+and~\lstinline!\SemantexNoParentheses! internally,
+and consequently, \lstinline!\SemantexDelimiterSize! will not work in that class or object.
+Instead, it will simply print the parentheses as raw code,
+and this is what will appear in your stripped document instead.
+The natural thing to do is to turn it off by default and
+only turn it back on for the few cases where you really need it:
+
+\begin{lstlisting}
+\SetupClass\MyVar{allowSemantexDelimiterSize=false}
+
+% We turn it back on for the set constructions
+% as defined above.
+\SetupObject\Set{allowSemantexDelimiterSize=true}
+\end{lstlisting}
+
+\section{The \texttt{stripsemantex} algorithm}
+
+The stripping algorithm works like this.
+It will work in any \TeX\ engine (\hologo{pdfTeX}, \hologo{XeTeX}, \hologo{LuaTeX}, etc.), but along
+the way, you will have to create a small,
+separate document and compile it with \hologo{LuaTeX}.
+Suppose in the following that you \TeX\ document is called~\texttt{mydoc.tex}.
+
+\begin{enumerate}[(1)]
+ \item Make sure to collect all of the \semantex markup you want
+ stripped in the main document,~\texttt{mydoc.tex}.
+ Also make sure to follow the recommendations
+ in \cref{sec:UseClassInCommand}, in case you have created keys
+ of the form described there.
+ \item Set~\lstinline!allowSemantexDelimiterSize=false!
+ for your main class~\lstinline!\MyVar!, and only
+ turn it back on in the few cases where you need it,
+ i.e.~when you need to use the command~\lstinline!\SemantexDelimiterSize!.
+ \item Put the following somewhere in your preamble, after
+ the loading of \semantex:
+ \begin{lstlisting}
+\SemantexSetup{
+ semtexfile=true,
+}
+ \end{lstlisting}
+ \item Compile your document \texttt{mydoc.tex} using your preferred \TeX\ engine (\hologo{pdfTeX}, \hologo{XeTeX}, \hologo{LuaTeX}, or whatever).
+ Because of the previous step, there
+ will now be a new file, \texttt{mydoc.semtex},
+ in your folder, where the raw output
+ of each \semantex command is stored. In a moment,
+ \pack{stripsemantex} will use this information to replace
+ each command by the raw code it outputs.
+ \item Create another \TeX\ document in the same folder
+ as \texttt{mydoc.tex}, and call it \texttt{stripdoc.tex}
+ (or whatever you want). Put the following into it:
+ \begin{lstlisting}
+\documentclass{article}
+
+\usepackage{stripsemantex}
+
+\begin{document}
+
+\StripSemantexCopyFile{mydoc}
+
+%\StripSemantexStripFile{mydoc}
+
+\end{document}
+ \end{lstlisting}
+ Then compile it \textbf{with \hologo{LuaTeX}}.
+ \item After the previous step, another document will have been created in the same
+ folder, called~\lstinline!mydoc_prestripped.tex!. It will look just like \texttt{mydoc.tex},
+ but in the document body, each \semantex markup command will now
+ have a command \mylst!\SemantexIDcommand{$\<a unique ID\>$}!
+ preceding it. Compile this new document \lstinline!mydoc_prestripped.tex! using the same \TeX\ engine as the one you used
+ for \texttt{mydoc.tex}.
+ \item\label{pt:strip_point} Edit~\texttt{stripdoc.tex}, commenting out the line~\lstinline!\StripSemantexCopyFile{mydoc}!, and
+ uncommentng the next one, so that the file now looks like this:
+ \begin{lstlisting}
+\documentclass{article}
+
+\usepackage{stripsemantex}
+
+\begin{document}
+
+%\StripSemantexCopyFile{mydoc}
+
+\StripSemantexStripFile{mydoc}
+
+\end{document}
+ \end{lstlisting}
+ Then compile this document again, this time also \textbf{using \hologo{LuaTeX}}.
+ This will create a document called \lstinline!mydoc_stripped.tex!, which should (hopefully)
+ be completely stripped of \semantex markup in the document body.
+ Occasionally, as mentioned above, a few such commands may remain, in which case you will simply
+ have to repeat the above steps, this time with the document~\texttt{mydoc.tex}
+ replaced by~\lstinline!mydoc_stripped.tex!.
+ Note again that your \semantex \textbf{setup}
+ will not be removed, so there
+ will still be commands like \lstinline!\NewObject!,
+ \lstinline!\SetupObject!, \lstinline!\SetupClass!,~etc.
+ left. You will then have to remove these few commands from your document manually.
+\end{enumerate}
+
+There is also another command in the \pack{stripsemantex} package,
+called simply \mylst!\StripSemantex!, which will
+run either the command \mylst!\StripSemantexCopyFile! or the command \mylst!\StripSemantexStripFile!,
+depending on which of the files \lstinline!mydoc.semtex!
+and~\mylst!mydoc_prestripped.semtex! is newer.
+This will allow you to not have to edit
+the file \texttt{stripdoc.tex}
+at point~\ref{pt:strip_point}.
+Unfortunately, due to a bug in \LaTeX3,
+this command does not work right now (in~\hologo{LuaTeX}). This bug has been reported
+and has hopefully already been fixed by the time you read this.
+
+\chapter{Known bugs}
+
+If you write e.g.~\lstinline!Otherspar={[}{]}{\Bigg}!
+in a heading, your command will fail for some reason.
+It can be solved by omitting the braces around~\lstinline!\Bigg!,
+i.e.~by replacing it by~\lstinline!Otherspar={[}{]}\Bigg!.
+
+\chapter{The predefined keys, commands, and data}
+
+In this chapter, we give a complete list of the predefined keys.
+Firstly,
+the keys that can be used inside the command~\lstinline!\SemantexSetup! are:
+
+\begin{itemize}
+ \item \mylst!keyvalparser={$\<command\>$}!
+
+ Sets the keyval parser function to~\<command\>.
+ The \<command\> must take three arguments:
+ \mylst!$\<command\>\<function\num{1}\>\<function\num{2}\>${$\<key-value list\>$}!.
+ The \<function\num{1}\> must take one argument, while \<function\num{2}\>~must take two.
+ For a key-value list, \<function\num{1}\>~will be applied to single keys taking no values,
+ while \<function\num{2}\>~will be applied to keys taking a value. By default, this key has been set to the \LaTeX3 command~\mylst!\keyval_parse:NNn!.
+ Another interesting possibility is the command~\lstinline!\ekvparse! from the package~\lstinline!expkv!. This choice will only affect keys for objects and classes,
+ \emph{not} keys for use inside~\lstinline!\SemantexSetup!.
+
+ \item \mylst!semtexfile={$\values\<true|\default{false}\>$}!
+
+ When turned on, a \lstinline!.semtex! file will be created while processing the document.
+ This is mainly relevant when using \lstinline!stripsemantex!.
+\end{itemize}
+
+Apart from this, \semantex has a large collection of keys that are predefined for the class \lstinline!\SemantexBaseObject!.
+In the following sections, we include the full list.
+
+\section{Keys for defining and removing keys}
+
+\begin{itemize}
+ \item
+ \mylst!definekeys={$\<key definitions\>$}!
+
+ Defines keys taking no values.
+ The syntax is
+ \begin{lstlisting}
+ definekeys={
+ {key1}{ upper=3, lower=7 },
+ {key2}{ lower=6, upper=4 },
+ },
+ \end{lstlisting}
+
+ \item
+ \mylst!definekeys[$n$]={$\<key definitions\>$}!
+
+ Defines keys taking $n$~values, where $n=0,1,2,\ldots,9$.
+ The values are accessed by
+ writing
+ \lstinline!#1!,~\lstinline!#2!, \ldots,~\lstinline!#9!.
+ The syntax is
+ \begin{lstlisting}
+ definekeys[2]={
+ {key1}{ upper=3+#1, lower=7-#2 },
+ {key2}{ lower=6\cdot#1, upper=4/#2 },
+ },
+ \end{lstlisting}
+
+ \item
+ \mylst!removekey=$\<key name\>$!
+
+ Removes the key~\<key name\> taking no values.
+
+ \item
+ \mylst!removekey[$n$]=$\<key name\>$!
+
+ Removes the key~\<key name\> taking $n$~values, where $n=0,1,2,\ldots,9$.
+
+ \item
+ \mylst!defineargkeys={$\<key definitions\>$}!
+
+ Defines argument keys taking no values.
+ The syntax is similar to the one for~\lstinline!definekeys!.
+
+ \item
+ \mylst!defineargkeys[$n$]={$\<key definitions\>$}!
+
+ Defines argument keys taking $n$~values, where $n=0,1,2,\ldots,9$.
+ The syntax is similar to the one for~\mylst!definekeys[$n$]!.
+
+ \item
+ \mylst!removeargkey=$\<key name\>$!
+
+ Removes the argument key~\<key name\> taking no values.
+
+ \item
+ \mylst!removeargkey[$n$]=$\<key name\>$!
+
+ Removes the argument key~\<key name\> taking $n$~values, where $n=0,1,2,\ldots,9$.
+\end{itemize}
+
+\section{Programming keys}\label{sec:programming_keys}
+
+\begin{itemize}
+ \item
+ \mylst!execute={$\<\TeX\ code\>$}!
+
+ Executes the \<\TeX\ code\> on the spot.
+
+ \item
+ \mylst!setkeys={$\<keys\>$}!,
+ \mylst!keysset={$\<keys\>$}!
+
+ Sets the keys \<keys\>.
+
+ \item
+ \mylst!setkeysx={$\<keys\>$}!,
+ \mylst!keyssetx={$\<keys\>$}!
+
+ Sets the keys \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!dataprovide={$\<data\>$}!
+
+ Provides a new piece of data consisting of a token list.
+
+ \item
+ \mylst!dataset={$\<data\>$}{$\<value\>$}!
+
+ Sets the \<data\> to \<value\>.
+
+ \item
+ \mylst!datasetx={$\<data\>$}{$\<value\>$}!
+
+ Sets the \<data\> to \<value\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!dataputleft={$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the left of \<data\>.
+
+ \item
+ \mylst!dataputleftx={$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the left of \<data\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!dataputright={$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the right of \<data\>.
+
+ \item
+ \mylst!dataputrightx={$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the right of \<data\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!dataclear={$\<data\>$}!
+
+ Clears the piece of data~\<data\>.
+
+ \item
+ \mylst!boolprovide={$\<boolean\>$}!
+
+ Provides a new piece of data consisting of a boolean.
+
+ \item
+ \mylst!boolsettrue={$\<boolean\>$}!
+
+ Sets the \<boolean\> to true.
+
+ \item
+ \mylst!boolsettrue={$\<boolean\>$}!
+
+ Sets the \<boolean\> to false.
+
+ \item
+ \mylst!boolifTF={$\<boolean\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!boolifT={$\<boolean\>$}{$\<if true\>$}!, \\
+ \mylst!boolifTF={$\<boolean\>$}{$\<if false\>$}!
+
+ Runs \<if~true\> or \<if~false\>, depending on the value of \<boolean\>.
+
+ \item
+ \mylst!intprovide={$\<integer\>$}!
+
+ Provides a new piece of data consisting of an integer.
+
+ \item
+ \mylst!intset={$\<integer\>$}{$\<value\>$}!
+
+ Sets the \<integer\> to \<value\>.
+
+ \item
+ \mylst!intincr={$\<integer\>$}!
+
+ Increases the \<integer\> by~\( 1 \).
+
+ \item
+ \mylst!intifeqTF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!intifeqT={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!intifeqF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integers \<integer\num{1}\> and \<integer\num{2}\> are equal,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!intifgreaterTF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!intifgreaterT={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!intifgreaterF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integer \<integer\num{1}\> is greater than~\<integer\num{2}\>,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!intiflessTF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!intiflessT={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!intiflessF={$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integer \<integer\num{1}\> is less than~\<integer\num{2}\>,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!intclear={$\<integer\>$}!
+
+ Clears the \<integer\>.
+
+ \item
+ \mylst!ifblankTF={$\<tokens\>$}{$\<if true\>$}{$\<if false\>$}!,\\
+ \mylst!ifblankT={$\<tokens\>$}{$\<if true\>$}!,\\
+ \mylst!ifblankF={$\<tokens\>$}{$\<if false\>$}!
+
+ Fully expands the \<tokens\> and checks if it is blank,
+ and runs \<if true\> or \<if false\> according to this.
+
+ \item
+ \mylst!strifeqTF={$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!strifeqT={$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!strifeqF={$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the strings \<string\num{1}\> and \<string\num{2}\> are equal,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!ERROR={$\<error message\>$}!
+
+ Issues an generic error message. At the end of the message, it automatically adds \enquote{object~\usercommand\<object name\> on line~\<line number\>}
+ or \enquote{class~\usercommand\<Class name\> on line~\<line number\>}.
+
+ \item
+ \mylst!ERRORkeyvaluenotfound={$\<key\>$}{$\<value\>$}!
+
+ Issues an error, saying that the key~\<key\> was set to the unknown value~\<value\>.
+
+ \item
+ \mylst!ERRORargkeyvaluenotfound={$\<key\>$}{$\<value\>$}!
+
+ Issues an error, saying that the argument key~\<key\> was set to the unknown value~\<value\>.
+\end{itemize}
+
+\section{Fundamental keys for class/object information}
+
+\begin{itemize}
+ \item
+ \mylst!parent={$\<Class\>$}!
+
+ Sets the class to have parent~\<Class\>.
+
+ \item
+ \mylst!class={$\<Class\>$}!
+
+ Sets the object to have class~\<Class\>.
+
+ \item
+ \mylst!copy={$\<object\>$}!,
+ \mylst!clone={$\<object\>$}!
+
+ Sets the object to be a copy (also known as a clone)
+ of~\<object\>.
+ Then \<object\> works as a \enquote{parent object}, and all information
+ will be inherited from~\<object\> unless modified for the current object.
+
+ \item
+ \mylst!symbol={$\<value\>$}!
+
+ Sets the symbol to~\<value\>. At the same time,
+ the height phantom and the slanting phantom are set to the same value.
+
+ \item
+ \mylst!symbolputleft={$\<value\>$}!
+
+ Adds \<value\> to the left of the symbol. No change is made to the height
+ phantom or the slanting phantom.
+
+ \item
+ \mylst!symbolputright={$\<value\>$}!
+
+ Adds \<value\> to the right of the symbol. No change is made to the height
+ phantom or the slanting phantom.
+
+ \item
+ \mylst!heightphantom={$\<value\>$}!
+
+ Sets the height phantom to~\<value\>.
+
+ \item
+ \mylst!slantingphantom={$\<value\>$}!
+
+ Sets the slanting phantom to~\<value\>.
+
+ \item
+ \mylst!gradingposition={$\values\<\default{upper}|lower\>$}!, \\
+ \mylst!gradingpos={$\values\<\default{upper}|lower\>$}!
+
+ Sets whether to use upper (\enquote{cohomological})
+ or lower (\enquote{homological}) grading.
+ The default is~\lstinline!upper!.
+
+ \item
+ \mylst!command={$\<command\>$}!
+
+ Applies the \<command\> to the symbol.
+
+ \item
+ \mylst!clearcommand!
+
+ Clears the list of commands to be applied to the symbol.
+
+ \item
+ \mylst!return!
+
+ Invokes the return routine.
+
+ \item
+ \mylst!leftreturn!
+
+ Invokes the left return routine.
+
+ \item
+ \mylst!rightreturn!
+
+ Invokes the right return routine.
+
+ \item
+ \mylst!innerreturn!
+
+ Invokes the inner return routine.
+
+ \item
+ \mylst!output={$\<Class\>$}!
+
+ Sets the output class to~\<Class\>.
+
+ \item
+ \mylst!dooutput={$\values\<true|\default{false}\>$}!
+
+ Sets whether the current object/class should output or not.
+ The default is false, but the system will automatically
+ change this when needed. \emph{Never} set this to
+ \lstinline!true! by default, as this will
+ cause an infinite loop.
+
+ \item
+ \mylst!outputoptions={$\<keys\>$}!
+
+ Adds the \<keys\> to the output options,
+ i.e.\ those options passed to the output class.
+
+ \item
+ \mylst!parseoptions={$\<keys\>$}!
+
+ Adds the \<keys\> to the parse options.
+
+ \item
+ \mylst!parse!
+
+ Invokes the parse routine.
+
+ \item
+ \mylst!texclass={$\<command\>$}!
+
+ Sets the \TeX\ character class to be~\<command\>.
+ The intended values are \lstinline!\mathord!, \lstinline!\mathop!, \lstinline!\mathbin!, \lstinline!\mathrel!, \lstinline!\mathopen!, \lstinline!\mathclose!, and~\lstinline!\mathpunct!.
+
+ \item
+ \mylst!allowSemantexDelimiterSize={$\values\<\default{true}|false\>$}!
+
+ Sets whether to allow the command \lstinline!\SemantexDelimiterSize!
+ inside the argument.
+ The default is~\lstinline!true!.
+ The only real reason to turn this off is if you are using
+ \lstinline!stripsemantex! to strip the document of \semantex markup.
+ For if it is set to false, the system will not
+ add \lstinline!\SemantexParentheses! and \lstinline!\SemantexNoParentheses!
+ all over the place to set the value of \lstinline!\SemantexDelimiterSize!,
+ and this probably looks better in the outputted code.
+
+ \item
+ \mylst!default={$\<value\>$}!
+
+ This is the key that is applied whenever the
+ user writes something in the options which is not a key,
+ e.g.~the~\lstinline!1! in~\lstinline!\vf[1]!.
+ By default, this keys has been set to be equal to~\lstinline!si!,
+ but it is meant to be changeable by the user.
+
+ \item
+ \mylst!degreedefault={$\<value\>$}!
+
+ This is the key where the grading goes.
+ It is the one used by \lstinline!Cohomology! class types.
+ By default, this key has been set to be equal to~\lstinline!sd!,
+ but it is meant to be changable by the user.
+
+ \item
+ \mylst!*!
+
+ Adds a bullet to the \lstinline!d!-index.
+
+ \item
+ \mylst!**!
+
+ Adds a double bullet to the \lstinline!d!-index.
+
+ \item
+ \mylst!-!
+
+ Adds a slot to the \lstinline!i!-index.
+
+ \item
+ \mylst!...!
+
+ Adds three dots to the \lstinline!i!-index.
+
+ \item
+ \mylst!*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the \lstinline!d!-index,
+ separated by the \<separator\>
+ from any previous \lstinline!d!-indices.
+
+ \item
+ \mylst!**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the \lstinline!d!-index,
+ separated by the \<separator\>
+ from any previous \lstinline!d!-indices.
+
+ \item
+ \mylst!arg={$\<value\>$}!
+
+ The key that is applied whenever the user adds
+ an argument via the standard syntax, e.g.~\lstinline!\vf{\vx}!.
+ By default, it is set to be equal to \lstinline!setargsinglekeys!,
+ but it is meant to be changable by the user.
+
+ \item
+ \mylst!smash!
+
+ Applies the command~\lstinline!\smash! to the symbol.
+ Equivalent to~\lstinline!command=\smash!.
+
+ \item
+ \mylst!prime!, \mylst!'!, \mylst!''!, \mylst!'''!
+
+ Adds one or more primes to the symbol in the upper index.
+ Equivalent to \lstinline!upper={\prime}!, \lstinline!upper={\prime\prime}!,
+ etc.
+\end{itemize}
+
+\section{Keys for the argument parentheses}
-The biggest unsolved problem I know of is how to correctly strip spaces in programming keys such as \lstinline!boolifTF!. Similarly, I would also like to allow keys to be defined using the
-syntax~\lstinline!{ inv } { upper=-1 }! rather than~\lstinline!{inv}{ upper=-1 }!. This will hopefully be solved soon.
+\begin{itemize}
+ \item
+ \mylst!par!
+
+ Turns parentheses on. Equivalent to \lstinline!usepar=true!.
+
+ \item
+ \mylst!nopar!
+
+ Turns parentheses off, but still prints them if more
+ than one argument is received.
+ Equivalent to \lstinline!usepar=false!.
+
+ \item
+ \mylst!neverpar!
+
+ Turns parentheses completely off, even if more than one argument
+ is received. (This is ugly and should only be used for special constructions.)
+ Equivalent to \lstinline!usepar=never!.
+
+ \item
+ \mylst!usepar={$\values\<\default{true}|false|never\>$}!
+
+ Sets whether or not to use parentheses.
+ If~\lstinline!true!, turns parentheses on (this is the default behaviour).
+ If~\lstinline!false!, turns parentheses off, but still prints them if more
+ than one argument is received.
+ If~\lstinline!never!, turns parentheses completely off, even if more than one argument
+ is received. (This is ugly and should only be used for special constructions.)
+ The default value is~\lstinline!true!.
+
+ \item
+ \mylst!parsize={$\values\<\default{normal}|auto|*|{\textit{other}}\>$}!
+
+ Sets the parentheses size.
+ Here,~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+
+ \item
+ \mylst!leftpar={$\<parenthesis\>$}!
+
+ Sets the left parenthesis.
+ The default value is~\lstinline!(!.
+
+ \item
+ \mylst!rightpar={$\<parenthesis\>$}!
+
+ Sets the right parenthesis.
+ The default value is~\lstinline!)!.
+\end{itemize}
+
+\section{Keys for the \texttt{spar} routine}
+
+\begin{itemize}
+ \item
+ \mylst!spar!
+
+ Invokes the \lstinline!spar! routine.
+
+ \item
+ \mylst!spar={$\values\<normal|auto|*|\textit{other}\>$}!
+
+ Invokes the \lstinline!spar! routine, with
+ the specified parenthesis size.
+ Here,~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+
+ \item
+ \mylst!sparsize={$\values\<\default{normal}|auto|*|{\textit{other}}\>$}!
+
+ Sets the \lstinline!spar! parenthesis size.
+ Here,~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+
+ \item
+ \mylst!leftspar={$\<parenthesis\>$}!
+
+ Sets the left parenthesis for the \lstinline!spar! routine.
+ The default value is~\lstinline!(!.
+
+ \item
+ \mylst!rightspar={$\<parenthesis\>$}!
+
+ Sets the right parenthesis for the \lstinline!spar! routine.
+ The default value is~\lstinline!)!.
+
+ \item
+ \mylst!otherspar={$\<left parenthesis\>$}{$\<right parenthesis\>$}!
+
+ Invokes the \lstinline!spar! routine, but with the assigned parentheses.
+
+ \item
+ \mylst!Otherspar={$\<left parenthesis\>$}{$\<right parenthesis\>$}{$\values\<normal|auto|*|{\textit{other}}\>$}!
+
+ Invokes the \lstinline!spar! routine, but with the assigned parentheses and size.
+ Here,~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+\end{itemize}
+
+\section{Keys for setting the argument}
+
+\begin{itemize}
+ \item
+ \mylst!setargkeys={$\<keys\>$}!,
+ \mylst!argkeysset={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>.
+
+ \item
+ \mylst!setargkeysx={$\<keys\>$}!,
+ \mylst!argkeyssetx={$\<keys\>$}!
+
+ Sets the argynebt keys \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!setargsinglekeys={$\<keys\>$}!,
+ \mylst!argsinglekeysset={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!setargsinglekeysx={$\<keys\>$}!,
+ \mylst!argsinglekeyssetx={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ If a key is not found, the value
+ is fully expanded and printed.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!setoneargsinglekey={$\<key\>$}!,
+ \mylst!oneargsinglekeyset={$\<key\>$}!
+
+ Sets one single argument key taking no values.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!setoneargsinglekeyx={$\<key\>$}!,
+ \mylst!oneargsinglekeysetx={$\<key\>$}!
+
+ Sets one single argument key taking no values,
+ If the key is not found, the value
+ is fully expanded and printed.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!setargwithoutkeyval={$\<value\>$}!,
+ \mylst!argwithoutkeyvalset={$\<value\>$}!
+
+ Sets the argument, allowing no keyval syntax.
+
+ \item
+ \mylst!setargwithoutkeyvalx={$\<value\>$}!,
+ \mylst!argwithoutkeyvalsetx={$\<value\>$}!
+
+ Sets the argument, fully expanding its value,
+ and allowing no keyval syntax.
+
+ \item
+ \mylst!prearg={$\<value\>$}!
+
+ Sets the pre-argument.
+
+ \item
+ \mylst!postarg={$\<value\>$}!
+
+ Sets the post-argument.
+
+ \item
+ \mylst!setargsep={$\<value\>$}!
+
+ Sets the argument separator.
+ The default value is a comma.
+
+ \item
+ \mylst!setargslot={$\<value\>$}!
+
+ Sets the argument slot.
+ The default value is~\lstinline!{-}!.
+
+ \item
+ \mylst!setargdots={$\<value\>$}!
+
+ Sets the argument dots.
+ The default value is~\lstinline!\dots!.
+
+ \item
+ \mylst!argkeyval={$\values\<true|false|\default{singlekeys}|onesinglekey\>$}!
+
+ Sets whether to use argument keyval syntax or not.
+ If \lstinline!true!, \lstinline!arg! is set equal to~\lstinline!setargkeys!.
+ If \lstinline!false!, it is set to~\lstinline!setargwithoutkeyval!.
+ If \lstinline!singlekeys!, it is set to~\lstinline!setargsinglekeys!.
+ If \lstinline!onesinglekey!, it is set to~\lstinline!setoneargsinglekey!.
+ The default value is~\lstinline!singlekeys!.
+
+ \item
+ \mylst!argposition={$\values\<left|\default{right}\>$}!
+
+ Sets the position of the argument.
+ The default is~\lstinline!right!, so the argument
+ will be printed to the right of the symbol.
+
+ \item
+ \mylst!nextargwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next argument should be
+ separated from the current one with a
+ separator or not.
+ The default is \lstinline!false!, but the
+ system will automatically change this when needed.
+
+ \item
+ \mylst!sarg={$\<value\>$}!
+
+ Adds \<value\> to the argument, separated from any previous
+ argument by the default argument separator.
+
+ \item
+ \mylst!carg={$\<value\>$}!
+
+ Adds \<value\> to the argument, separated from any previous
+ argument by a comma.
+
+ \item
+ \mylst!argwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the argument, separated from any previous
+ argument by \<separator\>.
+
+ \item
+ \mylst!arg...withothersep={$\<separator\>$}!,
+ \mylst!argdotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the argument, separated from any previous
+ argument by the \<separator\>.
+
+ \item
+ \mylst!arg-withothersep={$\<separator\>$}!,
+ \mylst!argslotwithothersep={$\<separator\>$}!
+
+ Adds a slot to the argument, separated from any previous
+ argument by the \<separator\>.
+
+ \item
+ \mylst!argdots!, \mylst!arg...!
+
+ Adds three dots to the argument,
+ separated from any previous arguments
+ by the standard separator.
+
+ \item
+ \mylst!cargdots!, \mylst!carg...!
+
+ Adds three dots to the argument,
+ separated from any previous arguments
+ by a comma.
+
+ \item
+ \mylst!argslot!, \mylst!arg-!
+
+ Adds a slot to the argument,
+ separated from any previous arguments
+ by the standard separator.
+
+ \item
+ \mylst!cargslot!, \mylst!carg-!
+
+ Adds a slot to the argument,
+ separated from any previous arguments
+ by a comma.
+
+ \item
+ \mylst!cleararg!
+
+ Clears the argument.
+
+ \item
+ \mylst!clearprearg!
+
+ Clears the pre-argument.
+
+ \item
+ \mylst!clearpostarg!
+
+ Clears the post-argument.
+\end{itemize}
+
+
+\section{Keys for the upper index}
+
+\begin{itemize}
+ \item
+ \mylst!upper={$\<value\>$}!
+
+ Adds to the upper index,
+ with no separator from any previous upper index.
+
+ \item
+ \mylst!supper={$\<value\>$}!
+
+ Adds to the upper index,
+ separated from any previous upper
+ index by the default separator.
+
+ \item
+ \mylst!cupper={$\<value\>$}!
+
+ Adds to the upper index,
+ separated from any previous upper
+ index by a comma.
+
+ \item
+ \mylst!preupper={$\<value\>$}!
+
+ Sets the pre-upper index.
+
+ \item
+ \mylst!postupper={$\<value\>$}!
+
+ Sets the post-upper index.
+
+ \item
+ \mylst!upperputleft={$\<value\>$}!
+
+ Adds something to the left of the upper index.
+ As with keys like~\lstinline!upper!, this
+ will also increase the number of registered
+ upper indices by~\( 1 \), and
+ it will
+ set \lstinline!nextupperwithsep=true!.
+
+ \item
+ \mylst!setuppersep={$\<value\>$}!
+
+ Sets the upper index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextupperwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next upper index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!upperwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the upper index, separated from
+ any prevous upper index by~\<separator\>.
+
+ \item
+ \mylst!upper-!, \mylst!upperslot!
+
+ Adds a slot to the upper index,
+ with no separator from any previous upper index.
+
+ \item
+ \mylst!supper-!, \mylst!supperslot!
+
+ Adds a slot to the upper index,
+ separated from any previous upper
+ index by the default separator.
+
+ \item
+ \mylst!cupper-!, \mylst!cupperslot!
+
+ Adds a slot to the upper index,
+ separated from any previous upper
+ index by a comma.
+
+ \item
+ \mylst!setupperslot={$\<value\>$}!
+
+ Sets the slot for the upper index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!upper-withothersep={$\<separator\>$}!,
+ \mylst!upperslotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the upper index, separated
+ from any previous upper index by~\<separator\>.
+
+ \item
+ \mylst!upper...!, \mylst!upperdots!
+
+ Adds three dots to the upper index,
+ with no separator from any previous upper index.
+
+ \item
+ \mylst!supper...!, \mylst!supperdots!
+
+ Adds three dots to the upper index,
+ separated from any previous upper
+ index by the default separator.
+
+ \item
+ \mylst!cupper...!, \mylst!cupperdots!
+
+ Adds three dots to the upper index,
+ separated from any previous upper
+ index by a comma.
+
+ \item
+ \mylst!setupperdots={$\<value\>$}!
+
+ Sets the dots for the upper index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!upper...withothersep={$\<separator\>$}!,
+ \mylst!upperdotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the upper index,
+ separated from any previous upper index
+ by~\<separator\>.
+
+ \item
+ \mylst!upper*!
+
+ Adds a bullet to the upper index,
+ with no separator from any previous upper index.
+
+ \item
+ \mylst!upper**!
+
+ Adds a double bullet to the upper index,
+ with no separator from any previous upper index.
+
+ \item
+ \mylst!supper*!
+
+ Adds a bullet to the upper index,
+ separated from any previous upper
+ index by the default separator.
+
+ \item
+ \mylst!supper**!
+
+ Adds a double bullet to the upper index,
+ separated from any previous upper
+ index by the default separator.
+
+ \item
+ \mylst!cupper*!
+
+ Adds a bullet to the upper index,
+ separated from any previous upper
+ index by a comma.
+
+ \item
+ \mylst!cupper**!
+
+ Adds a double bullet to the upper index,
+ separated from any previous upper
+ index by a comma.
+
+ \item
+ \mylst!upper*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the upper index,
+ separated from any previous upper index
+ by~\<separator\>.
+
+ \item
+ \mylst!upper**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the upper index,
+ separated from any previous upper index
+ by~\<separator\>.
+
+ \item
+ \mylst!clearupper!
+
+ Clears the upper index.
+
+ \item
+ \mylst!clearpreupper!
+
+ Clears the pre-upper index.
+
+ \item
+ \mylst!clearpostupper!
+
+ Clears the post-upper index.
+\end{itemize}
+
+\section{Keys for the lower index}
+
+\begin{itemize}
+ \item
+ \mylst!lower={$\<value\>$}!
+
+ Adds to the lower index,
+ with no separator from any previous lower index.
+
+ \item
+ \mylst!slower={$\<value\>$}!
+
+ Adds to the lower index,
+ separated from any previous lower
+ index by the default separator.
+
+ \item
+ \mylst!clower={$\<value\>$}!
+
+ Adds to the lower index,
+ separated from any previous lower
+ index by a comma.
+
+ \item
+ \mylst!prelower={$\<value\>$}!
+
+ Sets the pre-lower index.
+
+ \item
+ \mylst!postlower={$\<value\>$}!
+
+ Sets the post-lower index.
+
+ \item
+ \mylst!lowerputleft={$\<value\>$}!
+
+ Adds something to the left of the lower index.
+ As with keys like~\lstinline!lower!, this
+ will also increase the number of registered
+ lower indices by~\( 1 \), and
+ it will
+ set \lstinline!nextlowerwithsep=true!.
+
+ \item
+ \mylst!setlowersep={$\<value\>$}!
+
+ Sets the lower index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextlowerwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next lower index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!lowerwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the lower index, separated from
+ any prevous lower index by~\<separator\>.
+
+ \item
+ \mylst!lower-!, \mylst!lowerslot!
+
+ Adds a slot to the lower index,
+ with no separator from any previous lower index.
+
+ \item
+ \mylst!slower-!, \mylst!slowerslot!
+
+ Adds a slot to the lower index,
+ separated from any previous lower
+ index by the default separator.
+
+ \item
+ \mylst!clower-!, \mylst!clowerslot!
+
+ Adds a slot to the lower index,
+ separated from any previous lower
+ index by a comma.
+
+ \item
+ \mylst!setlowerslot={$\<value\>$}!
+
+ Sets the slot for the lower index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!lower-withothersep={$\<separator\>$}!,
+ \mylst!lowerslotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the lower index, separated
+ from any previous lower index by~\<separator\>.
+
+ \item
+ \mylst!lower...!, \mylst!lowerdots!
+
+ Adds three dots to the lower index,
+ with no separator from any previous lower index.
+
+ \item
+ \mylst!slower...!, \mylst!slowerdots!
+
+ Adds three dots to the lower index,
+ separated from any previous lower
+ index by the default separator.
+
+ \item
+ \mylst!clower...!, \mylst!clowerdots!
+
+ Adds three dots to the lower index,
+ separated from any previous lower
+ index by a comma.
+
+ \item
+ \mylst!setlowerdots={$\<value\>$}!
+
+ Sets the dots for the lower index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!lower...withothersep={$\<separator\>$}!,
+ \mylst!lowerdotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the lower index,
+ separated from any previous lower index
+ by~\<separator\>.
+
+ \item
+ \mylst!lower*!
+
+ Adds a bullet to the lower index,
+ with no separator from any previous lower index.
+
+ \item
+ \mylst!lower**!
+
+ Adds a double bullet to the lower index,
+ with no separator from any previous lower index.
+
+ \item
+ \mylst!slower*!
+
+ Adds a bullet to the lower index,
+ separated from any previous lower
+ index by the default separator.
+
+ \item
+ \mylst!slower**!
+
+ Adds a double bullet to the lower index,
+ separated from any previous lower
+ index by the default separator.
+
+ \item
+ \mylst!clower*!
+
+ Adds a bullet to the lower index,
+ separated from any previous lower
+ index by a comma.
+
+ \item
+ \mylst!clower**!
+
+ Adds a double bullet to the lower index,
+ separated from any previous lower
+ index by a comma.
+
+ \item
+ \mylst!lower*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the lower index,
+ separated from any previous lower index
+ by~\<separator\>.
+
+ \item
+ \mylst!lower**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the lower index,
+ separated from any previous lower index
+ by~\<separator\>.
+
+ \item
+ \mylst!clearlower!
+
+ Clears the lower index.
+
+ \item
+ \mylst!clearprelower!
+
+ Clears the pre-lower index.
+
+ \item
+ \mylst!clearpostlower!
+
+ Clears the post-lower index.
+\end{itemize}
+
+\section{Keys for the upper left index}
+
+\begin{itemize}
+ \item
+ \mylst!upperleft={$\<value\>$}!
+
+ Adds to the upper left index,
+ with no separator from any previous upper left index.
+
+ \item
+ \mylst!supperleft={$\<value\>$}!
+
+ Adds to the upper left index,
+ separated from any previous upper left
+ index by the default separator.
+
+ \item
+ \mylst!cupperleft={$\<value\>$}!
+
+ Adds to the upper left index,
+ separated from any previous upper left
+ index by a comma.
+
+ \item
+ \mylst!preupperleft={$\<value\>$}!
+
+ Sets the pre-upper left index.
+
+ \item
+ \mylst!postupperleft={$\<value\>$}!
+
+ Sets the post-upper left index.
+
+ \item
+ \mylst!upperleftputleft={$\<value\>$}!
+
+ Adds something to the left of the upper left index.
+ As with keys like~\lstinline!upperleft!, this
+ will also increase the number of registered
+ upper left indices by~\( 1 \), and
+ it will
+ set \lstinline!nextupperleftwithsep=true!.
+
+ \item
+ \mylst!setupperleftsep={$\<value\>$}!
+
+ Sets the upper left index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextupperleftwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next upper left index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!upperleftwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the upper left index, separated from
+ any prevous upper left index by~\<separator\>.
+
+ \item
+ \mylst!upperleft-!, \mylst!upperleftslot!
+
+ Adds a slot to the upper left index,
+ with no separator from any previous upper left index.
+
+ \item
+ \mylst!supperleft-!, \mylst!supperleftslot!
+
+ Adds a slot to the upper left index,
+ separated from any previous upper left
+ index by the default separator.
+
+ \item
+ \mylst!cupperleft-!, \mylst!cupperleftslot!
+
+ Adds a slot to the upper left index,
+ separated from any previous upper left
+ index by a comma.
+
+ \item
+ \mylst!setupperleftslot={$\<value\>$}!
+
+ Sets the slot for the upper left index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!upperleft-withothersep={$\<separator\>$}!,
+ \mylst!upperleftslotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the upper left index, separated
+ from any previous upper left index by~\<separator\>.
+
+ \item
+ \mylst!upperleft...!, \mylst!upperleftdots!
+
+ Adds three dots to the upper left index,
+ with no separator from any previous upper left index.
+
+ \item
+ \mylst!supperleft...!, \mylst!supperleftdots!
+
+ Adds three dots to the upper left index,
+ separated from any previous upper left
+ index by the default separator.
+
+ \item
+ \mylst!cupperleft...!, \mylst!cupperleftdots!
+
+ Adds three dots to the upper left index,
+ separated from any previous upper left
+ index by a comma.
+
+ \item
+ \mylst!setupperleftdots={$\<value\>$}!
+
+ Sets the dots for the upper left index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!upperleft...withothersep={$\<separator\>$}!,
+ \mylst!upperleftdotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the upper left index,
+ separated from any previous upper left index
+ by~\<separator\>.
+
+ \item
+ \mylst!upperleft*!
+
+ Adds a bullet to the upper left index,
+ with no separator from any previous upper left index.
+
+ \item
+ \mylst!upperleft**!
+
+ Adds a double bullet to the upper left index,
+ with no separator from any previous upper left index.
+
+ \item
+ \mylst!supperleft*!
+
+ Adds a bullet to the upper left index,
+ separated from any previous upper left
+ index by the default separator.
+
+ \item
+ \mylst!supperleft**!
+
+ Adds a double bullet to the upper left index,
+ separated from any previous upper left
+ index by the default separator.
+
+ \item
+ \mylst!cupperleft*!
+
+ Adds a bullet to the upper left index,
+ separated from any previous upper left
+ index by a comma.
+
+ \item
+ \mylst!cupperleft**!
+
+ Adds a double bullet to the upper left index,
+ separated from any previous upper left
+ index by a comma.
+
+ \item
+ \mylst!upperleft*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the upper left index,
+ separated from any previous upper left index
+ by~\<separator\>.
+
+ \item
+ \mylst!upperleft**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the upper left index,
+ separated from any previous upper left index
+ by~\<separator\>.
+
+ \item
+ \mylst!clearupperleft!
+
+ Clears the upper left index.
+
+ \item
+ \mylst!clearpreupperleft!
+
+ Clears the pre-upper left index.
+
+ \item
+ \mylst!clearpostupperleft!
+
+ Clears the post-upper left index.
+\end{itemize}
+
+\section{Keys for the lower left index}
+
+\begin{itemize}
+ \item
+ \mylst!lowerleft={$\<value\>$}!
+
+ Adds to the lower left index,
+ with no separator from any previous lower left index.
+
+ \item
+ \mylst!slowerleft={$\<value\>$}!
+
+ Adds to the lower left index,
+ separated from any previous lower left
+ index by the default separator.
+
+ \item
+ \mylst!clowerleft={$\<value\>$}!
+
+ Adds to the lower left index,
+ separated from any previous lower left
+ index by a comma.
+
+ \item
+ \mylst!prelowerleft={$\<value\>$}!
+
+ Sets the pre-lower left index.
+
+ \item
+ \mylst!postlowerleft={$\<value\>$}!
+
+ Sets the post-lower left index.
+
+ \item
+ \mylst!lowerleftputleft={$\<value\>$}!
+
+ Adds something to the left of the lower left index.
+ As with keys like~\lstinline!lowerleft!, this
+ will also increase the number of registered
+ lower left indices by~\( 1 \), and
+ it will
+ set \lstinline!nextlowerleftwithsep=true!.
+
+ \item
+ \mylst!setlowerleftsep={$\<value\>$}!
+
+ Sets the lower left index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextlowerleftwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next lower left index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!lowerleftwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the lower left index, separated from
+ any prevous lower left index by~\<separator\>.
+
+ \item
+ \mylst!lowerleft-!, \mylst!lowerleftslot!
+
+ Adds a slot to the lower left index,
+ with no separator from any previous lower left index.
+
+ \item
+ \mylst!slowerleft-!, \mylst!slowerleftslot!
+
+ Adds a slot to the lower left index,
+ separated from any previous lower left
+ index by the default separator.
+
+ \item
+ \mylst!clowerleft-!, \mylst!clowerleftslot!
+
+ Adds a slot to the lower left index,
+ separated from any previous lower left
+ index by a comma.
+
+ \item
+ \mylst!setlowerleftslot={$\<value\>$}!
+
+ Sets the slot for the lower left index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!lowerleft-withothersep={$\<separator\>$}!,
+ \mylst!lowerleftslotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the lower left index, separated
+ from any previous lower left index by~\<separator\>.
+
+ \item
+ \mylst!lowerleft...!, \mylst!lowerleftdots!
+
+ Adds three dots to the lower left index,
+ with no separator from any previous lower left index.
+
+ \item
+ \mylst!slowerleft...!, \mylst!slowerleftdots!
+
+ Adds three dots to the lower left index,
+ separated from any previous lower left
+ index by the default separator.
+
+ \item
+ \mylst!clowerleft...!, \mylst!clowerleftdots!
+
+ Adds three dots to the lower left index,
+ separated from any previous lower left
+ index by a comma.
+
+ \item
+ \mylst!setlowerleftdots={$\<value\>$}!
+
+ Sets the dots for the lower left index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!lowerleft...withothersep={$\<separator\>$}!,
+ \mylst!lowerleftdotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the lower left index,
+ separated from any previous lower left index
+ by~\<separator\>.
+
+ \item
+ \mylst!lowerleft*!
+
+ Adds a bullet to the lower left index,
+ with no separator from any previous lower left index.
+
+ \item
+ \mylst!lowerleft**!
+
+ Adds a double bullet to the lower left index,
+ with no separator from any previous lower left index.
+
+ \item
+ \mylst!slowerleft*!
+
+ Adds a bullet to the lower left index,
+ separated from any previous lower left
+ index by the default separator.
+
+ \item
+ \mylst!slowerleft**!
+
+ Adds a double bullet to the lower left index,
+ separated from any previous lower left
+ index by the default separator.
+
+ \item
+ \mylst!clowerleft*!
+
+ Adds a bullet to the lower left index,
+ separated from any previous lower left
+ index by a comma.
+
+ \item
+ \mylst!clowerleft**!
+
+ Adds a double bullet to the lower left index,
+ separated from any previous lower left
+ index by a comma.
+
+ \item
+ \mylst!lowerleft*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the lower left index,
+ separated from any previous lower left index
+ by~\<separator\>.
+
+ \item
+ \mylst!lowerleft**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the lower left index,
+ separated from any previous lower left index
+ by~\<separator\>.
+
+ \item
+ \mylst!clearlowerleft!
+
+ Clears the lower left index.
+
+ \item
+ \mylst!clearprelowerleft!
+
+ Clears the pre-lower left index.
+
+ \item
+ \mylst!clearpostlowerleft!
+
+ Clears the post-lower left index.
+\end{itemize}
+
+\section{Keys for the \texttt{d}-index}
+
+\begin{itemize}
+ \item
+ \mylst!d={$\<value\>$}!
+
+ Adds to the \lstinline!d!-index,
+ with no separator from any previous \lstinline!d!-index.
+
+ \item
+ \mylst!sd={$\<value\>$}!
+
+ Adds to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by the default separator.
+
+ \item
+ \mylst!cd={$\<value\>$}!
+
+ Adds to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by a comma.
+
+ \item
+ \mylst!pred={$\<value\>$}!
+
+ Sets the pre-\lstinline!d!-index.
+
+ \item
+ \mylst!postd={$\<value\>$}!
+
+ Sets the post-\lstinline!d!-index.
+
+ \item
+ \mylst!dputleft={$\<value\>$}!
+
+ Adds something to the left of the \lstinline!d!-index.
+ As with keys like~\lstinline!d!, this
+ will also increase the number of registered
+ \lstinline!d!-indices by~\( 1 \), and
+ it will
+ set \lstinline!nextdwithsep=true!.
+
+ \item
+ \mylst!setdsep={$\<value\>$}!
+
+ Sets the \lstinline!d!-index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextdwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next \lstinline!d!-index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!dwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the \lstinline!d!-index, separated from
+ any prevous \lstinline!d!-index by~\<separator\>.
+
+ \item
+ \mylst!d-!, \mylst!dslot!
+
+ Adds a slot to the \lstinline!d!-index,
+ with no separator from any previous \lstinline!d!-index.
+
+ \item
+ \mylst!sd-!, \mylst!sdslot!
+
+ Adds a slot to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by the default separator.
+
+ \item
+ \mylst!cd-!, \mylst!cdslot!
+
+ Adds a slot to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by a comma.
+
+ \item
+ \mylst!setdslot={$\<value\>$}!
+
+ Sets the slot for the \lstinline!d!-index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!d-withothersep={$\<separator\>$}!,
+ \mylst!dslotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the \lstinline!d!-index, separated
+ from any previous \lstinline!d!-index by~\<separator\>.
+
+ \item
+ \mylst!d...!, \mylst!ddots!
+
+ Adds three dots to the \lstinline!d!-index,
+ with no separator from any previous \lstinline!d!-index.
+
+ \item
+ \mylst!sd...!, \mylst!sddots!
+
+ Adds three dots to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by the default separator.
+
+ \item
+ \mylst!cd...!, \mylst!cddots!
+
+ Adds three dots to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by a comma.
+
+ \item
+ \mylst!setddots={$\<value\>$}!
+
+ Sets the dots for the \lstinline!d!-index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!d...withothersep={$\<separator\>$}!,
+ \mylst!ddotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!d*!
+
+ Adds a bullet to the \lstinline!d!-index,
+ with no separator from any previous \lstinline!d!-index.
+
+ \item
+ \mylst!d**!
+
+ Adds a double bullet to the \lstinline!d!-index,
+ with no separator from any previous \lstinline!d!-index.
+
+ \item
+ \mylst!sd*!
+
+ Adds a bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by the default separator.
+
+ \item
+ \mylst!sd**!
+
+ Adds a double bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by the default separator.
+
+ \item
+ \mylst!cd*!
+
+ Adds a bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by a comma.
+
+ \item
+ \mylst!cd**!
+
+ Adds a double bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by a comma.
+
+ \item
+ \mylst!d*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!d**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the \lstinline!d!-index,
+ separated from any previous \lstinline!d!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!cleard!
+
+ Clears the \lstinline!d!-index.
+
+ \item
+ \mylst!clearpred!
+
+ Clears the pre-\lstinline!d!-index.
+
+ \item
+ \mylst!clearpostd!
+
+ Clears the post-\lstinline!d!-index.
+\end{itemize}
+
+\section{Keys for the \texttt{i}-index}
+
+\begin{itemize}
+ \item
+ \mylst!i={$\<value\>$}!
+
+ Adds to the \lstinline!i!-index,
+ with no separator from any previous \lstinline!i!-index.
+
+ \item
+ \mylst!si={$\<value\>$}!
+
+ Adds to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by the default separator.
+
+ \item
+ \mylst!ci={$\<value\>$}!
+
+ Adds to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by a comma.
+
+ \item
+ \mylst!prei={$\<value\>$}!
+
+ Sets the pre-\lstinline!i!-index.
+
+ \item
+ \mylst!posti={$\<value\>$}!
+
+ Sets the post-\lstinline!i!-index.
+
+ \item
+ \mylst!iputleft={$\<value\>$}!
+
+ Adds something to the left of the \lstinline!i!-index.
+ As with keys like~\lstinline!i!, this
+ will also increase the number of registered
+ \lstinline!i!-indices by~\( 1 \), and
+ it will
+ set \lstinline!nextiwithsep=true!.
+
+ \item
+ \mylst!setisep={$\<value\>$}!
+
+ Sets the \lstinline!i!-index separator to~\<value\>.
+ By default, this is a comma.
+
+ \item
+ \mylst!nextiwithsep={$\values\<true|\default{false}\>$}!
+
+ Sets whether the next \lstinline!i!-index should
+ be separated from the current one by a separator.
+
+ \item
+ \mylst!iwithothersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the \lstinline!i!-index, separated from
+ any prevous \lstinline!i!-index by~\<separator\>.
+
+ \item
+ \mylst!i-!, \mylst!islot!
+
+ Adds a slot to the \lstinline!i!-index,
+ with no separator from any previous \lstinline!i!-index.
+
+ \item
+ \mylst!si-!, \mylst!sislot!
+
+ Adds a slot to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by the default separator.
+
+ \item
+ \mylst!ci-!, \mylst!cislot!
+
+ Adds a slot to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by a comma.
+
+ \item
+ \mylst!setislot={$\<value\>$}!
+
+ Sets the slot for the \lstinline!i!-index.
+ By default, this is~\lstinline!{-}!.
+
+ \item
+ \mylst!i-withothersep={$\<separator\>$}!,
+ \mylst!islotwithothersep={$\<separator\>$}!
+
+
+ Adds a slot to the \lstinline!i!-index, separated
+ from any previous \lstinline!i!-index by~\<separator\>.
+
+ \item
+ \mylst!i...!, \mylst!idots!
+
+ Adds three dots to the \lstinline!i!-index,
+ with no separator from any previous \lstinline!i!-index.
+
+ \item
+ \mylst!si...!, \mylst!sidots!
+
+ Adds three dots to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by the default separator.
+
+ \item
+ \mylst!ci...!, \mylst!cidots!
+
+ Adds three dots to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by a comma.
+
+ \item
+ \mylst!setidots={$\<value\>$}!
+
+ Sets the dots for the \lstinline!i!-index.
+ By default, this is~\lstinline!\dots!.
+
+ \item
+ \mylst!i...withothersep={$\<separator\>$}!,
+ \mylst!idotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!i*!
+
+ Adds a bullet to the \lstinline!i!-index,
+ with no separator from any previous \lstinline!i!-index.
+
+ \item
+ \mylst!i**!
+
+ Adds a double bullet to the \lstinline!i!-index,
+ with no separator from any previous \lstinline!i!-index.
+
+ \item
+ \mylst!si*!
+
+ Adds a bullet to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by the default separator.
+
+ \item
+ \mylst!si**!
+
+ Adds a double bullet to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by the default separator.
+
+ \item
+ \mylst!ci*!
+
+ Adds a bullet to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by a comma.
+
+ \item
+ \mylst!ci**!
+
+ Adds a double bullet to the \lstinline!i!-index,
+ separated from any previous
+ \lstinline!i!-index by a comma.
+
+ \item
+ \mylst!i*withothersep={$\<separator\>$}!
+
+ Adds a bullet to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!i**withothersep={$\<separator\>$}!
+
+ Adds a double bullet to the \lstinline!i!-index,
+ separated from any previous \lstinline!i!-index
+ by~\<separator\>.
+
+ \item
+ \mylst!cleari!
+
+ Clears the \lstinline!i!-index.
+
+ \item
+ \mylst!clearprei!
+
+ Clears the pre-\lstinline!i!-index.
+
+ \item
+ \mylst!clearposti!
+
+ Clears the post-\lstinline!i!-index.
+\end{itemize}
+
+\section{The predefined argument keys}\label{sec:predefined_arg_keys}
+
+These are the predefined keys that work inside the argument.
+
+\begin{itemize}
+ \item
+ \mylst!execute={$\<code\>$}!
+
+ Executes the \<code\> on the spot.
+ This is not strictly speaking a logic key,
+ but this allows you to perform logical
+ operations that are not allowed
+ by the other logic keys.
+
+ \item
+ \mylst!setkeys={$\<keys\>$}!,
+ \mylst!keysset={$\<keys\>$}!
+
+ Sets the keys \<keys\>.
+
+ \item
+ \mylst!setkeysx={$\<keys\>$}!,
+ \mylst!keyssetx={$\<keys\>$}!
+
+ Sets the keys \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!setargkeys={$\<keys\>$}!,
+ \mylst!argkeysset={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>.
+
+ \item
+ \mylst!setargkeysx={$\<keys\>$}!,
+ \mylst!argkeyssetx={$\<keys\>$}!
+
+ Sets the argynebt keys \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!setargsinglekeys={$\<keys\>$}!,
+ \mylst!argsinglekeysset={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!setargsinglekeysx={$\<keys\>$}!,
+ \mylst!argsinglekeyssetx={$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ If a key is not found, the value
+ is fully expanded and printed.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!setoneargsinglekey={$\<key\>$}!,
+ \mylst!oneargsinglekeyset={$\<key\>$}!
+
+ Sets one single argument key taking no values.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!setoneargsinglekeyx={$\<key\>$}!,
+ \mylst!oneargsinglekeysetx={$\<key\>$}!
+
+ Sets one single argument key taking no values,
+ If the key is not found, the value
+ is fully expanded and printed.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!setargwithoutkeyval={$\<value\>$}!,
+ \mylst!argwithoutkeyvalset={$\<value\>$}!
+
+ Sets the argument, allowing no keyval syntax.
+
+ \item
+ \mylst!setargwithoutkeyvalx={$\<value\>$}!,
+ \mylst!argwithoutkeyvalsetx={$\<value\>$}!
+
+ Sets the argument, fully expanding its value,
+ and allowing no keyval syntax.
+
+ \item
+ \mylst!default={$\<value\>$}!
+
+ This is the value that is applied whenever
+ a value is passed to the argument that is not
+ recognized as a key, e.g.~the~\lstinline!\vx!
+ in~\lstinline!\vf{\vx}!.
+ By default, this is set to be equivalent
+ to~\lstinline!s!.
+
+ \item
+ \mylst!s={$\<value\>$}!
+
+ Adds the \<value\> to the argument,
+ separated from any previous argument
+ by the default separator.
+
+ \item
+ \mylst!c={$\<value\>$}!
+
+ Adds the \<value\> to the argument,
+ separated from any previous argument
+ by a comma.
+
+ \item
+ \mylst!-!, \mylst!slot!
+
+ Adds a slot to the argument,
+ separated from any previous argument
+ by the default separator.
+
+ \item
+ \mylst!c-!, \mylst!cslot!
+
+ Adds a slot to the argument,
+ separated from any previous argument
+ by a comma.
+
+ \item
+ \mylst!...!, \mylst!dots!
+
+ Adds three dots to the argument,
+ separated from any previous argument
+ by the default separator.
+
+ \item
+ \mylst!c...!, \mylst!cdots!
+
+ Adds three dots to the argument,
+ separated from any previous argument
+ by a comma.
+
+ \item
+ \mylst!othersep={$\<separator\>$}{$\<value\>$}!
+
+ Adds \<value\> to the argument,
+ separated from any previous argument
+ by~\<separator\>.
+
+ \item
+ \mylst!-withothersep={$\<separator\>$}! ,
+ \mylst!slotwithothersep={$\<separator\>$}!
+
+ Adds a slot to the argument, separated
+ from any previous argument by \<separator\>.
+
+ \item
+ \mylst!...withothersep={$\<separator\>$}! ,
+ \mylst!dotswithothersep={$\<separator\>$}!
+
+ Adds three dots to the argument, separated
+ from any previous argument by~\<separator\>.
+\end{itemize}
+
+\section{The programming commands}\label{sec:programming_commands}
+
+The following commands are available for programming inside \lstinline!execute={...}!:
+
+\begin{itemize}
+ \item
+ \mylst!\SemantexThis!
+
+ Returns the name of the current class or object. The name is stored in the form \mylst!object_$\<name of object without backslash\>$!
+ or~\mylst!class_$\<name of class without backslash\>$!,
+ which is the way the names are stored internally.
+
+ \item
+ \mylst!\SemantexSetKeys{$\<keys\>$}!,
+ \mylst!\SemantexKeysSet{$\<keys\>$}!
+
+ Sets the \<keys\>.
+
+ \item
+ \mylst!\SemantexSetKeysx{$\<keys\>$}!,
+ \mylst!\SemantexKeysSetx{$\<keys\>$}!
+
+ Sets the \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!\SemantexSetArgKeys{$\<keys\>$}!,
+ \mylst!\SemantexArgKeysSet{$\<keys\>$}!
+
+ Sets the argument \<keys\>.
+
+ \item
+ \mylst!\SemantexSetArgKeysx{$\<keys\>$}!,
+ \mylst!\SemantexArgKeysSetx{$\<keys\>$}!
+
+ Sets the argument \<keys\>, but fully expands their values.
+
+ \item
+ \mylst!\SemantexSetArgSingleKeys{$\<keys\>$}!,
+ \mylst!\SemantexArgSingleKeysSet{$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!\SemantexSetArgSingleKeysx{$\<keys\>$}!,
+ \mylst!\SemantexArgSingleKeysSetx{$\<keys\>$}!
+
+ Sets the argument keys \<keys\>,
+ but only supports keys taking no values.
+ If a key is not found, the value
+ is fully expanded and printed.
+ This allows the arguments to contain equality
+ signs without causing issues.
+
+ \item
+ \mylst!\SemantexSetOneArgSingleKey{$\<keys\>$}!,
+ \mylst!\SemantexOneSingleArgKeySet{$\<keys\>$}!
+
+ Sets one single argument key taking no values.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!\SemantexSetOneArgSingleKeyx{$\<keys\>$}!,
+ \mylst!\SemantexOneSingleArgKeySetx{$\<keys\>$}!
+
+ Sets one single argument key taking no values,
+ If the key is not found, the value
+ is fully expanded and printed.
+ This allows the argument to contain
+ equality signs and commas without cuasing issues.
+
+ \item
+ \mylst!\SemantexSetArgWithoutKeyval{$\<value\>$}!,
+ \mylst!\SemantexArgWithoutKeyvalSet{$\<value\>$}!
+
+ Sets the argument, allowing no keyval syntax.
+
+ \item
+ \mylst!\SemantexSetArgWithoutKeyval{$\<value\>$}!,
+ \mylst!\SemantexArgWithoutKeyvalSet{$\<value\>$}!
+
+ Sets the argument, fully expanding its value,
+ and allowing no keyval syntax.
+
+ \item
+ \mylst!\SemantexDataProvide{$\<data\>$}!
+
+ Provides a new piece of data consisting of a token list.
+
+ \item
+ \mylst!\SemantexDataSet{$\<data\>$}{$\<value\>$}!
+
+ Sets the \<data\> to \<value\>.
+
+ \item
+ \mylst!\SemantexDataSetx{$\<data\>$}{$\<value\>$}!
+
+ Sets the \<data\> to \<value\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!\SemantexDataPutLeft{$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the left of \<data\>.
+
+ \item
+ \mylst!\SemantexDataPutLeftx{$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the left of \<data\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!\SemantexDataPutRight{$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the right of \<data\>.
+
+ \item
+ \mylst!\SemantexDataPutRightx{$\<data\>$}{$\<value\>$}!
+
+ Adds the \<value\> to the right of \<data\>, but fully expands the \<value\> first.
+
+ \item
+ \mylst!\SemantexDataGet{$\<data\>$}!
+
+ Returns the value of \<data\>.
+
+ \item
+ \mylst!\SemantexDataGetExpNot{$\<data\>$}!
+
+ Returns the value of \<data\>,
+ enclosed in \lstinline!\unexpanded!
+ so that it can be used within an \lstinline!x!-type
+ expansion.
+
+ \item
+ \mylst!\SemantexDataClear{$\<data\>$}!
+
+ Clears the piece of data~\<data\>.
+
+ \item
+ \mylst!\SemantexBoolProvide{$\<boolean\>$}!
+
+ Provides a new piece of data consisting of a boolean.
+
+ \item
+ \mylst!\SemantexBoolSetTrue{$\<boolean\>$}!
+
+ Sets the \<boolean\> to true.
+
+ \item
+ \mylst!\SemantexBoolSetFalse{$\<boolean\>$}!
+
+ Sets the \<boolean\> to false.
+
+ \item
+ \mylst!\SemantexBoolIfTF{$\<boolean\>$}{$\<if true\>$}{$\<if false\>$}!,\\
+ \mylst!\SemantexBoolIfT{$\<boolean\>$}{$\<if true\>$}!,\\
+ \mylst!\SemantexBoolIfF{$\<boolean\>$}{$\<if false\>$}!
+
+ Runs \<if~true\> or \<if~false\>, depending on the value of \<boolean\>.
+
+ \item
+ \mylst!\SemantexIntProvide{$\<integer\>$}!
+
+ Provides a new piece of data consisting of an integer.
+
+ \item
+ \mylst!\SemantexIntGet{$\<integer\>$}!
+
+ Returns the value of the \<integer\>.
+
+ \item
+ \mylst!\SemantexIntSet{$\<integer\>$}{$\<value\>$}!
+
+ Sets the \<integer\> to \<value\>.
+
+ \item
+ \mylst!\SemantexIntIncr{$\<integer\>$}!
+
+ Increases the \<integer\> by~\( 1 \).
+
+ \item
+ \mylst!\SemantexIntIfEqTF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!\SemantexIntIfEqT$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!\SemantexIntIfEqF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integers \<integer\num{1}\> and \<integer\num{2}\> are equal,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!\SemantexIntIfGreaterTF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!\SemantexIntIfGreaterT{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!\SemantexIntIfGreaterF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integer \<integer\num{1}\> is greater than~\<integer\num{2}\>,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!\SemantexIntIfLessTF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!\SemantexIntIfLessT{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!\SemantexIntIfLessF{$\<integer\num{1}\>$}{$\<integer\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the integer \<integer\num{1}\> is less than~\<integer\num{2}\>,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!\SemantexIntClear{$\<integer\>$}!
+
+ Clears the \<integer\>.
+
+ \item
+ \mylst!\SemantexIfBlankTF{$\<tokens\>$}{$\<if true\>$}{$\<if false\>$}!,\\
+ \mylst!\SemantexIfBlankT{$\<tokens\>$}{$\<if true\>$}!,\\
+ \mylst!\SemantexIfBlankF{$\<tokens\>$}{$\<if false\>$}!
+
+ Fully expands the \<tokens\> and checks if it is blank,
+ and runs \<if true\> or \<if false\> according to this.
+
+ \item
+ \mylst!\SemantexStrIfEqTF{$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if true\>$}{$\<if false\>$}!, \\
+ \mylst!\SemantexStrIfEqT{$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if true\>$}!, \\
+ \mylst!\SemantexStrIfEqF{$\<string\num{1}\>$}{$\<string\num{2}\>$}{$\<if false\>$}!
+
+ Checks whether the strings \<string\num{1}\> and \<string\num{2}\> are equal,
+ and runs \<if~true\> or \<if~false\> accordingly.
+
+ \item
+ \mylst!\SemantexERROR{$\<error message\>$}!
+
+ Issues an generic error message. At the end of the message, it automatically adds \enquote{object~\usercommand\<object name\> on line~\<line number\>}
+ or \enquote{class~\usercommand\<Class name\> on line~\<line number\>}.
+
+ \item
+ \mylst!\SemantexERRORKeyValueNotFound{$\<key\>$}{$\<value\>$}!
+
+ Issues an error, saying that the key~\<key\> was set to the unknown value~\<value\>.
-For now, the system seems to work fine as long as you do \enquote{normal} things. The only real bug that I currently know of occurs if you use the key~\lstinline!Otherspar! in a heading. Then it all dies painfully.
-Then again, why the heck would you do that in the first place? Who scales parentheses in headings?
+ \item
+ \mylst!\SemantexERRORArgKeyValueNotFound{$\<key\>$}{$\<value\>$}!
+
+ Issues an error, saying that the argument key~\<key\> was set to the unknown value~\<value\>.
-%\input{testground}
+ \item
+ \mylst!\SemantexExpNot{$\<value\>$}!
+
+ An alias for \lstinline!\unexpanded! (also known as \lstinline!\exp_not:N! in~\LaTeX3).
+\end{itemize}
+
+\section{The class types}
+
+The \semantex system uses several different \emph{class types}.
+In fact, all class types are identical internally; the low-level machinery of \semantex does not \enquote{know} what type a class has.
+The only difference between the class types is the \emph{input syntax}.
+In other words, it determines which arguments an object of that class
+can take. The syntax for creating new objects
+also varies.
+
+The current implementation has the following
+class types:
+
+\begin{itemize}
+ \item \lstinline!Variable!:
+ A new class is declared with the
+ syntax
+ \begin{lstlisting}
+ \NewVariableClass{@\usercommand\<Class\>@}[@\<options\>@]
+ \end{lstlisting}
+ A new object is declared by
+ \begin{lstlisting}
+ \NewObject@\usercommand\<Class\>@@\usercommand\<object\>@{@\<symbol\>@}[@\<options\>@]
+ \end{lstlisting}
+ The syntax for this object is
+ \begin{lstlisting}
+ @\usercommand\<object\>@[@\<options\>@]{@\<argument\>@}
+ \end{lstlisting}
+ \item \lstinline!Cohomology!:
+ A new class is declared with the
+ syntax
+ \begin{lstlisting}
+ \NewCohomologyClass@\usercommand\<Class\>@[@\<options\>@]
+ \end{lstlisting}
+ A new object is declared by
+ \begin{lstlisting}
+ \NewObject@\usercommand\<Class\>@@\usercommand\<object\>@{@\<symbol\>@}[@\<options\>@]
+ \end{lstlisting}
+ The syntax for this object is
+ \begin{lstlisting}
+ @\usercommand\<object\>@[@\<options\>@]{@\<degree\>@}{@\<argument\>@}
+ \end{lstlisting}
+ \item \lstinline!Symbol!:
+ A new class is declared with the
+ syntax
+ \begin{lstlisting}
+ \NewSimpleClass@\usercommand\<Class\>@[@\<options\>@]
+ \end{lstlisting}
+ A new object is declared by
+ \begin{lstlisting}
+ \NewObject@\usercommand\<Class\>@@\usercommand\<object\>@{@\<symbol\>@}[@\<options\>@]
+ \end{lstlisting}
+ The syntax for this object is
+ \begin{lstlisting}
+ @\usercommand\<object\>@[@\<options\>@]
+ \end{lstlisting}
+ \item \lstinline!Delimiter!:
+ A new class is declared with the syntax
+ \begin{lstlisting}
+ \NewDelimiterClass@\usercommand\<Class\>@[@\<options\>@]
+ \end{lstlisting}
+ A new object is declared by
+ \begin{lstlisting}
+ \NewObject@\usercommand\<Class\>@@\usercommand\<object\>@{@\<left bracket\>@}{@\<right bracket\>@}[@\<options\>@]
+ \end{lstlisting}
+ The syntax for this object is
+ \begin{lstlisting}
+ @\usercommand\<object\>@[@\<options\>@]{@\<argument\>@}
+ \end{lstlisting}
+ \item \lstinline!Simple!:
+ A new class is declared with the
+ syntax
+ \begin{lstlisting}
+ \NewSimpleClass@\usercommand\<Class\>@[@\<options\>@]
+ \end{lstlisting}
+ A new object is declared by
+ \begin{lstlisting}
+ \NewObject@\usercommand\<Class\>@@\usercommand\<object\>@{@\<symbol\>@}[@\<options\>@]
+ \end{lstlisting}
+ The syntax for this object is
+ \begin{lstlisting}
+ @\usercommand\<object\>@
+ \end{lstlisting}
+\end{itemize}
+
+Let me add that \semantex uses a very clear separation between the input syntax and the underlying machinery. Because of this, if the user needs a different kind of class type, it is not very hard to create one. You must simply open the source code of \semantex, find the class you want to modify, and then copy the definition of the command~\mylst!\New$\<Class type\>$Class! and modify it in whatever way you want.
+
+The last class type, called \lstinline!Simple!,
+is the class type of the class~\lstinline!\SemantexBaseObject!. This class is pretty useless as all it does is print its symbol, without allowing any keyval syntax. So you simply should not use it.
+
+\section{The predefined data}
+
+By default, the following data are defined for each class or object and are accessible via
+the programming keys and commands:
+
+\begin{itemize}
+ \item
+ \mylst!symbol!
+ (token list):
+ the symbol.
+ \item
+ \mylst!output!
+ (token list):
+ the name of the output class.
+ \item
+ \mylst!outputoptions!
+ (token list):
+ the output options, i.e.~the options to be passed to the output class.
+ \item
+ \mylst!parseoptions!
+ (token list):
+ the parse options, i.e.~the options that are invoked
+ during the parse routine.
+ \item
+ \mylst!texclass!
+ (token list):
+ the \TeX\ character class command that the final output
+ is evnetually wrapped around;
+ the intended use of this is the \TeX\ commands
+ \lstinline!\mathord!, \lstinline!\mathop!, \lstinline!\mathbin!, \lstinline!\mathrel!, \lstinline!\mathopen!, \lstinline!\mathclose!, and~\lstinline!\mathpunct!.
+ \item
+ \lstinline!heightphantom!
+ (token list):
+ the height phantom that is used
+ for calculating the height of left indices.
+ \item
+ \lstinline!slantingphantom!
+ (token list):
+ the slanting phantom that is used for
+ calculating the slanting of left indices.
+ \item
+ \lstinline!parsize!
+ (token list):
+ the size of the argument parentheses.
+ Here, the value~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+ The default value is \lstinline!normal!.
+ \item
+ \lstinline!leftpar!
+ (token list):
+ the left argument parenthesis;
+ the default value is~\lstinline!(!.
+ \item
+ \lstinline!rightpar!
+ (token list):
+ the right argument parenthesis;
+ the default value is~\lstinline!)!.
+ \item
+ \lstinline!sparsize!
+ (token list):
+ the size of the symbol parentheses (for use with the \lstinline!spar!~routine).
+ Here, the value~\lstinline!normal! means normal size
+ parentheses,
+ \lstinline!auto! and~\lstinline!*!
+ mean auto-scaled parentheses using~\lstinline!\left...\right!.
+ If another value is received, that value
+ is used for the parenthesis size,
+ so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+ \lstinline!\bigg!,~\lstinline!\Bigg!.
+ The default value is \lstinline!normal!.
+ \item
+ \lstinline!leftspar!
+ (token list):
+ the left symbol parenthesis (for use with the \lstinline!spar!~routine);
+ the default value is~\lstinline!(!.
+ \item
+ \lstinline!rightspar!
+ (token list):
+ the right symbol parenthesis (for use with the \lstinline!spar!~routine);
+ the default value is~\lstinline!)!.
+ \item
+ \lstinline!arg!
+ (token list):
+ the argument.
+ \item
+ \lstinline!prearg!
+ (token list):
+ to be printed in front of the argument, if the argument is non-empty.
+ \item
+ \lstinline!postarg!
+ (token list):
+ to be printed after the argument, if the argument is non-empty.
+ \item
+ \lstinline!argsep!
+ (token list):
+ the argument separator;
+ comma by default.
+ \item
+ \lstinline!argslot!
+ (token list):
+ the argument slot;
+ \lstinline!{-}!~by default.
+ \item
+ \lstinline!argdots!
+ (token list):
+ the argument dots;
+ \lstinline!\dots!~by default.
+ % Upper index:
+ \item
+ \lstinline!upper!
+ (token list):
+ the upper index.
+ \item
+ \lstinline!preupper!
+ (token list):
+ the pre-upper index, to be printed in front of the upper index,
+ if the upper index is non-empty.
+ \item
+ \mylst!postupper!
+ (token list)
+ the post-upper index, to be printed after the upper index,
+ if the upper index is non-empty.
+ \item
+ \mylst!uppersep!
+ (token list):
+ the upper index separator;
+ comma by default.
+ \item
+ \mylst!upperdots!
+ (token list):
+ the upper dots; \lstinline!\dots!~by default.
+ \item
+ \mylst!upperslot!
+ (token list):
+ the upper slot; \lstinline!{-}!~by default.
+ % Lower index:
+ \item
+ \lstinline!lower!
+ (token list):
+ the lower index.
+ \item
+ \lstinline!prelower!
+ (token list):
+ the pre-lower index, to be printed in front of the lower index,
+ if the lower index is non-empty.
+ \item
+ \mylst!postlower!
+ (token list)
+ the post-lower index, to be printed after the lower index,
+ if the lower index is non-empty.
+ \item
+ \mylst!lowersep!
+ (token list):
+ the lower index separator;
+ comma by default.
+ \item
+ \mylst!lowerdots!
+ (token list):
+ the lower dots; \lstinline!\dots!~by default.
+ \item
+ \mylst!lowerslot!
+ (token list):
+ the lower slot; \lstinline!{-}!~by default.
+ % Upper left index:
+ \item
+ \lstinline!upperleft!
+ (token list):
+ the upper left index.
+ \item
+ \lstinline!preupperleft!
+ (token list):
+ the pre-upper left index, to be printed in front of the upper left index,
+ if the upper left index is non-empty.
+ \item
+ \mylst!postupperleft!
+ (token list)
+ the post-upper left index, to be printed after the upper left index,
+ if the upper left index is non-empty.
+ \item
+ \mylst!upperleftsep!
+ (token list):
+ the upper left index separator;
+ comma by default.
+ \item
+ \mylst!upperleftdots!
+ (token list):
+ the upper left dots; \lstinline!\dots!~by default.
+ \item
+ \mylst!upperleftslot!
+ (token list):
+ the upper left slot; \lstinline!{-}!~by default.
+ % Lower left index:
+ \item
+ \lstinline!lowerleft!
+ (token list):
+ the lower left index.
+ \item
+ \lstinline!prelowerleft!
+ (token list):
+ the pre-lower left index, to be printed in front of the lower left index,
+ if the lower left index is non-empty.
+ \item
+ \mylst!postlowerleft!
+ (token list)
+ the post-lower left index, to be printed after the lower left index,
+ if the lower left index is non-empty.
+ \item
+ \mylst!lowerleftsep!
+ (token list):
+ the lower left index separator;
+ comma by default.
+ \item
+ \mylst!lowerleftdots!
+ (token list):
+ the lower left dots; \lstinline!\dots!~by default.
+ \item
+ \mylst!lowerleftslot!
+ (token list):
+ the lower left slot; \lstinline!{-}!~by default.
+ \item
+ \mylst!uppergrading!
+ (boolean):
+ whether or not to use
+ upper (cohomological) grading; true by default.
+ \item
+ \mylst!par!
+ (boolean):
+ whether or not to use parentheses; true by default.
+ \item
+ \mylst!flexpar!
+ (boolean):
+ if \mylst!par! is set to false, setting \mylst!flexpar! to true
+ will still print a pair of parentheses when there is more than one argument;
+ false by default.
+ \item
+ \mylst!leftargument!
+ (boolean):
+ if true, the argument (and parentheses)
+ will be printed to the \emph{left} of the symbol;
+ false by default.
+ \item
+ \mylst!nextargwithsep!
+ (boolean):
+ if true, the next argument will have a separator printed in front of it.
+ \item
+ \mylst!nextupperwithsep!
+ (boolean):
+ If true, the next upper index will have a separator printed in front of it.
+ \item
+ \mylst!nextlowerwithsep!
+ (boolean):
+ If true, the next lower index will have a separator printed in front of it.
+ \item
+ \mylst!nextupperleftwithsep!
+ (boolean):
+ If true, the next upper left index will have a separator printed in front of it.
+ \item
+ \mylst!nextlowerleftwithsep!
+ (boolean):
+ If true, the next lower upper index will have a separator printed in front of it.
+ \item
+ \mylst!allowSemantexDelimiterSize!
+ (boolean):
+ if true, the argument will
+ allow the command \lstinline!\SemantexDelimiterSize!
+ inside the argument;
+ the default is~\lstinline!true!.
+ The only real reason to turn this off is if you are using
+ \lstinline!stripsemantex! to strip the document of \semantex markup.
+ For if it is set to false, the system will not
+ add \lstinline!\SemantexParentheses! and \lstinline!\SemantexNoParentheses!
+ all over the place to set the value of \lstinline!\SemantexDelimiterSize!,
+ and this probably looks better in the outputted code.
+ \item
+ \mylst!numberofarguments!
+ (integer):
+ the number of arguments.
+ \item
+ \mylst!numberofupperindices!
+ (integer):
+ the number of upper indices.
+ \item
+ \mylst!numberoflowerindices!
+ (integer):
+ the number of lower indices.
+ \item
+ \mylst!numberofupperleftindices!
+ (integer):
+ the number of upper left indices.
+ \item
+ \mylst!numberoflowerindices!
+ (integer):
+ the number of lower left indices.
+\end{itemize}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/stripsemantex.lua b/macros/latex/contrib/semantex/stripsemantex.lua
new file mode 100644
index 0000000000..769d5b0551
--- /dev/null
+++ b/macros/latex/contrib/semantex/stripsemantex.lua
@@ -0,0 +1,212 @@
+-- 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 .. '%f[^%a]' ,'\\SemantexIDcommand{}\\' .. str)
+end
+
+removeSuperfluousIDs = function()
+ content = content:gsub('parent(%s*)=(%s*)\\SemantexIDcommand{}','parent%1=%2')
+ content = content:gsub('class(%s*)=(%s*)\\SemantexIDcommand{}','class%1=%2')
+ content = content:gsub('clone(%s*)=(%s*)\\SemantexIDcommand{}','clone%1=%2')
+ content = content:gsub('copy(%s*)=(%s*)\\SemantexIDcommand{}','copy%1=%2')
+ content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexIDcommand{}','\\New%1Class%2')
+ content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexIDcommand{}(\\%w+%s*}?%s*{?%s*)\\SemantexIDcommand{}', '\\NewObject%1%2')
+ content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexIDcommand{}', '\\SetupClass%1')
+ content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexIDcommand{}', '\\SetupObject%1')
+end
+
+addNumbersToIDs = function()
+ local n = 1
+ local p,q = string.find(content,'\\SemantexIDcommand{}')
+ while q do
+ content = content:sub(1,q-1) .. n .. content:sub(q,-1)
+ p, q = string.find(content,'\\SemantexIDcommand{}')
+ n = n + 1
+ end
+end
+
+semantexIDluacommand = function(id, source, output)
+ local p, q = string.find(content, '\\SemantexIDcommand{' .. 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
+ end
+ end
+ content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
+ 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', '\\rbrack')
+ output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
+ output = output:gsub('\\mathopen \\langle', '\\langle')
+ output = output:gsub('\\mathclose \\rangle', '\\rangle')
+ output = output:gsub('\\mathopen \\lvert', '\\rvert')
+ output = output:gsub('\\mathclose \\rvert', '\\rvert')
+ output = output:gsub('\\mathopen \\lVert', '\\rVert')
+ output = output:gsub('\\mathclose \\rVert', '\\rVert')
+
+ 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, '\\SemantexIDcommand{' .. id .. '}')
+ end
+end
+
+stripRemainingSemantexIDs = function()
+ content = content:gsub('\\SemantexIDcommand{%d+}', '')
+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
+}
+
+\providecommand\SemantexBullet{%
+ \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+}
+\providecommand\SemantexDoubleBullet{%
+ \SemantexBullet\SemantexBullet
+}
+
+]] .. content
+end \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/stripsemantex.sty b/macros/latex/contrib/semantex/stripsemantex.sty
new file mode 100644
index 0000000000..eba5638624
--- /dev/null
+++ b/macros/latex/contrib/semantex/stripsemantex.sty
@@ -0,0 +1,114 @@
+\ProvidesExplPackage{stripsemantex}{2020/09/07}{0.1alpha}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% stripSemanTeX -- strip the document of SemanTeX markup %
+% https://ctan.org/pkg/semantex %
+% (C) 2020 Sebastian Ørsted %
+% sorsted@gmail.com %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\msg_new:nnn { stripsemantex } { not_luatex } { This~package~only~works~with~LuaTeX;~the~current~TeX~run~has~been~terminated. }
+
+\msg_new:nnn { stripsemantex } { source_not_expected } { The~source~code~in~the~file~did~not~fit~the~code~in~the~.semtex~file.~We~expected~#1~but~got~#2.~This~is~not~supposed~to~happen.~Please~report~this~bug~ASAP. }
+
+\msg_new:nnn { stripsemantex } { no_semtex_file } { The~file~#1.semtex~was~not~found.~Did~you~remember~to~do \\ \token_to_str:N\SemantexSetup{semtexfile=true}? }
+
+\msg_new:nnn { stripsemantex } { begin_document_not_found } { No~\token_to_str:N\begin{document}~found~in~the~file~#1;~it~has~to~be~in~the~main~document. }
+
+\sys_if_engine_luatex:F { \msg_fatal:nn { stripsemantex } { not_luatex } }
+
+\lua_now:n { require('stripsemantex.lua') }
+
+\cs_new_protected:Npn\stripsemantex_create_prestripped_file:n#1
+{
+ \file_if_exist:nF { #1.semtex }
+ {
+ \msg_fatal:nnn { stripsemantex } { no_semtex_file } { #1 }
+ }
+
+ \lua_now:e {
+ copy_file('\lua_escape:e{#1}.tex', '\lua_escape:e{#1}_prestripped.tex')
+ openFile('\lua_escape:e{#1}_prestripped.tex')
+ }
+
+ \cs_set:Npn\DeclareObject##1
+ {
+ \lua_now:e { addIDsToRegisters ( '\cs_to_str:N ##1' ) }
+ }
+
+ \cs_set:Npn\DeclareClass##1{
+ \lua_now:e { addIDsToRegisters ( '\cs_to_str:N ##1' ) }
+ }
+
+ \cs_set:Npn\BeginSource##1\EndSource\BeginOutput##2\EndOutput{}
+
+ \file_input:n { #1.semtex }
+
+ \lua_now:e
+ {
+ removeSuperfluousIDs()
+ addNumbersToIDs()
+ closeFile('\lua_escape:e{#1}_prestripped.tex')
+ }
+}
+
+\cs_new_protected:Npn\stripsemantex_create_stripped_file:n#1
+{
+ \file_if_exist:nF { #1_prestripped.semtex }
+ {
+ \msg_fatal:nnn { stripsemantex } { no_semtex_file } { #1_prestripped }
+ }
+
+ \lua_now:e {
+ copy_file('\lua_escape:e{#1}_prestripped.tex', '\lua_escape:e{#1}_stripped.tex')
+ openFile('\lua_escape:e{#1}_stripped.tex')
+ }
+
+ \cs_set:Npn\SemantexID##1\BeginSource##2\EndSource\BeginOutput##3\EndOutput
+ {
+ \lua_now:e
+ {
+ semantexIDluacommand( '\lua_escape:e{\tl_trim_spaces:n{##1}}' , '\lua_escape:e{\exp_not:n{##2}}' , '\lua_escape:e{\exp_not:n{##3}}' )
+ }
+ }
+
+ \cs_set:Npn\DeclareObject##1{}
+
+ \cs_set:Npn\DeclareClass##1{}
+
+ \cs_set:Npn\BeginSource##1\EndSource\BeginOutput##2\EndOutput{}
+
+ \file_input:n { #1_prestripped.semtex }
+
+ \lua_now:e
+ {
+ stripRemainingSemantexIDs()
+ addSemtexPackageToFile()
+ closeFile('\lua_escape:e{#1}_stripped.tex')
+ }
+}
+
+\cs_set_eq:NN\StripSemantexCopyFile\stripsemantex_create_prestripped_file:n
+
+\cs_new_protected:Npn\StripSemantexStripFile#1
+{
+ \begingroup
+ \ExplSyntaxOn
+ \stripsemantex_create_stripped_file:n { #1 }
+% \ExplSyntaxOff
+ \endgroup
+}
+
+\cs_new_protected:Npn\StripSemantex#1
+{
+ % This will only work after a bug has been corrected in expl3
+ \file_compare_timestamp:nNnTF { #1.semtex } < { #1_prestripped.semtex }
+ {
+ \StripSemantexStripFile { #1 }
+ }
+ {
+ \StripSemantexCopyFile { #1 }
+ }
+} \ No newline at end of file
diff --git a/macros/latex/contrib/semtex/README.md b/macros/latex/contrib/semtex/README.md
new file mode 100644
index 0000000000..d74f5f9f5c
--- /dev/null
+++ b/macros/latex/contrib/semtex/README.md
@@ -0,0 +1,37 @@
+semtex -- For stripped SemanTeX documents
+--------------------------------------
+
+The package semtex is a small LaTeX package that adds a collection
+of simple macros for parentheses and bullets. It exists for
+one purpose only: To be loaded by documents which were
+originally typeset using the package SemanTeX, but which have
+been stripped of SemanTeX markup using the package stripsemantex.
+Therefore, unless your document is one of those,
+simply **don't use this package**.
+
+And even if your document *is* one of those, there is a good
+chance you will not have to load it after all. In most cases,
+you will be able to replace the macros it provides by macros
+from other packages.
+
+----------------------------------------------------------------
+semtex -- For stripped SemanTeX documents
+Maintained by Sebastian Ørsted
+E-mail: sorsted@gmail.com
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+Copyright (C) 2020 by Sebastian Ørsted <sorsted@gmail.com>
+
+The package is loaded via \usepackage{semantex}
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Sebastian Ørsted. \ No newline at end of file
diff --git a/macros/latex/contrib/semtex/semtex.pdf b/macros/latex/contrib/semtex/semtex.pdf
new file mode 100644
index 0000000000..5ac49589d8
--- /dev/null
+++ b/macros/latex/contrib/semtex/semtex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semtex/semtex.sty b/macros/latex/contrib/semtex/semtex.sty
new file mode 100644
index 0000000000..1824d0389c
--- /dev/null
+++ b/macros/latex/contrib/semtex/semtex.sty
@@ -0,0 +1,83 @@
+\RequirePackage{xparse}
+\ProvidesExplPackage{semtex}{2020/09/07}{0.1beta}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% semtex -- for documents stripped of SemanTeX markup %
+% https://ctan.org/pkg/semantex %
+% (C) 2020 Sebastian Ørsted %
+% sorsted@gmail.com %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Bullets:
+
+\box_new:N \g__semantex_bullet_box
+\hbox_set:Nn \g__semantex_bullet_box { $\cdot$ }
+\box_scale:Nnn \g__semantex_bullet_box {1.2} {1.2}
+\tl_set:Nn\g_semantex_bullet
+{
+ \box_move_up:nn{-0.25ex}{\box_use:N \g__semantex_bullet_box}
+}
+
+\tl_set:Nn\g_semantex_double_bullet{\g_semantex_bullet \g_semantex_bullet}
+
+\tl_set_eq:NN\SemantexBullet \g_semantex_bullet
+
+\tl_set_eq:NN \SemantexDoubleBullet \g_semantex_double_bullet
+
+
+% Parentheses:
+
+\cs_new:Npn\SemantexLeft { \mathopen{}\mathclose\bgroup\left }
+
+\cs_new:Npn\SemantexRight { \aftergroup\egroup\right }
+
+\tl_new:N\SemantexDelimiterSize
+
+\DeclareDocumentCommand\SemantexParentheses { mmmm }
+{
+ \str_case:nnF { #1 } % This is where \big,\Big, etc. go.
+ {
+ { normal } {
+ \group_begin:
+ \tl_clear:N \SemantexDelimiterSize
+ \str_if_eq:nnF { #2 } { . } { \mathopen #2 }
+ #4
+ \str_if_eq:nnF { #3 } { . } { \mathclose #3 }
+ \group_end:
+ }
+ { auto } {
+ \group_begin:
+ \tl_set_eq:NN \SemantexDelimiterSize \middle
+ \SemantexLeft #2
+ #4
+ \SemantexRight #3
+ \group_end:
+ }
+ { * } {
+ \group_begin:
+ \tl_set_eq:NN \SemantexDelimiterSize \middle
+ \SemantexLeft #2
+ #4
+ \SemantexRight #3
+ \group_end:
+ }
+ }
+ {
+ \group_begin:
+ \tl_set_eq:NN\SemantexDelimiterSize #1
+ \mathopen #1 #2
+ #4
+ \mathclose #1 #3
+ \group_end:
+ }
+}
+
+\DeclareDocumentCommand\SemantexNoParentheses { m }
+{
+ \group_begin:
+ \tl_clear:N\SemantexDelimiterSize
+ #1
+ \group_end:
+} \ No newline at end of file
diff --git a/macros/latex/contrib/semtex/semtex.tex b/macros/latex/contrib/semtex/semtex.tex
new file mode 100644
index 0000000000..10805c37bd
--- /dev/null
+++ b/macros/latex/contrib/semtex/semtex.tex
@@ -0,0 +1,229 @@
+\documentclass[a4paper,article,oneside,english,10pt]{memoir}
+
+\makeatletter
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage[noDcommand,slantedGreeks]{kpfonts}
+
+\frenchspacing
+
+\usepackage{mathtools,etoolbox, microtype,xspace,color}
+
+\usepackage[shortlabels]{enumitem}%control lists
+
+\usepackage[draft]{fixme}
+
+%Setup of memoir:
+\pagestyle{plain} %change to heading for running headings
+\nouppercaseheads %running heads should not be capitalized
+\captionnamefont{\small} %captions with small font
+\captiontitlefont{\small}
+\makeevenhead{headings}{\thepage}{}{\itshape\leftmark} %make headings italic instead of slanted (though we do not use headings right now)
+\makeoddhead{headings}{\itshape\rightmark}{}{\thepage}
+
+\setlrmarginsandblock{4cm}{*}{*}
+\setulmarginsandblock{4cm}{*}{*}
+\checkandfixthelayout
+
+\raggedbottomsectiontrue%less harse than \raggedbottom
+%\allowdisplaybreaks %long equations may break
+
+\g@addto@macro\bfseries{\boldmath} %make math in bold text automatically bold
+
+\usepackage[english=american]{csquotes}
+
+\usepackage[hidelinks]{hyperref}
+
+\usepackage[nameinlink]{cleveref}
+
+\title{\texttt{semtex}: For stripped Seman\!\TeX\ documents (v$0.1\beta$)}
+\date{\today}
+\author{Sebastian Ørsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
+
+\hypersetup{
+ pdfauthor={Sebastian Ørsted},
+ pdftitle={semtex: For stripped SemanTeX documents},
+ %pdfsubject={},
+ %pdfkeywords={},
+ %pdfproducer={Latex with hyperref, or other system},
+ %pdfcreator={pdflatex, or other tool},
+}
+
+\usepackage{showexpl}
+
+\lstset{%
+ language=[LaTeX]TeX,
+ basicstyle=\ttfamily\small,
+ commentstyle=\itshape\ttfamily\small,
+ alsoletter={\\},
+ escapechar=@,
+ breaklines=true,
+ breakindent={0pt},
+ captionpos=t,
+ pos=r,
+ tabsize=2,
+ %inputencoding=utf8,
+ explpreset={numbers=none,},
+ texcl=false,
+ wide=false,
+ width=.45\textwidth,
+}
+
+\newcommand\mylst{\lstinline[mathescape]}
+
+\def\<#1\>{\textrm{\textlangle\textit{#1}\textrangle}}
+
+\def\usercommand\<#1\>{\textrm{\textbackslash\textlangle\textit{#1}\textrangle}}
+
+\def\values\<#1\>{\textrm{\textlangle\textup{#1}\textrangle}}
+
+\def\num#1{\textsubscript{\textup{#1}}}
+
+\newcommand\default[1]{\smash{\underline{\smash{#1}}}}
+
+\newcommand\commandname[1]{\textbackslash\texttt{#1}}
+
+\let\pack=\texttt
+
+\newcommand\semantex{Seman\!\TeX\xspace}
+
+\newcommand\stripsemantex{\texttt{stripsemantex}\xspace}
+
+\usepackage{hologo}
+
+% Setting up SemanTeX:
+
+\usepackage{semtex}
+
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\noindent
+The package~\pack{semtex} is a small package
+that adds a collection of simple macros for parentheses
+and bullets.
+It exists for one purpose only:
+To be loaded by documents which were originally typeset
+using the package \semantex, but which have been stripped
+of \semantex markup using the package~\pack{stripsemantex}.
+Therefore, unless your document is one of those,
+simply \textbf{don't use this package}.
+
+
+And even if your document \emph{is} one of those, there is a good chance
+you will not have to load it after all. In most cases, you will be able to replace
+the macros it provides by macros from other packages.
+
+\chapter*{Bullet commands}
+
+The package provides the commands \mylst!\SemantexBullet! and \mylst!\SemantexDoubleBullet!.
+These commands print bullets which are smaller (and prettier, in my opinion)
+than the standard \lstinline!\bullet! command from~\LaTeX:
+\begin{LTXexample}
+$ H^{\SemantexBullet} $,
+$ H^{\SemantexDoubleBullet} $
+(compare to $H^{\bullet}$)
+\end{LTXexample}
+You can recreate them yourself as follows, rendering
+the package \pack{semtex} unnecessary for this purpose:
+\begin{lstlisting}
+\newcommand\SemantexBullet{%
+ \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+}
+\newcommand\SemantexDoubleBullet{%
+ \SemantexBullet\SemantexBullet
+}
+\end{lstlisting}
+
+\chapter*{Replacements for \texorpdfstring{\textbackslash\texttt{left} and~\textbackslash\texttt{right}}{\left and \right}}
+
+The package provides the commands \mylst!\SemantexLeft!
+and~\mylst!\SemantexRight!
+These work just like \lstinline!\left...\right!, but fix some spacing issues
+around these:
+\begin{LTXexample}
+\[
+ \SemantexLeft(
+ \frac{1}{2}
+ \SemantexRight]
+\]
+\end{LTXexample}
+They are completely equivalent to~\lstinline!\mleft! and~\lstinline!\mright!
+from the package~\pack{mleftright}, so it is safe to just load that package
+and replace the above commands by \lstinline!\mleft...\mright! instead.
+Alternatively, you can recreate them yourself by
+\begin{lstlisting}
+\newcommand\SemantexLeft{%
+ \mathopen{}\mathclose\bgroup\left
+}
+
+\newcommand\SemantexRight{%
+ \aftergroup\egroup\right
+}
+\end{lstlisting}
+
+\chapter*{Commands for scaled delimiters}
+
+First and foremost, the package provides the command
+\begin{lstlisting}
+\SemantexParentheses{@\values\<normal|auto|*|{\textit{other}}\>@}{@\<left parenthesis\>@}!\\
+ {@\<right parenthesis\>@}{@\<content\>@}
+\end{lstlisting}
+This one writes \<content\> enclosed in the pair of parentheses
+and with the size given by the first argument.
+Here,~\lstinline!normal! means normal size
+parentheses,
+and \lstinline!auto! and~\lstinline!*!
+mean auto-scaled parentheses using~\lstinline!\SemantexLeft...\SemantexRight!.
+If another value is received, that value
+is used for the parenthesis size,
+so the intended values are~\lstinline!\big!, \lstinline!\Big!,
+\lstinline!\bigg!,~\lstinline!\Bigg!:
+\begin{LTXexample}
+$\SemantexParentheses{normal}{(}{
+ )}{\frac{a}{b}}$,
+$\SemantexParentheses{auto}{[}{]}{
+ \frac{a}{b}}$,
+$\SemantexParentheses{\big}{
+ \langle}{\rangle}{\frac{a}{b}}$,
+$\SemantexParentheses{\Bigg}{\{}{
+ \}}{\frac{a}{b}}$,
+\end{LTXexample}
+The important property of this command
+is that inside the~\<content\>, you can access
+the delimiter size at any point using
+the command~\lstinline!\SemantexDelimiterSize!:
+\begin{LTXexample}
+$\SemantexParentheses{\Bigg}{\{}{\}}{
+ \frac{a}{b}
+ \SemantexDelimiterSize|
+ \frac{u}{v}
+}$
+\end{LTXexample}
+
+Secondly, the package provides the command
+\begin{lstlisting}
+\SemantexNoParentheses{@\<content\>@}
+\end{lstlisting}
+This command prints the content with no parentheses, but importantly, it also resets
+the command \lstinline!\SemantexDelimiterSize!
+to~\lstinline!{}!, i.e.~blank.
+This makes the following work:
+\begin{LTXexample}
+$\SemantexParentheses{\Bigg}{\{}{\}}{
+ \frac{a}{b}
+ \SemantexDelimiterSize|
+ \SemantexNoParentheses{
+ a
+ \SemantexDelimiterSize|
+ b
+ }
+}$
+\end{LTXexample}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/subfiles/subfiles.dtx b/macros/latex/contrib/subfiles/subfiles.dtx
index 1e81e488db..1a510c59b1 100644
--- a/macros/latex/contrib/subfiles/subfiles.dtx
+++ b/macros/latex/contrib/subfiles/subfiles.dtx
@@ -23,12 +23,12 @@
%
%<*driver>
% \fi
-\ProvidesFile{subfiles.dtx}[2020/02/14 v1.6 Multi-file projects]
+\ProvidesFile{subfiles.dtx}[2020/09/07 v2.0 Multi-file projects]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{subfiles.dtx}
\title{A Document Class and a Package\\for Handling Multi-File Projects}
-\date{2020/02/14 v1.6}
+\date{2020/09/07 v2.0}
\author{Federico Garcia, Gernot Salzer}
\usepackage{hyperref}
\begin{document}
@@ -38,13 +38,13 @@
%</driver>
% \fi
% \begin{abstract}
-% The |subfiles| package allows authors to split a document into one main file and one and more subsidiary files (subfiles) akin to the |\input| command, with the added benefit of making the subfiles compilable by themselves.
+% The |subfiles| package allows authors to split a document into one main file and several subsidiary files (subfiles) akin to the |\input| command, with the added benefit of making the subfiles compilable on their own.
% This is achieved by reusing the preamble of the main file also for the subfiles.
% \end{abstract}
% \tableofcontents
% \section{Introduction}
% The \LaTeX\ commands |\include| and |\input| allow the user to split the \TeX\ source of a document into several input files.
-% This is useful when creating documents with many chapters, but also for handling large tables, figures, and code samples, which require a considerable amount of trial-and-errors.
+% This is useful when creating documents with many chapters, but also for handling large tables, figures and code samples, which require a considerable amount of trial-and-errors.
%
% In this process the rest of the document is of little use, and can even interfere.
% For example, error messages may indicate not only the wrong line number, but may point to the wrong file.
@@ -63,9 +63,10 @@
% \section{Basic usage}
%
% \DescribeMacro{subfiles.sty}
-% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles| \emph{at the end of the preamble}:
+% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles|:
% \begin{center}
% \begin{tabular}{l}
+% |\documentclass[...]{...}|\\
% |\usepackage{subfiles}|\\
% |\begin{document}|
% \end{tabular}
@@ -83,7 +84,7 @@
% which loads the class |subfiles|.
% Its only `option', which is actually mandatory, gives the name of the main file.
% This name follows \TeX\ conventions: |.tex| is the default extension, the path has to be provided if the main file is in a different directory, and directories in the path have to be separated by |/| (not |\|).
-% Thus, we have the following structure:
+% Thus, we have the following structure.
% \begin{center}\small
% \begin{tabular}[t]{l}
% \multicolumn{1}{c}{main file} \\
@@ -113,15 +114,117 @@
% \begin{itemize}
% \item If \LaTeX\ is run on the subfile, the line |\documentclass[..]{subfiles}| is replaced by the preamble of the main file (including its |\documentclass| command).
% The rest of the subfile is processed normally.
-% \item If \LaTeX\ is run on the main file, the subfile is loaded like with an |\input| command, except that the three lines |\documentclass[..]{subfiles}|, |\begin{document}|, and |\end{document}| are ignored.
+% \item If \LaTeX\ is run on the main file, the subfile is loaded like with an |\input| command, except that the preamble of the subfile up to |\begin{document}| as well as |\end{document}| and the lines following it are ignored.
% \end{itemize}
%
% \section{Advanced usage}
%
+% \subsection{Including files instead of inputting them}
+%
+% \DescribeMacro{\subfileinclude}
+% In plain \LaTeX, you can use either |\input| or |\include| to load a file.
+% In most cases the first is appropriate, but sometimes there are reasons to prefer the latter.
+% Internally, the |\subfile| command uses |\input|.
+% For those cases where you need |\include|, the package provides the command
+% \begin{center}
+% |\subfileinclude{|\meta{subfile\_name}|}|
+% \end{center}
+%
+% \subsection{Fixing pathes}
+%
+% \DescribeMacro{\subfix}
+% Whenever an error message of \LaTeX\ or an external program indicates that a file cannot be found, the reason may be that the missing file has to be addressed by varying pathes, depending on which file is typeset.
+% In such a case, it may help to apply the command |\subfix| to the file or path names.
+% Examples:
+% \begin{center}
+% \begin{tabular}{ll}
+% package & command when used with |subfiles| \\
+% \hline
+% |biblatex| & |\addbibresource{\subfix{|\meta{file}|}}| \\
+% |bibunits| & |\putbib[\subfix{|\meta{file1}|},\subfix{|\meta{file2}|},|\dots|]|\\
+% & |\defaultbibliography{\subfix{|\meta{file1}|},|\dots|}|
+% \end{tabular}
+% \end{center}
+% \DescribeMacro{\bibliography}
+% \DescribeMacro{\graphicspath}
+% Some commands already apply the fix on the fly.
+% At the moment these are the standard \LaTeX\ command |\bibliography| and |\graphicspath| from the |graphics|/|graphicx| package.
+%
+% \subsection{Conditional execution of commands}
+%
+% \DescribeMacro{\ifSubfilesClassLoaded}
+% The command |\ifSubfilesClassLoaded| is useful to execute commands conditionally, depending on whether the main file is typeset or a subfile.
+% \begin{center}
+% \begin{tabular}{l}
+% |\ifSubfilesClassLoaded{% then branch|\\
+% \quad \dots\ commands executed when the subfile is typeset \dots\\
+% |}{% else branch|\\
+% \quad \dots\ commands executed when the main file is typeset \dots\\
+% |}|
+% \end{tabular}
+% \end{center}
+% As an example, this can be used to add the bibliography to the main document or to the subdocument, whichever is typeset:
+% \begin{center}\small
+% \begin{tabular}[t]{l}
+% \multicolumn{1}{c}{main file} \\
+% \hline
+% |\documentclass[...]{...}| \\
+% |\usepackage{subfiles}|\\
+% |\bibliographystyle{alpha}|\\
+% |\begin{document}| \\
+% \dots \\
+% |\subfile{|\meta{subfile\_name}|}| \\
+% \dots \\
+% |\bibliography{bibfile}|\\
+% |\end{document}| \\
+% \hline
+% \end{tabular}
+% \hfill
+% \begin{tabular}[t]{l}
+% \multicolumn{1}{c}{subfile} \\
+% \hline
+% |\documentclass[|\meta{main\_file\_name}|]{subfiles}| \\
+% |\begin{document}| \\
+% \dots \\
+% |\ifSubfilesClassLoaded{%|\\
+% \quad|\bibliography{bibfile}%|\\
+% |}{}|\\
+% |\end{document}| \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \subsection{Unusual locations for placing definitions and text}
+%
+% Starting with version 2.0, the |subfiles| package treats sub-preambles and text after |\end{document}| as one would expect:
+% The preamble of subfiles is skipped when loaded with |\subfile|, and everything after |\end{document}| is ignored.
+% In most cases this is what you want.
+%
+% \DescribeMacro{v1}
+% For reasons of compatibility, the option |v1| restores the behaviour of older versons:
+% \begin{center}
+% |\usepackage[v1]{subfiles}|
+% \end{center}
+% This will have three effects.
+%
+% \emph{Code after the end of the main document} is added to the preamble of the subfiles, but is ignored when typesetting the main file.
+% Here one can add commands that are to be processed as part of the preamble when the subfiles are typeset on their one.
+% But this also means that any syntax error after |\end{document}| will ruin the \LaTeX ing of the subfile(s).
+%
+% \emph{Code in the preamble of a subfile} is processed as part of the text when typesetting the main file, but as part of the preamble when typesetting the subfile.
+% This means that with the option |v1|, the preamble of a subfile can only contain stuff that is acceptable for both, the preamble and the text area.
+% One should also keep in mind that each subfile is input within a group, so definitions made here may not work outside.
+%
+% \emph{Code after \texttt{\textbackslash end\{document\}} in a subfile} is treated like the code preceding it when the subfile is loaded from the main file, but is ignored when typesetting the subfile.
+% The code after |\end{document}| behaves as if following the |\subfile| command in the main file, except that it is still part of the group enclosing the subfile.
+% As a consequence, empty lines at the end of the subfile lead to a new paragraph in the main document, even if the |\subfile| command is immediately followed by text.
+%
+% \section{Use cases}
+%
% \subsection{Hierarchy of directories}
%
-% Sometimes it is desirable to put a subfile together with its images and further files into its own directory.
-% The difficulty now is that these additional files have to be addressed by different pathes depending on whether the main files or the subfile is typeset.
+% Sometimes it is desirable to put a subfile together with its images and supplementary files into its own directory.
+% The difficulty now is that these additional files have to be addressed by different pathes depending on whether the main file or the subfile is typeset.
% As of version 1.3, the |subfiles| package handles this problem by using the |import| package.
%
% As an example, consider the following hierarchy of files:
@@ -176,73 +279,12 @@
% \end{center}
% Then each of the three files can be typeset individually in its respective directory, where \LaTeX\ is able to locate all included text files and images.
%
-% \subsection{Including files instead of inputting them}
-%
-% \DescribeMacro{\subfileinclude}
-% In plain \LaTeX, you can use either |\input| or |\include| to load a file.
-% In most cases the first is appropriate, but sometimes there are reasons to prefer the latter.
-% Internally, the |\subfile| command uses |\input|.
-% For those cases where you need |\include|, the package provides the command
-% \begin{center}
-% |\subfileinclude{|\meta{subfile\_name}|}|
-% \end{center}
-%
-% \subsection{Bibliographies}
-%
-% Manual bibliographies with the |thebibliography| environment work as usual.
-% Problems may arise if external programs like |bibtex| or |biber| are used to generate the bibliography.
-% Here are some hints on how to make it work.
-% \begin{itemize}
-% \item
-% \DescribeMacro{\bibliography}
-% Make sure the command |\bibliography| is executed after loading the |subfiles| package.
-% Put the command between |\usepackage{subfiles}| and |\begin{document}| or somewhere into the text part.
-% \item When you use the package |biblatex|, and programs like |biber| complain about not being able to find the bibliography files, use |\bibliography| instead of |\addbibresource| (see above), or the command |\subfix| (see below).
-% \item
-% \DescribeMacro{\subfix}
-% Whenever an external program complains that a file specified in the \LaTeX\ document cannot be found, wrap the command |\subfix| around the filename.
-% Here are some examples.
-% \begin{center}
-% \begin{tabular}{ll}
-% package & command when used with |subfiles| \\
-% \hline
-% |biblatex| & |\addbibresource{\subfix{|\meta{file}|}}| \\
-% |bibunits| & |\putbib[\subfix{|\meta{file1}|},\subfix{|\meta{file2}|},|\dots|]|\\
-% & |\defaultbibliography{\subfix{|\meta{file1}|},|\dots|}|
-% \end{tabular}
-% \end{center}
-%
-% \end{itemize}
-% The |subfiles| package has been tested with the packages |biblatex|, |bibunits|, and |chapterbib| as well as with the external programs |bibtex| and |biber|.
-%
-% \subsection{Unusual locations for placing definitions and text}
-%
-% Usually all definitions and packages required by the subfiles should go into the preamble of the main file.
-% There are some further locations, though, where one might consider adding definitions and text.
-% Put negatively, apparently irrelevant stuff in these locations may become unexpectedly visible in the document or cause errors.
-%
-% \paragraph{Code after the end of the main document} is added to the preamble of the subfiles, but is ignored when typesetting the main file.
-% This happens because a subfile typeset by itself does not really take the preamble of the main file, but \emph{everything outside} of |\begin{document}| and |\end{document}|.
-% This has two consequences: \emph{a)}~the user can add some commands that are to be processed as part of the preamble only when the subfiles are typeset by themselves; but also \emph{b)}~the user has to be careful even \emph{after} |\end{document}| in the main file, for any syntax error there will ruin the \LaTeX ing of the subfile(s).
-% \bigskip
-%
-% Similarly, when typesetting the main document, the |\subfile| command does not really load the stuff within the |document| environment, but \emph{everything except} the three commands |\documentclass[...]{...}|, |\begin{document}|, and |\end{document}|.
-% This has the following consequences.
-%
-% \paragraph{Code in the preamble of a subfile} is processed as part of the text when typesetting the main file, but as part of the preamble when typesetting the subfile.
-% This means that the preamble of a subfile can only contain stuff that is acceptable for both, the preamble and the text area.
-% One should also keep in mind that each subfile is input within a group, so definitions made within may not work outside.
-%
-% \paragraph{Code after \texttt{\textbackslash end\{document\}} in a subfile} is treated like the code preceding it when the subfile is loaded from the main file, but is ignored when typesetting the subfile.
-% The code after |\end{document}| behaves as if following the |\subfile| command in the main file, except that it is still part of the group enclosing the subfile.
-% As a consequence, empty lines at the end of the subfile lead to a new paragraph in the main document, even if the |\subfile| command is immediately followed by text.
%
% \subsection{Avoiding extra spaces}
%
% Sometimes you may want to load the contents of a subfile without white space separating it from the contents of the main file.
-% In this respect |\subfile| behaves similar to |\input|.
+% In this respect, |\subfile| behaves similar to |\input|.
% Any space or newline before and after the |\subfile| command will appear in the typeset document, as will any white space between the last character of the subfile and |\end{document}|.
-% Moreover, any stuff after |\end{document}| will end up in the main document, including spurious empty lines, which may lead to a new paragraph.
% Therefore, to load the contents of a subfile without intervening spaces, you have either to add comment signs:
% \begin{center}
% \begin{tabular}[t]{l}
@@ -262,7 +304,6 @@
% |\begin{document}|\\
% |contents of subfile%|\\
% |\end{document}|\\
-% |% No empty lines after \end{document}!|\\
% \hline
% \end{tabular}
% \end{center}
@@ -280,29 +321,25 @@
% \item
% Make sure to use the most recent version of the |subfiles| package, available from CTAN\footnote{\url{https://ctan.org/pkg/subfiles}} and Github\footnote{\url{https://github.com/gsalzer/subfiles}}.
% \item
-% Make sure that |\usepackage{subfiles}| comes last in the preamble
-% of the main document.
-% \item
-% If some external program that cooperates with \TeX, like |bibtex| or |biber|, complains about not being able to find a file, locate the name of the file in the \LaTeX\ source and replace \meta{filename} by |\subfix{|\meta{filename}|}|.
+% Make sure that |\usepackage{subfiles}| appears near the end of the main preamble.
% \item
-% Make sure that there is no stuff after |\end{document}|, neither in the main file nor in the subfiles.
+% Make sure that the strings |\begin{document}| and |\end{document}| appear on lines of their own and that there are no additional characters preceding or trailing them.
% \item
-% If there is anything in the preambles of the subfiles, make sure that it is admissible for both, the preamble and the document area.
+% If some external program that cooperates with \TeX, like |bibtex| or |biber|, complains about not being able to find a file, locate the name of the file in the \LaTeX\ source and replace \meta{filename} by |\subfix{|\meta{filename}|}|.
% \item
-% If nothing of the above helps and you are stuck, ask the people on tex.stackexchange\footnote{\url{https://tex.stackexchange.com/}}.
+% If nothing of the above helps, ask the nice people on tex.stackexchange\footnote{\url{https://tex.stackexchange.com/}}.
% \end{enumerate}
%
% \section{Dependencies}
%
-% The |subfiles| package requires the |verbatim| package, whose |comment| environment is used to ignore the text area of the main file when typesetting subfiles separately.
-% Moreover, the |import| package is needed to load subfiles and their auxiliary files from different directories.
-% Both packages are part of the standard \TeX\ distributions.
+% The |subfiles| package uses the |import| package by Donald Arsenau to load subfiles from different directories.
+% |import.sty| is part of the standard \TeX\ distribution.
%
% \section{Version history}
%
% \begin{description}
% \item[v1.1:]
-% Initial version by Federico Garcia. Further versions by Gernot Salzer.
+% Initial version by Federico Garcia. Subsequent versions by Gernot Salzer.
% \item[v1.2:] \mbox{}
% \begin{itemize}
% \item Incompatibility with classes and packages removed that modify the |\document| command, like the class |revtex4|.
@@ -332,6 +369,19 @@
% \item Incompatibility with |standalone| class removed.
% \item The options of the main class are now also processed when typesetting a subfile; before they were ignored. Thanks to J\'an Kl'uka for analysing the problem.
% \end{itemize}
+% \item[v2.0:] \mbox{}
+% \begin{itemize}
+% \item Incompatibility with \LaTeX\ Oct.~2020 removed.
+% Thanks to Ulrike \mbox{Fischer} from the \LaTeX~3 team for the warning in time.
+% \item By default, text after |\end{document}| as well as the preamble of subfiles, when loaded with |\subfile|, are ignored now.
+% The old behaviour is available via the new package option |v1|.
+% \item Command |\ifSubfilesClassLoaded| added and documentation regarding the use of the |\bibliography| command corrected.
+% Thanks to Github user |alan-isaac| for reporting the issue.
+% \item Subfiles now can have the same name as the main file.
+% Thanks to Github user |June-6th| for reporting the issue.
+% \item Problem with the search path for images resolved.
+% Thanks to Github user |maxnick| for reporting the issue.
+% \end{itemize}
% \end{description}
%
%\section{The Implementation}
@@ -339,148 +389,179 @@
% \begin{macrocode}
%<*class>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{subfiles}[2020/02/14 v1.6 Multi-file projects (class)]
-\DeclareOption*{\typeout{Preamble taken from file `\CurrentOption'}%
- \let\preamble@file\CurrentOption}
+\ProvidesClass{subfiles}[2020/09/07 v2.0 Multi-file projects (class)]
+\DeclareOption*{%
+ \typeout{Preamble taken from file `\CurrentOption'}%
+ \let\preamble@file\CurrentOption
+}
\ProcessOptions
% \end{macrocode}
+%
% After processing the option of the |subfiles| class, we reset |\@classoptionslist| such that the options in the main file will be processed.
%
% \begin{macrocode}
\let\@classoptionslist\relax
% \end{macrocode}
-% Then we save the original definition of |\documentclass| to be able to reset it later to this definition:
+%
+% To handle subfiles in separate directories, we use the |import| package.
+% We load it now, since it resets the macro |\import@path|.
+% \begin{macrocode}
+\RequirePackage{import}
+% \end{macrocode}
+%
+% We redefine |\documentclass| to load the class of the main document.
%
% \begin{macrocode}
\let\subfiles@documentclass\documentclass
+\def\documentclass{%
+ \let\documentclass\subfiles@documentclass
+ \LoadClass
+}
% \end{macrocode}
%
-% Now |\documentclass| is set equal to |\LoadClass| such that the class and the options of the main file will be loaded as usual.
-%
+% In earlier versions, we used |\subimport| to load the preamble of the main file, which has the unwanted effect of undoing changes to the graphics path.
+% Therefore we use |\input| and initialize |\import@path| and |\input@path| to the path of the main file.
+% We use the internal \LaTeX\ macro |\filename@parse| to obtain this path.
% \begin{macrocode}
-\let\documentclass\LoadClass\relax
+\filename@parse{\preamble@file}
+\edef\import@path{\filename@area}
+\edef\input@path{{\filename@area}}
+\input{\preamble@file}
% \end{macrocode}
%
-% When typesetting a subfile, we have to skip the |document| environment of the main file.
-% This is done with the commands |\comment| and |\endcomment| from the |verbatim| package.
-% Now there is a problem:
-% If we load |verbatim| here, the definition of the commands may be overwritten if the user loads e.g.\ the |comment| package.
-% Loading |verbatim| in |subfiles.sty| at the latest possible moment is not reliable, either.
-% On the one hand we may overwrite macros required later by the user, on the other hand the |memoir| class contains a copy of |verbatim|, so a later |\RequirePackage| refuses to reload the package.
-% Thus, in the case of a document loading the |memoir| class and the |comment| package, we end up with the wrong definition of |\comment| in any case.
+% After loading the preamble of the main file, we reset |\import@path{}|.
+% Since the preamble may have changed the catcode of the |@| sign, we make it (again) a letter. Better safe than sorry.
%
-% Therefore we load the |verbatim| package here and save the contents of the crucial commands |\comment| and |\endcomment| under a different name.
% \begin{macrocode}
-\RequirePackage{verbatim}
-\let\subfiles@comment\comment
-\let\subfiles@endcomment\endcomment
+{\makeatletter
+ \gdef\import@path{}
+}
+%</class>
% \end{macrocode}
-%
-% To handle subfiles in separate directories, we load the |import| package.
-%
+%
+%
+% \subsection{The package}
% \begin{macrocode}
-\RequirePackage{import}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{subfiles}[2020/09/07 v2.0 Multi-file projects (package)]
% \end{macrocode}
%
-% The |\subimport| command requires path and filename as separate arguments, so we have to split file locations into these two components.
-% The internal \LaTeX\ command |\filename@parse| almost fits the bill, except that it additionally splits the filename into basename and extension.
-% Unfortunately, concatenating basename and extension to recover the filename is not clean:
-% Under Unix/Linux, the filenames |base| and |base.| denote different entities, but after |\filename@parse| both have the same basename and an empty extension.
-% Therefore we redefine the command |\filename@simple| temporarily; it is responsible for this unwanted split.
-%
+% The package has one option, |v1|, which affects the way how the text after |\end{document}| and in the preamble of subfiles is handled.
+% With this option, |subfiles| behaves like in version 1.x.
+% To implement the retro behaviour, we need a few definitions.
+%
+% First, we define three macros containing the strings |\begin{document}|, |\end{document}| and |document|.
+% We need them later to detect these strings in the input.
% \begin{macrocode}
-\def\subfiles@split#1{%
- \let\subfiles@filename@simple\filename@simple
- \def\filename@simple##1.\\{\edef\filename@base{##1}}%
- \filename@parse{#1}%
- \let\filename@simple\subfiles@filename@simple
+\def\subfiles@DOCUMENT{document}
+{\escapechar=-1\relax
+ \xdef\subfiles@BEGINDOCUMENT{\string\\begin\string\{document\string\}}%
+ \xdef\subfiles@ENDDOCUMENT{\string\\end\string\{document\string\}}%
}
% \end{macrocode}
%
-% E.g., after executing |\subfiles@split{../dir1/dir2/file.tex}| the macros |\filename@area| and |\filename@base| expand to |../dir1/dir2/| and |file.tex|, respectively.
-%
-% Now we split the name of the main file that has been provided as optional argument of the document class, and |\subimport| the main file.
+% The macro |\subfiles@skipDocument| skips everything until it encounters the string |\end{document}|.
+% In earlier versions of the package, this was accomplished by redefining the |document| environment to the |comment| environment of the |verbatim| package.
+% This clashes with the \LaTeX\ format published in October 2020, so we copy and adapt the code from the |verbatim| package (see the definition of |\subfiles@skiplines| below).
%
% \begin{macrocode}
-\subfiles@split{\preamble@file}
-\subimport{\filename@area}{\filename@base}
+\def\subfiles@skipDocument{%
+ \let\subfiles@skiplinescont\ignorespaces
+ \let\subfiles@skiplinesend\subfiles@ENDDOCUMENT
+ \subfiles@skiplines
+}
% \end{macrocode}
%
-% The main file loads the package |subfiles| as part of the preamble, which saves the contents of |\document| and |\enddocument| as |\subfiles@document| and |\subfiles@enddocument|, respectively.
-% We use these macors now to restore the original values of |\document|, |\enddocument|, and |\documentclass|.
-% The backup commands are |\undefined| to save memory.
-% That's it.
+% To skip |\documentclass| the old way, we redefine it to do nothing except restoring its original definition.
%
% \begin{macrocode}
-{\catcode`\@=11
-\global\let\document\subfiles@document
-\global\let\enddocument\subfiles@enddocument
-\global\let\documentclass\subfiles@documentclass
-\global\let\subfiles@document\undefined
-\global\let\subfiles@enddocument\undefined
-\global\let\subfiles@documentclass\undefined
+\def\subfiles@skipDocumentclass{%
+ \renewcommand\documentclass[2][]{%
+ \let\documentclass\subfiles@documentclass
+ \ignorespaces
+ }%
}
-%</class>
% \end{macrocode}
%
-% It may not be obvious why |@| has to be catcoded to a letter, since we are in a style file anyway.
-% However, the |\preamble@file| occasionally contains |\usepackage| commands that make |@| a non-letter.
-% This is why the part after loading the main preamble needs a |\catcode| command, grouping, and |\global|'s.
-%
-%
-% \subsection{The package}
-%
-% Any option will be ignored.
-%
+% To ignore the preamble of a subfile, we redefine |\documentclass| to skip everything until the string |\begin{document}| is encountered.
% \begin{macrocode}
-%<*package>
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{subfiles}[2020/02/14 v1.6 Multi-file projects (package)]
-\DeclareOption*{\PackageWarning{\CurrentOption ignored}}
-\ProcessOptions
+\def\subfiles@skipPreamble{%
+ \def\documentclass{%
+ \let\documentclass\subfiles@documentclass
+ \def\subfiles@skiplinescont{\begin{document}}%
+ \let\subfiles@skiplinesend\subfiles@BEGINDOCUMENT
+ \subfiles@skiplines
+ }%
+}
% \end{macrocode}
%
-% If the initial document class was |subfiles|, then the main file is loaded as part of a subfile.
-% In this case anything between |\begin{document}| and |\end{document}| has to be skipped, while the contents of the commands |\document| and |\enddocument| has to be retained for later use in the subfile.
-% Therefore we save the contents of the two commands as |\subfiles@document| and |\subfiles@enddocument|, respectively.
-% Now the |document| environment is redefined to become the saved |comment| environment from the |verbatim| package.
-% Consequently, the body of the main file is ignored by \LaTeX, and only the preamble is read (as well as anything that comes after |\end{document}|!).
-%
+% Now we set the default behaviour of the subfiles package:
+% When loading the main preamble in a subfile, everything after the preamble is ignored.
+% Moreover, when reading a subfile, its preamble as well as everything after |\end{document}| is ignored.
% \begin{macrocode}
-\@ifclassloaded{subfiles}{%
- \let\subfiles@document\document
- \let\subfiles@enddocument\enddocument
- \let\document\subfiles@comment
- \let\enddocument\subfiles@endcomment
+\let\subfiles@handleMain\endinput
+\let\subfiles@handleSubpreamble\subfiles@skipPreamble
+\let\subfiles@handleTextAfterSubdocument\endinput
% \end{macrocode}
%
-% By loading the |subfiles| package immediately before |\begin{document}| we ensure that |\subfiles@document| and |\subfiles@enddocument| contain all modifications that the class and the preamble of the main file may have applied to the |document| environment.
-% This happens e.g.\ with the class |revtex4| and the package |pythontex|.
+% The option |v1| restores the behaviour of the old |subfiles| package: When loading the main preamble in a subfile, only the contents of the |document| environent is ignored, but not the stuff following it. Moreover, when reading a subfile, only the |\documentclass| command and the lines |\begin{document}| and |\end{document}| are ignored, but the subfile preamble as well as everything after |\end{document}| is retained.
+% \begin{macrocode}
+\DeclareOption{v1}{%
+ \let\subfiles@handleMain\subfiles@skipDocument
+ \let\subfiles@handleSubpreamble\subfiles@skipDocumentclass
+ \let\subfiles@handleTextAfterSubdocument\relax
+}
+\DeclareOption*{\PackageWarning{subfiles}{Option '\CurrentOption' ignored}}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% To skip everything until a specific string is read, we adapt code from the |verbatim| package.
+% The skipping of lines is controlled by two macros that have to be set before calling |\subfiles@skiplines|.
+% |\subfiles@skiplinesend| is the string that marks the end of the skipped area; it has to appear on a line of its own, as the only content of this line.
+% |\subfiles@skiplinescont| contains the code to be executed after skipping has ended.
+%
+% \begin{macrocode}
+\def\subfiles@skiplines{%
+ \begingroup
+ \let\do\@makeother\dospecials
+ \@makeother\^^L%
+ \endlinechar`\^^M\relax \catcode`\^^M=12\relax \subfiles@skipline}
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\subfiles@skipline#1^^M{\def\subfiles@tmp{#1}%
+ \ifx\subfiles@tmp\subfiles@skiplinesend
+ \def\subfiles@tmp{\endgroup\subfiles@skiplinescont}%
+ \else\let\subfiles@tmp\subfiles@skipline
+ \fi \subfiles@tmp}
+}
+% \end{macrocode}
%
-% We use the |import| package to handle subfiles in separate directories.
+% To handle subfiles in separate directories, we use the |import| package.
+% If it has already been loaded, e.g.\ by the |subfiles| class, this line does nothing.
+% \begin{macrocode}
+\RequirePackage{import}
+% \end{macrocode}
+%
% The |\subimport| command requires path and filename as separate arguments, so we have to split file locations into these two components.
% The internal \LaTeX\ command |\filename@parse| almost fits the bill, except that it additionally splits the filename into basename and extension.
% Unfortunately, concatenating basename and extension to recover the filename is not clean:
% Under Unix/Linux, the filenames |base| and |base.| denote different entities, but after |\filename@parse| both have the same basename and an empty extension.
% Therefore we redefine the command |\filename@simple| temporarily; it is responsible for this unwanted split.
-% Both things, loading the package and defining the command, are also done in |subfiles.cls|, so we have to execute this code only if we are typesetting the main file.
-%
+%
% \begin{macrocode}
-}{% subfiles class not loaded, we typeset the main document
- \RequirePackage{import}
- \def\subfiles@split#1{%
- \let\subfiles@filename@simple\filename@simple
- \def\filename@simple##1.\\{\edef\filename@base{##1}}%
- \filename@parse{#1}%
- \let\filename@simple\subfiles@filename@simple
- }
-}
+\def\subfiles@split#1{%
+ \let\subfiles@filename@simple\filename@simple
+ \def\filename@simple##1.\\{\edef\filename@base{##1}}%
+ \filename@parse{#1}%
+ \let\filename@simple\subfiles@filename@simple
+}%
% \end{macrocode}
%
% E.g., after executing |\subfiles@split{../dir1/dir2/file.tex}| the macros |\filename@area| and |\filename@base| expand to |../dir1/dir2/| and |file.tex|, respectively.
%
% \DescribeMacro{\subfile}
% The command |\subfile| specifies the command |\subimport| for |\input|ing the subfile, and then calls |\subfiles@subfile|.
+%
% \begin{macrocode}
\newcommand\subfile{%
\let\subfiles@loadfile\subimport
@@ -490,6 +571,7 @@
%
% \DescribeMacro{\subfileinclude}
% The command |\subfileinclude| specifies the command |\subincludefrom| for |\include|ing the subfile, and then calls |\subfiles@subfile|.
+%
% \begin{macrocode}
\newcommand\subfileinclude{%
\let\subfiles@loadfile\subincludefrom
@@ -497,7 +579,7 @@
}
% \end{macrocode}
%
-% The main functionality of the two |\subfile| commands is implemented in |\subfiles@subfile|.
+% The main functionality of the two commands is implemented in |\subfiles@subfile|.
% It redefines |\documentclass| and the |document| environment to do nothing but reverting these command to their original meaning and avoiding spurious spaces.
% Reverting |\documentclass| and |\document| to their original definition is important for being compatible with classes like |standalone| or packages like |bibentry|, which rely on this definition.
%
@@ -507,18 +589,17 @@
\let\subfiles@documentclass\documentclass
\let\subfiles@document\document
\let\subfiles@enddocument\enddocument
- \renewcommand\documentclass[2][subfiles]{%
- \let\documentclass\subfiles@documentclass
- \ignorespaces
- }%
+ \subfiles@handleSubpreamble
\renewenvironment{document}{%
\let\document\subfiles@document
\ignorespaces
}{%
\let\enddocument\subfiles@enddocument
\@ignoretrue
+ \subfiles@handleTextAfterSubdocument
}%
% \end{macrocode}
+%
% Now we split the file name into path and base name and load the file.
%
% \begin{macrocode}
@@ -528,36 +609,87 @@
}
% \end{macrocode}
%
-% To let external programs find files, we have to add the |\import@path| to file names.
-% This is accomplished with the command |\subfiles@addimportpath|.
+% \DescribeMacro{\subfix}
+% If some package provides a command that takes a filename as argument, then it has to be prefixed with the current |\import@path|.
+% This is what the |\subfix| command tries to do.
+% In order to succeed, the filename has to be expanded immediately, such that the current value of |\import@path| is used.
+%
+% \begin{macrocode}
+\def\subfix#1{\import@path#1}
+% \end{macrocode}
+%
+% For patching a list of file or path names, we define two auxiliary macros, one iterating over a comma-separated list of names and one processing a sequence of names enclosed in braces.
+%
% \begin{macrocode}
-\def\subfiles@addimportpath#1{%
- \def\subfiles@filelist{}%
+\def\subfiles@fixfilelist#1{%
+ \def\subfiles@list{}%
\def\subfiles@sep{}%
- \@for\subfiles@filename:=#1\do{%
- \edef\subfiles@filelist{%
- \subfiles@filelist
- \subfiles@sep
- \import@path
- \subfiles@filename
- }%
+ \@for\subfiles@tmp:=#1\do{%
+ \edef\subfiles@list{\subfiles@list\subfiles@sep\subfix{\subfiles@tmp}}%
\def\subfiles@sep{,}%
- }
+ }%
+}
+\def\subfiles@fixpathlist#1{%
+ \def\subfiles@list{}%
+ \@tfor\subfiles@tmp:=#1\do{%
+ \edef\subfiles@list{\subfiles@list{\subfix\subfiles@tmp}}%
+ }%
}
% \end{macrocode}
%
% \DescribeMacro{\bibliography}
-% We redefine the |\bibliography| command such that the import path is added to the file names before the original command is called.
+% \DescribeMacro{\graphicspath}
+% We patch |\bibliography| and |\graphicspath| (from the |graphics|/|graphicx| package) such that users don't have to worry about adding |\subfix|.
+%
% \begin{macrocode}
\let\subfiles@bibliography\bibliography
\renewcommand\bibliography[1]{%
- \subfiles@addimportpath{#1}%
- \expandafter\subfiles@bibliography\expandafter{\subfiles@filelist}%
+ \subfiles@fixfilelist{#1}%
+ \expandafter\subfiles@bibliography\expandafter{\subfiles@list}%
}
+\@ifpackageloaded{graphics}{%
+ \let\subfiles@graphicspath\graphicspath
+ \renewcommand\graphicspath[1]{%
+ \subfiles@fixpathlist{#1}%
+ \edef\subfiles@list{{\subfix{}}\subfiles@list}%
+ \expandafter\subfiles@graphicspath\expandafter{\subfiles@list}%
+ }%
+}{}
% \end{macrocode}
%
-% \DescribeMacro{\subfix}
-% Instead of adding further fixes for other packages that write filenames to external files (like |bibunits|), we provide a command for adding the |\import@path| to a filename.
+% \DescribeMacro{\ifSubfilesClassLoaded}
+% To add code or text conditionally, depending on whether the main document or a subfile is typeset, we provide the command |\ifSubfilesClassLoaded|.
+%
% \begin{macrocode}
-\def\subfix#1{\import@path#1}
+\newcommand\ifSubfilesClassLoaded{%
+ \expandafter\ifx\csname ver@subfiles.cls\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+%
+% The |subfiles| package is loaded near the end of the main preamble.
+% If it is loaded from a subfile, i.e., if |subfiles.cls| has been loaded, then we have to prepare for skipping the main document.
+% We do this be redefining the |\begin| command.
+% Normally, the first |\begin| after the |subfiles| package starts the main document.
+% To allow for the case that some other environment occurs before (does it really happen?) we test whether we are dealing with |\begin{document}|.
+% If not, we execute the original definition of |\begin|; otherwise we skip the main document as specified by |\subfiles@handleMain|.
+%
+% \begin{macrocode}
+\ifSubfilesClassLoaded{%
+ \let\subfiles@begin\begin
+ \def\begin#1{%
+ \def\subfiles@tmp{#1}%
+ \ifx\subfiles@tmp\subfiles@DOCUMENT
+ \let\begin\subfiles@begin
+ \let\subfiles@tmp\subfiles@handleMain
+ \else
+ \def\subfiles@tmp{\subfiles@begin{#1}}%
+ \fi
+ \subfiles@tmp
+ }%
+}{}
+%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/subfiles/subfiles.ins b/macros/latex/contrib/subfiles/subfiles.ins
index 95380c1670..6e4a5ed00b 100644
--- a/macros/latex/contrib/subfiles/subfiles.ins
+++ b/macros/latex/contrib/subfiles/subfiles.ins
@@ -1,6 +1,6 @@
% subfiles - class and package for multi-file projects in LaTeX
% Copyright 2002, 2012 Federico Garcia (feg8@pitt.edu, fedegarcia@hotmail.com)
-% Copyright 2018, 2019 Gernot Salzer (salzer@logic.at)
+% Copyright 2018-2020 Gernot Salzer (salzer@logic.at)
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -23,7 +23,7 @@
This is a generated file.
-Copyright 2002, 2012 Federico Garcia; 2018, 2019 Gernot Salzer
+Copyright 2002, 2012 Federico Garcia; 2018-2020 Gernot Salzer
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/subfiles/subfiles.pdf b/macros/latex/contrib/subfiles/subfiles.pdf
index 0925cb83b9..ae8b02f6af 100644
--- a/macros/latex/contrib/subfiles/subfiles.pdf
+++ b/macros/latex/contrib/subfiles/subfiles.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-physical/README.md b/macros/luatex/latex/lua-physical/README.md
index e4696639af..8162d2de4d 100644
--- a/macros/luatex/latex/lua-physical/README.md
+++ b/macros/luatex/latex/lua-physical/README.md
@@ -2,9 +2,9 @@
Author: Thomas Jenni
-Version: 1.0.1
+Version: 1.0.2
-Date: 2020-09-05
+Date: 2020-09-07
License: MIT
diff --git a/macros/luatex/latex/lua-physical/lua-physical.pdf b/macros/luatex/latex/lua-physical/lua-physical.pdf
index 52e7668c0d..d7d4994674 100644
--- a/macros/luatex/latex/lua-physical/lua-physical.pdf
+++ b/macros/luatex/latex/lua-physical/lua-physical.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-physical/lua-physical.tex b/macros/luatex/latex/lua-physical/lua-physical.tex
index 3beae19b74..7ce00daa43 100644
--- a/macros/luatex/latex/lua-physical/lua-physical.tex
+++ b/macros/luatex/latex/lua-physical/lua-physical.tex
@@ -89,9 +89,9 @@ Q = physical.Quantity
keywordstyle=\ttfamily\bfseries\color{black},
basicstyle=\ttfamily\footnotesize,
commentstyle=\itshape\color{gray},
+ columns=flexible,
stringstyle=\ttfamily,
tabsize=2,
- numbers=right,
showstringspaces=false,
breaklines=true,
breakindent=30pt,
@@ -152,7 +152,7 @@ Q = physical.Quantity
\lstset{language=[LaTex]Tex}
-\title{The \textsc{lua-physical} library \\\ \\\normalsize Version 1.0.1}
+\title{The \textsc{lua-physical} library \\\ \\\normalsize Version 1.0.2}
\author{Thomas Jenni}
\date{\today}
\maketitle
@@ -184,7 +184,6 @@ This package is a pure Lua library. Therefore one has to require it explicitly b
The following \LaTeX{} preamble loads the |lua-physical| package and creates a macro |\q| for printing physical quantities.
\nopagebreak
\begin{lstlisting}[language=Tex, caption=basic preamble, label=lst:basic preamble]
- \usepackage{lua-physical}
\usepackage{siunitx}
% configure siunitx
@@ -244,9 +243,9 @@ Given the basic preamble, units can be used in lua code directly. By convention,
\end{luacode}
A car travels $\q{s}$ in $\q{t}$. calculate its velocity.
-$$
+\begin{align}
v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \uuline{\q{v}}
-$$
+\end{align}
\end{lstlisting}
\begin{luacode}
@@ -258,9 +257,9 @@ $$
\leftbar
A car travels $\q{s}$ in $\q{t}$. Calculate its velocity.
-$$
+\begin{align}
v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \uuline{\q{v}}
-$$
+\end{align}
\endleftbar
In the above listing~\ref{lst:Car Velocity}, the variable |s| stands for displacement and has the unit meter |_m|, the variable |t| stands for time and is given in seconds |_s|. If mathematical operations are done on them, new physical quantities are created. In the problem above, the velocity |v| is calculated by dividing |s| by |t|. The instance |v| has the derived unit \si{\m\per\s}. By using the macro |\q{}| all quantities can be printed to the \LuaLaTeX{} code directly.
@@ -284,12 +283,12 @@ Very often, the result of a calculation has to be converted to another unit. In
Find the volume of a rectangular cuboid with lengths $\q{a}$,
$\q{b}$ and $\q{c}$.
-$$
+\begin{align}
V= a \cdot b \cdot c
= \q{a} \cdot \q{b} \cdot \q{c}
= \q{V}
= \uuline{\q{V:to(_dm^3)}}
-$$
+\end{align}
\end{lstlisting}
\begin{luacode}
@@ -302,12 +301,12 @@ $$
\leftbar
Find the volume of a rectangular cuboid with lengths $\q{a}$, $\q{b}$ and $\q{c}$.
-$$
+\begin{align}
V= a \cdot b \cdot c
= \q{a} \cdot \q{b} \cdot \q{c}
= \q{V}
= \uuline{\q{V:to(_dm^3)}}
-$$
+\end{align}
\endleftbar
@@ -395,9 +394,9 @@ In the following problem, listing~\ref{lst:temperature conversion}, the task is
The package supports uncertainty propagation. To create a number with an uncertainty, an instance of |physical.Number| has to be created, see listing~\ref{lst:rectangular area}. It has to be remembered, that |N| is a alias for |physical.Number|. The first argument of the constructor |N(mean, uncertainty)| is the mean value and the second one the uncertainty of the measurement. If the proposed preamble \ref{lst:basic preamble} is used, the uncertainty is by default seperated from the mean value by a plus-minus sign.
For the uncertainty propagation the gaussian formula
-$$
+\begin{align}
\Delta f = \sqrt{ \left(\frac{\partial f}{x_1} \cdot \Delta x_1\right)^2 + \dots + \left(\frac{\partial f}{x_n} \cdot \Delta x_2 \right)^2 }
-$$
+\end{align}
is used. This formula is a good estimation for the uncertainty $\Delta f$, if the quantities $x_1, \dots, x_n$ the function $f$ depends on, have no correlation. Further, the function $f$ has to change linear, if quantities $x_i$ are changed in the range of their uncertainties.
@@ -411,11 +410,11 @@ is used. This formula is a good estimation for the uncertainty $\Delta f$, if th
\end{luacode}
Calculate the area of a rectangle with lengths $\q{a}$ and $\q{b}$.
-$$
+\begin{align}
A = a \cdot b
= \q{a} \cdot \q{b}
= \uuline{\q{A}}
-$$
+\end{align}
\end{lstlisting}
\begin{luacode}
@@ -427,11 +426,11 @@ $$
\leftbar
Calculate the area of a rectangle with lengths $\q{a}$ and $\q{b}$.
-$$
+\begin{align}
A = a \cdot b
= \q{a} \cdot \q{b}
= \uuline{\q{A}}
-$$
+\end{align}
\endleftbar
@@ -450,11 +449,11 @@ In the following problem, listing~\ref{lst:volume of ideal gas}, the task is to
\end{luacode}
An ideal gas ($\q{n}$) has a pressure of $\q{p}$ and a temperature of $\q{T}$. Calculate the volume of the gas.
-$$
+\begin{align}
V=\frac{ \q{n} \cdot \q{_R} \cdot \q{(T + _degC_0):to(_K)} }{ \q{p} }
= \q{V}
= \uuline{\q{V}}
-$$
+\end{align}
\end{lstlisting}
@@ -470,10 +469,10 @@ $$
\leftbar
An ideal gas ($\q{n}$) has a pressure of $\q{p}$ and a temperature of $\q{T}$. Calculate the volume of the gas.
-$$
+\begin{align}
V=\frac{ \q{n} \cdot \q{(_R*N(1,0.001)):to(_J/(_mol*_K))} \cdot \q{(T + _degC_0):to(_K)} }{ \q{p} }
= \uuline{\q{V}}
-$$
+\end{align}
\endleftbar
This example shows, that the result has only two digits. If more digits are needed, the uncertainties of the given quantities should be smaller.
@@ -2036,9 +2035,9 @@ tex.write(tostring(x:atan():to(_deg)))
\method{Q}{sinh(q)}
\begin{quote}
Returns the value of the hyperbolic sine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\sinh(x) = 0.5 \cdot e^x - 0.5 / e^x \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2067,9 +2066,9 @@ tex.write(tostring(x:sinh()))
\method{Q}{cosh(q)}
\begin{quote}
Returns the value of the hyperbolic cosine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\cosh(x) = 0.5 \cdot e^x + 0.5 / e^x \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2097,9 +2096,9 @@ tex.write(tostring(x:cosh()))
\method{Q}{tanh(q)}
\begin{quote}
Returns the value of the hyperbolic tangent function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2128,9 +2127,9 @@ tex.write(tostring(x:tanh()))
\method{Q}{asinh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic sine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\text{asinh}(x) = \ln\left( x + \sqrt{x^2 + 1} \right) \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2159,9 +2158,9 @@ tex.write(tostring(x:asinh()))
\method{Q}{acosh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic cosine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\text{acosh}(x) = \ln\left( x + \sqrt{x^2 - 1} \right) \quad, x > 1 \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2190,9 +2189,9 @@ tex.write(tostring(x:acosh()))
\method{Q}{atanh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic tangent function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- $$
+ \begin{align}
\text{atanh}(x) = \ln\left( \frac{1 + x}{1 - x} \right) \quad, -1 < x < 1 \quad.
- $$
+ \end{align}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -3053,6 +3052,8 @@ tex.write(tostring(n:atanh()))
\newpage
\section{Change History}
+V1.0.2 \quad (2020/09/07) Minor release. Path issues resolved. Docs corrected.
+
V1.0.1 \quad (2020/09/05) Minor release. Files renamed.
V1.0 \quad (2020/09/03) First official release.
diff --git a/macros/luatex/latex/lua-physical/physical.lua b/macros/luatex/latex/lua-physical/physical.lua
index 3bbbc00efe..2af9d7677a 100644..100755
--- a/macros/luatex/latex/lua-physical/physical.lua
+++ b/macros/luatex/latex/lua-physical/physical.lua
@@ -1 +1,51 @@
-return require((...) .. '.physical-init') \ No newline at end of file
+--[[
+
+lua-physical
+
+Author: Thomas Jenni
+Version: 1.0.2
+Date: 2020-09-07
+
+License: MIT
+
+Copyright (c) 2020 Thomas Jenni
+
+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.
+]]--
+
+-- Source: http://kiki.to/blog/2014/04/12/rule-5-beware-of-multiple-files/
+
+local Dimension = require('physical-dimension')
+local Unit = require('physical-unit')
+local Quantity = require('physical-quantity')
+local Number = require('physical-number')
+
+require('physical-definition')
+
+local Data = require('physical-data')
+
+local m = {
+ Dimension = Dimension,
+ Unit = Unit,
+ Number = Number,
+ Quantity = Quantity,
+ Data = Data
+}
+
+return m \ No newline at end of file
diff --git a/macros/luatex/latex/lua-physical/physical/physical-init.lua b/macros/luatex/latex/lua-physical/physical/physical-init.lua
deleted file mode 100644
index fa2e9eceb1..0000000000
--- a/macros/luatex/latex/lua-physical/physical/physical-init.lua
+++ /dev/null
@@ -1,53 +0,0 @@
---[[
-
-lua-physical
-
-Author: Thomas Jenni
-Version: 1.0.1
-Date: 2020-09-05
-
-License: MIT
-
-Copyright (c) 2020 Thomas Jenni
-
-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.
-]]--
-
-local current_folder = (...):gsub('%.physical%-init$', '')
-
--- Source: http://kiki.to/blog/2014/04/12/rule-5-beware-of-multiple-files/
-
-local Dimension = require(current_folder .. '.physical-dimension')
-local Unit = require(current_folder .. '.physical-unit')
-local Quantity = require(current_folder .. '.physical-quantity')
-local Number = require(current_folder .. '.physical-number')
-
-require(current_folder .. '.physical-definition')
-
-local Data = require(current_folder .. '.physical-data')
-
-local m = {
- Dimension = Dimension,
- Unit = Unit,
- Number = Number,
- Quantity = Quantity,
- Data = Data
-}
-
-return m \ No newline at end of file
diff --git a/macros/luatex/latex/lua-physical/test/testData.lua b/macros/luatex/latex/lua-physical/test/testData.lua
index 96d6201aa4..6af56c24f3 100644
--- a/macros/luatex/latex/lua-physical/test/testData.lua
+++ b/macros/luatex/latex/lua-physical/test/testData.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
diff --git a/macros/luatex/latex/lua-physical/test/testDefinition.lua b/macros/luatex/latex/lua-physical/test/testDefinition.lua
index 08efc8bb9d..a36d460086 100644
--- a/macros/luatex/latex/lua-physical/test/testDefinition.lua
+++ b/macros/luatex/latex/lua-physical/test/testDefinition.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testDimension.lua b/macros/luatex/latex/lua-physical/test/testDimension.lua
index 44d2840322..8578196995 100644
--- a/macros/luatex/latex/lua-physical/test/testDimension.lua
+++ b/macros/luatex/latex/lua-physical/test/testDimension.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
local D = physical.Dimension
diff --git a/macros/luatex/latex/lua-physical/test/testNumber.lua b/macros/luatex/latex/lua-physical/test/testNumber.lua
index 1a5ec0791d..e41ff355e5 100644
--- a/macros/luatex/latex/lua-physical/test/testNumber.lua
+++ b/macros/luatex/latex/lua-physical/test/testNumber.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testQuantity.lua b/macros/luatex/latex/lua-physical/test/testQuantity.lua
index b27c853e7c..e7e1223ab6 100644
--- a/macros/luatex/latex/lua-physical/test/testQuantity.lua
+++ b/macros/luatex/latex/lua-physical/test/testQuantity.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testUnit.lua b/macros/luatex/latex/lua-physical/test/testUnit.lua
index eb0d67402b..1e3107ae07 100644
--- a/macros/luatex/latex/lua-physical/test/testUnit.lua
+++ b/macros/luatex/latex/lua-physical/test/testUnit.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../?.lua;" .. package.path
+package.path = "../physical/?.lua;" .. package.path
local physical = require("physical")
local D = physical.Dimension
diff --git a/support/make4ht/README b/support/make4ht/README
index 78ec73056c..8851c4d99f 100644
--- a/support/make4ht/README
+++ b/support/make4ht/README
@@ -888,14 +888,12 @@ modules
options
-
: additional command line options for the Makeindex command.
### The `xindex` command
options
-
: additional command line options for the Xindex command.
language
diff --git a/support/make4ht/changelog.tex b/support/make4ht/changelog.tex
index 13effe5fd0..9752285cf3 100644
--- a/support/make4ht/changelog.tex
+++ b/support/make4ht/changelog.tex
@@ -3,12 +3,112 @@
\begin{itemize}
\item
+ 2020/09/07
+
+ \begin{itemize}
+ \tightlist
+ \item
+ version \texttt{0.3f} released.
+ \end{itemize}
+\item
+ 2020/08/26
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \texttt{fixinlines} DOM filter: added
+ \texttt{\textless{}a\textgreater{}} element into list of inline
+ elements.
+ \end{itemize}
+\item
+ 2020/08/24
+
+ \begin{itemize}
+ \tightlist
+ \item
+ initialize attributes in new element in \texttt{mathmlfixes} DOM
+ extension.
+ \end{itemize}
+\item
+ 2020/07/18
+
+ \begin{itemize}
+ \tightlist
+ \item
+ changed CSS for the HTML documentation.
+ \end{itemize}
+\item
+ 2020/07/17
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed bug in index parsing.
+ \end{itemize}
+\item
+ 2020/07/10
+
+ \begin{itemize}
+ \tightlist
+ \item
+ use the \texttt{joincharacters} DOM filter for TEI output.
+ \end{itemize}
+\item
+ 2020/07/08
+
+ \begin{itemize}
+ \tightlist
+ \item
+ don't fail when filename cannot be detected in
+ \texttt{make4ht-errorlogparser.lua}.
+ \end{itemize}
+\item
+ 2020/05/27
+
+ \begin{itemize}
+ \tightlist
+ \item
+ test if copied file exists in \texttt{mkutils.cp}.
+ \end{itemize}
+\item
+ 2020/05/19
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed image filename replace in \texttt{dvisvgm\_hashes} extension.
+ \end{itemize}
+\item
+ 2020/05/16
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed HTML filename matching in extensions.
+ \end{itemize}
+\item
+ 2020/05/08
+
+ \begin{itemize}
+ \tightlist
+ \item
+ use global environment in the build files.
+ \end{itemize}
+\item
+ 2020/03/03
+
+ \begin{itemize}
+ \tightlist
+ \item
+ added \texttt{jats} format.
+ \end{itemize}
+\item
2020/02/28
\begin{itemize}
\tightlist
\item
- version \texttt{0.3e\ released}
+ version \texttt{0.3e\ released}.
\end{itemize}
\item
2020/02/24
diff --git a/support/make4ht/domfilters/make4ht-fixinlines.lua b/support/make4ht/domfilters/make4ht-fixinlines.lua
index 25489f59ca..d1b11b123e 100644
--- a/support/make4ht/domfilters/make4ht-fixinlines.lua
+++ b/support/make4ht/domfilters/make4ht-fixinlines.lua
@@ -1,4 +1,5 @@
local inline_elements = {
+ a=true,
b=true,
big=true,
i=true,
diff --git a/support/make4ht/domfilters/make4ht-mathmlfixes.lua b/support/make4ht/domfilters/make4ht-mathmlfixes.lua
index a52b0e5d6b..3e044b9445 100644
--- a/support/make4ht/domfilters/make4ht-mathmlfixes.lua
+++ b/support/make4ht/domfilters/make4ht-mathmlfixes.lua
@@ -28,6 +28,7 @@ local function fix_nested_mstyle(el)
-- if parent doesn't have the mathvariant attribute copy it from <mstyle>
if not parent:get_attribute("mathvariant") then
local mathvariant = el:get_attribute("mathvariant")
+ parent._attr = parent._attr or {}
parent:set_attribute("mathvariant", mathvariant)
end
-- copy the contents of <mstyle> to the parent element
diff --git a/support/make4ht/extensions/make4ht-ext-common_domfilters.lua b/support/make4ht/extensions/make4ht-ext-common_domfilters.lua
index 63232b22ce..802902d48d 100644
--- a/support/make4ht/extensions/make4ht-ext-common_domfilters.lua
+++ b/support/make4ht/extensions/make4ht-ext-common_domfilters.lua
@@ -27,7 +27,7 @@ function M.modify_build(make)
count = 2
else
local process = filter {"fixinlines", "idcolons", "joincharacters", "mathmlfixes", "tablerows","booktabs"}
- make:match("html$", process)
+ make:match("html?$", process)
count = 1
end
return make
diff --git a/support/make4ht/extensions/make4ht-ext-common_filters.lua b/support/make4ht/extensions/make4ht-ext-common_filters.lua
index 513fbed34e..9b3e7f3f74 100644
--- a/support/make4ht/extensions/make4ht-ext-common_filters.lua
+++ b/support/make4ht/extensions/make4ht-ext-common_filters.lua
@@ -11,7 +11,7 @@ function M.test(format)
end
function M.modify_build(make)
- make:match("html$", process)
+ make:match("html?$", process)
local matches = make.matches
-- the filters should be first match to be executed, especially if tidy
-- should be executed as well
diff --git a/support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua b/support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
index 87f58abd57..8bf82e0588 100644
--- a/support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
+++ b/support/make4ht/extensions/make4ht-ext-dvisvgm_hashes.lua
@@ -244,11 +244,11 @@ function M.modify_build(make)
-- fix src attributes
local process = filter {
- function(str)
- return str:gsub('src="([^"]+)', function(filename)
+ function(str, filename)
+ return str:gsub('src=["\'](.-)(["\'])', function(filename, endquote)
local newname = output_map[filename] or filename
log:debug("newname", newname)
- return 'src="'.. newname
+ return 'src=' .. endquote .. newname .. endquote
end)
end
}
diff --git a/support/make4ht/extensions/make4ht-ext-join_colors.lua b/support/make4ht/extensions/make4ht-ext-join_colors.lua
index 182661fbdb..4d72b0e15b 100644
--- a/support/make4ht/extensions/make4ht-ext-join_colors.lua
+++ b/support/make4ht/extensions/make4ht-ext-join_colors.lua
@@ -10,7 +10,7 @@ end
function M.modify_build(make)
local process = filter {"joincolors"}
- make:match("html$", process)
+ make:match("html?$", process)
return make
end
return M
diff --git a/support/make4ht/extensions/make4ht-ext-mathjaxnode.lua b/support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
index cbad897d4e..c2c4928aeb 100644
--- a/support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
+++ b/support/make4ht/extensions/make4ht-ext-mathjaxnode.lua
@@ -9,7 +9,7 @@ end
function M.modify_build(make)
local mathjax = filter { "mathjaxnode"}
- make:match("html$",mathjax)
+ make:match("html?$",mathjax)
return make
end
diff --git a/support/make4ht/extensions/make4ht-ext-tidy.lua b/support/make4ht/extensions/make4ht-ext-tidy.lua
index b381a05a8f..8318a8b894 100644
--- a/support/make4ht/extensions/make4ht-ext-tidy.lua
+++ b/support/make4ht/extensions/make4ht-ext-tidy.lua
@@ -38,7 +38,7 @@ end
function M.modify_build(make)
- make:match("html$", function(filename, par)
+ make:match("html?$", function(filename, par)
local settings = get_filter_settings "tidy" or {}
par.options = par.options or settings.options or "-utf8 -w 512 -ashtml -q"
local command = "tidy ${options} ${filename}" % par
diff --git a/support/make4ht/formats/make4ht-jats.lua b/support/make4ht/formats/make4ht-jats.lua
new file mode 100644
index 0000000000..13bcd86d41
--- /dev/null
+++ b/support/make4ht/formats/make4ht-jats.lua
@@ -0,0 +1,14 @@
+local M = {}
+local xtpipeslib = require "make4ht-xtpipes"
+
+function M.prepare_parameters(settings, extensions)
+ settings.tex4ht_sty_par = settings.tex4ht_sty_par ..",jats"
+ settings = mkutils.extensions_prepare_parameters(extensions, settings)
+ return settings
+end
+
+function M.prepare_extensions(extensions)
+ return extensions
+end
+
+return M
diff --git a/support/make4ht/formats/make4ht-tei.lua b/support/make4ht/formats/make4ht-tei.lua
index f81953a8b3..660f6d49d8 100644
--- a/support/make4ht/formats/make4ht-tei.lua
+++ b/support/make4ht/formats/make4ht-tei.lua
@@ -1,6 +1,8 @@
local M = {}
local xtpipeslib = require "make4ht-xtpipes"
+local domfilter = require "make4ht-domfilter"
+
function M.prepare_parameters(settings, extensions)
settings.tex4ht_sty_par = settings.tex4ht_sty_par ..",tei"
settings = mkutils.extensions_prepare_parameters(extensions, settings)
@@ -11,4 +13,19 @@ function M.prepare_extensions(extensions)
return extensions
end
+function M.modify_build(make)
+ local process = domfilter {
+ "joincharacters"
+ }
+
+ -- we use <hi> elements for characters styled using HTF fonts in TEI
+ -- use the `joincharacters` DOM filter to join them
+ filter_settings "joincharacters" {
+ charclasses = { hi=true, mn = true}
+ }
+
+ make:match("xml$", process)
+ return make
+end
+
return M
diff --git a/support/make4ht/make4ht b/support/make4ht/make4ht
index 50917bd57e..079c464ecd 100755
--- a/support/make4ht/make4ht
+++ b/support/make4ht/make4ht
@@ -29,7 +29,7 @@ make4ht [options] filename ["tex4ht.sty op." "tex4ht op." "t4ht op" "latex op"]
-- set version number. the template should be replaced by the
-- actual version number by the build script
-local version = "v0.3e"
+local version = "v0.3f"
mkparams.version_number = version
local args = mkparams.get_args()
@@ -43,7 +43,7 @@ local mode = parameters.mode
local build_file = parameters.build_file
-- handle output formats
-local allowed_output_formats = {xhtml = true, html5=true, odt = true, docbook=true, tei=true}
+local allowed_output_formats = {xhtml = true, html5=true, odt = true, docbook=true, tei=true, jats=true}
-- formatter is Lua library which must provide at least prepare_parameters
-- and process_build_sequence functions
local formatter
diff --git a/support/make4ht/make4ht-doc.pdf b/support/make4ht/make4ht-doc.pdf
index 371e3e3fb8..7399a5b879 100644
--- a/support/make4ht/make4ht-doc.pdf
+++ b/support/make4ht/make4ht-doc.pdf
Binary files differ
diff --git a/support/make4ht/make4ht-errorlogparser.lua b/support/make4ht/make4ht-errorlogparser.lua
index b48957c651..e536370ac9 100644
--- a/support/make4ht/make4ht-errorlogparser.lua
+++ b/support/make4ht/make4ht-errorlogparser.lua
@@ -1,7 +1,10 @@
local m = {}
local function get_filename(chunk)
- local filename = chunk:match("([^\n^%(]+)")
+ local filename = chunk:match("([^\n^%(]+)")
+ if not filename then
+ return false, "No filename detected"
+ end
local first = filename:match("^[%./\\]+")
if first then return filename end
return false
diff --git a/support/make4ht/make4ht-indexing.lua b/support/make4ht/make4ht-indexing.lua
index a86fd139aa..eb9c9b5017 100644
--- a/support/make4ht/make4ht-indexing.lua
+++ b/support/make4ht/make4ht-indexing.lua
@@ -75,7 +75,7 @@ local parse_idx = function(content)
if line:match("^\\beforeentry") then
-- increment index entry number
current_entry = current_entry + 1
- local file, dest = line:match("\\beforeentry{(.-)}{(.-)}")
+ local file, dest = line:match("\\beforeentry%s*{(.-)}{(.-)}")
map[current_entry] = {file = file, dest = dest}
elseif line:match("^\\indexentry") then
-- replace the page number with the current
diff --git a/support/make4ht/make4ht-odtfilter.lua b/support/make4ht/make4ht-odtfilter.lua
deleted file mode 100644
index 97f0b8df67..0000000000
--- a/support/make4ht/make4ht-odtfilter.lua
+++ /dev/null
@@ -1,33 +0,0 @@
-local mkutils = require "mkutils"
-local zip = require "zip"
-
-
--- use function to change contents of the ODT file
-local function update_odt(odtfilename, file_path, fn)
- -- get name of the odt file
- local odtname = mkutils.remove_extension(odtfilename) .. ".odt"
- -- open and read contents of the requested file inside ODT file
- local odtfile = zip.open(odtname)
- local local_file = odtfile:open(file_path)
- local content = local_file:read("*all")
- local_file:close()
- odtfile:close()
- -- update the content using user function
- content = fn(content)
- -- write the updated file
- local local_file_file = io.open(file_path,"w")
- local_file_file:write(content)
- local_file_file:close()
- os.execute("zip " .. odtname .. " " .. file_path)
- os.remove(file_path)
-end
-
-Make:match("tmp$", function(name, par)
- update_odt(name, "content.xml", function(content)
- return content:gsub("%&%#x([A-Fa-f0-9]+);", function(entity)
- -- convert hexadecimal entity to Unicode
- print(entity,utfchar(tonumber(entity, 16)))
- return utfchar(tonumber(entity, 16))
- end)
- end)
-end)
diff --git a/support/make4ht/mkutils.lua b/support/make4ht/mkutils.lua
index a4f16fb71a..38a4966315 100644
--- a/support/make4ht/mkutils.lua
+++ b/support/make4ht/mkutils.lua
@@ -118,6 +118,9 @@ function cp(src,dest)
local command = string.format('%s "%s" "%s"', cp_func, src, dest)
if cp_func == "copy" then command = command:gsub("/",'\\') end
log:info("Copy: "..command)
+ if not file_exists(src) then
+ log:error("File " .. src .. " doesn't exist")
+ end
os.execute(command)
end
@@ -264,9 +267,11 @@ end
local main_settings = {}
main_settings.fonts = {}
-local env = {}
+-- use global environment in the build file
+-- it used to be sandboxed, but it proved not to be useful at all
+local env = _G ---{}
--- We make sandbox for make script, all functions must be explicitely declared
+-- explicitly enale some functions and modules in the sandbox
-- Function declarations:
env.pairs = pairs
env.ipairs = ipairs
diff --git a/support/make4ht/readme.tex b/support/make4ht/readme.tex
index b221473e02..25c4b99064 100644
--- a/support/make4ht/readme.tex
+++ b/support/make4ht/readme.tex
@@ -950,19 +950,18 @@ table with names of additional \texttt{Xindy} modules to be used.
\subsubsection{\texorpdfstring{The \texttt{makeindex}
command}{The makeindex command}}\label{the-makeindex-command}}
-options
-
-: additional command line options for the Makeindex command.
+\begin{description}
+\item[options]
+additional command line options for the Makeindex command.
+\end{description}
\hypertarget{the-xindex-command}{%
\subsubsection{\texorpdfstring{The \texttt{xindex}
command}{The xindex command}}\label{the-xindex-command}}
-options
-
-: additional command line options for the Xindex command.
-
\begin{description}
+\item[options]
+additional command line options for the Xindex command.
\item[language]
document language
\end{description}
diff --git a/support/tex4ebook/README b/support/tex4ebook/README
index 796445674a..3634974ab8 100644
--- a/support/tex4ebook/README
+++ b/support/tex4ebook/README
@@ -81,7 +81,7 @@ But it is optional. You shouldn't need to modify your \TeX\ files
`-f,--format (default epub)`
-: Output format. Possible values are `epub`, `epub3` and `mobi`.
+: Output format. Possible values are `epub`, `epub3`, `mobi`, `azw` and `azw3`.
`-j,--jobname`
@@ -304,7 +304,7 @@ Type
- WARNING: filename.epub: item (OEBPS/foo.boo) exists in the zip file, but is
not declared in the OPF file
- Delete the `filename-(epub|epub3|mobi)` folder and `filename.epub`. Then
+ Delete the `filename-(epub|epub3|mobi|azw|azw3)` folder and `filename.epub`. Then
run `tex4ebook` again.
- WARNING(ACC-009): hsmmt10t.epub/OEBPS/hsmmt10tch17.xhtml(235,15):
diff --git a/support/tex4ebook/changelog.tex b/support/tex4ebook/changelog.tex
index 4cb5c8c7ca..f77423e85b 100644
--- a/support/tex4ebook/changelog.tex
+++ b/support/tex4ebook/changelog.tex
@@ -3,6 +3,60 @@
\begin{itemize}
\item
+ 2020/09/07
+
+ \begin{itemize}
+ \tightlist
+ \item
+ released version \texttt{0.3b}
+ \end{itemize}
+\item
+ 2020/08/26
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed hiearchical structure in NCX TOC for chapters in backmatter
+ and appendix
+ \item
+ load \texttt{common\_domfilters} extension by default.
+ \end{itemize}
+\item
+ 2020/07/09
+
+ \begin{itemize}
+ \tightlist
+ \item
+ addded \texttt{AZW} and \texttt{AZW3} format support.
+ \end{itemize}
+\item
+ 2020/06/21
+
+ \begin{itemize}
+ \tightlist
+ \item
+ save \texttt{\textbackslash{}title} element
+ \item
+ save contents of \texttt{\textbackslash{}author} in macro directly
+ \end{itemize}
+\item
+ 2020/06/15
+
+ \begin{itemize}
+ \tightlist
+ \item
+ remove child elements from elements that don't allow them in the OPF
+ and NCX file.
+ \end{itemize}
+\item
+ 2020/03/14
+
+ \begin{itemize}
+ \tightlist
+ \item
+ explicitly list supported section types in the NCX table
+ \end{itemize}
+\item
2019/11/01
\begin{itemize}
diff --git a/support/tex4ebook/readme.tex b/support/tex4ebook/readme.tex
index 13b064bf31..0fdb16c1c9 100644
--- a/support/tex4ebook/readme.tex
+++ b/support/tex4ebook/readme.tex
@@ -92,8 +92,8 @@ Specify make4ht build file\footnote{\url{https://github.com/michal-h21/make4ht\#
Defaulf build file filename is \texttt{filename.mk4}, use this option if
you use different filename.
\item[\texttt{-f,-\/-format\ (default\ epub)}]
-Output format. Possible values are \texttt{epub}, \texttt{epub3} and
-\texttt{mobi}.
+Output format. Possible values are \texttt{epub}, \texttt{epub3},
+\texttt{mobi}, \texttt{azw} and \texttt{azw3}.
\item[\texttt{-j,-\/-jobname}]
Specify the output file name, without file extension.
\item[\texttt{-l,-\/-lua}]
@@ -371,8 +371,9 @@ issues:}\label{common-validation-issues}}
but is not declared in the OPF file
\end{itemize}
-Delete the \texttt{filename-(epub\textbar{}epub3\textbar{}mobi)} folder
-and \texttt{filename.epub}. Then run \texttt{tex4ebook} again.
+Delete the
+\texttt{filename-(epub\textbar{}epub3\textbar{}mobi\textbar{}azw\textbar{}azw3)}
+folder and \texttt{filename.epub}. Then run \texttt{tex4ebook} again.
\begin{itemize}
\item
diff --git a/support/tex4ebook/tex4ebook b/support/tex4ebook/tex4ebook
index ebd7485c2d..dc602c4e72 100755
--- a/support/tex4ebook/tex4ebook
+++ b/support/tex4ebook/tex4ebook
@@ -23,7 +23,7 @@ local tex4ht_sty_par=""
local tex4ht_par=""
local t4ht_par=""
local latex_par=""
-local output_formats={epub=true,mobi=true,epub3=true}
+local output_formats={epub=true,mobi=true,epub3=true,azw=true, azw3=true}
local executor=nil
local tidy = false
local include_fonts = false
@@ -67,7 +67,7 @@ else
end
if args.version then
- print "tex4ebook v0.3a"
+ print "tex4ebook v0.3b"
return
end
@@ -129,7 +129,9 @@ log:status("Input file: ".. params.tex_file)
local output_format = params.output_format
-- use epub as default output_format
output_format = output_format or "epub"
-local extensions = ebookutils.load_extensions(params.extensions, output_format)
+-- load common_domfilters extension by default
+local extensions = ebookutils.add_extensions("+common_domfilters", params.extensions)
+extensions = ebookutils.load_extensions(extensions, output_format)
-- but also support tex4ebook!s own parameters
local oldparams = {
-- htlatex=latex_cmd
diff --git a/support/tex4ebook/tex4ebook-doc.pdf b/support/tex4ebook/tex4ebook-doc.pdf
index 1f95636713..942a92df29 100644
--- a/support/tex4ebook/tex4ebook-doc.pdf
+++ b/support/tex4ebook/tex4ebook-doc.pdf
Binary files differ
diff --git a/support/tex4ebook/tex4ebook-exec_azw.lua b/support/tex4ebook/tex4ebook-exec_azw.lua
new file mode 100644
index 0000000000..397292b648
--- /dev/null
+++ b/support/tex4ebook/tex4ebook-exec_azw.lua
@@ -0,0 +1,35 @@
+module(...,package.seeall)
+local eb = require("tex4ebook-exec_epub")
+local ebookutils = require("mkutils")
+local log = logging.new "exec_azw"
+
+function prepare(params)
+ return eb.prepare(params)
+end
+
+function run(out,params)
+ return eb.run(out, params)
+end
+
+function writeContainer()
+ local ret = eb.writeContainer()
+ -- convert the epub file to azw
+ local epubpath = eb.basedir .. "/" .. eb.outputfile
+
+ -- find the azw filename
+ local azwfile = eb.outputfile:gsub("epub$", "azw")
+ local azwdist = eb.destdir .. azwfile
+ local command = "kindlegen " .. epubpath .. " -o " .. azwfile
+ log:info("Pack azw ".. command)
+ local status, output = ebookutils.execute(command)
+ -- copy the azw file to the destination directory
+ -- the destination directory will be created by the epub writer, so it is possible to use
+ -- the cp function which doesn't try to create directory
+ ebookutils.cp(eb.basedir .. "/" .. azwfile, azwdist)
+
+ return ret
+end
+
+function clean()
+ return eb.clean()
+end
diff --git a/support/tex4ebook/tex4ebook-exec_azw3.lua b/support/tex4ebook/tex4ebook-exec_azw3.lua
new file mode 100644
index 0000000000..33e8a1182c
--- /dev/null
+++ b/support/tex4ebook/tex4ebook-exec_azw3.lua
@@ -0,0 +1,35 @@
+module(...,package.seeall)
+local eb = require("tex4ebook-exec_epub")
+local ebookutils = require("mkutils")
+local log = logging.new "exec_azw"
+
+function prepare(params)
+ return eb.prepare(params)
+end
+
+function run(out,params)
+ return eb.run(out, params)
+end
+
+function writeContainer()
+ local ret = eb.writeContainer()
+ -- convert the epub file to azw
+ local epubpath = eb.basedir .. "/" .. eb.outputfile
+
+ -- find the azw filename
+ local azwfile = eb.outputfile:gsub("epub$", "azw3")
+ local azwdist = eb.destdir .. azwfile
+ local command = "kindlegen " .. epubpath .. " -o " .. azwfile
+ log:info("Pack azw ".. command)
+ local status, output = ebookutils.execute(command)
+ -- copy the azw file to the destination directory
+ -- the destination directory will be created by the epub writer, so it is possible to use
+ -- the cp function which doesn't try to create directory
+ ebookutils.cp(eb.basedir .. "/" .. azwfile, azwdist)
+
+ return ret
+end
+
+function clean()
+ return eb.clean()
+end
diff --git a/support/tex4ebook/tex4ebook-exec_epub.lua b/support/tex4ebook/tex4ebook-exec_epub.lua
index 52e2ab6134..b0ccee6202 100644
--- a/support/tex4ebook/tex4ebook-exec_epub.lua
+++ b/support/tex4ebook/tex4ebook-exec_epub.lua
@@ -5,6 +5,7 @@ local io = require("io")
local log = logging.new("exec_epub")
--local ebookutils = require("ebookutils")
local ebookutils = require "mkutils"
+local dom = require("luaxml-domobject")
local outputdir_name="OEBPS"
local metadir_name = "META-INF"
local mimetype_name="mimetype"
@@ -319,11 +320,123 @@ function pack_container()
ebookutils.cp(basedir .."/"..outputfile, destdir .. outputfile)
end
+local function update_file(filename, fn)
+ -- update contents of a filename using function
+ local f = io.open(filename, "r")
+ local content = f:read("*all")
+ f:close()
+ local newcontent = fn(content)
+ local f = io.open(filename, "w")
+ f:write(newcontent)
+ f:close()
+end
+
+local function fix_ncx_toc_levels(dom)
+ -- OK, this is a weird hack. The problem is that when \backmatter
+ -- follows \part, the subsequent chapters are listed under part
+ -- in the NCX TOC
+ -- I've added special element <navmark> to the ncx file to detect mark numbers.
+ -- chapters in backmatter should have empty mark number
+
+ -- get current <navpoint> section type and mark number
+ local get_navpoint_info = function(navpoint)
+ local navmarks = navpoint:query_selector("navmark")
+ if navmarks and #navmarks > 0 then
+ -- we are interested only in the first navmark, because it contains the current navPoint info
+ local navmark = navmarks[1]
+ return navmark:get_attribute("type"), navmark:get_text()
+ end
+ return nil, "Cannot find navLabel"
+ end
+
+ local fix_chapters = function(part)
+ -- move chapters from backmatter and appendix from the current part
+ -- find part position in the element list, it will be place where backmatter will be moved
+ local part_pos = part:find_element_pos() + 1
+ local part_parent = part:get_parent()
+ -- child chapters
+ local children = part:get_children()
+ -- loop over children from back, where backmatter or appendix may be placed
+ for i = #children, 1, -1 do
+ local current = children[i]
+ local sect_type, mark = get_navpoint_info(current)
+ if sect_type then
+ -- remove spaces from mark
+ mark = mark:gsub("%s", "")
+ if sect_type == "appendix" or (sect_type == "chapter" and mark=="") then
+ -- move chapter at the same level as part, after part
+ -- the correct order will be kept, because we move from the back of the node list
+ -- and every new node is placed before previous added nodes
+ part_parent:add_child_node(current:copy_node(), part_pos)
+ current:remove_node()
+ else
+ -- break processing if we find normal chapter
+ break
+ end
+ end
+ end
+ end
+
+ -- find the last part in the ncx table. it can contain incorrectly nested chapters
+ local parts = {}
+ for _, navpoint in ipairs(dom:query_selector("navMap navPoint")) do
+ -- we are not able to match just direct navPoint ancestors, so we will use this trick
+ if navpoint:get_parent():get_element_name() == "navMap" then
+ local sec_type, navmark = get_navpoint_info(navpoint)
+ if sec_type == "part" then table.insert(parts, navpoint) end
+ end
+ end
+ if #parts > 0 then
+ -- fix chapters in the last part
+ fix_chapters(parts[#parts])
+ end
+ return dom
+end
+
+local function clean_xml_files()
+ local opf_file = outputdir .. "/content.opf"
+ update_file(opf_file, function(content)
+ -- remove wrong elements from the OPF file
+ -- open opf file and create LuaXML DOM
+ local opf_dom = dom.parse(content)
+ -- remove child elements from elements that don't allow them
+ for _, el in ipairs(opf_dom:query_selector("dc|title, dc|creator")) do
+ -- get text content
+ local text = el:get_text()
+ -- replace element text with a new text node containing original text
+ el._children = {el:create_text_node(text)}
+ end
+ return opf_dom:serialize()
+ end)
+ local ncxfilename = outputdir .. "/" .. outputfilename .. ".ncx"
+ update_file(ncxfilename, function(content)
+ -- remove spurious spaces at the beginning
+ content = content:gsub("^%s*","")
+ local ncx_dom = dom.parse(content)
+ fix_ncx_toc_levels(ncx_dom)
+ -- remove child elements from <text> element
+ for _, el in ipairs(ncx_dom:query_selector("text")) do
+ local text = el:get_text()
+ -- replace element text with a new text node containing original text
+ el._children = {el:create_text_node(text)}
+ end
+ for _, el in ipairs(ncx_dom:query_selector("navPoint")) do
+ -- fix attribute names. this issue is caused by a LuaXML behavior
+ -- that makes all attributes lowercase
+ el._attr["playOrder"] = el._attr["playorder"]
+ el._attr["playorder"] = nil
+ end
+ return ncx_dom:serialize()
+ end)
+
+end
function writeContainer()
make_opf()
+ clean_xml_files()
pack_container()
end
+
local function deldir(path)
for entry in lfs.dir(path) do
if entry~="." and entry~=".." then
diff --git a/support/tex4ebook/tex4ebook.4ht b/support/tex4ebook/tex4ebook.4ht
index e623ac8bc2..6ee87ed3ae 100644
--- a/support/tex4ebook/tex4ebook.4ht
+++ b/support/tex4ebook/tex4ebook.4ht
@@ -157,7 +157,7 @@ href="#1" media-type="\a:CoverMimeType" />}}
"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">\Hnewline}}
%Get sanitized value of \title
-%\def\Title{\Ref{TITLE+}}
+\ifTag{TITLE+}{\def\Title{\LikeRef{TITLE+}}}{}
% If title contains macros, SafeTitle should be configured
% in the custom cfg file
\NewConfigure{SafeTitle}[1]{\gdef\Title{#1}}
@@ -255,7 +255,7 @@ href="#1" media-type="\a:CoverMimeType" />}}
\def\navsection#1#2{
\ConfigureToc{#1}%
{\expandafter\closelevels\expandafter{#2}
- \a:NavSection\Ncx:Mark}
+ \def\curr:sect:type{#1}\a:NavSection\Ncx:Mark}
{\c:NavSection}
{}
{\b:NavSection%
@@ -361,16 +361,16 @@ href="#1" media-type="\a:CoverMimeType" />}}
\Configure{toTocLink}{}{}%
\Configure{NavSection}{\booltrue{tocnoempty}\HCode{\Hnewline<navPoint id="navPoint-}%
\stepnavpoint\HCode{" playOrder="}%
- \the\navpoint\HCode{">\Hnewline<navLabel>\Hnewline<text>}%
+ \the\navpoint\HCode{">\Hnewline<navLabel>\Hnewline<text><navmark type="\curr:sect:type">}%
}{\HCode{</text>\Hnewline%
</navLabel>\Hnewline}%
\HCode{<content src="\navmapsrc" />}%
-}{ }{\HCode{</navPoint>\Hnewline}}
+}{\HCode{</navmark>}}{\HCode{</navPoint>\Hnewline}}
% Meta inf
\ncx:head
% Book title
\ncx:title
-\tableofcontents%[part,chapter,likechapter,section,likesection,subsection,likesubsection]%
+\tableofcontents[part,appendix,chapter,likechapter,appendixsec,section,likesection,appendixsubsec,subsection,likesubsection]%
%Hack to get close tag working
\HCode{</ncx>}
\EndNoFonts
diff --git a/support/tex4ebook/tex4ebook.sty b/support/tex4ebook/tex4ebook.sty
index 27a46b756e..1b0114748c 100644
--- a/support/tex4ebook/tex4ebook.sty
+++ b/support/tex4ebook/tex4ebook.sty
@@ -144,12 +144,12 @@
\let\tf@orig@author\author
\newcommand\tf@author[1]{%
\tf@orig@author{#1}%
- \let\Author\@author%
+ \def\Author{#1}%
}
\newcommand\tf@optauthor[2][]{%
\tf@orig@author[#1]{#2}%
- \let\Author\@author%
+ \def\Author{#2}%
}
% support optiona argument for \author as well
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 31fe78a93f..07bc180bfe 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -40,21 +40,19 @@ $mirrors = {
'https://ctan.um.ac.ir/' => 1,
},
'Japan' => {
+ 'ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/' => 1,
'http://ftp.jaist.ac.jp/pub/CTAN/' => 1,
'https://ftp.kddilabs.jp/CTAN/' => 1,
+ 'https://ftp.yz.yamagata-u.ac.jp/pub/CTAN/' => 1,
},
'Korea' => {
'http://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
- 'http://ftp.ktug.org/tex-archive/' => 1,
'http://mirror.kakao.com/CTAN/' => 1,
'https://cran.asia/tex/' => 1,
'https://ftp.harukasan.org/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
},
- 'Philippines' => {
- 'https://mirror.pregi.net/tex-archive/' => 1,
- },
'Singapore' => {
'https://download.nus.edu.sg/mirror/ctan/' => 1,
},
@@ -161,6 +159,7 @@ $mirrors = {
'North America' => {
'Canada' => {
'http://ctan.mirror.colo-serv.net/' => 1,
+ 'http://ctan.mirror.globo.tech/' => 1,
'http://ctan.mirror.rafal.ca/' => 1,
'https://ctan.math.ca/tex-archive/' => 1,
'https://mirror.its.dal.ca/ctan/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 8b17101340..f7b16337ed 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2020
-depend revision/56278
+depend revision/56290
name 00texlive.image
category TLCore
-revision 56278
+revision 56291
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment
longdesc this list. Those are not included in the source/ tarball. For
longdesc information on the 00texlive prefix see
longdesc 00texlive.installation(.tlpsrc)
-runfiles size=5027
+runfiles size=5028
.mkisofsrc
autorun.inf
texmf-dist/README
@@ -3435,6 +3435,7 @@ runfiles size=5027
tlpkg/tlpsrc/seminar.tlpsrc
tlpkg/tlpsrc/semioneside.tlpsrc
tlpkg/tlpsrc/semproc.tlpsrc
+ tlpkg/tlpsrc/semtex.tlpsrc
tlpkg/tlpsrc/sepfootnotes.tlpsrc
tlpkg/tlpsrc/sepnum.tlpsrc
tlpkg/tlpsrc/seqsplit.tlpsrc
@@ -4254,7 +4255,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 56268
+revision 56280
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
@@ -9295,7 +9296,7 @@ catalogue-version 1.2
name adjustbox
category Package
-revision 56140
+revision 56291
shortdesc Graphics package-alike macros for "general" boxes
relocated 1
longdesc The package provides several macros to adjust boxed content.
@@ -9311,10 +9312,10 @@ longdesc content as a box and not as a macro argument. This allows for
longdesc all forms of content including special material like verbatim
longdesc content. A special feature of collectbox is used to provide
longdesc matching environments with the identical names as the macros.
-containersize 13588
-containerchecksum fe659c96253a75c183abb0e560783c52c8e4c9315eda043efdf559311605ad600c72c8397c20482b0453c3e425a5d3da0a81d7936748a0f6ed252e049bee1a0f
-doccontainersize 719420
-doccontainerchecksum f060d2c54166a25733d2ff8c712a9cc6d71f0c3f8ae35021c22b83f26fad64678bf1c9edd42ab3995d0a4582f66c66d9a8c58e3506b78bf2f404b1419b79213c
+containersize 13596
+containerchecksum 851d9abec7b4eabaf470755cea1200978146f93fca4cb8cdd33adb53f3b427031ea70685b8458fa77c5bd8b842b62524dd713c12a901331778cd854fa862098c
+doccontainersize 719424
+doccontainerchecksum 3ddd36dcf4c56390aef552644e053612f1b2a900b2031f63aa6dd5da013916a00ead80a4e677c5225a14055f3b34d972faf17fe42e3cbe1f74b59a3b7d5206d6
docfiles size=195
RELOC/doc/latex/adjustbox/README details="Readme"
RELOC/doc/latex/adjustbox/adjcalc.pdf
@@ -9329,8 +9330,8 @@ docfiles size=195
RELOC/doc/latex/adjustbox/trimclip.pdf
RELOC/doc/latex/adjustbox/viewport.tex
RELOC/doc/latex/adjustbox/viewport2.tex
-srccontainersize 49560
-srccontainerchecksum a995391dfcd7e838e51339059dace34244298568d545586b521dcea79df0ef7c9eb6be74ca10c240081f166b286546bff617e6e3e6d2549cecb47315469aaa33
+srccontainersize 49556
+srccontainerchecksum 0a25cd50b343094fc6a5a07f9196f96c4f391fbf6845cf78f5c76c76c2af0a5c8c9ed79a29d14d3575a416c7fe1c9ae6e455e17d3d03ca09e9f9e1ddb170bf6c
srcfiles size=79
RELOC/source/latex/adjustbox/adjcalc.dtx
RELOC/source/latex/adjustbox/adjustbox.dtx
@@ -9345,9 +9346,9 @@ runfiles size=24
RELOC/tex/latex/adjustbox/tc-xetex.def
RELOC/tex/latex/adjustbox/trimclip.sty
catalogue-also gincltex collectbox realboxes
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/adjustbox/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/adjustbox
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/adjustbox/src
+catalogue-contact-bugs https://sourceforge.net/p/adjustbox/tickets/
+catalogue-contact-home https://sourceforge.net/p/adjustbox/
+catalogue-contact-repository https://sourceforge.net/p/adjustbox/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/adjustbox
catalogue-license lppl1.3
catalogue-topics typesetting box-manip
@@ -14962,7 +14963,7 @@ catalogue-topics font font-body font-serif font-sans font-proportional font-t1en
name aleph
category Package
-revision 54276
+revision 56291
shortdesc Extended TeX
longdesc An development of omega, using most of the extensions of TeX
longdesc itself developed for e-TeX.
@@ -14979,10 +14980,10 @@ depend omega
depend plain
execute AddFormat name=aleph engine=aleph options=*aleph.ini fmttriggers=cm,hyphen-base,knuth-lib,plain
execute AddFormat name=lamed engine=aleph patterns=language.dat options=*lambda.ini fmttriggers=cm,hyphen-base,antomega,lambda,latex,latex-fonts,omega,l3kernel
-containersize 612
-containerchecksum ac42bae0d6d3b4be4c343a8dfc127bda123119a14a078fefa7d3e6c004a820fc18b4b1f9abb11963942c3bcd5080d0c63a3cc0c374bb7250cac63f226259c803
-doccontainersize 54772
-doccontainerchecksum bc843b0bfdfc791beb0ca4fdb482df31b3a61ac2cf863584d62fe2284d98b31432784ae8b5da9acd5b3fae77ee07e4163fd9c7392f60776e96628236e05bfc92
+containersize 608
+containerchecksum cd9b9d8ebabc25af17ba40b4266258de73f64c64ca371997c4c1c9cff988175794bdcde00cd2bfa913e64d308b7d70ac2cbae1606a0deccb9dba5b204c1dcd9f
+doccontainersize 54776
+doccontainerchecksum 684b47b6ee0b3fa802cc62b321f117f8b0259318965d5bb9c950b593b24d2ff620ab7f275f9490c81ca21eee1c0c4546c6c24c7870ffa3192726f2b66d4ee3e4
docfiles size=21
texmf-dist/doc/aleph/base/News
texmf-dist/doc/aleph/base/readme.txt
@@ -14990,9 +14991,9 @@ docfiles size=21
texmf-dist/doc/man/man1/aleph.man1.pdf
texmf-dist/doc/man/man1/lamed.1
texmf-dist/doc/man/man1/lamed.man1.pdf
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/alephdir
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-license gpl
catalogue-topics engine omega
@@ -28652,15 +28653,15 @@ catalogue-version 3.1
name baekmuk
category Package
-revision 42106
+revision 56291
shortdesc Baekmuk Korean TrueType fonts
relocated 1
longdesc Baekmuk TrueType fonts (Korean) These fonts were retrieved from
longdesc http://kldp.net/baekmuk/
-containersize 8736988
-containerchecksum e10fef8fcee389514d759d7b985df3e84d3459a357fc3b4b6bec5c3814aea175aa8f313ab63e6048e60cfa5fe1cb1ddc0ae0410801893ec0e7ff5eabd7283c9f
+containersize 8736956
+containerchecksum bfc4909c549dfa89f11f707fe8bf2f02f118ccef8863c7708e1fdb65fd772605b9a8f661a41b1ef6f259492e9383774a7751144191f29c285b13840843248419
doccontainersize 1656
-doccontainerchecksum 0a69ee489e8ee9fea0fedd80bdbcc7a13505b5e3cc12fae3d56e09a852bc54eb0e64ba73f4c085e5286fb048114eb81aacc2aa34b27d72b4a72b966e188d78c5
+doccontainerchecksum c583a3ea88de39681bd49ec722f80ee09ffe43dc668a1901c73cd40eabcf3be24bdfbe582b72426cc56fe2b27d0f810208ce7feb9222a3a9e0cc2fbdd0e1b408
docfiles size=4
RELOC/doc/fonts/baekmuk/COPYRIGHT
RELOC/doc/fonts/baekmuk/COPYRIGHT.ks
@@ -28671,7 +28672,6 @@ runfiles size=6983
RELOC/fonts/truetype/public/baekmuk/dotum.ttf
RELOC/fonts/truetype/public/baekmuk/gulim.ttf
RELOC/fonts/truetype/public/baekmuk/hline.ttf
-catalogue-contact-home http://kldp.net/baekmuk
catalogue-ctan /fonts/baekmuk
catalogue-license other-free
catalogue-topics font font-ttf korean
@@ -36904,7 +36904,7 @@ catalogue-version 1.2.0
name biblatex-swiss-legal
category Package
-revision 56166
+revision 56291
shortdesc Bibliography and citation styles following Swiss legal practice
relocated 1
longdesc The package provides BibLaTeX bibliography and citation styles
@@ -36915,9 +36915,9 @@ longdesc ng-biblatex-swiss-legal-not-displayed-correctly the package is
longdesc at present outdated and does not work properly with newer
longdesc versions of BibLaTeX.
containersize 18148
-containerchecksum 906bb49356bb7dfeb5cbff815487bb6acd2646e8fb3aa583997d86700d5af4ce5db74c3e401892b411d08c163b48ec7eafa94d55b6a120ef5ce303b4e4c70842
+containerchecksum 077560ce39f1be98f719292d4596cebb7c982cbfac7da30f460153979a4629484ea92606957719e373d37f4267e05c0412f28419de82dfbfb9506051f59dd6cd
doccontainersize 513436
-doccontainerchecksum aab666c354ab519f54c3d5283ed24242b6c33cbe032efa122a8d95275aa03618c4f8a4557074de43aade420ee28d05910d40b779a98a16bd793fc26af6ae83dc
+doccontainerchecksum 0dc0a1cdef8cf295b69c4fea076298c8fd8b34d16ed4bbd4988a2e1349b1d33a8ccd8c673c7dbe27389de1f300e87a73921afe86e2381879509c04517d0b9c58
docfiles size=145
RELOC/doc/latex/biblatex-swiss-legal/README details="Readme (French and English)"
RELOC/doc/latex/biblatex-swiss-legal/biblatex-swiss-legal.pdf details="Package documentation (French)" language="fr"
@@ -37329,7 +37329,7 @@ catalogue-topics bibtex-util
name bibtex
category Package
-revision 54070
+revision 56291
shortdesc Process bibliographies for LaTeX, etc
longdesc BibTeX allows the user to store his citation data in generic
longdesc form, while printing citations in a document in the form
@@ -37345,10 +37345,10 @@ longdesc urged to consider using biber with BibLaTeX to typeset its
longdesc output.
depend bibtex.ARCH
depend kpathsea
-containersize 14904
-containerchecksum 6d808b85d8d95e444b370fabbed74cbaea8929d8e7e06cb57b2973d365e9139086ba11f8bfcc2f67d4eed37733cea6ff5f51774337171c494111648d821e9ba0
+containersize 14908
+containerchecksum 12a7e17b1e9bfd34a172507fb513fe7d3e44fc0e7fe9a1b50306a8bd2abdb45c984e100a36d109c3e52311c387570c026fb8dbc40752b23fd961c8c3454dd1f6
doccontainersize 398196
-doccontainerchecksum db05b30926a6f5b69735ea852ddc24337fe070f3561e4666fc4b46256f13a4bf31f60eac97b759d625d935f79969f8ed675990b41bc45120d0cd4c1c4ce8d6a9
+doccontainerchecksum b8aa778a2ee5acbd67622384844f3d14ad4a9781bc7ff382af7aaf2130d83440e48bc9e7c7176803d950601493198ddbe884f3e2c5d89005ee3dddc1cccb4ee3
docfiles size=134
texmf-dist/doc/bibtex/base/README
texmf-dist/doc/bibtex/base/btxbst.doc
@@ -37371,10 +37371,10 @@ runfiles size=51
texmf-dist/bibtex/bst/base/unsrt.bst
texmf-dist/tex/generic/bibtex/apalike.sty
texmf-dist/tex/generic/bibtex/apalike.tex
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-home http://tug.org/bibtex
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /biblio/bibtex/base
catalogue-license knuth
catalogue-topics biblio
@@ -42100,7 +42100,7 @@ catalogue-version 0.2
name bxjscls
category Package
-revision 55320
+revision 56291
shortdesc Japanese document class collection for all major engines
relocated 1
longdesc This package provides an extended version of the Japanese
@@ -42109,20 +42109,20 @@ longdesc original version supports only pLaTeX and upLaTeX, the extended
longdesc version also supports pdfLaTeX, XeLaTeX and LuaLaTeX, with the
longdesc aid of suitable packages that provide capability of Japanese
longdesc typesetting.
-containersize 31572
-containerchecksum b53b5e06924c5fa5c688fa314a60d950eafc2bff3b636b808f76947845418fc1ddb11538238436dd333b17338d5495575d26e68172fb1019d8ad92c2c1c23deb
-doccontainersize 1512412
-doccontainerchecksum 2bda7f3812a8f7e24c5950268fffcb5c3ae9f2df0fe1a8e8668a002fa9d61bb3ec397950add756dc91d35c0ef3a6d0ed10b08ebabdceabed0defcaa23e013bf5
-docfiles size=403
+containersize 32064
+containerchecksum d463786a35540876400b4846b00893fbeb1439fc7e0cc9d3e31c47294869d584a48de4facc5cead3f45115e8ee9505559944bf8adf981127c04ec1b8a873bb23
+doccontainersize 1541292
+doccontainerchecksum 486155ff6cb83071d8c001dd7024ec314a3dfbfdfd3ce7204397d176adaad72241587a1c9b487c6ef6a926eb40003ecf83d9b88082ef2f6256164af4d5aeae4c
+docfiles size=405
RELOC/doc/latex/bxjscls/LICENSE
RELOC/doc/latex/bxjscls/README-ja.md details="Readme (Japanese)" language="ja"
RELOC/doc/latex/bxjscls/README.md details="Readme"
RELOC/doc/latex/bxjscls/bxjscls-manual.pdf details="User guide (Japanese)" language="ja"
RELOC/doc/latex/bxjscls/bxjscls-manual.tex
RELOC/doc/latex/bxjscls/bxjscls.pdf details="Package documentation (Japanese)" language="ja"
-srccontainersize 79192
-srccontainerchecksum e53c53f45f38ef7c0ee4d836eff3a6daa3617136a0e1afe98c6a0625055613f6ed3c5dd020f31f296f5b1acace71d3e096453bd07578720b230bc2c16c6ed902
-srcfiles size=96
+srccontainersize 80208
+srccontainerchecksum 32ce930b621fac30983d039edb4f462ff37894109fbbfe9e1de1bcc39ebc00ea4fe3ef1654c0c85ee66fb1b1b0b22ab0c85609e082f1b643a3ca1855bcf251de
+srcfiles size=97
RELOC/source/latex/bxjscls/bxjscls.dtx
RELOC/source/latex/bxjscls/bxjscls.ins
runfiles size=99
@@ -42142,7 +42142,7 @@ catalogue-contact-repository https://github.com/zr-tex8r
catalogue-ctan /language/japanese/BX/bxjscls
catalogue-license bsd2
catalogue-topics japanese class
-catalogue-version 2.1
+catalogue-version 2.2
name bxnewfont
category Package
@@ -49924,7 +49924,7 @@ catalogue-version 1.0
name changelog
category Package
-revision 56194
+revision 56291
shortdesc Provides a changelog environment
relocated 1
longdesc This package provides a changelog environment (which itself
@@ -49932,9 +49932,9 @@ longdesc provides a version environment) to represent a changelog. The
longdesc package supports multiple authors, unreleased changes, and
longdesc yanked (revoked) releases. Inspired by keepachangelog.com.
containersize 2888
-containerchecksum 686b2ece5dc9772d72d5a2153177e5e91c4f7ccaa48d4fcb371e77b0308102d8551c1d9ceca624bc7e01d1a5240266614fa553ac9aafbb223e019a5b9601efbd
-doccontainersize 164068
-doccontainerchecksum 95776bcac98f524a19be400a00c977fb3520b9794eb0063a72da4ca029948a4198bece925807ce266f6ffa448b9deae3c6c8be37b0a8aea3342295692b66968a
+containerchecksum b240632df9070487ad30b7ce8c254ab21f3e2bfaa23e3e8a4c65ccbe06ca4974e7f87f7329f71e36aa817dd18749fac14441d8661f580e5f3d3986c56569b4b1
+doccontainersize 164072
+doccontainerchecksum b9c3b36896c780ea52c3d624ab87b9692d347a29bf38c60ece2fb21151909ae5a5721886ec6fa456498b760c4fd4c6338f079b856c52aa6cb10ce6f79e451566
docfiles size=55
RELOC/doc/latex/changelog/LICENSE.txt
RELOC/doc/latex/changelog/README.md details="Readme"
@@ -49950,7 +49950,7 @@ catalogue-contact-repository https://github.com/9999years/latex-changelog
catalogue-ctan /macros/latex/contrib/changelog
catalogue-license gpl3
catalogue-topics version-control doc-mgmt
-catalogue-version 2.3.0
+catalogue-version 2.4.0
name changepage
category Package
@@ -62870,7 +62870,7 @@ catalogue-version 0.005
name collcell
category Package
-revision 21539
+revision 56291
shortdesc Collect contents of a tabular cell as argument to a macro
relocated 1
longdesc The package provides macros that collect the content of a
@@ -62879,14 +62879,14 @@ longdesc care is taken to remove all aligning macros inserted by tabular
longdesc from the cell content. The macros also work in the last column
longdesc of a table, but do not support verbatim material inside the
longdesc cells.
-containersize 2208
-containerchecksum 34a2fb5a5dc309e625e4c7d89b9e5aa9806d15d93cf0fec124a0505b20c6711bfa96b3f99986c23393632a9db1c773842c9bf6f10c01d1c4da8dcef2960df289
+containersize 2252
+containerchecksum fff5f9ae7f9cd27f85189a895193f205e0b52874d46171f1f3957d7c816e0641dde6d2711783897953a1f1be699e001fbd9048aa3c15c24cfd33413db1ae688f
doccontainersize 221632
-doccontainerchecksum 1bbb4e70a5f5163a62f1b0b135f5601b4d9378cf2a5d27fddfabf9ee5e65dae7a94cb4cf63ed5e98dbf35cee550bd0a7b425f505d462eeb7f1e7035fe3c7664d
+doccontainerchecksum 22dd2b527ca195cb4cbf6d34d8dbd181dbb3386fa738fb09530957eea1413261fd596b0a00395647ce2582c477625cdd87e8ffa1cf2dad5387032a7d7d737edc
docfiles size=68
RELOC/doc/latex/collcell/collcell.pdf details="Package documentation"
srccontainersize 7536
-srccontainerchecksum 8d567bc14b9e6a8467da4893245efd56f7537f5b721b8b9c4300f9ffda5ab30649f7c0ca51f3673f786676fe20af948de63d1fd36ce2c3d0f9d217ad4e6bbad1
+srccontainerchecksum 9a5a173381fe9b6e0383571868b215184b75c51e39d18ca209d00e4064c28d7a477c4b887a0be5dd4867d393c6854022a5abd7be63d3be593549e645e3e09aba
srcfiles size=8
RELOC/source/latex/collcell/Makefile
RELOC/source/latex/collcell/README
@@ -62894,6 +62894,9 @@ srcfiles size=8
RELOC/source/latex/collcell/collcell.ins
runfiles size=2
RELOC/tex/latex/collcell/collcell.sty
+catalogue-contact-bugs https://sourceforge.net/p/collcell/tickets/
+catalogue-contact-home https://sourceforge.net/p/collcell/
+catalogue-contact-repository https://sourceforge.net/p/collcell/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/collcell
catalogue-license lppl1.3
catalogue-topics table
@@ -62901,7 +62904,7 @@ catalogue-version 0.5
name collectbox
category Package
-revision 26557
+revision 56291
shortdesc Collect and process macro arguments as boxes
relocated 1
longdesc The package provides macros to collect and process a macro
@@ -62914,20 +62917,23 @@ longdesc end of a group in different macro invocations, or to place them
longdesc in the begin and end code of an environment. Arguments may
longdesc contain verbatim material or other special use of characters.
longdesc The macros were designed for use within other macros.
-containersize 2836
-containerchecksum e530c630a905084a3f9c43fd54c45fc5d4af437aab887f15f5d37c40d3ba2a86c576ef032e723cf95f4f5dc46256d3e7bf6440545f68133217fb620aa2db8a65
+containersize 2876
+containerchecksum 6d5b59bbad4aea17a5298e73c2f8538e7d98f27ded848096ada4db7b63a50a7f8fc0e725887cc13165c57222b2e3d27ffe4a6cf7abd5d0e1f54c8314b2f73db5
doccontainersize 270912
-doccontainerchecksum e2248e9825490474e545c1674d1256ad586332045e2fd5ee5dc84d9965d4df263522277a14676010085a73dcf00d822ffb29117338b3fd3f854b7b0d0ddb5c9f
+doccontainerchecksum 62a8651ba04958886591113a9ca831aca0f61d23d94c2105873ff5040db1014c61e0535650ed792e8ae3ff776027680b98d64fac47b5fa30b14cf1c723b99a71
docfiles size=67
RELOC/doc/latex/collectbox/README details="Readme"
RELOC/doc/latex/collectbox/collectbox.pdf
-srccontainersize 8068
-srccontainerchecksum d29bd5252e632573797eba99f70172659303d7342ea345228d2ed448fb1c1b6a48aa2448a3cae1bec26849241a5d3e19cbc0c00e777a339dad23ad2864dc5da7
+srccontainersize 8064
+srccontainerchecksum c7b44356a97790883b1e7ba7bc86bd6d5d334536dbca5388e19fe019f82187d1daeba76567e88946038b99cdf835743ae807a8d0ab383a519ea2decb80d4eb54
srcfiles size=9
RELOC/source/latex/collectbox/collectbox.dtx
RELOC/source/latex/collectbox/collectbox.ins
runfiles size=3
RELOC/tex/latex/collectbox/collectbox.sty
+catalogue-contact-bugs https://sourceforge.net/p/collectbox/tickets/
+catalogue-contact-home https://sourceforge.net/p/collectbox/
+catalogue-contact-repository https://sourceforge.net/p/collectbox/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/collectbox
catalogue-license lppl1.3
catalogue-topics boxing
@@ -64634,7 +64640,7 @@ containerchecksum 697ec7c80c0eaaf3d0aef232cc5077bc6305745f238c9d3325a1a0a4bddb31
name collection-latexextra
category Collection
-revision 56278
+revision 56288
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -65688,6 +65694,7 @@ depend semantic
depend semantic-markup
depend semioneside
depend semproc
+depend semtex
depend sepfootnotes
depend seqsplit
depend sesstime
@@ -65966,7 +65973,7 @@ depend zref
depend zwgetfdate
depend zwpagelayout
containersize 6164
-containerchecksum 1300330ca6d1edfa89c25167fcc8bb6e0ee619e8a67bd281a7f70c7ddd3332147f3ad63c821520252a8c5dce100a92135f8583a34c4f08eaacc3914ee9dd3b5d
+containerchecksum e9703e703fb998723738802f4cb819a5b0245cb1ae9cdeada1295b15217b7b3d39a872855fad098bfe9a59ef38ec1ab7d72522fa054e938fd1d30d5959d6e840
name collection-latexrecommended
category Collection
@@ -81040,7 +81047,7 @@ catalogue-version 0.4
name currfile
category Package
-revision 40725
+revision 56291
shortdesc Provide file name and path of input files
relocated 1
longdesc The package provides macros holding file name information
@@ -81054,21 +81061,24 @@ longdesc of such a file. The depth of inclusion is made available,
longdesc together with the "parent" (including file) and "parents" (all
longdesc including files to the root of the tree). The package
longdesc supersedes FiNK.
-containersize 3704
-containerchecksum 5e67b659df7048a2f3e0d99f7e7da753fcabc4cc94d284d88b6b6922dffe2823eff3c07e96d0d4689d2c430a1cd66ef4693d0ceb344609c6aeeb919aa378a297
+containersize 3752
+containerchecksum 60a788ef024134314159ce48cf3feb1fc76a15e70b91b91b436bfa84fd958d9506440f1cb3e61113545eae8689d8c1c1111e9c8e1e41383b8b2793f2352b022b
doccontainersize 170640
-doccontainerchecksum d45abaaab826dd9dc8a7d5cccdeece29b26d8f56c0c74c2047f5ae7d43ffc3c0596f009536fca744fa9bede2e8d87a13b68b8ebf4a0ced31afc6bbab5b76ad72
+doccontainerchecksum b39deca360f560602eb52ebdea7734ae00e6b0031ca3fef9c2ad2cc434039a331e98fd3dc5f1f146570df0adb2107a79d740c77afa7eabc86696f50e827e437c
docfiles size=43
RELOC/doc/latex/currfile/README details="Readme"
RELOC/doc/latex/currfile/currfile.pdf details="Package documentation"
-srccontainersize 11428
-srccontainerchecksum 0374496112e380b2c8cce8b00e3dd97d992dbe194f660118c3441fd9b0ba536f476b5e330bd363a624f71d5b3004f50d2ee315534929093ebf9f63f47e91c1fc
+srccontainersize 11424
+srccontainerchecksum 950ded145ac33dd02c214908ec7349125d3b399562f8ed952d728dd8fdccc2a4642b5e1b3896cbd4353f55dce1fc43afdd3c7f567f77c6f5f8463be83d023361
srcfiles size=13
RELOC/source/latex/currfile/currfile.dtx
RELOC/source/latex/currfile/currfile.ins
runfiles size=5
RELOC/tex/latex/currfile/currfile-abspath.sty
RELOC/tex/latex/currfile/currfile.sty
+catalogue-contact-bugs https://sourceforge.net/p/currfile/tickets/
+catalogue-contact-home https://sourceforge.net/p/currfile/
+catalogue-contact-repository https://sourceforge.net/p/currfile/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/currfile
catalogue-license lppl1.3
catalogue-topics doc-tool
@@ -92657,23 +92667,23 @@ binfiles arch=x86_64-solaris size=1
name dvicopy
category TLCore
-revision 54070
+revision 56291
shortdesc Copy DVI files, flattening VFs
longdesc DVICOPY is a utility program that allows one to take a DVI file
longdesc that references composite fonts (VF) and convert it into a DVI
longdesc file that does not contain such references. It also serves as a
longdesc basis for writing DVI drivers (much like DVItype).
depend dvicopy.ARCH
-containersize 588
-containerchecksum 0deba8dd11640ec7bcf1043ef521f1252fe055cafcc1bb6680e9434672ee5db5a771e58b3c5e4cf15e59424b49fbdafeedd30594fdd1f72eed8134d8e52b6da3
+containersize 592
+containerchecksum 97fb63d376d839a924a54e83015d5bb6c15cad05cb1a29b7dacce0779106e7c3f60e2ba057cb339a35f091e56ad7b7443001e04434928f2f9be87371de45847b
doccontainersize 18256
-doccontainerchecksum ec1751460032871c7b86e6438905f852f364ef8ba5128839c270f5fbe76a90b151a546709736e0cec104a29bbb9a883379b00f26fe3018142a5378cb9f5aa65f
+doccontainerchecksum d5b24737bcc8f035180525bc1b950caf0f7af9b8d4156047142777c830f719798eec3e33291c0d813a581c03fd5421df0a38ddf730b80b1664c34d1313e9c762
docfiles size=7
texmf-dist/doc/man/man1/dvicopy.1
texmf-dist/doc/man/man1/dvicopy.man1.pdf
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /obsolete/dviware/dvicopy
catalogue-license gpl
catalogue-topics dvi-proc
@@ -94488,7 +94498,7 @@ binfiles arch=x86_64-solaris size=31
name dvips
category TLCore
-revision 54279
+revision 56291
shortdesc A DVI to PostScript driver
longdesc This package has been withdrawn from CTAN, and bundled into the
longdesc distributions' package sets. Development now takes place within
@@ -94497,9 +94507,9 @@ longdesc separate package. For download, support, and other information,
longdesc please see TeX Live.
depend dvips.ARCH
containersize 58076
-containerchecksum 835a289ac24755904d7d39e09846420b286c0aaf5c57a081ea8da78dfc29e2289bc326d735a0281f5559418dead10ad0d040e2fe6362947e15df672c82d7900e
+containerchecksum 1eec2ddbbc5d211f1d38237289a2bcfe716fe41210d47f6f9111a009dc179ca3dcaefde11e49d28d4cdd26b992dfed7fca3bff3178a6ca273f396afc45118013
doccontainersize 521496
-doccontainerchecksum 6f97f38327335ea711ec467133d1fa4e3124f3362d177e19af2cca06a50be1cf1de4d9e5b1aacbd1ba9779e0062a49a7572d47c5de918030fd5f78476e2bfac1
+doccontainerchecksum 07b00a4bfe557a04a93b22667f4854e2d55f76f33d2fa767d445b3301835aafafd4b8046b7126d5f516b65a743b1d0fe32a8fa3d0dc9b7b29e47bcfdfc790138
docfiles size=289
texmf-dist/doc/dvips/NEWS
texmf-dist/doc/dvips/README details="Readme"
@@ -94588,10 +94598,10 @@ runfiles size=138
texmf-dist/tex/generic/dvips/colordvi.tex
texmf-dist/tex/generic/dvips/rotate.sty
texmf-dist/tex/generic/dvips/rotate.tex
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-home http://tug.org/dvips
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/dvipsk/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-license other-free
catalogue-topics dvi-print
@@ -95349,7 +95359,7 @@ catalogue-topics notes editorial
name easyfig
category Package
-revision 47193
+revision 56291
shortdesc Simplifying the use of common figures
relocated 1
longdesc The package provides the command \Figure[<key=value>...]{<image
@@ -95363,23 +95373,23 @@ longdesc author's package adjustbox to centre an image and to simplify
longdesc further modifications. As adjustbox now provides keys to turn
longdesc images or other material into floats or non-floats, including
longdesc captions, easyfig has become quite redundant.
-containersize 1948
-containerchecksum 4c84122d2989fa90533ced69f6eb9d2536e6de9fbecb096412b6459bdd45225bbf48a512ffdf4fd3f8ffa8a582b47692661b3f4197fe76f911682582b038bf06
+containersize 1936
+containerchecksum aebeb8d9baa7df84fb637351a13ac7f69697fc11c17b0eb5bfb9981195df584e74665a8bfa8062441c5eaf690c2fab446e1e0bad61175ebdf4dad58c531cfda2
doccontainersize 175976
-doccontainerchecksum 9544e9d4bb98f78915669d8ed7f314e1de92a0fc5c57b6163a1aa91afa7c97bc0a0726fe57fb1f3b03d981f9d9b320f211316e0d1babeb3d2900f7f49e9a2fdd
+doccontainerchecksum b1c91bb35bfa67edd2d2abaded6e6b8756d75c70d797c7bfb690ba802c3be6e23be71f7410a358cc262cd807f88b45d6395386d108ecf5f7ca4189a266296f34
docfiles size=44
RELOC/doc/latex/easyfig/README details="Readme"
RELOC/doc/latex/easyfig/easyfig.pdf details="Package documentation"
-srccontainersize 5228
-srccontainerchecksum 56cb02838c8ba147b56fcae623f86566f9885c67bbc43ab0ff40fae18afa8c9a23674fe4923c8cf4de2b62ab268dab0fe6845fecf2af227c8cce9891e68bd626
+srccontainersize 5224
+srccontainerchecksum 4ca04322f0c10a33acc2f4ccd6a1127aaca1a27b4a4b5b1897a0d589cca73118c0e05d367e284e3a2922b2128a221be8ddbb8a24af1eaedac508ef6ace39a540
srcfiles size=5
RELOC/source/latex/easyfig/easyfig.dtx
RELOC/source/latex/easyfig/easyfig.ins
runfiles size=2
RELOC/tex/latex/easyfig/easyfig.sty
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/easyfig/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/easyfig/
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/easyfig/src
+catalogue-contact-bugs https://sourceforge.net/p/easyfig/tickets/
+catalogue-contact-home https://sourceforge.net/p/easyfig/
+catalogue-contact-repository https://sourceforge.net/p/easyfig/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/easyfig
catalogue-license lppl1.3
catalogue-topics float graphics-use
@@ -105904,7 +105914,7 @@ catalogue-version 2.6
name etex
category Package
-revision 37057
+revision 56291
shortdesc An extended version of TeX, from the NTS project
relocated 1
longdesc An extended version of TeX (which is capable of running as if
@@ -105914,10 +105924,10 @@ longdesc immediate future; as a result, LaTeX programmers may (in all
longdesc current TeX distributions) assume e-TeX functionality. The
longdesc pdftex engine directly incorporates the e-TeX extensions. The
longdesc development source for e-TeX is the TeX Live source repository.
-containersize 11528
-containerchecksum 8d9bbc49c5a9747bd0469d6941358e33dd273841c0e467ca5fac191dbf5d353de19e43fa6c66b95fe5975211c01cb6dadbaffbaf544faccd3e35af0158a0642d
-doccontainersize 189804
-doccontainerchecksum 5d10427a79c38a573036164d5de8315a80b709eae87eccc050e319435622664203b4f859a7a0875a13e444a3da06eb11a2801c44c8c3e7d5ed0241adda8b5d22
+containersize 11504
+containerchecksum 662338c145e84577ee49bd7d1941ade688d07ab8382faec25d6f45891953554e85ab4d531164e58db97071a7950c31b36f9eec8700ad4b43dffef30217f0fd89
+doccontainersize 189808
+doccontainerchecksum d7c7cb6c0a8c2056be906761c7f0173c7ec28aa4e910d9546aa75aea79f8a2aedef06d708710135d3f557586990fefd73086b4f11b8b7642a1cbaedde91b1b8b
docfiles size=129
RELOC/doc/etex/base/NTS-FAQ
RELOC/doc/etex/base/etex_gen.tex
@@ -105936,9 +105946,9 @@ runfiles size=11
RELOC/fonts/tfm/public/etex/xbmc10.tfm
RELOC/tex/plain/etex/etex.src
RELOC/tex/plain/etex/etexdefs.lib
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/etexdir
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-license knuth
catalogue-topics engine
@@ -108851,7 +108861,7 @@ catalogue-version 1.9
name fancytooltips
category Package
-revision 27129
+revision 56291
shortdesc Include a wide range of material in PDF tooltips
relocated 1
longdesc The package was inspired by the cooltooltips package. In
@@ -108861,10 +108871,10 @@ longdesc TeX materials (animated graphics) from an external PDF file. To
longdesc see the tooltips, you have to open the files in Adobe Reader.
longdesc The links and JavaScripts are inserted using eforms package
longdesc from the AcroTeX bundle.
-containersize 8020
-containerchecksum e1d7243552cdf65cef1e647472a7f6c1d818c1e862afcf8069768d9beec01e4c250786e2c4c1af4febbdf94f20362110399bee33c7902bb7006de474a0d013e6
+containersize 7968
+containerchecksum 79ac95184f6890ed405919d064fee444a3b00dffa8f76724c302133cc8b4f4c40648e0bee607702cc9faea6aec3e2f8c34d1e2011abe6e6c6444b9076e5f42f3
doccontainersize 1112404
-doccontainerchecksum 4bd82e0ae682abd0157f94b5374ecdc6cedeff0af22a5227ab527b725d8710bd7f8c5a38b7380a91ecaaa383824d8b88d182d1edde312492c34728ab6ff2f4e3
+doccontainerchecksum c5a73dc14138cf5f13494a3844e9bda29368dc129e6445bd3f1a7b1cfb60498c44d7527a673d51dea1d81b4a2db438078a406f76ed1597b6836015c588c79270
docfiles size=513
RELOC/doc/latex/fancytooltips/cite.png
RELOC/doc/latex/fancytooltips/examples/fancy-preview-demo.pdf
@@ -108888,8 +108898,8 @@ docfiles size=513
RELOC/doc/latex/fancytooltips/readme
RELOC/doc/latex/fancytooltips/tip.pdf
RELOC/doc/latex/fancytooltips/tip.tex
-srccontainersize 16736
-srccontainerchecksum 3c6d477873c8fa6560d4188dbad1dbe43a422f08f4bcbdc15b034e0ee7dc5529171d005f48a25e1df6d6e6fbd0f8db5f11c233c515ee70e307cfc31e5f434e24
+srccontainersize 16732
+srccontainerchecksum 6bccdd73454b8a2ede4c1895e5b7019d136af0e79b72417a223d24d004807d02c51fdc3187ddfd8555233882e3a15862db9e3ec7753a349241b25227f8e223aa
srcfiles size=16
RELOC/source/latex/fancytooltips/fancytooltips.dtx
RELOC/source/latex/fancytooltips/fancytooltips.ins
@@ -108898,7 +108908,6 @@ runfiles size=10
RELOC/tex/latex/fancytooltips/fancytipmark.pdf
RELOC/tex/latex/fancytooltips/fancytipmark.svg
RELOC/tex/latex/fancytooltips/fancytooltips.sty
-catalogue-contact-repository http://bitbucket.org/robert.marik/fancytooltips/
catalogue-ctan /macros/latex/contrib/fancytooltips
catalogue-license lppl1.2
catalogue-topics pdf-feat
@@ -112959,7 +112968,7 @@ catalogue-topics file-mgmt date-time
name filehook
category Package
-revision 53655
+revision 56291
shortdesc Hooks for input files
relocated 1
longdesc The package provides several file hooks (AtBegin, AtEnd, ...)
@@ -112968,15 +112977,15 @@ longdesc General hooks for all such files (e.g. all \included ones) and
longdesc file specific hooks only used for named files are provided; two
longdesc hooks are provided for the end of \included files -- one
longdesc before, and one after the final \clearpage.
-containersize 4524
-containerchecksum 16196dfc6efde9c09a0a285e25672b144e8ec291fd76eff4e3e8db3c178c2b1bd84e18890c5fc392c7bb87640e8fc8a6683999454b0619fc96dd1628804bbaca
+containersize 4548
+containerchecksum 683dd9691148cdbd7ef036551f942f828d8e6ad75c52c195c311a4c0657885907afe9a0488ba28edcd31ade527707069533cf25bbe9bebd2c9cfe316106b5e4b
doccontainersize 262840
-doccontainerchecksum 0fe00874d60f10be246f8ce50060f84cd15b4448d52933a053b20e69fcf247823ccdda23b3282aa6d2317bc629b2cbb182c60967a2ebf23b64a4a57719664960
+doccontainerchecksum 8522f523f29b540a5657584f3796ce5a9375a52eceee16627d6f363556688207919bbc8a55404dfd7f27eac44b70108b7ea6a0bf91d333e70a50adf5cf3bab4b
docfiles size=66
RELOC/doc/latex/filehook/README details="Readme"
RELOC/doc/latex/filehook/filehook.pdf details="Package documentation"
-srccontainersize 13408
-srccontainerchecksum f1d0078a515810e9850a34341f2ac831beea2a636a58161782ef07554820bbd5ac7213d59d92a79924a07db53c45feb8be3442b5c9a7043e9005825049e34209
+srccontainersize 13404
+srccontainerchecksum e63291b58c4594f910684e27ccaf633d3e942d5c95358f2c8e770c0e887c0965b2c1d9306f091bc5a7ac170a0d6ff0586da4bd62b9e842ee9991075c9594d0d1
srcfiles size=17
RELOC/source/latex/filehook/filehook.dtx
RELOC/source/latex/filehook/filehook.ins
@@ -112987,7 +112996,9 @@ runfiles size=10
RELOC/tex/latex/filehook/filehook-scrlfile.sty
RELOC/tex/latex/filehook/filehook.sty
RELOC/tex/latex/filehook/pgf-filehook.sty
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/filehook/issues
+catalogue-contact-bugs https://sourceforge.net/p/filehook/tickets/
+catalogue-contact-home https://sourceforge.net/p/filehook/
+catalogue-contact-repository https://sourceforge.net/p/filehook/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/filehook
catalogue-license lppl1.3
catalogue-topics macro-supp
@@ -113033,7 +113044,7 @@ catalogue-version 0.81a
name filemod
category Package
-revision 24042
+revision 56291
shortdesc Provide file modification times, and compare them
relocated 1
longdesc The package provides macros to read and compare the
@@ -113045,10 +113056,10 @@ longdesc and returns the value to the user. The package will also work
longdesc for DVI output with recent versions of the LaTeX compiler which
longdesc uses pdfLaTeX in DVI mode. The functionality is provided by
longdesc purely expandable macros or by faster but non-expandable ones.
-containersize 3528
-containerchecksum 4ec27d16dc551d42f9ff326d20f78c48d73e7324af65f6ccb9e662dcd399394c631d9a742aef8a2efc235dfd769a04d22b4ba37eb8a2cd06631cba298540c08b
+containersize 3572
+containerchecksum c927f700796e4cdb9d7d274fcb390b4e1c0c04ac95df8a8586eea3c8c6aee3daddeb9f6a53b3df103887a7635288f7ae316d09dc34603fe3a37f74bf45f85ef8
doccontainersize 277228
-doccontainerchecksum 88c1d8c61ed1759617c9cec7cecbb28459dd5e06f139ba3ca2f98d7b6357a15fc89dd90daf26e5f4d17f33fe9673a8c17363fb757ecb71d9e530f0e153ec486e
+doccontainerchecksum 96587219fdb00fcaea6d838b58b5a04169b17cdec1c937378255f7dfb48e687a205f08a20dc6654ab5565a68649ef67b796653479f95a4c022596626ddc5b16d
docfiles size=70
RELOC/doc/latex/filemod/README details="Readme"
RELOC/doc/latex/filemod/filemod.pdf details="Package documentation"
@@ -113058,6 +113069,9 @@ runfiles size=8
RELOC/tex/latex/filemod/filemod-expmin.sty
RELOC/tex/latex/filemod/filemod.sty
catalogue-also stampinclude
+catalogue-contact-bugs https://sourceforge.net/p/filemod/tickets/
+catalogue-contact-home https://sourceforge.net/p/filemod/
+catalogue-contact-repository https://sourceforge.net/p/filemod/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/filemod
catalogue-license lppl1.3
catalogue-topics doc-tool
@@ -118893,7 +118907,7 @@ catalogue-version 1.6c
name fontware
category TLCore
-revision 54070
+revision 56291
catalogue vfware
shortdesc Tools for virtual font metrics
longdesc Virtual font metrics are usually created in a textual form, the
@@ -118904,10 +118918,10 @@ longdesc takes a VPL file and generates a VF file and a TFM file; -
longdesc vftovp takes a VF file and a TFM file and generates a VPL file.
longdesc The programs are to be found in every distribution of TeX.
depend fontware.ARCH
-containersize 652
-containerchecksum 3bf90c2c75edb13c849c5fea98bbd6b21efbb64cb3aba2ef79e934f4b75e2d829a14ccd4dc8fe8279582de1decd499b2c1c4d5c597e5f467e089eedb0c296009
+containersize 656
+containerchecksum bb88be9c1df400e071dea478443aec55df1b094bdc5a3fb51faddd7b504f4fce79a830b55a8ef3bc94f394fa57b99f6e88bf44d6d80d32d091027b8bd018903c
doccontainersize 68872
-doccontainerchecksum be74abb91413550dae9e6785c029143fcdd02aac761ebdc7190ea79d097fed228f63f924f7c2a2455ad0c191933a4e75993fee03641faf1dbf6970bce48cd424
+doccontainerchecksum 1d1b04235b2823c105a0521ece55a0fca6ee54d7a4f990d664c046b8e47b3e1c53c7c62617f943dae4a6a1837d0dbe9d46c2fda57c0f0229a5b7c650d2f569ea
docfiles size=27
texmf-dist/doc/man/man1/pltotf.1
texmf-dist/doc/man/man1/pltotf.man1.pdf
@@ -118917,9 +118931,9 @@ docfiles size=27
texmf-dist/doc/man/man1/vftovp.man1.pdf
texmf-dist/doc/man/man1/vptovf.1
texmf-dist/doc/man/man1/vptovf.man1.pdf
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /systems/knuth/dist/etc
catalogue-license knuth
catalogue-topics font-supp
@@ -124905,7 +124919,7 @@ catalogue-topics font font-sans font-type1 font-otf
name gincltex
category Package
-revision 54994
+revision 56291
shortdesc Include TeX files as graphics (.tex support for \includegraphics)
relocated 1
longdesc The package builds on the standard LaTeX packages graphics
@@ -124916,20 +124930,23 @@ longdesc .tex extension. Some of the lower level operations like
longdesc clipping and trimming are implemented using the adjustbox
longdesc package which includes native pdfLaTeX support and uses the pgf
longdesc package for other output formats.
-containersize 1848
-containerchecksum 65b1d8c7379266bb81e90b13b731bd50385bf575e7b59fc52762094ed426f3894287a04fbf25338200cf5bf509b94024fba68ad5af3f04410e1a3cf790446f0e
+containersize 1908
+containerchecksum 465fa04e22924d68b3e92dbb0c8dc5f8f159ae88881127055d94e21a46ad8b8e65b08ee4cc872919188db8255c8ea095c32c5539997007873fcff16503029c16
doccontainersize 168440
-doccontainerchecksum 2cea17a04eb96c612f1bd099de50fd8e2cff2d9b1a90368ca5a38296d996a6b7660c9f221b4cef4e673f8855f65bcd009de1e15bca206fc1e4bffdba8c8f4565
+doccontainerchecksum e44368814c57ae40fff7976c70cb160e43e608051ab2d5c46363cd82ea08c3c12a33fb6b2ddcf7f74816c5ca60284c6880c9d7340aa8a8afea77ef4d9cee689e
docfiles size=43
RELOC/doc/latex/gincltex/README details="Readme"
RELOC/doc/latex/gincltex/gincltex.pdf details="Package documentation"
srccontainersize 5132
-srccontainerchecksum d6ec53cbc8de2a9b197b8e3240c19188905f148e7cadba5a009a16717570247ef879c3b2c5124c08242142bba14dd05bee551435dd8f8df03242bc77c81dbd79
+srccontainerchecksum 9c9eda687dfd61585ddfa1a8680353cd863a1138c3fe0f1cd86f99fb34fc3c5b2ecb8a3e3278e6799ab0a5447e1d59a925d31bea5fa34913c1abd04af18823c8
srcfiles size=5
RELOC/source/latex/gincltex/gincltex.dtx
RELOC/source/latex/gincltex/gincltex.ins
runfiles size=1
RELOC/tex/latex/gincltex/gincltex.sty
+catalogue-contact-bugs https://sourceforge.net/p/gincltex/tickets/
+catalogue-contact-home https://sourceforge.net/p/gincltex/
+catalogue-contact-repository https://sourceforge.net/p/gincltex/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/gincltex
catalogue-license lppl1.3
catalogue-topics graphics listing
@@ -126828,7 +126845,7 @@ catalogue-topics games font font-symbol font-mf
name gobble
category Package
-revision 49608
+revision 56291
shortdesc More gobble macros for PlainTeX and LaTeX
relocated 1
longdesc The LaTeX package gobble includes several gobble macros not
@@ -126841,16 +126858,16 @@ longdesc without \makeatletter and \makeatother. The same macros are
longdesc provided inside .tex files for use with plain-TeX or other TeX
longdesc formats. However, the gobble macros for optional macros require
longdesc \@ifnextchar to be defined.
-containersize 1552
-containerchecksum c2426530cc89a96c8a8e6e01c936053c9eb9c4a07cb46369f3dcf6d0d74557421b1a749a112f561f7248a34a46262fa0b2b52d103bbd8cfed720285383a5ff8a
-doccontainersize 157644
-doccontainerchecksum 1f4879234402deaf684312daf31abec8a9c36c04ec52ce9b48cf6b7358153b6feef328f2c4f704a2ac7a0ead18a87e35e3ec21d9e22b1a60311aac56f6b48413
+containersize 1564
+containerchecksum 1206d7ff1b34bed829bd23ae88b0505e699a30088983d8f7cec7ff77f87774406e82442fc51f1f77d3475474785087d4f2f29e62fec34ef1db26d8a52a904970
+doccontainersize 157648
+doccontainerchecksum 9d862847c9b2596c061cf898e23b0a1188fabb7636f8a5dfded5b08fd4422531fbbc6932af788c9a15b6805ecb4c254c82a37700caa03975fc2ff8c6f3f539cc
docfiles size=41
RELOC/doc/generic/gobble/README details="Readme"
RELOC/doc/generic/gobble/gobble-user.tex
RELOC/doc/generic/gobble/gobble.pdf details="Package documentation"
srccontainersize 3288
-srccontainerchecksum ab765f57595789abba5fda194d49ce1c267541a4b22dff0b4fdbc6f2690700503c28f860cc21eb585894318d2bb88ec9f0dd6b48ebd515c8b23ac4c0f46de195
+srccontainerchecksum 6e9178359020f754435ce675f7c2fc8a184f84fe86e990ecd254eeef283ada2576a8f634034fcd083d199d9e92bbc874b91a724739740e707525e83e1227d0a2
srcfiles size=4
RELOC/source/generic/gobble/gobble.dtx
RELOC/source/generic/gobble/gobble.ins
@@ -126858,7 +126875,9 @@ runfiles size=3
RELOC/tex/generic/gobble/gobble-user.sty
RELOC/tex/generic/gobble/gobble.sty
RELOC/tex/generic/gobble/gobble.tex
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/gobble
+catalogue-contact-bugs https://sourceforge.net/p/latex-gobble/tickets/
+catalogue-contact-home https://sourceforge.net/p/latex-gobble/
+catalogue-contact-repository https://sourceforge.net/p/latex-gobble/code/ci/default/tree/
catalogue-ctan /macros/generic/gobble
catalogue-license lppl1.3
catalogue-topics macro-supp
@@ -128694,7 +128713,7 @@ catalogue-version 1.02
name gsemthesis
category Package
-revision 36244
+revision 56291
shortdesc Geneva School of Economics and Management PhD thesis format
relocated 1
longdesc The class provides a PhD thesis template for the Geneva School
@@ -128703,21 +128722,20 @@ longdesc Switzerland. The class provides utilities to easily set up the
longdesc cover page, the front matter pages, the page headers, etc.,
longdesc conformant to the official guidelines of the GSEM Faculty for
longdesc writing PhD dissertations.
-containersize 2996
-containerchecksum 7debd75f882855b45665937669a3869a9268d2184b22da3d344a4a6182577aa8bb440a6f4e48123d359c23b630b61016331cad94f4a08acc3295dcfd722c40ea
+containersize 2952
+containerchecksum 42d5d8461d5f8ccf461e24d04fa61991507eb545a60b7f7bc3980d39c9f767aa155164cbb914ce961204316b1be61f5622f21236154013c6404a86ec30ec18ce
doccontainersize 297248
-doccontainerchecksum 41ecef19c29f63970dbee2242fcdf612b7619a6930002d8be03f4116f3397a619951f2f19a79f0e3772f17005847ea5a6a20a91b6ba9dc3529fc4e84dbf7833d
+doccontainerchecksum 3497f766bc496369a2eb9f829b8ba3f0d73bfe7ac11c4afd7f9ce06c21f9aaceacdee0456a14624ffb38bafeb978c5a4787ce824143693e4c3d99a227a994cb8
docfiles size=74
RELOC/doc/latex/gsemthesis/README details="Readme"
RELOC/doc/latex/gsemthesis/gsemthesis.pdf details="Package documentation"
srccontainersize 9964
-srccontainerchecksum 757fad4bcc2bac03acfcbcf5dea53c30e7902cb0a53dc8116fde2b28ca9f85861b08f19a296096253a4e21e1d3513faca3e0f206f9f0e22e3699f32e0a5edfe1
+srccontainerchecksum 813f4825450b66024ea804e0f36d1df721565b046979d822830b87ef9cbd8a01300d50947ba9344c3e21f9624af573d7a9844d60432dacbeb0890944a9e11dc2
srcfiles size=10
RELOC/source/latex/gsemthesis/gsemthesis.dtx
RELOC/source/latex/gsemthesis/gsemthesis.ins
runfiles size=3
RELOC/tex/latex/gsemthesis/gsemthesis.cls
-catalogue-contact-home http://emmanuel.rousseaux.me/gsemthesis
catalogue-ctan /macros/latex/contrib/gsemthesis
catalogue-license lppl1.3
catalogue-topics dissertation class
@@ -135880,7 +135898,7 @@ catalogue-version 0.3
name ifoddpage
category Package
-revision 40726
+revision 56291
shortdesc Determine if the current page is odd or even
relocated 1
longdesc The package provides an \ifoddpage conditional to determine if
@@ -135890,20 +135908,23 @@ longdesc Two compiler runs are therefore required to achieve correct
longdesc results. In addition, the conditional \ifoddpageoronside is
longdesc provided which is also true in oneside mode where all pages use
longdesc the odd page layout.
-containersize 1412
-containerchecksum f6ab9abdef81cbcca8728bac7e1f94e2b72e5db6a8e17ab13c8d56477e98fcf7fb20f006012c3a3cf815378d8bc9c5cc4d39e2767b7d634d1ad99bc24dc1d1d3
-doccontainersize 134588
-doccontainerchecksum 80f1431a4da340b0b2ba6f396c618e2923457e95b5de01018ef7f95937e55814e3c3e96b2f45f18e971fddd29021a16852b57bafd0b1ba50cf2626b4b784541e
+containersize 1456
+containerchecksum f56738031814ba4d980455765212f074979b95ccfe62b1661e2017a839bc774b5423f994196a23e763644d40b9842221a5c862f9b427f335f5788d34bbcb9acb
+doccontainersize 134584
+doccontainerchecksum e9fdf6ca02d33a52e89046f4d648204a0e560d97e9a12aa5742971e654bdc05867460ec10cbdb5441fc66ba02d2e078007593d9c4c898f290e61965eb6111007
docfiles size=34
RELOC/doc/latex/ifoddpage/README details="Readme"
RELOC/doc/latex/ifoddpage/ifoddpage.pdf details="Package documentation"
srccontainersize 4176
-srccontainerchecksum dabf25b7588f3fe4dc92c4a4e20f2293ef62878d60f1ffa01e1e9efe564b930d7cdfeada5f0e6765a88c46d55aacbbd1dc692ca26168c86690db6c229b79836e
+srccontainerchecksum d6e471eb7014a93a4593234f3f2c81fcd1b7a758d73bd3b659c86812304e9eb9a9a29b8a653653e4672a79f75c2399bdf30491069bdc26c0e45ce9834fd8de40
srcfiles size=4
RELOC/source/latex/ifoddpage/ifoddpage.dtx
RELOC/source/latex/ifoddpage/ifoddpage.ins
runfiles size=1
RELOC/tex/latex/ifoddpage/ifoddpage.sty
+catalogue-contact-bugs https://sourceforge.net/p/ifoddpage/tickets/
+catalogue-contact-home https://sourceforge.net/p/ifoddpage/
+catalogue-contact-repository https://sourceforge.net/p/ifoddpage/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/ifoddpage
catalogue-license lppl1.3
catalogue-topics typesetting macro-supp
@@ -151627,7 +151648,7 @@ binfiles arch=x86_64-solaris size=3
name kpathsea
category TLCore
-revision 56185
+revision 56291
shortdesc Path searching library for TeX-related files
longdesc Kpathsea is a library and utility programs which provide path
longdesc searching facilities for TeX file types, including the
@@ -151637,9 +151658,9 @@ longdesc distributed separately, but rather is released and maintained
longdesc as part of the TeX live sources.
depend kpathsea.ARCH
containersize 32320
-containerchecksum 94f63e9d23dc43da52320ecfefe16a404db56a19c31710351ba0d77a84b8247a5a83e39e1007c50ed7351603afeac6aab13815932548b45c3a82ae711d3f0473
+containerchecksum cf5fcb28f294827c94c86b8691e9d940daf5e5814a415251aa5ddac06f136754699963af5b058475aa096ccb13458f4b44f4ad877d67844445aacc415ad374d3
doccontainersize 1066608
-doccontainerchecksum 0ca94b797d9168fc54b1d9b99f726943b6e7069ca644feaa4ba8ed62792963ce13c474efdd08b668a5ae42b48e0604f49034a90ffc341290b12b848af8dada56
+doccontainerchecksum c4df3e00d93b52064bc01e59684f5d4ce829febd0b4045fba41fad3a0f913a7204fd79054c7bfdab363236bb1c7660b9050374c54d678dcf7642271fef125da2
docfiles size=553
texmf-dist/doc/info/dir
texmf-dist/doc/info/kpathsea.info
@@ -151688,10 +151709,10 @@ runfiles size=52
texmf-dist/web2c/tcvn-t5.tcx
texmf-dist/web2c/texmf.cnf
texmf-dist/web2c/viscii-t5.tcx
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-home http://tug.org/kpathsea
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/kpathsea/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-license lgpl2.1
catalogue-topics sys-supp
@@ -155241,7 +155262,7 @@ catalogue-topics macro-supp layout latex3 pre-release
name l3kernel
category Package
-revision 56254
+revision 56286
shortdesc LaTeX3 programming conventions
relocated 1
longdesc The l3kernel bundle provides an implementation of the LaTeX3
@@ -155251,11 +155272,11 @@ longdesc LaTeX3 kernel and other future code are built: it is an API for
longdesc TeX programmers. The packages are set up so that the LaTeX3
longdesc conventions can be used with regular LaTeX2e packages.
depend l3backend
-containersize 153264
-containerchecksum 9e5b51bce85947753486f3d4ff99d75f87567be22d8843ebcb3439e039443e2e58680efa94a55cf9339c20325a611753b008188146e0272b4b3cca85d2d786a2
-doccontainersize 10059844
-doccontainerchecksum 6268acdfb3096962b965618b43d214398ab13a5e3b7761341d41be3cafec627d0b44ab19460418215592bcaea059c49f00d99aec6562fc03c2ceb403dee82917
-docfiles size=2849
+containersize 153292
+containerchecksum 9e99b01ad18b06be205aec285f241d3a3217051c82dca04eeec863e1f22aedf0c413d3fbae765a51f743d139e63c603d6aa443b18e4d5e1838912f6ae33b3dfe
+doccontainersize 10061408
+doccontainerchecksum b9f8b0dd0ad6a6e60d2f99cf035989e8601c4414c8e49981ac65ac58674949349eb8868db2b444c455d43854ded9fcefc1d0bdb9ab533fd82297ac122006f46e
+docfiles size=2848
RELOC/doc/latex/l3kernel/CHANGELOG.md
RELOC/doc/latex/l3kernel/README.md details="Readme"
RELOC/doc/latex/l3kernel/expl3.pdf details="The LaTeX3 Programming Language"
@@ -155301,8 +155322,8 @@ docfiles size=2849
RELOC/doc/latex/l3kernel/source3.pdf
RELOC/doc/latex/l3kernel/source3.tex
RELOC/doc/latex/l3kernel/source3body.tex
-srccontainersize 540900
-srccontainerchecksum fccab123cb235ff53651bb0eff6394bdb8ac7b21ab5ecf2148c2cda13e4f13ad8ab446ebcda60367366da5b6fc9e11e0d3985eaf559c01aa95ce8848262cf65a
+srccontainersize 541012
+srccontainerchecksum 720963b445b2d0befa30ae056792b5f3d75d4a82b1fff87a9597fa5e01723c4d06da809d17dd5f6abfeddabe5a1f56c8e8c95c52ccd01182e7a7a681be6ffb2a
srcfiles size=832
RELOC/source/latex/l3kernel/expl3.dtx
RELOC/source/latex/l3kernel/l3.ins
@@ -159308,7 +159329,7 @@ catalogue-topics book-ex
name latex2e-help-texinfo
category Package
-revision 48918
+revision 56291
shortdesc Unofficial reference manual covering LaTeX2e
relocated 1
longdesc The manual is provided as Texinfo source (which was originally
@@ -159318,10 +159339,10 @@ longdesc development, and details of getting involved are to be found on
longdesc the package home page. A French translation is available as a
longdesc separate package. All the other formats in the distribution are
longdesc derived from the Texinfo source, as usual.
-containersize 728
-containerchecksum dabdf3a20bcc6740b7feea1c444b2423dc54a97d0118411d44acfaca31259782eb49bf68b144ab553a9f865ec47557bcd47503b1f1dcbb69ae3302d94bdce715
-doccontainersize 1725896
-doccontainerchecksum 0a3cd8f22e15709b056d6ace9fe0c8d348ac8bc808fe8cc98498b3d14747eba9f6e9838375b0ab8226694ac8dd45027c62ffc1949c3e1a42f9f182f346df0123
+containersize 704
+containerchecksum 24c1c19d33f814968553e165fcf715176b6c9d4abefe6ea01281daca347973e3b151f6c3cadf0e9d5e7c7f0fa237f0a79ee2c33c9c7ed424da280d7552700c9c
+doccontainersize 1725892
+doccontainerchecksum 875a385bf04aade55883f6e4f55f4d26eed6f6693dfff7d4761b8686cdcafb2b0c9b4f6527e78516db081daa35d0bebe3a19c6c1708cc871a7d4e0dece209f55
docfiles size=1700
RELOC/doc/info/latex2e.info
RELOC/doc/latex/latex2e-help-texinfo/ChangeLog
@@ -159346,7 +159367,7 @@ docfiles size=1700
RELOC/doc/latex/latex2e-help-texinfo/ltx-help.el
catalogue-contact-bugs https://puszcza.gnu.org.ua/bugs/?group=latexrefman
catalogue-contact-home http://puszcza.gnu.org.ua/projects/latexrefman/
-catalogue-contact-support http://lists.tug.org/latexrefman
+catalogue-contact-support https://lists.tug.org/latexrefman
catalogue-ctan /info/latex2e-help-texinfo
catalogue-license pd
catalogue-topics ref-latex documentation spanish-doc
@@ -159385,7 +159406,7 @@ catalogue-topics ref-latex documentation french-doc
name latex2e-help-texinfo-spanish
category Package
-revision 49023
+revision 56291
catalogue latex2e-help-texinfo
shortdesc Unofficial reference manual covering LaTeX2e
relocated 1
@@ -159396,10 +159417,10 @@ longdesc development, and details of getting involved are to be found on
longdesc the package home page. A French translation is available as a
longdesc separate package. All the other formats in the distribution are
longdesc derived from the Texinfo source, as usual.
-containersize 736
-containerchecksum 65faa42d1ee01399e1f8c34cdcd1a5d1ce6841f144e7b582aa4c3586ad1426d879c60427944a9524f16d48c8340028f1929dddc04f9ca4f8e634ffe29eeebf72
+containersize 708
+containerchecksum 2dc0cbab315728797ec5e039768ab1eff74f251e7be397cc4b7d440002c329103ddc1b608b343e1f3ade367f89e36216ce94ca38794c8b4386de07b2dd3bc651
doccontainersize 873268
-doccontainerchecksum b6f612ef87c52c9b67c65ed79f8b2e4b7e089baff3da617951288b57124d63f53acd4f48edebbcd7f27855b3bfff14dd00aa5a2c277b4f89b8f49426abb49c6b
+doccontainerchecksum 4038cd8f5d507f959234ce1ea704987d9ef1553e2708ea5ca74d8acc090fb39018e1f6eeabdfd6cfadab89f648d156e8c3d2d3993e1479024e9167f57e26e893
docfiles size=758
RELOC/doc/info/latex2e-es.info
RELOC/doc/latex/latex2e-help-texinfo-spanish/latex2e-es.dbk
@@ -159410,7 +159431,7 @@ docfiles size=758
RELOC/doc/latex/latex2e-help-texinfo-spanish/latex2e-es.xml
catalogue-contact-bugs https://puszcza.gnu.org.ua/bugs/?group=latexrefman
catalogue-contact-home http://puszcza.gnu.org.ua/projects/latexrefman/
-catalogue-contact-support http://lists.tug.org/latexrefman
+catalogue-contact-support https://lists.tug.org/latexrefman
catalogue-ctan /info/latex2e-help-texinfo
catalogue-license pd
catalogue-topics ref-latex documentation spanish-doc
@@ -176025,7 +176046,7 @@ catalogue-version 4.00
name lstaddons
category Package
-revision 26196
+revision 56291
shortdesc Add-on packages for listings: autogobble and line background
relocated 1
longdesc The bundle contains a small collection of add-on packages for
@@ -176033,16 +176054,16 @@ longdesc the listings package. Current packages are: lstlinebgrd: colour
longdesc the background of some or all lines of a listing; and
longdesc lstautogobble: set the standard "gobble" option to the indent
longdesc of the first line of the code.
-containersize 2208
-containerchecksum 8b2b14b28bcc4a3b4f26d2f48bbb59c111d4fd33d5479c20f7e03ac838c6b6631b99b1a5211b383e58dec74d70d9130af2a38e3b85407c4376f81e1b52c212b5
+containersize 2224
+containerchecksum a0fdffdcc648eaa59145c2668412e02f1ca6f5617c5068b80a767e1efa0df30e9c6b458279380bf062ac8aabb0b531585f65f8c9e7bd9d2d6ca057395cb7fe9e
doccontainersize 366356
-doccontainerchecksum 82bb6745b9f2342628bc83f356313c0de52148eef25ed3ade22f899693abe190de1a09347ebd2d03b06a5976d8c6f42994e2495eb7c4e513ddfa8244ca258cfd
+doccontainerchecksum 823d63d53a4c7abc108d6d72244acf48a6197de00d3fca7b3f75a082c2b051091497c354429aa9aebb64682b65c6e45d5a90413f2a4248c8c47dddb0fecdf5a7
docfiles size=99
RELOC/doc/latex/lstaddons/README details="Readme"
RELOC/doc/latex/lstaddons/lstautogobble.pdf details="lstautogobble package documentation"
RELOC/doc/latex/lstaddons/lstlinebgrd.pdf details="lstlinebgrd package documentation"
-srccontainersize 5576
-srccontainerchecksum 048555cb2355366b87d527a39ab64ca91226d366d52e2352c1f4d503daced739508e217893dd0d0b405e99b5927efdda0f68c780215c392494dcde20b30a88d9
+srccontainersize 5572
+srccontainerchecksum 33c8822bfea19259db8792ece9d2796aed34323873dc18d5a0827844b17e6a43d9337a0f55e0f183e18cbc338f0b54d105860993462c3ccea595c7af4df38443
srcfiles size=7
RELOC/source/latex/lstaddons/lstaddons.ins
RELOC/source/latex/lstaddons/lstautogobble.dtx
@@ -176050,7 +176071,9 @@ srcfiles size=7
runfiles size=2
RELOC/tex/latex/lstaddons/lstautogobble.sty
RELOC/tex/latex/lstaddons/lstlinebgrd.sty
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/lstaddons
+catalogue-contact-bugs https://sourceforge.net/p/lstaddons/tickets/
+catalogue-contact-home https://sourceforge.net/projects/lstaddons/
+catalogue-contact-repository https://sourceforge.net/p/lstaddons/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/lstaddons
catalogue-license lppl1.3
catalogue-topics listing
@@ -176817,19 +176840,19 @@ catalogue-version 0.7a
name lua-physical
category Package
-revision 56278
+revision 56291
shortdesc Functions and objects for the computation of physical quantities
relocated 1
longdesc This is a pure Lua library, which provides functions and
longdesc objects for the computation of physical quantities. The package
longdesc provides units of the SI and the imperial system. In order to
longdesc display the numbers with measurement uncertainties, the package
-longdesc is able to perform gaussian error propagation.
-containersize 359316
-containerchecksum 07bd7960eff504016387c40b2caa1961b652cc4aff912cdbcfbf77a4c58fa7b81f7fd0e0d4887a83e1ffeda7420632e6e33fbfb047258bc720eae7f12d9acea1
-doccontainersize 357052
-doccontainerchecksum b395840918b3465c2b9762999cdb0e26db1f1c4948a17075433e1799d32322c39e56f9295c8209e61bf250ec1b3c113ebe64047bad3968f86175ec9c6b5d55d5
-docfiles size=150
+longdesc is able to perform Gaussian error propagation.
+containersize 359620
+containerchecksum 1ca1bfd519c1c8e95357215b1b673adaa37187c9b24600d447fa19e89dade19db52de55c39d20f4b9717156ca5de6b62d99d9264b0a710b37c453a0ae2cc1bfe
+doccontainersize 349580
+doccontainerchecksum 09c36261663373c50c888e7cb283bb204a45a838b37b540c6d1b77a2c47c8d0e3f27cc00cec1bc0497e572e5636b3bffc2bd1ffd29da3c0f730977b7be584cc4
+docfiles size=148
RELOC/doc/lualatex/lua-physical/LICENSE
RELOC/doc/lualatex/lua-physical/README.md details="Readme"
RELOC/doc/lualatex/lua-physical/lua-physical.bib
@@ -176843,12 +176866,11 @@ docfiles size=150
RELOC/doc/lualatex/lua-physical/test/testNumber.lua
RELOC/doc/lualatex/lua-physical/test/testQuantity.lua
RELOC/doc/lualatex/lua-physical/test/testUnit.lua
-runfiles size=271
+runfiles size=270
RELOC/scripts/lua-physical/physical-astronomical.lua
RELOC/scripts/lua-physical/physical-data.lua
RELOC/scripts/lua-physical/physical-definition.lua
RELOC/scripts/lua-physical/physical-dimension.lua
- RELOC/scripts/lua-physical/physical-init.lua
RELOC/scripts/lua-physical/physical-isotope.lua
RELOC/scripts/lua-physical/physical-number.lua
RELOC/scripts/lua-physical/physical-quantity.lua
@@ -176859,7 +176881,7 @@ catalogue-contact-home https://github.com/tjenni/lua-physical
catalogue-ctan /macros/luatex/latex/lua-physical
catalogue-license mit
catalogue-topics physics luatex
-catalogue-version 1.0.1
+catalogue-version 1.0.2
name lua-uca
category Package
@@ -178495,7 +178517,7 @@ catalogue-topics maths luatex
name luatex
category TLCore
-revision 54610
+revision 56291
shortdesc The LuaTeX engine
longdesc LuaTeX is an extended version of pdfTeX using Lua as an
longdesc embedded scripting language. The LuaTeX project's main
@@ -178518,10 +178540,10 @@ depend tex-ini-files
depend unicode-data
execute AddFormat name=dviluatex engine=luatex options="dviluatex.ini" patterns=language.def,language.dat.lua fmttriggers=cm,etex,hyphen-base,knuth-lib,plain,tex-ini-files,unicode-data,hyph-utf8
execute AddFormat name=luatex engine=luatex options="luatex.ini" patterns=language.def,language.dat.lua fmttriggers=cm,etex,hyphen-base,knuth-lib,plain,tex-ini-files,unicode-data,hyph-utf8
-containersize 12904
-containerchecksum 0db087a6c28019439e8da70dddbc4e2976368b12fee766aabd7bd9e3276c9d4369e4487182fa4e296691de4a9b3975ccdf575e136f1f554fa2245e0903557ad0
+containersize 12912
+containerchecksum 4cdaae6e710d23c45d7c5a084a6710d3f442409359aa321a82cf133fea1ae508a7ea6f7d24629216d147b403deb1fc977e35055825f4414015e8aed8dc261b64
doccontainersize 1898588
-doccontainerchecksum 29628b252dc464c1095be066f959e15ebbd1d553d751a0670eb3e0aaa1c68ca4af79b41b9d4073a28279ed85c33c51c259c79bf87c3224838dd7c786b4d609ff
+doccontainerchecksum 8885b20a4fbd10b540fedcc65c07db69e2c3cdb43068d8047c5a1d008eab58b9db0d64d682183ad794a5cfba407044bf449140eab2275ced1e50d8cbb3ba4da8
docfiles size=695
texmf-dist/doc/luatex/base/graphics/luaharfbuzz.pdf
texmf-dist/doc/luatex/base/luatex-backend.tex
@@ -178561,10 +178583,10 @@ runfiles size=37
texmf-dist/tex/generic/config/luatex-unicode-letters.tex
texmf-dist/tex/generic/config/luatexiniconfig.tex
texmf-dist/web2c/texmfcnf.lua
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-home http://luatex.org
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/luatexdir
-catalogue-contact-support http://lists.tug.org/luatex
+catalogue-contact-support https://lists.tug.org/luatex
catalogue-license gpl2
catalogue-topics engine
@@ -180418,7 +180440,7 @@ binfiles arch=x86_64-solaris size=35
name macros2e
category Package
-revision 46026
+revision 56291
shortdesc A list of internal LaTeX2e macros
relocated 1
longdesc This document lists the internal macros defined by the LaTeX2e
@@ -180427,10 +180449,10 @@ longdesc macros are hyper-linked to their description in source2e. For
longdesc this to work both PDFs must be inside the same directory. This
longdesc document is not yet complete in content and format and may miss
longdesc some macros.
-containersize 828
-containerchecksum 5bb8ea01d851272306a4d9aa1897d879eef53a1f7262c83a8cec81a7e00334a495eb89926683d42af29f38aadfd1461893ad7bd72cae3993f1ea63a7475dcded
+containersize 820
+containerchecksum 4e187cb2c5d6a2c165e7f74d8234dd5a609ea1462dad0a268bf17c6e21acf22d9c6f54a53930dd6678b1375cb8878fecea22f4f132a8892aed7387d29fc239c6
doccontainersize 185624
-doccontainerchecksum 0a089e411cce517581166b359ff092b7c98d09502afc83a4935269ed2520ffbb044921e5432238e999cfe85c72371bf8a45bedc07c6ecccc14cba2f4e7b6b6c7
+doccontainerchecksum ff2e1118b718e17a4716a84bea265acfe47f2178ab6c0a44d39e0320ffd6f0dcce7dffa37eddf14a7ea41dd4b3431ff7c102f6c3c6092e9562fc60de19b6d89e
docfiles size=55
RELOC/doc/latex/macros2e/Makefile
RELOC/doc/latex/macros2e/README details="Readme"
@@ -180438,8 +180460,9 @@ docfiles size=55
RELOC/doc/latex/macros2e/macros2e.tex
runfiles size=1
RELOC/tex/latex/macros2e/extlabels.sty
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/macros2e/issues
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/macros2e
+catalogue-contact-bugs https://sourceforge.net/p/macros2e/tickets/
+catalogue-contact-home https://sourceforge.net/p/macros2e/
+catalogue-contact-repository https://sourceforge.net/p/macros2e/code/ci/default/tree/
catalogue-ctan /info/macros2e
catalogue-license lppl1.3c
catalogue-topics latex-doc
@@ -180616,17 +180639,17 @@ catalogue-version 1.0
name make4ht
category Package
-revision 54080
+revision 56291
shortdesc A build system for tex4ht
longdesc make4ht is a simple build system for tex4ht, a TeX to XML
longdesc converter. It provides a command line tool that drives the
longdesc conversion process. It also provides a library which can be
longdesc used to create customized conversion tools.
depend make4ht.ARCH
-containersize 43900
-containerchecksum 11b28318a65df641644e9b129d55f795db47d9bd296a7ce3d20855af4c1a517789c8a5e969621dc61c54c09f012421db543bbf2dce5f6883af921a277a9ff08d
-doccontainersize 151384
-doccontainerchecksum 143893140935d851f2df6d955ed65bf3cee61ff56a6fe7e2f318ee64f8ea1cc280d464e2f2f3d5c1164f2d833e94bce00a5b1fd7ef7f14f75719318956f12d36
+containersize 43904
+containerchecksum 3a66f4aabc6320f8b58246356c224383f9cfacf0921b8d951376d94be9f0293d9f72cff73e1ba41326d0390f0201ab73453cfe7b45828a6533a8fe7e49dea988
+doccontainersize 152784
+doccontainerchecksum 0adb783943d447f5b8003353b104fb0c336da33b28dc3809d75f3ffdd0fc30536443e99a1749a1af28e46149891db7d2e46e0ebe4b7ea2d4093a77700ef4bbd1
docfiles size=63
texmf-dist/doc/support/make4ht/README details="Readme"
texmf-dist/doc/support/make4ht/changelog.tex
@@ -180672,6 +180695,7 @@ runfiles size=76
texmf-dist/scripts/make4ht/filters/make4ht-svg-height.lua
texmf-dist/scripts/make4ht/formats/make4ht-docbook.lua
texmf-dist/scripts/make4ht/formats/make4ht-html5.lua
+ texmf-dist/scripts/make4ht/formats/make4ht-jats.lua
texmf-dist/scripts/make4ht/formats/make4ht-odt.lua
texmf-dist/scripts/make4ht/formats/make4ht-tei.lua
texmf-dist/scripts/make4ht/formats/make4ht-xhtml.lua
@@ -180686,7 +180710,6 @@ runfiles size=76
texmf-dist/scripts/make4ht/make4ht-indexing.lua
texmf-dist/scripts/make4ht/make4ht-lib.lua
texmf-dist/scripts/make4ht/make4ht-logging.lua
- texmf-dist/scripts/make4ht/make4ht-odtfilter.lua
texmf-dist/scripts/make4ht/make4ht-xtpipes.lua
texmf-dist/scripts/make4ht/mkparams.lua
texmf-dist/scripts/make4ht/mkutils.lua
@@ -180694,7 +180717,7 @@ catalogue-contact-repository https://github.com/michal-h21/make4ht
catalogue-ctan /support/make4ht
catalogue-license lppl1.3
catalogue-topics cvt-html
-catalogue-version 0.3e
+catalogue-version 0.3f
name make4ht.aarch64-linux
category Package
@@ -187165,7 +187188,7 @@ catalogue-topics font font-body font-proportional font-serif font-sans font-ttf
name metafont
category Package
-revision 54276
+revision 56291
shortdesc A system for specifying fonts
longdesc The program takes a semi-algorithmic specification of a font,
longdesc and produces a bitmap font (whose properties are defined by a
@@ -187182,9 +187205,9 @@ depend metafont.ARCH
depend modes
execute AddFormat name=mf engine=mf-nowin options="-translate-file=cp227.tcx mf.ini" fmttriggers=modes
containersize 8756
-containerchecksum 673edc75545fbcff5f94e7d6c7fb6f057016170d3873e9bed1aeaea6cde8e6610e35636a228acd15cfb77da8a0d0c5f952337ba2400213886766469e9bfbc023
-doccontainersize 72436
-doccontainerchecksum ac726f7a07c818685fabe306551787958cf8eddf3dcae21340468b2132ee0f38a05de82f2436b82b6e9f03908493d67d6f9126e3b07fd73f95ef80b2efe3346e
+containerchecksum 409e78cb0a682953f88c54083d6def5c4fb14bb09aeb343997f92bf9629df9e20252f35986e56515034948fb2f4087e9b02f6a7375dbf631076d5481d815fadf
+doccontainersize 72432
+doccontainerchecksum b9db3fe02e05e5b899f21476084eb54a4285ca19bd1d48464eb599163756fe1bed215efd04173fca0e235d806c83c0b29ab6e1f47de8e4c29250ec8c38fef818
docfiles size=36
texmf-dist/doc/man/man1/inimf.1
texmf-dist/doc/man/man1/inimf.man1.pdf
@@ -187203,9 +187226,9 @@ runfiles size=13
texmf-dist/metafont/misc/ps2mfbas.mf
catalogue-alias mf
catalogue-also metapost
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /systems/knuth/dist/mf
catalogue-license knuth
catalogue-topics font-devel font-proc
@@ -187618,7 +187641,7 @@ catalogue-version 0.91
name metapost
category Package
-revision 54070
+revision 56291
shortdesc A development of Metafont for creating graphics
longdesc MetaPost uses a language based on that of Metafont to produce
longdesc precise technical illustrations. Its output is scalable
@@ -187627,9 +187650,9 @@ depend kpathsea
depend metapost.ARCH
execute addMap troff-updmap.map
containersize 73764
-containerchecksum 4f531c399a0ea8441d9de6cdb954b1ed5d4c88453c4d4aa6a69b6936b50b3feeadb5559df62520070d03c5dea8245467c27c1689773866063cc14c81fd04374d
+containerchecksum a1d4f231a7f6e2e0329e5cbac27dc7ad65992704018848288cf3b8943ff8dec154cf76f6ffde081d18283f73438e7c7c4fc41569651d0c9b6218b2f5490a14ee
doccontainersize 2436156
-doccontainerchecksum 9679d789bbbd641490d9a70371b329c68027a6c33e1b37c31ff5619d66619ae11b7ff093794f50ef1d99d22820f9d3c393b899433ebc1e89cc678ce9fe0cbe88
+doccontainerchecksum f3a3c5f6afe186602b7648cad5dc0874df88a6b5c847c454da4088efe3a240dbf93aebd9780b9aec37ac9d5c53e6af30b5d69aa00ab96adfc6553573692f1b21
docfiles size=828
texmf-dist/doc/man/man1/dvitomp.1
texmf-dist/doc/man/man1/dvitomp.man1.pdf
@@ -187796,7 +187819,7 @@ catalogue-alias mp mpost
catalogue-also asymptote
catalogue-contact-home http://tug.org/metapost
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/mplibdir
-catalogue-contact-support http://lists.tug.org/metapost
+catalogue-contact-support https://lists.tug.org/metapost
catalogue-license lgpl
catalogue-topics graphics-engn
@@ -189251,15 +189274,15 @@ catalogue-version 1.0a
name mfware
category TLCore
-revision 54994
+revision 56291
shortdesc Supporting tools for use with Metafont
longdesc A collection of programs (as web source) for processing the
longdesc output of Metafont.
depend mfware.ARCH
-containersize 3180
-containerchecksum efde0ac3831be8e3aff20140856dd1ee4808bbe6488492d9866f0355e5dca8c5a53f6b3757cebb866abbf30537c8fd0c462f23123cfa583a7547f394b20fe286
+containersize 3184
+containerchecksum 74ffd80b008e44e94a6e6617b14a2a47a90ae2658c35f9a5abec1ba09a487ea59abee9090fadc4c70a0c4cb860ef75d448f5c6bb7e27196f722341ffde7b61ba
doccontainersize 100536
-doccontainerchecksum ff598e711cacfeee75d5f5c15625a730f3ca0ea6040899cc33d4916c666423da592b5264553c030098df9fa338c229b32cb961fa950bb0a459a1745185624b6f
+doccontainerchecksum 6adb301edfd974246f902d1e9743923b306aa7daacf67efd8613db2e69691efc11d598672ac590c6766166e98927ec11db12ab8de7f9a014215f619ffbde6c87
docfiles size=42
texmf-dist/doc/man/man1/gftodvi.1
texmf-dist/doc/man/man1/gftodvi.man1.pdf
@@ -189278,9 +189301,9 @@ runfiles size=4
texmf-dist/mft/base/cmbase.mft
texmf-dist/mft/base/mplain.mft
texmf-dist/mft/base/plain.mft
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /systems/knuth/dist/mfware
catalogue-license pd
catalogue-topics collection
@@ -199232,27 +199255,30 @@ catalogue-version 1.42
name multienv
category Package
-revision 26544
+revision 56291
shortdesc Multiple environments using a "key=value" syntax
relocated 1
longdesc The package provides a multienv environment which permits easy
longdesc addition of multiple environments using a key=value syntax.
longdesc Macros to define environments using this syntax are also
longdesc provided.
-containersize 1852
-containerchecksum b387532d90db9f46cb18518b27eb8853dd52366434c69693fd08d36942564c43a45605694a55783fe244690f4cb64b94f3082235e465336cb7536543b00b6f20
+containersize 1896
+containerchecksum 61ebdecdbe9d1fc963a9625ab1d2811c967094f3aa983a08ff20d5ae1a7e6d87290981c4063ded7edb87ff248fe9f5499880ad5e602949f18ab3419c074e775d
doccontainersize 208908
-doccontainerchecksum 1ad0cbfb0c6029b77f2dfd71100ac43cf3c7512df88837c6da5c26fa9a520f4dacd970e331083a56ddf3d9cd19fd9934e863e4bea9e62c7a0b1cdd1ac6eb2a15
+doccontainerchecksum ee1cda148f6f1f7998b86b6f36256c69ac399d32f6bf5443aba242ce93de8c0a64d43eeda32287dca7d7e83498fc26253be724b1231dd399b903908f4acf7430
docfiles size=52
RELOC/doc/latex/multienv/README details="Readme"
RELOC/doc/latex/multienv/multienv.pdf details="Package documentation"
srccontainersize 4584
-srccontainerchecksum 5d22dae7cf44eef6e63cbda2e9421903f56a939c0393d3b91e9d009b29cf0b748215b455dd9143cd7e13b2ad81c08d7dbe447268d7d01ba495bbb307cfc8999d
+srccontainerchecksum bbd36e000e4533f3fb423d6d758fc7fb4e210868a695bf13e7ef8cc266c2875719c85c57aec0fa27bb4e174291321452a88bfda18004136e5bf4a99154bf26f8
srcfiles size=6
RELOC/source/latex/multienv/multienv.dtx
RELOC/source/latex/multienv/multienv.ins
runfiles size=2
RELOC/tex/latex/multienv/multienv.sty
+catalogue-contact-bugs https://sourceforge.net/p/multienv/tickets/
+catalogue-contact-home https://sourceforge.net/p/multienv/
+catalogue-contact-repository https://sourceforge.net/p/multienv/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/multienv
catalogue-license lppl1.3
catalogue-topics macro-supp
@@ -200519,7 +200545,7 @@ catalogue-version 0.75
name mwe
category Package
-revision 47194
+revision 56291
shortdesc Packages and image files for MWEs
relocated 1
longdesc The bundle provides several files useful when creating a
@@ -200530,16 +200556,16 @@ longdesc TEXMF tree, so that they may be used in any (La)TeX document.
longdesc This allows different users to share MWEs which include image
longdesc commands, without the need to share image files or to use
longdesc replacement code.
-containersize 807112
-containerchecksum fab45c12e55ddd3b748ac6a07041c64efd1b344cd8375d870ab3ddda155d9c43adb1fbed21c82237732c8d15ad68201ade3eeb54714e4737a79ee3fe22db48bd
-doccontainersize 308880
-doccontainerchecksum 361130c8fd556a564975ed94286645e1b2ebb399a4895b59244bbe941cbac20d0e4271cd74cd122595faad4f2ff1db24ad522c04bbded59df2ccfdbbfdb19c7e
+containersize 807108
+containerchecksum cca88398d3410ae13cd555f77f050c8091cab1aa4f5baf3f1dd277aecc3634ec63077e836b0bd9a3ef987fc508220202c16ee805667d0b97f33d3e2a8676941b
+doccontainersize 308884
+doccontainerchecksum 1db294e9e28e08d9a91462b2f5b8e368b340f5fe54193de97c7fc4b76287ffad3b72ee41fbd644f27a495d35f87b430181ad776891043838952d13c4511ee56a
docfiles size=82
RELOC/doc/latex/mwe/INSTALL
RELOC/doc/latex/mwe/README details="Readme"
RELOC/doc/latex/mwe/mwe.pdf details="Package documentation"
-srccontainersize 8444
-srccontainerchecksum 3511bbe2629f5a69023836495e768ba9fb218d23f05f2587c39298c007017b272bece226dcfdd9f9b6625891d6d4be5622c4dff35ed413c797adbe1db1c60c00
+srccontainersize 8440
+srccontainerchecksum 0ad6b31acabefc9ab8ae66b5c8962de6a4de7692021c2ae35ad488a73d44e57bfb97a54ffce1a4c1d8dd6cea054029a4d82d5fd788b7a9d52f509d72952e36fd
srcfiles size=12
RELOC/source/latex/mwe/mwe.dtx
RELOC/source/latex/mwe/mwe.ins
@@ -200636,9 +200662,9 @@ runfiles size=513
RELOC/tex/latex/mwe/example-movie.pdf
RELOC/tex/latex/mwe/example-movie.tex
RELOC/tex/latex/mwe/mwe.sty
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/mwe/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/mwe
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/mwe/src
+catalogue-contact-bugs https://sourceforge.net/p/latex-mwe/tickets/
+catalogue-contact-home https://sourceforge.net/p/latex-mwe/
+catalogue-contact-repository https://sourceforge.net/p/latex-mwe/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/mwe
catalogue-license lppl1.3
catalogue-topics debug-supp
@@ -220112,7 +220138,7 @@ catalogue-version 1.0.1
name oberdiek
category Package
-revision 56250
+revision 56291
shortdesc A bundle of packages submitted by Heiko Oberdiek
relocated 1
longdesc The bundle comprises packages to provide: aliascnt: 'alias
@@ -220127,7 +220153,6 @@ longdesc delimited by end of line; flags: setting and clearing flags in
longdesc bit fields and converting the bit field into a decimal number;
longdesc holtxdoc: extra documentation macros; hypbmsec: bookmarks in
longdesc sectioning commands; hypcap: anjusting anchors of captions;
-longdesc hypdestopt: optimising hyperref's pdfTeX driver destinations;
longdesc hypdoc: hyper-references in the LaTeX standard doc package;
longdesc hypgotoe: experimental package for links to embedded files;
longdesc hyphsubst: substitute hyphenation patterns; ifdraft: switch for
@@ -220162,10 +220187,10 @@ depend iftex
depend infwarerr
depend kvoptions
depend pdftexcmds
-containersize 45132
-containerchecksum 65d21c926de9d756490d86f58705ab97f6c00f7bea90831028e2aff8c74f81b712654002a24811f326f07ae81ab4331b7f100fb799d463d0d14b492d3ac27666
+containersize 45104
+containerchecksum a110b9f65989da3cb73bf37e09d92a89352177c45ac2b60a98341829e833e9ae3055e979f9bce5fea57f44e751efd70cac0eb5eadbb7efe512d0277f3696dd00
doccontainersize 8949564
-doccontainerchecksum 6e40f76463f03a1d7135d99679dd78b1bcc6993c9a43798d2ed046fa48086930174b04901f0148d41f90fc4d131a00ec84b72e5acf650b62bf03cb603fd360d0
+doccontainerchecksum 631f11d270e5bd908b3d1c51d96205046793e529ba18a5e442280e6cbc1cb67850dab25984747f3871cf200dbae340e19cf327a21d5b66fa55140e1d76ae1503
docfiles size=3273
RELOC/doc/latex/oberdiek/README.md details="Bundle README"
RELOC/doc/latex/oberdiek/aliascnt.pdf
@@ -220223,7 +220248,7 @@ docfiles size=3273
RELOC/doc/latex/oberdiek/thepdfnumber.pdf
RELOC/doc/latex/oberdiek/twoopt.pdf
srccontainersize 118696
-srccontainerchecksum 587a087d4989447cd798263ac78906b6cf1d108b42c87836804ae9b440b278a8952311037e02d271de43a7ef3e30048fafb943f9d848f2c38f0cd6352d3f9096
+srccontainerchecksum a58f3c55a38ec5e2f373428702a62fe55b2af7db5de59ba53a16643f1b4ca3e52ed8317594e8403f0a95b7705e9213b8400c040329408ad0cdbc77bc8ea54bb8
srcfiles size=272
RELOC/source/latex/oberdiek/aliascnt.dtx
RELOC/source/latex/oberdiek/bmpsize.dtx
@@ -224410,7 +224435,7 @@ catalogue-topics maths
name oup-authoring-template
category Package
-revision 56201
+revision 56291
shortdesc A general template for journals published by Oxford University Press (OUP)
relocated 1
longdesc This package provides a general LaTeX template for journals
@@ -224422,9 +224447,9 @@ longdesc see
longdesc https://academic.oup.com/journals/pages/authors/preparing_your_
longdesc manuscript.
containersize 15128
-containerchecksum 955c8aeeb0a35a88d50387a8dff044168a5a99db574cdd75dccc196231506b553eea44e2e655821cbf2bcc5019fc785822a891f7c899f156f9292c62aa20c458
-doccontainersize 511084
-doccontainerchecksum 673910068f239e496c1f0a77a403b8a1c4dbf1d78a81cbecda21cb177a24042eabe777bc606c5a592a04ea6e1594c561a15bf70a0c0041ca48ec9502f100c3bf
+containerchecksum 32cc7e7caaf696938c6386f2dbf211555f3f0d901aab524d28ec9ef40a3c8b67f010a1cb8e33f2f864c46cefde9074bd1a23c1408d8783b0e76d07d2c0576318
+doccontainersize 511088
+doccontainerchecksum ce74018f172d72151d8549a587a8552ac8f985ab57bcb1cf1845a2de2a21ae25faff272573ef1a831e35dc1cd1b1f224a52530da1fbe41410eeda5d627ee52e1
docfiles size=159
RELOC/doc/latex/oup-authoring-template/README details="Readme"
RELOC/doc/latex/oup-authoring-template/doc/oup-authoring-template-doc.pdf details="User manual"
@@ -228843,14 +228868,13 @@ catalogue-topics debug-supp
name pdftex
category TLCore
-revision 54227
+revision 56291
shortdesc A TeX extension for direct creation of PDF
-longdesc An extension of TeX which can be configured to directly
-longdesc generate PDF documents instead of DVI. All current free TeX
-longdesc distributions including TeX Live, MacTeX and MiKTeX include
-longdesc pdfTeX (Plain TeX) and pdfLaTeX (LaTeX). ConTeXt was originally
-longdesc designed around use of pdfTeX, though nowadays it is focused on
-longdesc LuaTeX).
+longdesc An extension of TeX which can directly generate PDF documents
+longdesc as well as DVI output. All current free TeX distributions
+longdesc including TeX Live, MacTeX and MiKTeX include pdfTeX (Plain
+longdesc TeX) and pdfLaTeX (LaTeX), among many other formats based on
+longdesc the pdfTeX engine.
depend cm
depend dehyph
depend etex
@@ -228865,10 +228889,10 @@ execute AddFormat name=etex engine=pdftex patterns=language.def option
execute AddFormat name=pdfetex engine=pdftex patterns=language.def options="-translate-file=cp227.tcx *pdfetex.ini" fmttriggers=cm,dehyph,etex,hyph-utf8,hyphen-base,knuth-lib,plain,tex-ini-files
execute AddFormat name=pdftex engine=pdftex patterns=language.def options="-translate-file=cp227.tcx *pdfetex.ini" fmttriggers=cm,dehyph,etex,hyph-utf8,hyphen-base,knuth-lib,plain,tex-ini-files
execute addMap dummy-space.map
-containersize 36988
-containerchecksum 1846d2c75f53339dce486311b6034aff104dbc50e0e7d243a772f7c3e2bc9c0ff7cbd9229386ba0e136abd894b2ee42a51d26588fca7824a85e23fc60564aad0
+containersize 36956
+containerchecksum 63721cb7c3e68d52f4f902824ecdf795b560d262cdf977adc0b736a5651fdf7722cb4ddfb6cdc006b46415cf28d33bfdab69d64fffb0322af59f7fc1e6ce43fd
doccontainersize 1611504
-doccontainerchecksum 8526e7021037423c912dbe6e6430a30bc0a915dfc9f9a014885e71441696c0ebfad009a33dc21a4e83c28bb7a3a0aa78ac6579ebd21e518e5aba8a31867611c0
+doccontainerchecksum 375dbe5d9c412f14504199751697543a54b42a675c6aa722fc11da588098dab5de45e909b0a669d84f671fb50d8aa544f05af41428034843695f24adf2d016ea
docfiles size=749
texmf-dist/doc/man/man1/pdfetex.1
texmf-dist/doc/man/man1/pdfetex.man1.pdf
@@ -228961,7 +228985,7 @@ runfiles size=65
catalogue-contact-bugs https://mailman.ntg.nl/mailman/listinfo/ntg-pdftex
catalogue-contact-home http://www.pdftex.org
catalogue-contact-repository https://tug.org/svn/pdftex/branches/stable
-catalogue-contact-support http://lists.tug.org/pdftex
+catalogue-contact-support https://lists.tug.org/pdftex
catalogue-license gpl
catalogue-topics engine
@@ -247888,7 +247912,7 @@ binfiles arch=x86_64-solaris size=1
name pwebmac
category Package
-revision 55882
+revision 56291
shortdesc Consolidated WEB macros for DVI and PDF output
relocated 1
longdesc The original WEB system by Donald Knuth has the macros
@@ -247911,9 +247935,9 @@ longdesc instead of the default webmac.tex in their programs have to
longdesc change the first line in the TeX file created by weave. From
longdesc there, all depends on the "TeX engine" you use.
containersize 7780
-containerchecksum 65e0668f9bd20d31707e8c0839cbf7eabf2891c59e4927175790fbe6568c0c0b35a94ba3fe14c71b29d459f55efc44974010d462ea4f325132c97cffd341ed2c
+containerchecksum ec8842bf8c12203dd030ec14d615c0e6fb34b752c81b3612f8749eb0fd791d46afbaf7b227e5b1ca38803d60951d1089f92aa5b6c885b5ee958fd580fe832cae
doccontainersize 5280
-doccontainerchecksum f4234c8d02b9a9b256b9b9ab3c0bb99b406f1e13c544bd7d4f42a50969c3d35eb45a4727202d7f1ef0443e8ffcb77d2cf7492f8ff4028424f6f97f130243a0ce
+doccontainerchecksum 8f9be49197401886ad5e1d93f0f725b6e9a5cf73c24f8e1a6e876857dc36227d33e9674a207dfe44c756769b19d277e4cb6f58b2e1c06ce5943155c2631aad01
docfiles size=5
RELOC/doc/plain/pwebmac/README.md details="Readme"
RELOC/doc/plain/pwebmac/index.md
@@ -247921,7 +247945,7 @@ docfiles size=5
runfiles size=5
RELOC/tex/plain/pwebmac/pwebmac.tex
catalogue-contact-repository https://github.com/ascherer/web
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /web/pwebmac
catalogue-license pd
catalogue-topics litprog
@@ -251845,22 +251869,22 @@ catalogue-topics version-control doc-mgmt
name rcs-multi
category Package
-revision 21939
+revision 56291
shortdesc Typeset RCS version control in multiple-file documents
relocated 1
longdesc The package enables the user to typeset version control
longdesc information provided by RCS keywords (e.g., $ID: ... $) in
longdesc LaTeX documents that contain multiple TeX files. The package is
longdesc based on the author's svn-multi package.
-containersize 2996
-containerchecksum 156e3f47b8f4eae8cb959bd561cca2c592a43483cdb99fd04a88593ab5fd585a814b0e3416a835ce8d249969eafe119cd80c9c5364f40a9e595aff2c5f2e6f65
+containersize 3044
+containerchecksum 4b8cda573edfeed6f5ca2c993aa72c6cbe42f8705e42e9004f6dd4ef85e2e6bb4b9ee9b6a865ca7966ce70d685ceb5255e87545c2159feb30986ff8e896ca41c
doccontainersize 651132
-doccontainerchecksum 2eafcfc5c0297c021ea7f35abfac9526c4a40cd46efb88ee6f41a5c0f5d68586263d3140db73c1f9026cc0fc856a888369b21f5d85679f5eb60dccbe111938d3
+doccontainerchecksum a2a2cf87235015aeed11a1f924fd7d719e568c99890fe7434dd1ecf7853247e50f8fab4c7a800a19e4390c953d940107de009e74695248251d76f773d37cabb4
docfiles size=180
RELOC/doc/latex/rcs-multi/example.pdf
RELOC/doc/latex/rcs-multi/rcs-multi.pdf details="Package documentation"
-srccontainersize 13584
-srccontainerchecksum 6fda675809ee257aa7f96a3ddcca5e3ec8577bc337c3f303ee6658bebace26ba271a367b116abc32fcb2633bb5c57a442b2e12fc2bf67b8326ffaa46f08f6ed4
+srccontainersize 13580
+srccontainerchecksum 2f72796d40de09422a67cadb68a093d44b5cff71f51c33c681117891fae080bcba43baffc4a12a7daf8b486c75e8d20c8b86612d411af67458a1f7e3c69e1d75
srcfiles size=14
RELOC/source/latex/rcs-multi/Makefile
RELOC/source/latex/rcs-multi/example.tex
@@ -251869,6 +251893,9 @@ srcfiles size=14
runfiles size=3
RELOC/tex/latex/rcs-multi/rcs-multi.sty
catalogue-also rcs rcsinfo
+catalogue-contact-bugs https://sourceforge.net/p/rcs-multi/tickets/
+catalogue-contact-home https://sourceforge.net/p/rcs-multi/
+catalogue-contact-repository https://sourceforge.net/p/rcs-multi/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/rcs-multi
catalogue-license lppl
catalogue-topics version-control doc-mgmt
@@ -251965,7 +251992,7 @@ catalogue-version 2.0
name realboxes
category Package
-revision 23581
+revision 56291
shortdesc Variants of common box-commands that read their content as real box and not as macro argument
relocated 1
longdesc The package uses the author's package collectbox to define
@@ -251978,20 +252005,23 @@ longdesc macros, like \Makebox, can also be used as environments, but
longdesc not the "short-form" macros, like \Mbox. However, normally the
longdesc long form uses the short form anyway when no optional arguments
longdesc are used.
-containersize 2984
-containerchecksum 944de8b761acc0949ba14c0d506287b64a1cf8efe20fd26dc74930e589f4d0651ffc3f1c4959111091f90d0f869ba18cc9456a5c58dee0a1b4b8ae7c1c6c02a9
-doccontainersize 175816
-doccontainerchecksum cd194a9fd0836c8cefc57c26394f7e7f684974c374f787f3ac6d82daba3ac1e9f17aaeae06f26fb9851255bf53bab6290124a1878289651dedec824238e8193e
+containersize 3028
+containerchecksum fa998a9ec7865f65c96fdd2c7015646db01f72a6a3d291c98c726fa295fb883f0e6d7fceecb1276bd2668729bfeaf0a9f9eaae19913ed6af2f54530243205d16
+doccontainersize 175812
+doccontainerchecksum 43d982eeb7c7f6405b35c2b37ec20fc92fd46a1f3e1a1ac8fe69bc74dc5bcffb3bd50c791139621d9927b07fb80e78283f3e98d13a552c5bc29d5b147fa28b04
docfiles size=48
RELOC/doc/latex/realboxes/README details="Readme"
RELOC/doc/latex/realboxes/realboxes.pdf details="Package documentation"
srccontainersize 7416
-srccontainerchecksum 4ea18fd3ad7988447d1c2ad993d76dd1f2c4802356885636e80e5157a3892ecc235d9fce90093044dc9415056a986ccd5fe2f8eabdb86bee3eeb27eae5509be8
+srccontainerchecksum 5976fa640a0c85e837a606e286ab50baea1a75283dea9a0d152a901ca2f565327c27a0f30539b7536bf00614cc998e1c7b8c6b8a28f22fbd121beeb8f4503b47
srcfiles size=8
RELOC/source/latex/realboxes/realboxes.dtx
RELOC/source/latex/realboxes/realboxes.ins
runfiles size=3
RELOC/tex/latex/realboxes/realboxes.sty
+catalogue-contact-bugs https://sourceforge.net/p/realboxes/tickets/
+catalogue-contact-home https://sourceforge.net/p/realboxes/
+catalogue-contact-repository https://sourceforge.net/p/realboxes/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/realboxes
catalogue-license lppl1.3
catalogue-topics boxing
@@ -263088,7 +263118,7 @@ catalogue-version 0.302
name semantex
category Package
-revision 55902
+revision 56291
shortdesc Semantic mathematics
relocated 1
longdesc The SemanTeX package for LaTeX delivers a more semantic,
@@ -263097,20 +263127,23 @@ longdesc ordinary math syntax. The system is object-oriented and uses
longdesc keyval syntax, and everything is highly customizable. At the
longdesc same time, care has been taken to make the syntax as intuitive,
longdesc natural, practical, and lightweight as possible.
-containersize 19376
-containerchecksum 32214793f06ad0f7ac819940ee8020678e19ed688ccdb10ac78789dcfb3ad8458307b1fe2e64116c9266873b84378d792e8e453cb7c0c822b3f50448be1653d9
-doccontainersize 254368
-doccontainerchecksum 8a51f84ef65f8fcf682a488d9a49f5d90666b29c4333ab944f5dd23f54c8867fce3ec71f753e16ee110c03d8daffafc298314628f15d91dde06e65504b054b90
-docfiles size=79
+depend semtex
+containersize 19508
+containerchecksum 6159ccb776f1cbd25bb88ebf3e06e0449e99af3fd2d0b04a5bac908e2ffc46854a9d51f394306702ed61df060c595b6f23be6f7f2cdbaddf2dbf611a02a74117
+doccontainersize 387088
+doccontainerchecksum 26ff4b395f4a6321b386c99e04252a427b412b4deebef8acb89c023ba14ba99f57833d8f7f21f21395bb7b3aba4c5916fd4315bf5edcef317bbd42826157a34b
+docfiles size=134
RELOC/doc/latex/semantex/README.md details="Readme"
RELOC/doc/latex/semantex/semantex.pdf details="Package documentation"
RELOC/doc/latex/semantex/semantex.tex
+ RELOC/doc/latex/semantex/stripsemantex.lua
runfiles size=53
RELOC/tex/latex/semantex/semantex.sty
+ RELOC/tex/latex/semantex/stripsemantex.sty
catalogue-ctan /macros/latex/contrib/semantex
catalogue-license lppl1.3c
catalogue-topics maths expl3
-catalogue-version 0.3alpha
+catalogue-version 0.4beta
name semantic
category Package
@@ -263454,6 +263487,36 @@ catalogue-license lppl1.3
catalogue-topics semproc
catalogue-version 0.1
+name semtex
+category Package
+revision 56288
+shortdesc Deals with stripped SemanTeX documents
+relocated 1
+longdesc This package is a small LaTeX package that adds a collection of
+longdesc simple macros for parentheses and bullets. It exists for one
+longdesc purpose only: To be loaded by documents which were originally
+longdesc typeset using the package SemanTeX, but which have been
+longdesc stripped of SemanTeX markup using the package stripsemantex
+longdesc which is part of SemanTeX. Therefore, unless your document is
+longdesc one of those, simply don't use this package. And even if your
+longdesc document is one of those, there is a good chance you will not
+longdesc have to load it after all. In most cases, you will be able to
+longdesc replace the macros it provides by macros from other packages.
+containersize 1328
+containerchecksum 9d39ea59dc923420e6bdb4a2de62f81aff92a1f1776e188e2e9f6684a424413e39ea7931d3043eaf182f5634cb80bfa4d616d9fbd52019a98fa0b5abfccbffee
+doccontainersize 79948
+doccontainerchecksum e7009463e9bc272329f3155f5a081a75017ca92c9016b1bc68b5dd6700fbd55b2e997bf06b4de852e6b5394a059de3ac915bddbb94ae2073914af73222d9341b
+docfiles size=22
+ RELOC/doc/latex/semtex/README.md details="Readme"
+ RELOC/doc/latex/semtex/semtex.pdf details="Package documentation"
+ RELOC/doc/latex/semtex/semtex.tex
+runfiles size=1
+ RELOC/tex/latex/semtex/semtex.sty
+catalogue-ctan /macros/latex/contrib/semtex
+catalogue-license lppl1.3c
+catalogue-topics maths expl3
+catalogue-version 0.1beta
+
name sepfootnotes
category Package
revision 41732
@@ -272453,7 +272516,7 @@ catalogue-version 1.01
name standalone
category Package
-revision 47136
+revision 56291
shortdesc Compile TeX pictures stand-alone or as part of a document
relocated 1
longdesc A class and package is provided which allows TeX pictures or
@@ -272466,15 +272529,15 @@ longdesc package is used to display the typeset code without margins.
longdesc The behaviour in standalone mode may adjusted using a
longdesc configuration file standalone.cfg to redefine the standalone
longdesc environment.
-containersize 11896
-containerchecksum 48fdadf3c9e7b899ad75953baeaa9f47384d1bcea0ae08c94ee51b4f2fabfe2fa244a0b9a77f11fd038aa106551c4cb9e0ceb06292ab1ff7bf6802a65ad677fe
+containersize 11884
+containerchecksum d9fd4051c18908b69041805c4a4c631a14d8e3c35b6161ca6731962f2ad0d343db3d1dcf6a8e012d6a96971b3e0a0f00204634ac9c836b3bd28c0a96e132d946
doccontainersize 270488
-doccontainerchecksum a5cb35587d86034c38584218b78fe4142563306a8d918d676cce0a970f593cece78bfb755d42b9fda3c0286bdd4a0bac231f8b750ed61acf6199eda6d51a3dcc
+doccontainerchecksum 5e1696289be97de97c4c68cf81933bd15ed542e3943b9a718d8f04c8ea16b9a31ddeaf5360e45d356110c7e6663872f354302cb07ca38bf0900380f575ea76bd
docfiles size=68
RELOC/doc/latex/standalone/README details="Readme"
RELOC/doc/latex/standalone/standalone.pdf details="Package documentation"
srccontainersize 38568
-srccontainerchecksum 642474f0eed4ac5d3831c0764de9c2c61210cb93bb6bab5c77f65ca13ea54d2eeab038a2c9f52ce077be5749f4d93fae5ef5df561a1e33601bac00345797d3c6
+srccontainerchecksum a921b3956908990f216f5d8da1449e7a47c4d74f34284f2c58b7c3cfa601c57de880d78e3680947349f3b5d20e0366f020d70b7c1348a9a374d2d0b57b58ef9c
srcfiles size=47
RELOC/source/latex/standalone/standalone.dtx
RELOC/source/latex/standalone/standalone.ins
@@ -272484,9 +272547,9 @@ runfiles size=18
RELOC/tex/latex/standalone/standalone.sty
RELOC/tex/plain/standalone/standalone.tex
catalogue-also combine docmute includex newclude
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/standalone/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/standalone/
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/standalone/src
+catalogue-contact-bugs https://sourceforge.net/p/standalone/tickets/
+catalogue-contact-home https://sourceforge.net/p/standalone/
+catalogue-contact-repository https://sourceforge.net/p/standalone/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/standalone
catalogue-license lppl1.3
catalogue-topics subdocs class
@@ -274706,7 +274769,7 @@ catalogue-topics comp-theory font font-symbol-maths font-mf font-type1
name storebox
category Package
-revision 24895
+revision 56291
shortdesc Storing information for reuse
relocated 1
longdesc The package provides "store boxes" whose user interface matches
@@ -274715,22 +274778,24 @@ longdesc store box appears at most once in the output PDF file, however
longdesc often it is used. The present version of the package supports
longdesc pdfLaTeX and LuaLaTeX; when DVI is output, store boxes behave
longdesc the same as save boxes.
-containersize 2984
-containerchecksum 365da48946b94161fe78447b402dfda931f7635b7a8a12fe6a4368c3b579c140b6c6037e6b04e192aaac1d768200af2fefc53659e52b813ac6956b9e82c8076c
+containersize 2996
+containerchecksum 68feeea2592f31d3aed2b8431ab9e6c15d61151d3db7f59d54d6904e8db0f11c424b22ea6ff99e19032688c7910debed25280dde11f7a5858186772f118f0a18
doccontainersize 194352
-doccontainerchecksum 89867e995ec04c8411e6ebb9919e8b94bc12674fd7e659ad6f42b17988748c98a4756268782a9fb5f46095ed2b83a877c3969f0ca8433e5f8c37dc7551c7825e
+doccontainerchecksum 08116b59ab292150381e1dc3e766d5ac7fbe8e1ec7a32236af4ebbd6ed410f76fff74648477615dddb8bf55281fdf918bafd25c04bab4d2be08b86c5b937a5f7
docfiles size=49
RELOC/doc/latex/storebox/README details="Readme"
RELOC/doc/latex/storebox/storebox.pdf details="Package documentation"
-srccontainersize 6216
-srccontainerchecksum 248077174224766d5b35b47b319b9eb9afc3a5fcb0d1190474ffc3233c02dc7265c078b08ac57a325990678ab0eb58b818fef34cb932a229da1e43247c6f2578
+srccontainersize 6220
+srccontainerchecksum bfc6c15b82ec637d8a76f705b7e443c734fc274b6de15d93dbc5b96eb35653e7a24a1f2abc628ef0d314ea791e04d1db9efe3f8e481cfb40a30fb0a345a82e38
srcfiles size=7
RELOC/source/latex/storebox/storebox.dtx
RELOC/source/latex/storebox/storebox.ins
runfiles size=4
RELOC/tex/latex/storebox/storebox-pgf.sty
RELOC/tex/latex/storebox/storebox.sty
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/storebox
+catalogue-contact-bugs https://sourceforge.net/p/storebox/tickets/
+catalogue-contact-home https://sourceforge.net/projects/storebox/
+catalogue-contact-repository https://sourceforge.net/p/storebox/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/storebox
catalogue-license lppl1.3
catalogue-topics pdf-feat macro-supp
@@ -275079,7 +275144,7 @@ catalogue-version 1.0
name sty2dtx
category Package
-revision 29743
+revision 56291
shortdesc Create a .dtx file from a .sty file
longdesc The package provides a Perl script that converts a .sty file
longdesc (LaTeX package) to .dtx format (documented LaTeX source), by
@@ -275095,10 +275160,10 @@ longdesc file from 'dtxtut' is used. User level macros are added
longdesc automatically to the 'Usage' section of the .dtx file. A
longdesc corresponding .ins file can be generated as well.
depend sty2dtx.ARCH
-containersize 8676
-containerchecksum 05e17abf8322e70f275308e983a244e178883aa36571640d513962e813a2bfeb88264c0ae9ccab956f9bd016923d1727c14a7a26bb58b257c7d05600a540da1c
+containersize 8720
+containerchecksum a7e42340744a348c88bb3cde7e23d428259f4fe7c644093e4bdabf8c49bc7f9c929a2271cd14daed9be233a04f62b60602a9fa778d05b11dba716d886286e8e1
doccontainersize 151548
-doccontainerchecksum 1abba13831a0cd4b93f9665f242b96d32e764c39ccdb917f655922fe2a4b00385d6a78c77c151e212082eace3b9c9447705681416b5cb2eed9f794d7eb30c905
+doccontainerchecksum 2fb33ea4fcc9b5e940b46cb1b53cb56692528d8926d9bf22d3615958946763a63be101a5cf146a14ade43e2dce11b8fc25866d563d844570863dce54f48472b5
docfiles size=43
texmf-dist/doc/man/man1/sty2dtx.1
texmf-dist/doc/man/man1/sty2dtx.man1.pdf
@@ -275107,6 +275172,9 @@ docfiles size=43
runfiles size=8
texmf-dist/scripts/sty2dtx/sty2dtx.pl
catalogue-also makedtx
+catalogue-contact-bugs https://sourceforge.net/p/sty2dtx/tickets/
+catalogue-contact-home https://sourceforge.net/p/sty2dtx/
+catalogue-contact-repository https://sourceforge.net/p/sty2dtx/code/ci/default/tree/
catalogue-ctan /support/sty2dtx
catalogue-license gpl3
catalogue-topics package-devel
@@ -275525,26 +275593,26 @@ catalogue-version 2.1.5
name subfiles
category Package
-revision 53782
+revision 56291
shortdesc Individual typesetting of subfiles of a "main" document
relocated 1
longdesc Using subfiles the user can handle multi-file projects more
longdesc comfortably making it possible to both process the subsidiary
longdesc files by themselves and to process the main file that includes
longdesc them, without making any changes to either.
-containersize 1816
-containerchecksum 558a8e29ac5fcb4fba04a75fd02826824690bba8f8b6118ae15f856c0e5cb34a63a507bdaf90a7d2786fe3da34637f76d62d24d061df76dcb95bc324224002a4
-doccontainersize 241896
-doccontainerchecksum eef1fd8e0b739ed9cc8bf45952c53111b45b6659eb2a0afcf64ae76363fcdfe61320db0831f31b2cdc9a242fd766855be3d83224172e9baf84d15ff938d4b23c
-docfiles size=60
+containersize 2212
+containerchecksum 97d7baa174b71b76161f5df79844d6fb76f03bd108c6152146c0257c6a6a019608bc35ac95393fe034ac15198cc52925f294b2a417501179a0e3e59a01346070
+doccontainersize 246668
+doccontainerchecksum d18ad89705a0dd1c6c8ab3c7e4c2755f1f3d447811da53e0b0894083cd9b422b1c78f030ad56a678d9553231082f86c14ce6ce9ee8f83bc256b05fe144fffa5b
+docfiles size=62
RELOC/doc/latex/subfiles/README details="Readme"
RELOC/doc/latex/subfiles/subfiles.pdf details="Package documentation"
-srccontainersize 7832
-srccontainerchecksum 9ff743bc9c3cf19fd6c12fbab9377230dec554efb2663a83f245b34c9b6db1f74d5d8b91d60a48efe164cd2844de2ae1724d0e6eee9d4692386078c9bbc44816
-srcfiles size=8
+srccontainersize 8532
+srccontainerchecksum 76cbafa28b75979dfab0f00d31d3c7ffeb17240cf60cd465457d97da70f4a98fc600bea04cf01642593ef1a7c843262aed9f45331971f04a58dac3891f0c44f4
+srcfiles size=9
RELOC/source/latex/subfiles/subfiles.dtx
RELOC/source/latex/subfiles/subfiles.ins
-runfiles size=2
+runfiles size=3
RELOC/tex/latex/subfiles/subfiles.cls
RELOC/tex/latex/subfiles/subfiles.sty
catalogue-also combine standalone
@@ -275554,7 +275622,7 @@ catalogue-contact-support https://tex.stackexchange.com/
catalogue-ctan /macros/latex/contrib/subfiles
catalogue-license lppl1.3
catalogue-topics subdocs class
-catalogue-version 1.6
+catalogue-version 2.0
name subfloat
category Package
@@ -276061,7 +276129,7 @@ catalogue-version 43
name svn-multi
category Package
-revision 26313
+revision 56291
shortdesc Subversion keywords in multi-file LaTeX documents
longdesc This package lets you typeset keywords of the version control
longdesc system Subversion inside your LaTeX files anywhere you like.
@@ -276071,10 +276139,10 @@ longdesc uses the author's filehook and currfile packages. The package
longdesc interacts with an external Perl script, to retrieve information
longdesc necessary for the required output.
depend svn-multi.ARCH
-containersize 12436
-containerchecksum f1367560fd6eb6247097d5e5901a56a01a90941f584797f6a5e3388cd9ebb5e33ae98a8cba69cccb4b42feb01a29d8507de8e814be8ca2516ba24ce6a0d929e5
+containersize 12464
+containerchecksum 237955b5606c5c4fbca7a5c06d4cb1b180ad33647d39337a6814c95a43ecb84004715f3b639353608bd52a64ee3ea70f392ba831ff64499b5162aed64a85da9d
doccontainersize 401628
-doccontainerchecksum 8e54c597bec50dc541abe4e1be7ceeca9575c5e9f3e201bc66eaeab11ea529cfe3724389aa2d4938f6272c93213dd20a7ea89cc9c954f882ce916c6d610bafb1
+doccontainerchecksum 2ae2947a0b15e82a9b241a757ffc60cf5a5be04bb49c4ae5ef7de9dcf9e1ef4082c83e2a57058dd431d16c56eae7647ec4c43dd47a4f0c2a925f4f989a7f6844
docfiles size=104
texmf-dist/doc/latex/svn-multi/README details="Readme"
texmf-dist/doc/latex/svn-multi/example_chap1.tex
@@ -276083,7 +276151,7 @@ docfiles size=104
texmf-dist/doc/latex/svn-multi/svn-multi.pdf details="Package documentation"
texmf-dist/doc/support/svn-multi/svn-multi-pl.pdf details="Perl script documentation"
srccontainersize 39000
-srccontainerchecksum f90315214155802235b1137276d615bac052adb9295dba04443976fd7147898616e2ff8e32bc1c3f6cceaaf59480c9acafa73cc53ad50da2bd07d20dd68e2fa7
+srccontainerchecksum 45e948ed51554b3b12b883238b628ab6dc43a0ae6a0eea093399d1f771bfc368b2839c568a7183abc3a8cdf687095692e0063cac26869c2fc2b89087096b412e
srcfiles size=42
texmf-dist/source/latex/svn-multi/svn-multi-pl.dtx
texmf-dist/source/latex/svn-multi/svn-multi.dtx
@@ -276093,7 +276161,9 @@ runfiles size=15
texmf-dist/tex/latex/svn-multi/svn-multi.sty
texmf-dist/tex/latex/svn-multi/svnkw.sty
catalogue-also svn svninfo
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/svn-multi
+catalogue-contact-bugs https://sourceforge.net/p/svn-multi/tickets/
+catalogue-contact-home https://sourceforge.net/p/svn-multi/
+catalogue-contact-repository https://sourceforge.net/p/svn-multi/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/svn-multi
catalogue-license lppl
catalogue-topics version-control doc-mgmt
@@ -276245,7 +276315,7 @@ binfiles arch=x86_64-solaris size=1
name svn-prov
category Package
-revision 18017
+revision 56291
shortdesc Subversion variants of \Provides... macros
relocated 1
longdesc The package introduces Subversion variants of the standard
@@ -276253,20 +276323,23 @@ longdesc LaTeX macros \ProvidesPackage, \ProvidesClass and \ProvidesFile
longdesc where the file name and date is extracted from Subversion Id
longdesc keywords. The file name may also be given explicitly as an
longdesc optional argument.
-containersize 2376
-containerchecksum 24325a3de52afb9328a4b608710b94839c77ac65b13f08219f4efa24680ceabc410135de3c468c89d5d283a8986f2a9e337ef2285241ce776d0270622e0e77d9
+containersize 2420
+containerchecksum 0ac31432d148e5b05cadb041ee238fdd27b695a5be2e9553d062084443f97b961e1d9530ce3e5bc0b97ca8cc1bedecf9abb6f189f4e75184816e4ca36f8117d8
doccontainersize 242148
-doccontainerchecksum b6de41de4535833025f2899ae28530f4198717bfdcf06b090d054c20bced3a524ae9627b1909eb7afc6ff4e09d5525203b869c09d23facbb86e207ab2193b57a
+doccontainerchecksum 78e6d352d0e19c48d98edb5e5b12ddae32e906cf0693ca3b57ecc9647dd5dde7a6dab394160b9242f2503a7dde54505fff4d38687a06689a463b152e6708f70c
docfiles size=74
RELOC/doc/latex/svn-prov/svn-prov.pdf details="Package documentation"
-srccontainersize 10000
-srccontainerchecksum c7586e4592f9518d2a03218c9afe614422bc8021a192279d7be1b090bd09bc51191d8c0a2e760514206c53cecf5a7b89c617a4c209cdb878874a0e3396659a3c
+srccontainersize 9996
+srccontainerchecksum e67a24270a79b47c853c492b2d72b451a9041e6202fcbe59c20c5203dccaf8d865215a01cf48aebacd8367e2d5a7d1f2efafa93e729d7d3d7269c4d008bce7a1
srcfiles size=10
RELOC/source/latex/svn-prov/Makefile
RELOC/source/latex/svn-prov/svn-prov.dtx
RELOC/source/latex/svn-prov/svn-prov.ins
runfiles size=2
RELOC/tex/latex/svn-prov/svn-prov.sty
+catalogue-contact-bugs https://sourceforge.net/p/svn-prov/tickets/
+catalogue-contact-home https://sourceforge.net/p/svn-prov/
+catalogue-contact-repository https://sourceforge.net/p/svn-prov/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/svn-prov
catalogue-license lppl
catalogue-topics version-control doc-mgmt
@@ -279338,7 +279411,7 @@ catalogue-version 4.8
name tex
category TLCore
-revision 54276
+revision 56291
shortdesc A sophisticated typesetting engine
longdesc TeX is a typesetting system that incorporates a macro
longdesc processor. A TeX source document specifies or incorporates a
@@ -279359,18 +279432,18 @@ depend kpathsea
depend plain
depend tex.ARCH
execute AddFormat name=tex engine=tex options="tex.ini" fmttriggers=cm,hyphen-base,knuth-lib,plain
-containersize 892
-containerchecksum 95dbaafdf3e588fe52b1f3b4cfab376c2f477a4a290a31d49aface117c425904e3b239841a556d1ccd83b9a2d050b0fc0c9db540e4ff27feb2cefedd135f54ed
-doccontainersize 77836
-doccontainerchecksum c9d721c67d5ee0ad95c4818f776960bdae47f329834dcfada44ef433a090ddafc242412c23c79c20799df0ba5a90f6a5025c6e4cb31a79453acbfe9a1ce581d8
+containersize 896
+containerchecksum d33a8c3f793f04c11b1c761e0c09f9461cce6baf7e0a7454ac1d0eebd9862099f229d9f3200a3b344a3d61a8b1168a41b04eb44ab4f9534e129e40ff4028eabb
+doccontainersize 77832
+doccontainerchecksum aa3547889d92739e1b7196fe25d1283b6b38ac2ac0c1bd4a5d8a5a8045756db943f87df62d1efd45a75abbf863717235115ec30fdf13c8f225059dfdea98af6c
docfiles size=27
texmf-dist/doc/man/man1/initex.1
texmf-dist/doc/man/man1/initex.man1.pdf
texmf-dist/doc/man/man1/tex.1
texmf-dist/doc/man/man1/tex.man1.pdf
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /systems/knuth/dist/tex
catalogue-license knuth
catalogue-topics engine
@@ -281311,16 +281384,16 @@ binfiles arch=x86_64-solaris size=107
name tex4ebook
category Package
-revision 52616
+revision 56291
shortdesc Convertor from LaTeX to ebook formats
longdesc This is a bundle of lua scripts and LaTeX packages for
longdesc conversion of LaTeX files to ebook formats such as epub, mobi
longdesc and epub3. tex4ht is used as conversion engine.
depend tex4ebook.ARCH
-containersize 15600
-containerchecksum 76600392b612abe233a98195c866bf291e4bc372f0cace58fed0855246b3bc8ee8687c1e8baac3026030e7eb60dd1f4a4ed3698521b37126127b33d1bd080661
-doccontainersize 86804
-doccontainerchecksum b00548efbb3b263f9cdaa7348186ae7e96ef3a224904ccd04d4622b85a94cd5a591532265281ed76c6135273a9abddb8af4ff3f6e1fea484d534dacec1903b70
+containersize 16916
+containerchecksum d55f39a6e7d528a0085eb8e3c56b31b71cc399dff0f97f46f73d362e460b4998cc69e3d52b2b8f2ea7d57fd9f495be58a1072d1deaf50a6b77ffa55598ed30eb
+doccontainersize 87964
+doccontainerchecksum 98e031478e7f9bc08c2837d172f4e7e8d9df8202fd2ff4737356d4f2384b0841518497834c4695bcf5fc9176f70df819e38378deb60321d97fbec4e5bbc845ad
docfiles size=32
texmf-dist/doc/support/tex4ebook/README details="Readme"
texmf-dist/doc/support/tex4ebook/changelog.tex
@@ -281328,8 +281401,10 @@ docfiles size=32
texmf-dist/doc/support/tex4ebook/tex4ebook-doc.pdf details="Package documentation"
texmf-dist/doc/support/tex4ebook/tex4ebook-doc.tex
texmf-dist/doc/support/tex4ebook/tex4ebook-tidyconf.conf
-runfiles size=17
+runfiles size=20
texmf-dist/scripts/tex4ebook/tex4ebook
+ texmf-dist/scripts/tex4ebook/tex4ebook-exec_azw.lua
+ texmf-dist/scripts/tex4ebook/tex4ebook-exec_azw3.lua
texmf-dist/scripts/tex4ebook/tex4ebook-exec_epub.lua
texmf-dist/scripts/tex4ebook/tex4ebook-exec_epub3.lua
texmf-dist/scripts/tex4ebook/tex4ebook-exec_mobi.lua
@@ -281341,7 +281416,7 @@ catalogue-contact-repository https://github.com/michal-h21/tex4ebook
catalogue-ctan /support/tex4ebook
catalogue-license lppl1.3
catalogue-topics ebook
-catalogue-version 0.3a
+catalogue-version 0.3b
name tex4ebook.aarch64-linux
category Package
@@ -288637,7 +288712,7 @@ catalogue-version 2.0
name texdef
category Package
-revision 47420
+revision 56291
shortdesc Display the definitions of TeX commands
longdesc This (Perl) script displays the definitions of (La)TeX command
longdesc sequences/macros. Various options allow the selection of the
@@ -288656,24 +288731,24 @@ longdesc including flavours (pdf(La)TeX, Lua(La)TeX, Xe(La)TeX, ...).
longdesc The flavour can be selected using a command line option, or via
longdesc the script name: latexdef will use LaTeX as default, etc.
depend texdef.ARCH
-containersize 9408
-containerchecksum 7c5defeb9cf9d5fbe92f8433265543e6d7024e9f7fdc768582ec51a5880745c54cf8576f1b7455e32d51429e2faf122c0775ead117be97510f4b2d8123b04d71
+containersize 9404
+containerchecksum b74a372f25a394ec843d30aad3a19113e5d8cbcbf3d4afa6f7a7a3c112e4ccaf7270142bf84f62bd5f8d45cf61488534b43d0f7683b3d95669843e6f38a0c5bc
doccontainersize 155444
-doccontainerchecksum a4727d57bb5b56106a9baf4aabbabd16cc8a8ac08358c28263abe9c40b76a6d692d0e819c23c7b8e946e97fd3f7574a498a6f43207c04e7544a0383b3681f54e
+doccontainerchecksum 337d8ed743889833848411bf5625500d739a9ca7e4bb1dc9896b9957eddb90c642705c410468d7f5fc270bc9ce12386169e4bea930fc0002840198ad3cb5b995
docfiles size=42
texmf-dist/doc/support/texdef/CHANGELOG
texmf-dist/doc/support/texdef/INSTALL
texmf-dist/doc/support/texdef/README details="Readme"
texmf-dist/doc/support/texdef/texdef.pdf details="Package documentation"
-srccontainersize 4764
-srccontainerchecksum 4b57478b06d4cd67ae6b8d2afb059eb52e03e31c4c4066108d471134865a64f3eb3dc99f8bc4330625eaa8e7c660f445365c6bbe510f36d5770b406df99d6c8c
+srccontainersize 4760
+srccontainerchecksum abc08c97236ae7b10c5f1800f0e6486f4e640b78c8791b7c97f4269b6ff027296fa41caa4b7929ccb130060198a71773f501db10d9f87061a8b9239ac6898e71
srcfiles size=4
texmf-dist/source/support/texdef/texdef.tex
runfiles size=8
texmf-dist/scripts/texdef/texdef.pl
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/texdef/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/texdef/
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/texdef/src
+catalogue-contact-bugs https://sourceforge.net/p/texdef/tickets/
+catalogue-contact-home https://sourceforge.net/projects/texdef/
+catalogue-contact-repository https://sourceforge.net/p/texdef/code/ci/default/tree/
catalogue-ctan /support/texdef
catalogue-license gpl3
catalogue-topics debug-supp
@@ -289187,7 +289262,7 @@ binfiles arch=x86_64-solaris size=1
name texdoc
category TLCore
-revision 53859
+revision 56291
shortdesc Documentation access for TeX Live
longdesc texdoc is a Lua script providing easy access to the
longdesc documentation in TeX Live: PDF, DVI, plain text files, and
@@ -289197,10 +289272,10 @@ longdesc program by the same name to do the same job, but its
longdesc implementation is unrelated.
depend kpathsea
depend texdoc.ARCH
-containersize 26728
-containerchecksum ff55c658b4baf265bf9ca2ba6e5a161eecc1c75bd112e6400c9df4708ae3f355dcff277cb60ff0178bd41940d090e3dd28a7ce06421f509b352489d7a8d98b2c
+containersize 26724
+containerchecksum 80ef7736ece18014f6bf74e851073fa8ede64844b2f435e69c50ec5479c9fcf37cf82d758f5a4198362a7aa9a55c86da4cab0f1e2aa4908d41e0a6f66d9254f2
doccontainersize 132412
-doccontainerchecksum 54931eb9882415f2182fed56b4905c723bb0df1444b1e2af939e2b6093ed9acceba6af7d46d6aceeac853686a57e366c13ab76da05f18469da61c36588ce66c1
+doccontainerchecksum 4ca2c03d4e1f60ac679659c21b3cd511bdebbfed3764e4acba7ff7ed8535bf9cb8231c8a58395e93046b9360a4f22a00de693f97d094eb3cb39fc4dd07324e37
docfiles size=52
texmf-dist/doc/man/man1/texdoc.1
texmf-dist/doc/man/man1/texdoc.man1.pdf
@@ -289226,7 +289301,7 @@ catalogue-also texdoctk
catalogue-contact-bugs https://github.com/TeX-Live/texdoc/issues
catalogue-contact-home http://tug.org/texdoc/
catalogue-contact-repository https://github.com/TeX-Live/texdoc
-catalogue-contact-support http://lists.tug.org/texdoc
+catalogue-contact-support https://lists.tug.org/texdoc
catalogue-ctan /support/texdoc
catalogue-license gpl
catalogue-topics view-doc
@@ -289917,16 +289992,16 @@ docfiles size=592
name texlive-docindex
category TLCore
-revision 56268
+revision 56280
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script for
longdesc the process.
-containersize 392
-containerchecksum 45840d8d32e9ba60823dde1bc2b149ebcf1c6dd8b91c5b0c754add58e99c26e9d09dfc392c575d08636490215e7fab9efe30feeb1f941126882dea5ab3f9d6e8
-doccontainersize 168764
-doccontainerchecksum 6cc9f78435ee0b69d7f033906479ba459e8c04666c77ef7abb52f08494035f63a5b96290b22e7bf6fc18a2136f098357b5ce9ef9428a315e0e1f15772833c6aa
-docfiles size=334
+containersize 388
+containerchecksum de7d0598e37e8014467c50e82a5b7d39ad990cbb3e33528b82da5d1db412e6436ac01d555f70d613f62a2817344d8019bd7e4968cbd02223b3d3604e0e3eee5a
+doccontainersize 168860
+doccontainerchecksum a98df53661da754997de3e3ee83e8e7032f7943c1bc9b93b65bce5cc7bc19398439e357952d716084a1dd37636146ee2d924770327107e1348706038e2bf7014
+docfiles size=335
doc.html
name texlive-en
@@ -290147,7 +290222,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 56268
+revision 56280
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.
@@ -290155,10 +290230,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 131988
-containerchecksum db160e0862bd3e721967c23450dcc197d6ddc6b2565faa9a41744e9efb3dce1c67eaac9954a8133a9b50d81659b67c5a37d146a0ddf3c387448d3fd997361888
+containersize 132004
+containerchecksum 3eec1d9a3816661fbe419bb133854923e5b4d46db29d5ddb3a26383f3ca86a50d4e48ed1e7995d50850c629c7721e0b9c89c9df9b8f5e206e75f9c01104795a0
doccontainersize 218656
-doccontainerchecksum cd7eb8406b52ff90399e26b2343f37f5829ff36c41ea60f439304e750553ba7c83fce1637714f24a92bff263b1b270c45613374423de91601c5c137aa9753f9e
+doccontainerchecksum ff8cf7eb3b60b898a027bbfd19295998f394b20073e52c39a344db3e30b883badc29dfbadadef172988bd1b0489315f9eaa5088917aa0f178261fd7f3650bad9
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
@@ -293136,7 +293211,7 @@ catalogue-version 1.1
name texware
category TLCore
-revision 54994
+revision 56291
shortdesc Utility programs for use with TeX
longdesc Basic utitility programs, comprising: dvitype, which converts a
longdesc TeX output (DVI) file to a plain text file (see also the DVI
@@ -293145,18 +293220,18 @@ longdesc program's "pool" (string) file into human-readable form; and
longdesc tftopl and pltotf, which convert TeX Font Metric (TFM) file to
longdesc human readable Property List (PL) files and vice versa.
depend texware.ARCH
-containersize 632
-containerchecksum b464059887713458ff20b9d002b567eba21863501470b654f02e518f9a6f3e7ea1d40ecc321e9b6d7cc7687add76923e96411fd20426eaadfec6cf8a395336ec
-doccontainersize 34392
-doccontainerchecksum 21e62dfb6fff0924568c4942c0f442fb63c68e79e607a8cae34da917e2bc0192e3352c8a03c5dd5bb9338699e53a97c71878304a860b383e4d81f14dd80335e3
+containersize 636
+containerchecksum 9dbd7b278d471138f0326d274e127e79ba472063316e24937c203f65eb343892b34d04ca37622984cb0847ff98f143d5bd01853f801d0569b9378a0de8b185b0
+doccontainersize 34396
+doccontainerchecksum fefb274a0f1980e70219d1fa625167688e086b40f5cfb4eb2bb81725425524f27832b4ccb2200747fd1a7e1357de9320401295740b65c81920494d71a9ef0290
docfiles size=13
texmf-dist/doc/man/man1/dvitype.1
texmf-dist/doc/man/man1/dvitype.man1.pdf
texmf-dist/doc/man/man1/pooltype.1
texmf-dist/doc/man/man1/pooltype.man1.pdf
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-repository http://tug.org/svn/texlive/trunk/Build/source/texk/web2c/
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-ctan /systems/knuth/dist/texware
catalogue-license pd
catalogue-topics debug-supp
@@ -296025,7 +296100,7 @@ catalogue-version 1.0.1
name tikz-timing
category Package
-revision 46111
+revision 56291
shortdesc Easy generation of timing diagrams as TikZ pictures
relocated 1
longdesc This package provides macros and an environment to generate
@@ -296035,15 +296110,15 @@ longdesc be inserted into text (paragraphs, \hbox, etc.) and into
longdesc tikzpictures. A tabular-like environment is provided to produce
longdesc larger timing diagrams.
depend svn-prov
-containersize 19096
-containerchecksum f5f771d0fecb0615770d978d1ee5a8a5ebeae4c1d78d9f0ea33099a5c8d89cb7523c70dc38d3a0a6970e997fb5d7b9eb30e54bab4b865cbd8a53519d3bf529a5
+containersize 19084
+containerchecksum 7787480f873cc2c5e08c73a14c5f2965c57425ac223de41997727765f2c3f9693242e3f11d1cfe915d712153f64b7c47795134a98b3907569a12f468afa00617
doccontainersize 468644
-doccontainerchecksum e0d03fa23c84c8241a8b29a6a7242cb54bc6cab8a25ecdea64dcdca70606ac086de9f021045ddd103b35209af05b5e0342808a97b007c639afc40159de211ce9
+doccontainerchecksum fea8cec1685740fd7a14ec94e5e7944ed3408ea34c852572ba8de5d97f38efdfe8f7f622ebd0c43cb04881d97e105891e509bd9ae49b64fa41b19497107fd0d9
docfiles size=117
RELOC/doc/latex/tikz-timing/README details="Readme"
RELOC/doc/latex/tikz-timing/tikz-timing.pdf details="Package documentation"
srccontainersize 54980
-srccontainerchecksum 20a12782a5fed931f92198f02408ffe39a973eda5cf95904b3b33f5fa5b7a338b419da5e985c76c57610eb82c6b428f02c2fd28f24ef381708af46974bfa0920
+srccontainerchecksum e3b8567c0d8dba6e691bc9b67ca5850a1beeea2a27185eeb1522ed99387d0dda31a0f6e9d6013253230e21897d4579f06d6e6591947e8c433ca6f9bedb293427
srcfiles size=71
RELOC/source/latex/tikz-timing/tikz-timing.dtx
RELOC/source/latex/tikz-timing/tikz-timing.ins
@@ -296061,9 +296136,9 @@ runfiles size=41
RELOC/tex/latex/tikz-timing/tikz-timing-overlays.sty
RELOC/tex/latex/tikz-timing/tikz-timing.sty
catalogue-also timing
-catalogue-contact-bugs https://bitbucket.org/martin_scharrer/tikz-timing/issues
-catalogue-contact-home https://bitbucket.org/martin_scharrer/tikz-timing
-catalogue-contact-repository https://bitbucket.org/martin_scharrer/tikz-timing/src
+catalogue-contact-bugs https://sourceforge.net/p/tikz-timing/tickets/
+catalogue-contact-home https://sourceforge.net/p/tikz-timing/
+catalogue-contact-repository https://sourceforge.net/p/tikz-timing/code/ci/default/tree/
catalogue-ctan /graphics/pgf/contrib/tikz-timing
catalogue-license lppl
catalogue-topics electronic diagram-tmg
@@ -296508,26 +296583,29 @@ catalogue-version 1.0
name tikzpagenodes
category Package
-revision 27723
+revision 56291
shortdesc A single TikZ node for the whole page
relocated 1
longdesc The package provides special PGF/TikZ nodes for the text,
longdesc marginpar, footer and header area of the current page. They are
longdesc inspired by the 'current page' node defined by PGF/TikZ itself.
-containersize 1516
-containerchecksum 4f0d6a4270bf90aa1fa5c5a018fb8a2703a6884215672cfcdb908f7c6d4e9b3610a9f6fb6c26b7b302daaf509d635d26443c6e8944bc1f8704f94a527090319e
+containersize 1556
+containerchecksum b412599ab7288cf2bbbf4d3cd08a97b2a16932fce61ee9edd1b570345da29ee30d32482bc855f6929231331e758dea2a8f8973daa19f6dbd1863840bb6753876
doccontainersize 251304
-doccontainerchecksum 14ad07e01c014d000a2bdd483a2dadba652cd78b42faf0ea5f9ba829ba484239361d73233443303be121dd5122b7e5e209867145b10e7607b5c6e5d13e2fb428
+doccontainerchecksum 411631a79232cc01cb918689b5fa030ca79b4c27f45419a4b06039a7a17222550a3f34a3c4e12b5168fd331987fa94ad862a6cd6b9bdd0831112e8682adbaf9b
docfiles size=63
RELOC/doc/latex/tikzpagenodes/README details="Readme"
RELOC/doc/latex/tikzpagenodes/tikzpagenodes.pdf details="Package documentation"
srccontainersize 3692
-srccontainerchecksum bfde76eecef7173d34cddab9ac517a4d1440aa2888007cdc62acef2dcd84e26345f86a757e1c1b6af6211c2e33e0ac656501d76e980a90fdfa970843eb7c0eb3
+srccontainerchecksum 5c829f01396d69dce7399844935f0a3faa4d30f4b2262aa4c1dbac2543a2d3705534a05c1e9aedde03a5061f6d6f605a1dc6cc108b037d5a74301b8569446ca2
srcfiles size=5
RELOC/source/latex/tikzpagenodes/tikzpagenodes.dtx
RELOC/source/latex/tikzpagenodes/tikzpagenodes.ins
runfiles size=2
RELOC/tex/latex/tikzpagenodes/tikzpagenodes.sty
+catalogue-contact-bugs https://sourceforge.net/p/tikzpagenodes/tickets/
+catalogue-contact-home https://sourceforge.net/p/tikzpagenodes/
+catalogue-contact-repository https://sourceforge.net/p/tikzpagenodes/code/ci/default/tree/
catalogue-ctan /graphics/pgf/contrib/tikzpagenodes
catalogue-license lppl
catalogue-topics graphics macro-supp pgf-tikz
@@ -311402,7 +311480,7 @@ catalogue-version 1.0l
name unfonts-core
category Package
-revision 49455
+revision 56291
shortdesc TrueType version of Un-fonts
relocated 1
longdesc The Un-fonts come from the HLaTeX as type1 fonts in 1998 by
@@ -311413,10 +311491,10 @@ longdesc (PfaEdit) by Won-kyu Park in 2003. Core families (9 fonts):
longdesc UnBatang, UnBatangBold: serif UnDotum, UnDotumBold: sans-serif
longdesc UnGraphic, UnGraphicBold: sans-serif style UnPilgi,
longdesc UnPilgiBold: script UnGungseo: cursive, brush-stroke
-containersize 14727572
-containerchecksum 5b405d4d77d15392ce5c90e9b50b6ab68309fdff67313af2749ff0865f46ba02a40e4850a690f69834f0b6a7c7e7ac33d3d422a9b241586433718f82de31bc30
-doccontainersize 10588
-doccontainerchecksum aabc766497c311a943f0a269d5822a44ab6baab6c8a82fddecf0b53010d794173d417f46fa6c073d2db453540a76866dd2265daea5879ec8c0ffdcd936d29a41
+containersize 14727532
+containerchecksum 5476421a802ec3daa8fcb8354924ffb090aa9ea337db315c813637fafa445ef82601edc61cb7aa424bd7e2deee7607902ed33f0cfe70c214901d4c52dfcff6c5
+doccontainersize 10592
+doccontainerchecksum 8f51172be1093ff9da6ebb7071f5fea435e2bdace5619faa24ebdef52b3e34197d91b8f9d302844d4e1377a2a4712247743172afcd4b01367e9f166bd76112fd
docfiles size=10
RELOC/doc/fonts/unfonts-core/COPYING
RELOC/doc/fonts/unfonts-core/README.md details="Readme"
@@ -311436,14 +311514,13 @@ runfiles size=8361
RELOC/fonts/truetype/public/unfonts-core/UnPilgi.ttf
RELOC/fonts/truetype/public/unfonts-core/UnPilgiBold.ttf
catalogue-also unfonts-extra
-catalogue-contact-home http://kldp.net/unfonts/
catalogue-ctan /fonts/unfonts-core
catalogue-license gpl2
catalogue-topics font-ttf korean
name unfonts-extra
category Package
-revision 44465
+revision 56291
shortdesc TrueType version of Un-fonts
relocated 1
longdesc The Un-fonts come from the HLaTeX as type1 fonts in 1998 by
@@ -311454,10 +311531,10 @@ longdesc (PfaEdit) by Won-kyu Park in 2003. Extra families (10 fonts):
longdesc UnPen, UnPenheulim: script UnTaza: typewriter style UnBom:
longdesc decorative UnShinmun UnYetgul: old Korean printing style
longdesc UnJamoSora, UnJamoNovel, UnJamoDotum, UnJamoBatang
-containersize 6565844
-containerchecksum ba57b43a7df5d1f9565a08e0a0588d9a3ac9702041763ee663dc8c906279f32c363a88e1c1be098e0d4e9b26550121e686cbb6fc6b0256bb91535a4a1b12a083
+containersize 6565804
+containerchecksum 9cf9a73ba3c2190da7999c3b770e92d8afb43c640d651173c126e930155e9f87f371392accd4eadae8922ee846a5e02c0eeab845561dea943b34b185164bba3c
doccontainersize 10160
-doccontainerchecksum 5fdc1ebd1d939ba99d4bb11c2d89128a97adaa4a0696abbc7517ab55ce39b87e7e7801e7a30b93c1f95e92bacd7d862144191f0ef542561816f6d1b84e9a7131
+doccontainerchecksum 6173d49bb64c9b162763ff08af445e518fa650fcc13e02f5c72454d335285d9c82347cf79f945fae94429f3a9d15f9c9b58ff1d175c8f59ea7b75766cd279303
docfiles size=9
RELOC/doc/fonts/unfonts-extra/COPYING
RELOC/doc/fonts/unfonts-extra/README.md details="Readme"
@@ -311476,7 +311553,6 @@ runfiles size=4977
RELOC/fonts/truetype/public/unfonts-extra/UnVada.ttf
RELOC/fonts/truetype/public/unfonts-extra/UnYetgul.ttf
catalogue-also unfonts-core
-catalogue-contact-home http://kldp.net/unfonts/
catalogue-ctan /fonts/unfonts-extra
catalogue-license gpl2
catalogue-topics font-ttf korean
@@ -312925,7 +313001,7 @@ catalogue-version 1.3
name uptex
category Package
-revision 55920
+revision 56291
shortdesc Unicode version of pTeX
longdesc upTeX is an extension of pTeX, using UTF-8 input and producing
longdesc UTF-8 output. It was originally designed to improve support for
@@ -312950,9 +313026,9 @@ execute addKanjiMap uptex-ko-@koEmbed@.map
execute addKanjiMap uptex-sc-@scEmbed@.map
execute addKanjiMap uptex-tc-@tcEmbed@.map
containersize 916
-containerchecksum bc899da0997bd727497b56d8cbc22bd77fe7b4f3149806a1ccd30af93cd4f5050eb1cc6a2011ef8a27969d879a0198d8e858c425142dd204f971cac299cea358
+containerchecksum 194cb48f6e42c1f4785cebd40fc796566e1e03bd3149b1f19d51fa4dc38fb22ea048ea3b0f63e98b4b03ceffacc912cc837446234fc0b75d543991bda97bd09f
doccontainersize 298968
-doccontainerchecksum 03c76e600ef7f56ce217d4f7e875a7edb5ee441521b5cc4b675bcbaab8d0472043b4b6dce6c3a3d9ab86698a862058ef5f4bf8af2a016c082e0efddbdc2439a6
+doccontainerchecksum 7da25d9527ea65993d9c530d6149f1385b41b8573a106f7812ad4b4d29caf7191d6248b0f104e6f41da86a83a25c59a0f7dbdc1a8f1a9e40e0ae234ca794943d
docfiles size=156
texmf-dist/doc/man/man1/euptex.1
texmf-dist/doc/man/man1/euptex.man1.pdf
@@ -313009,10 +313085,10 @@ docfiles size=156
texmf-dist/doc/upmendex/samples/russian.idx
texmf-dist/doc/upmendex/upmendex.ja.txt
catalogue-alias euptex
-catalogue-contact-bugs http://lists.tug.org/tex-k
+catalogue-contact-bugs https://lists.tug.org/tex-k
catalogue-contact-home http://www.t-lab.opal.ne.jp/tex/uptex_en.html
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/uptexdir
-catalogue-contact-support http://lists.tug.org/tex-k
+catalogue-contact-support https://lists.tug.org/tex-k
catalogue-license other-free
catalogue-topics engine japanese chinese korean multilingual
@@ -323531,7 +323607,7 @@ catalogue-version 2.0a
name xetex
category TLCore
-revision 54276
+revision 56291
shortdesc An extended variant of TeX for use with Unicode sources
longdesc XeTeX is a TeX typesetting engine using Unicode and supporting
longdesc modern font technologies such as OpenType, TrueType or Apple
@@ -323564,9 +323640,9 @@ execute AddFormat name=xelatex engine=xetex patterns=language.dat options="-et
execute AddFormat name=xetex engine=xetex patterns=language.def options="-etex xetex.ini" fmttriggers=cm,hyphen-base,tex-ini-files,unicode-data,etex,plain
postaction script file=tlpkg/tlpostcode/xetex.pl
containersize 6932
-containerchecksum e1c2920dd2cfa0605582c778ba184cabb7d462a810086398ba9ed6ec5afd0e14b009f37950a2c906c0a2cd2112925bb3e051c01221f90ea36440e20eb32acfbf
-doccontainersize 617016
-doccontainerchecksum 6f18897e5759ffe30b6ae4439a0ce3c9d5748a9b0bda07f904897cc3310d9d601631d031139b58ef3b4f078f2cec298be3583df23b28656f6c2e80f2370159a6
+containerchecksum f60eb252fb149b8711ee773d1d637a59670302c9fea45ff259670fb4f86bb9bb38303f4f30db36b09ecc023e0734bcc09a746c4b7e21bee3f7b3b914afae2010
+doccontainersize 617020
+doccontainerchecksum 2e283a3042733ae7d900814aafa2b9e1ca3f580042691108acb03eac7ce7d094fc87aa5e82432b1091f472293778885aae48a8f10bd9fb51a54f8c7e60593df4
docfiles size=170
texmf-dist/doc/man/man1/xelatex.1
texmf-dist/doc/man/man1/xelatex.man1.pdf
@@ -323583,10 +323659,10 @@ runfiles size=6
texmf-dist/fonts/misc/xetex/fontmapping/base/tex-text.tec
tlpkg/tlpostcode/xetex.pl
catalogue-also luatex
-catalogue-contact-announce http://lists.tug.org/xetex-announce
+catalogue-contact-announce https://lists.tug.org/xetex-announce
catalogue-contact-home http://tug.org/xetex
catalogue-contact-repository https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/xetexdir
-catalogue-contact-support http://lists.tug.org/xetex
+catalogue-contact-support https://lists.tug.org/xetex
catalogue-license other-free
catalogue-topics engine
@@ -323967,22 +324043,22 @@ catalogue-version 2.23
name xetexref
category Package
-revision 53068
+revision 56291
shortdesc Reference documentation of XeTeX
relocated 1
longdesc The package comprises reference documentation for XeTeX
longdesc detailing its extended features.
-containersize 472
-containerchecksum 926ebf995dea04300dee8cc061361f7eac8efe08ffd3ada87be5b682e2c581d3c2965328ec7c93deab8d6bb9311a0cb27ff1a14a7332c407be713657a136959a
-doccontainersize 157320
-doccontainerchecksum ad0700f1e1053abd8264f20ad04b7ade28cca6f5757e158f8ed031f493a966f5b62a197a34ba39ece7c3cb68d469334521a6325c2b4276dbfbc5c2519e13b33e
+containersize 444
+containerchecksum 5d2610deed12422bdcd7e177c339d3aa701887ff12bab214ce0b67f87abd70c569a0aab85f59f877399d440c75c712a4ec8ecf12f6059152d0d0c70f40f2b1f7
+doccontainersize 157316
+doccontainerchecksum 24d62e618217ec5454bd23662711e10637a7f67cc11880288bfcf301ab89ab22d87a6d65af8c37c99d924a4dc77b95308ef38eb8ad6bb81cf2900cbd3ebeeef8
docfiles size=48
RELOC/doc/xetex/xetexref/README.txt details="Readme"
RELOC/doc/xetex/xetexref/xetex-reference.pdf details="The document itself"
RELOC/doc/xetex/xetexref/xetex-reference.tex
catalogue-contact-bugs https://github.com/wspr/xetexref/issues
catalogue-contact-repository https://github.com/wspr/xetexref/
-catalogue-contact-support http://lists.tug.org/xetex
+catalogue-contact-support https://lists.tug.org/xetex
catalogue-ctan /info/xetexref
catalogue-license lppl1.3c
catalogue-topics documentation xetex
@@ -327364,7 +327440,7 @@ catalogue-topics book-pub class
name ydoc
category Package
-revision 55265
+revision 56291
shortdesc Macros for documentation of LaTeX classes and packages
relocated 1
longdesc The package provides macros and environments to document LaTeX
@@ -327375,15 +327451,15 @@ longdesc xcolor, hyperref packages, etc.) This is an alpha release, and
longdesc should probably not (yet) be used with other packages, since
longdesc the implementation might change. Nevertheless, the author uses
longdesc it to document his own packages.
-containersize 9136
-containerchecksum 55736f8e36b50a1309c7d2cfc4c09c69feb6c2c0d241b495ac510210ac81eef6f969a8b7b4c26dc199de1e44bdf5c516b387a57952be7f086dbbd9dcd2bd0dd0
+containersize 9196
+containerchecksum 59c30887f6f7e5efb1aadd24b63fe15489f99c7af2f448aeb4e8cc10e846831df2061aa470e8bd104f7ae86dd438bb65a91e7666c68a5ecc18b607adf6962c97
doccontainersize 321388
-doccontainerchecksum 2116142a42799a6198a61a2b7b96e5dc25b26ee8345731f4491e02ff79e6bacc0a4c06c68be2b38c3373202b2aaf0e1fa4372431e529abb88b5fdd9a2de22dd0
+doccontainerchecksum 74d2d0ea05849b280aba78ed0f3ac409cb379938166e791c2fbc77f3bb792e4df3bba287912b6bd35ad9e99592f8b36ff2113ab8c667ad58374dc20298af9121
docfiles size=81
RELOC/doc/latex/ydoc/README details="Readme"
RELOC/doc/latex/ydoc/ydoc.pdf details="Package documentation"
srccontainersize 17476
-srccontainerchecksum 84f8c5676348295e8752beb9c7467ab85fcb3f91dafb8dea23d583dbf0b76110079ec660cf36dd45a57a868033dac35f3de4d158b1e8126f25ab3f1d40d01757
+srccontainerchecksum 3b09eb1036668097dc185595a8ed703b99f83cab068ab8221385d8ca3dfa73b476478f337adb1ed273554c6c2011f0f03ae1b4138a5d1f62268cbf892e70051c
srcfiles size=20
RELOC/source/latex/ydoc/ydoc.dtx
runfiles size=14
@@ -327397,6 +327473,9 @@ runfiles size=14
RELOC/tex/latex/ydoc/ydoc.cls
RELOC/tex/latex/ydoc/ydoc.sty
catalogue-also ltxdoc doc xdoc gmdoc codedoc nicetext showexpl
+catalogue-contact-bugs https://sourceforge.net/p/ydoc/tickets/
+catalogue-contact-home https://sourceforge.net/p/ydoc/
+catalogue-contact-repository https://sourceforge.net/p/ydoc/code/ci/default/tree/
catalogue-ctan /macros/latex/contrib/ydoc
catalogue-license lppl1.3
catalogue-topics doc-supp class macro-demo
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index f1a6fbc4c0..ae95ed4348 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-e1f7ef71199e67e5ae2bac6fe7bb33fa texlive.tlpdb
+d5ecc34ce6997dacc49374d34b2667c2 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 49348732bd..9a6f25fe6b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-9831b4e21f1743b9171ace8bc686f86671c20b7876cab3da73abd884f51c67602d56e5021789f161ca90885b9c9be11431cb82166c90eb6090ddaf3f7f0accd4 texlive.tlpdb
+0be913716465ae568f22ab093b75d209291c3787503cf6915ad2d317ee2cca40e15ee2ffdbecbdf50e5af7ee2eba889e4e31a3c8eecd0033ce1448b9c646bb3e texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 6c518c10b5..29d12ae27c 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-----
-iQEcBAEBCgAGBQJfVXdDAAoJEEzhh34ZQ4xweQsH/iRYIdm1aZIDT4S25gno29r3
-cMIfcRFBlhKwOmZ89n7bYxPIdY646wvjJV6taEEi6UWwQgfS1YfOhCBBx/c2ZfMr
-IbpUojg/TvqsliBWoh49Nug6mCOzSoY7suK8mP2kCsLRwN42oHX+6xN9rlqexTdi
-ikBG13uzp68E1UC35FXaBbi1gtmR1epFjIggVJzEh3VsHTPlXNLh/9D+pwRHkAcT
-DPDnAdfRrenAIuA9usXDvKiYrdtYt5D3hTdjQtlbB18Aq7mR+pJrqa6WFG6+9djx
-yIihr7Wcamm6DNpWSIKG1BttLzkRjQU5CPrurkSugL0mxBsksjDV6SEmvO94cnc=
-=GGFR
+iQEcBAEBCgAGBQJfVslHAAoJEEzhh34ZQ4xwPY8H/05ntmXIAOB8gNb4UfPODSja
+DuDMmSDo3UEBQlfsToMTEW+8ILseltGLZMKYF2Xq74/rDSdSMcbnW3N7JeZk+hbw
+H7He4YjqZv65+RaHl2QWsdQLoZRw5PPRJ/NnEOWKiC3kqsfuLvNOio1OZMocN1Sm
+sxUQFyVuTpsQjoANV9L+Ctysd9D3K4yGaROyrhMmPK2qYZkUtVoNWq0xdqB4tzkj
+O8pkGO5KCNwzfU82li2eicdRRvfv7KvDQGCY818FGLJ5ZeRbaTbBQrHfbiwe48vk
+prsx57Rye2TUrn/NjslR29BrlmgeUg6ZfAVhqDAH9l4iFGllUWpGMJmNvH9dxko=
+=29Ww
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 1737cec000..20dc8502d3 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index cfc9667745..2c989c1501 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 0eb33e97bd..1165c18d8e 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1599423542
+date=1599509809
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=e6276e4adc5908f0b32652831deb8074
+lstdigest=4c437733aeb508924721c5bece202393
numpkg=3974
relstate=next
-version=7554
+version=7555
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: hH0i5kFGKUgtdCzFn8xhgQi/Pzh7i35UkufcPo0TTKNRapd8u3aV+OfmL4LGKC53PIEdvcenHirOri0RJXVjzg5W4VP0U26mT7EcZ+CeLGMg6h1iykVRJPtyG4dhhWoKX1tzFmGD/SJQI86em4BxawsVf/eMw7L7gdyMmRWNl082HHAmTe/XBiskFRIhdv2R/TBZeRUMcO9i/YqZ7aIrdRSq2h/G1GXYxq6W8c2mtrr8T0P9nw7LBQ2Tvk+5ovDADqMgYh1/+ENd2kw8hW7vnvpWt4yO1NkXZdtM01Av2ef6H6m4tSXPfQcIImbvKzOOlj3+MgzHMP7hBs0GShzXaw==
+;;;; signature/miktex: vvZMRni7DuNNJbnXWDO3zHxR7+cB3iqctFCZa0UfRiTa2u1NMjVs/e6okzLqFGZkS2Jl2ZG5SSBfnkgOat8zMYFaH5TK5qdjEDaA8/kBLrVepy1AcXz3OFpLL6LjnHhEmw2czpr7V0XuU27pn1AMZV4LOZjwaXUb3T4HI/ybDGcp7n7PBuHXe5pduqbNbuChqXOLxUcevIvSI6Omc9Om8ZljtsZAMrLAbGENaqhksH0e5fY7lxqKJjQeQv+vue3BbJu+nbXvRPFfjhUQCzupYBZEm5q/qUQqauJwLCXAuArPqmN8SmgbTPBoDBLPuiKB8waefw+JxsUVHEkmRf9cTQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index ffd51f1078..bb5ca00dad 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1599423078
+date=1599509526
lastupd=babel biblatex-ieee caption changelog docutils edichokey fduthesis graphics-def hep-paper hypdestopt kerkis l3backend l3experimental l3kernel latex-base-dev lua-physical lualibs luaotfload lwarp mcf2graph
-lstdigest=a09ef6031585a753269caaa65dc91337
+lstdigest=33ebcddf2b13c1309bce4e6cc4ef57e5
numpkg=3974
relstate=stable
-version=7554
+version=7555
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: g2Y48ml31zbZB0Z3ZLPxmISwAIWa3+dlEj1uOyeESWBqtCfFWKCkYBFPm+N9bUaMkzWRah4UVfcrLLD/J4xgWRgL0ux4HyJMjh4fJq9ia/Xfy4yHV/g9YtwpKR5jo9GV2JQF1mRMLdEQVByYoA0ZR7aVRY3isixzCe8U+hEEJFJeDTOdI2U+rKQFk/E5v+yvST4+Rgprs4xhW0PmVtDept6IKcLawX3gB7S1lJO/aPFpsmuoyjqq+ANnw1Y7/yyYYnK5wAC+KAr0lZUYMa1r2MlvhvpA8bA1FsjQjVQs2a95UOxZefxwfozZmRVCXx3FLwuv5e0SXhrXasmMwprrEw==
+;;;; signature/miktex: l20xKlOAPd9YanwY3ZxTFygkuclRK/7hlcbkvYMeMDk9JWaqCHPoquBjZMqGRmV++o/5PzY/N9p5LX9yBlUBt30hZnAVzz5YzEYDDGYnzP0ei/7A6vxBAY1fEXCmRoheG0halHN+U4lLciuA3QL7Hu08z1w4Z6nhGgkS/9D/a7QbpVGAWwNy3CEguzN/ljxsMVJWQgPLSDjfrmjvAmbY3NKNIRPGe1VdXn2pw/J8t+TzzryhiAz2AYtgYwPudomefWFUl49H/IhoM/cZUZ19r9E6pRnIVy9tNoEZ0DtGKSghsoI8f1fd/UQimtpS4YH3evcxoWeb4L4jausUSkBsMg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 6e0870877c..7b24ec2cf0 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,21 @@
W32TeX (x86 & x64) ChangeLog
+[2020/09/07]
+(01) cjkzr.tar.xz
+ Update bxjscls.
+(02) dvipdfm-w32.tar.xz
+ Update dvipdfmx.dll.
+(03) ptex-ng-w32.tar.xz
+ Update libdpx.
+(04) xetex-w32.tar.xz
+ Update dvipdfmx.dll.
+(05) win64/dvipdfm-w64.tar.xz
+ Update dvipdfmx.dll.
+(06) win64/ptex-ng-w64.tar.xz
+ Update libdpx.
+(07) win64/xetex-w64.tar.x
+ Update dvipdfmx.dll.
+
[2020/09/06]
(01) context.tar.xz
ConTeXt version: 2020.09.05 21:12.
diff --git a/timestamp b/timestamp
index 153cc14055..f40a228469 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:
-2020-09-07-02-02
+2020-09-08-02-02