summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-05-25 03:01:13 +0000
committerNorbert Preining <norbert@preining.info>2022-05-25 03:01:13 +0000
commitf01a37f8311f33e32441d25bdadcda9dcdbd165d (patch)
treeefb861dfafff09d4bef8024c85a11f8c8deaba76
parent0c7d079315627312627c83bc9ce6f5e4f1b436f6 (diff)
CTAN sync 202205250301
-rw-r--r--FILES.byname739
-rw-r--r--FILES.byname.gzbin2435572 -> 2435918 bytes
-rw-r--r--FILES.last07days933
-rw-r--r--fonts/roboto/README2
-rw-r--r--fonts/roboto/doc/roboto-samples.pdfbin284251 -> 284251 bytes
-rw-r--r--fonts/roboto/doc/roboto-samples.tex2
-rw-r--r--fonts/symbats3/MANIFEST10
-rw-r--r--fonts/symbats3/README.md163
-rw-r--r--fonts/symbats3/VERSION1
-rw-r--r--fonts/symbats3/codepoint.tex1550
-rw-r--r--fonts/symbats3/latexname.tex1550
-rw-r--r--fonts/symbats3/symbats3.pdfbin0 -> 172989 bytes
-rw-r--r--fonts/symbats3/symbats3.sty716
-rw-r--r--fonts/symbats3/symbats3.tex319
-rw-r--r--fonts/symbats3/unicodename.tex1550
-rw-r--r--info/biblio/texbook3.bib4
-rw-r--r--macros/latex/contrib/stex/README.md52
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-basics.tex35
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-document-structure.tex156
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-features.tex277
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-hwexam.tex85
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-inheritance.tex132
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-mathhub.tex166
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-metatheory.tex31
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-modules.tex74
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-problem.tex152
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-proofs.tex215
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-references.tex9
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-slides.tex213
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-statements.tex146
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-symbols.tex588
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-terms.tex178
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex62
-rw-r--r--macros/latex/contrib/stex/doc/stex-abstract.tex24
-rw-r--r--macros/latex/contrib/stex/doc/stex-doc.pdfbin1467004 -> 1645539 bytes
-rw-r--r--macros/latex/contrib/stex/doc/stex-doc.tex13
-rw-r--r--macros/latex/contrib/stex/doc/stex-docheader.tex520
-rw-r--r--macros/latex/contrib/stex/doc/stex-manual.pdfbin670569 -> 983933 bytes
-rw-r--r--macros/latex/contrib/stex/doc/stex-manual.tex972
-rw-r--r--macros/latex/contrib/stex/doc/stex-tutorial.tex354
-rw-r--r--macros/latex/contrib/stex/source/extensions/document-structure.dtx589
-rw-r--r--macros/latex/contrib/stex/source/extensions/hwexam.dtx188
-rw-r--r--macros/latex/contrib/stex/source/extensions/notesslides.dtx379
-rw-r--r--macros/latex/contrib/stex/source/extensions/problem.dtx429
-rw-r--r--macros/latex/contrib/stex/source/extensions/stex-extensions.ins2
-rw-r--r--macros/latex/contrib/stex/source/extensions/tikzinput.dtx83
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-basics.dtx416
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-features.dtx1040
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-inheritance.dtx212
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-mathhub.dtx110
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-metatheory.dtx70
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-modules.dtx167
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-others.dtx27
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-proofs.dtx403
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-references.dtx11
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-statements.dtx225
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-symbols.dtx745
-rw-r--r--macros/latex/contrib/stex/source/stex/stex-terms.dtx691
-rw-r--r--macros/latex/contrib/stex/source/stex/stex.ins2
-rw-r--r--macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty9
-rw-r--r--macros/latex/contrib/stex/tex/etc/lststex.sty14
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-backend-latexml.cfg56
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-backend-pdflatex.cfg10
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg59
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-logo.sty7
-rw-r--r--macros/latex/contrib/stex/tex/etc/stexthm.sty45
-rw-r--r--macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx1617
-rw-r--r--macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdfbin2323852 -> 2337625 bytes
-rw-r--r--macros/xetex/latex/bidi/README4
-rw-r--r--macros/xetex/latex/bidi/bidi-doc-intro.ltx2
-rw-r--r--macros/xetex/latex/bidi/bidi-doc-title.ltx4
-rw-r--r--macros/xetex/latex/bidi/bidi-doc.ltx2
-rw-r--r--macros/xetex/latex/bidi/bidi-doc.pdfbin178054 -> 177945 bytes
-rw-r--r--macros/xetex/latex/bidi/bidi.dtx570
-rw-r--r--macros/xetex/latex/bidi/bidi.pdfbin3139075 -> 3203506 bytes
-rw-r--r--macros/xetex/latex/xepersian/README4
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc-intro.ltx2
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc-title.ltx4
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc.ltx2
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc.pdfbin243585 -> 243579 bytes
-rw-r--r--macros/xetex/latex/xepersian/xepersian.dtx55
-rw-r--r--macros/xetex/latex/xepersian/xepersian.pdfbin772104 -> 774115 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl3
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb157
-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.xzbin2380364 -> 2382596 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--timestamp2
91 files changed, 14867 insertions, 5577 deletions
diff --git a/FILES.byname b/FILES.byname
index f8397f6de5..9f2e5861b8 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5228,7 +5228,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2022/05/23 | 206312 | FILES.last07days
+2022/05/24 | 127200 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -127110,8 +127110,8 @@
2019/12/11 | 892 | fonts/roboto/doc/DESCRIPTION.en_us.html
2022/05/08 | 11358 | fonts/roboto/doc/LICENSE.txt
2022/05/08 | 4396 | fonts/roboto/doc/OFL.txt
-2022/05/08 | 284251 | fonts/roboto/doc/roboto-samples.pdf
-2022/05/08 | 3372 | fonts/roboto/doc/roboto-samples.tex
+2022/05/24 | 284251 | fonts/roboto/doc/roboto-samples.pdf
+2022/05/24 | 3372 | fonts/roboto/doc/roboto-samples.tex
2019/12/11 | 321297 | fonts/roboto/doc/RobotoSpecimenBook.pdf
2019/12/11 | 3325 | fonts/roboto/enc/rbto_2cs4gp.enc
2022/05/08 | 3118 | fonts/roboto/enc/rbto_2uubtm.enc
@@ -127221,7 +127221,7 @@
2019/12/11 | 12296 | fonts/roboto/latex/OT1Roboto-TOsF.fd
2019/12/11 | 4737 | fonts/roboto/latex/roboto-mono.sty
2022/05/08 | 13247 | fonts/roboto/latex/roboto-serif.sty
-2022/05/08 | 14967 | fonts/roboto/latex/roboto.sty
+2022/05/24 | 14967 | fonts/roboto/latex/roboto.sty
2019/12/11 | 11681 | fonts/roboto/latex/T1Roboto-LF.fd
2019/12/11 | 7548 | fonts/roboto/latex/T1RobotoMono-TLF.fd
2019/12/11 | 11912 | fonts/roboto/latex/T1Roboto-OsF.fd
@@ -127312,7 +127312,7 @@
2019/12/11 | 174100 | fonts/roboto/opentype/RobotoSlab-Thin.otf
2019/12/11 | 217592 | fonts/roboto/opentype/Roboto-ThinItalic.otf
2019/12/11 | 201232 | fonts/roboto/opentype/Roboto-Thin.otf
-2022/05/08 | 4506 | fonts/roboto/README
+2022/05/24 | 4506 | fonts/roboto/README
2019/12/11 | 1728 | fonts/roboto/tfm/Roboto-BlackItalic-lf-lgr--base.tfm
2019/12/11 | 5436 | fonts/roboto/tfm/Roboto-BlackItalic-lf-lgr.tfm
2019/12/11 | 2020 | fonts/roboto/tfm/Roboto-BlackItalic-lf-ly1--base.tfm
@@ -131907,7 +131907,7 @@
2019/12/11 | 1756 | fonts/roboto/vf/Roboto-Thin-tosf-sc-t1.vf
2019/12/11 | 1752 | fonts/roboto/vf/Roboto-Thin-tosf-t1.vf
2019/12/11 | 584 | fonts/roboto/vf/Roboto-Thin-tosf-ts1.vf
-2022/05/09 | 41137541 | fonts/roboto.zip
+2022/05/24 | 41137542 | fonts/roboto.zip
2020/11/09 | 182730 | fonts/rojud/doc/rojud.pdf
2020/11/09 | 9636 | fonts/rojud/doc/rojud.tex
2020/11/05 | 936 | fonts/rojud/doc/rows.tex
@@ -141642,6 +141642,16 @@
2016/08/05 | 5192 | fonts/svrsymbols/svrsymbols.tex
2016/08/05 | 1628 | fonts/svrsymbols/SVRsymbols.tfm
2019/02/12 | 130967 | fonts/svrsymbols.zip
+2022/05/24 | 34999 | fonts/symbats3/codepoint.tex
+2022/05/24 | 27849 | fonts/symbats3/latexname.tex
+2022/05/24 | 111 | fonts/symbats3/MANIFEST
+2022/05/24 | 5345 | fonts/symbats3/README.md
+2022/05/24 | 172989 | fonts/symbats3/symbats3.pdf
+2022/05/24 | 52084 | fonts/symbats3/symbats3.sty
+2022/05/24 | 12511 | fonts/symbats3/symbats3.tex
+2022/05/24 | 27849 | fonts/symbats3/unicodename.tex
+2022/05/24 | 41 | fonts/symbats3/VERSION
+2022/05/24 | 203823 | fonts/symbats3.zip
1994/06/17 | 7328 | fonts/syriac/estrangelo.mf
2002/11/03 | 2188 | fonts/t1-fraktur/CHANGELOG
2002/11/03 | 277 | fonts/t1-fraktur/fkl2bl10.mf
@@ -188682,7 +188692,7 @@
2015/01/31 | 41894 | install/fonts/ptmsc.tds.zip
2020/08/01 | 1359149 | install/fonts/quattrocento.tds.zip
2016/12/03 | 4908840 | install/fonts/raleway.tds.zip
-2022/05/08 | 41513891 | install/fonts/roboto.tds.zip
+2022/05/24 | 41513892 | install/fonts/roboto.tds.zip
2009/10/07 | 799722 | install/fonts/semaphor.tds.zip
2018/01/08 | 232001 | install/fonts/skak.tds.zip
2010/08/31 | 181703 | install/fonts/softmakerfreefont/alteschwabacher.tds.zip
@@ -189136,11 +189146,11 @@
2020/01/31 | 1873940 | install/macros/unicodetex/latex/unicode-math.tds.zip
2016/05/14 | 185871 | install/macros/xetex/generic/zhspacing.tds.zip
2015/09/04 | 718623 | install/macros/xetex/latex/arabxetex.tds.zip
-2022/05/22 | 4324654 | install/macros/xetex/latex/bidi.tds.zip
+2022/05/24 | 4398390 | install/macros/xetex/latex/bidi.tds.zip
2015/02/17 | 92757 | install/macros/xetex/latex/interchar.tds.zip
2021/08/19 | 464024 | install/macros/xetex/latex/mynsfc.tds.zip
2021/12/12 | 1924110 | install/macros/xetex/latex/xecjk.tds.zip
-2022/05/22 | 1288794 | install/macros/xetex/latex/xepersian.tds.zip
+2022/05/24 | 1294051 | install/macros/xetex/latex/xepersian.tds.zip
2008/06/20 | 3954 | install/macros/xetex/plain/xetexfontinfo.tds.zip
2013/01/04 | 36361 | install/support/adhocfilelist.tds.zip
2021/11/27 | 2294905 | install/support/albatross.tds.zip
@@ -229598,58 +229608,63 @@
2015/03/31 | 7331 | macros/latex/contrib/stellenbosch/tex/ustitle.sty
2015/04/01 | 4724271 | macros/latex/contrib/stellenbosch.zip
2022/02/25 | 464 | macros/latex/contrib/stex/doc/Makefile
-2022/02/26 | 635 | macros/latex/contrib/stex/doc/packages/stex-basics.tex
-2022/02/26 | 55 | macros/latex/contrib/stex/doc/packages/stex-document-structure.tex
-2022/02/26 | 2182 | macros/latex/contrib/stex/doc/packages/stex-features.tex
-2022/02/26 | 43 | macros/latex/contrib/stex/doc/packages/stex-hwexam.tex
-2022/02/26 | 48 | macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
-2022/02/26 | 4345 | macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
-2022/02/26 | 47 | macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
-2022/02/26 | 44 | macros/latex/contrib/stex/doc/packages/stex-modules.tex
-2022/02/26 | 44 | macros/latex/contrib/stex/doc/packages/stex-problem.tex
-2022/02/26 | 44 | macros/latex/contrib/stex/doc/packages/stex-proofs.tex
-2022/02/26 | 47 | macros/latex/contrib/stex/doc/packages/stex-references.tex
-2022/02/26 | 48 | macros/latex/contrib/stex/doc/packages/stex-slides.tex
-2022/02/26 | 47 | macros/latex/contrib/stex/doc/packages/stex-statements.tex
-2022/02/26 | 44 | macros/latex/contrib/stex/doc/packages/stex-symbols.tex
-2022/02/26 | 42 | macros/latex/contrib/stex/doc/packages/stex-terms.tex
-2022/02/26 | 46 | macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex
-2022/02/26 | 891 | macros/latex/contrib/stex/doc/stex-abstract.tex
-2022/02/26 | 9616 | macros/latex/contrib/stex/doc/stex-docheader.tex
-2022/02/26 | 1467004 | macros/latex/contrib/stex/doc/stex-doc.pdf
-2022/02/26 | 5617 | macros/latex/contrib/stex/doc/stex-doc.tex
-2022/02/26 | 670569 | macros/latex/contrib/stex/doc/stex-manual.pdf
-2022/02/26 | 32238 | macros/latex/contrib/stex/doc/stex-manual.tex
+2022/05/23 | 1853 | macros/latex/contrib/stex/doc/packages/stex-basics.tex
+2022/04/25 | 7744 | macros/latex/contrib/stex/doc/packages/stex-document-structure.tex
+2022/04/24 | 8491 | macros/latex/contrib/stex/doc/packages/stex-features.tex
+2022/04/25 | 3929 | macros/latex/contrib/stex/doc/packages/stex-hwexam.tex
+2022/05/23 | 6194 | macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
+2022/05/24 | 9870 | macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
+2022/05/24 | 1546 | macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
+2022/04/24 | 3238 | macros/latex/contrib/stex/doc/packages/stex-modules.tex
+2022/04/25 | 6847 | macros/latex/contrib/stex/doc/packages/stex-problem.tex
+2022/04/25 | 9700 | macros/latex/contrib/stex/doc/packages/stex-proofs.tex
+2022/04/24 | 217 | macros/latex/contrib/stex/doc/packages/stex-references.tex
+2022/04/25 | 9014 | macros/latex/contrib/stex/doc/packages/stex-slides.tex
+2022/04/24 | 6188 | macros/latex/contrib/stex/doc/packages/stex-statements.tex
+2022/05/24 | 25381 | macros/latex/contrib/stex/doc/packages/stex-symbols.tex
+2022/04/24 | 6861 | macros/latex/contrib/stex/doc/packages/stex-terms.tex
+2022/04/25 | 2868 | macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex
+2022/04/22 | 1285 | macros/latex/contrib/stex/doc/stex-abstract.tex
+2022/05/14 | 12862 | macros/latex/contrib/stex/doc/stex-docheader.tex
+2022/05/24 | 1645539 | macros/latex/contrib/stex/doc/stex-doc.pdf
+2022/04/24 | 5793 | macros/latex/contrib/stex/doc/stex-doc.tex
+2022/05/24 | 983933 | macros/latex/contrib/stex/doc/stex-manual.pdf
+2022/05/23 | 24071 | macros/latex/contrib/stex/doc/stex-manual.tex
+2022/05/23 | 16284 | macros/latex/contrib/stex/doc/stex-tutorial.tex
2022/02/24 | 156 | macros/latex/contrib/stex/Makefile
-2022/02/26 | 2211 | macros/latex/contrib/stex/README.md
-2022/02/26 | 39585 | macros/latex/contrib/stex/source/extensions/document-structure.dtx
-2022/02/26 | 23693 | macros/latex/contrib/stex/source/extensions/hwexam.dtx
+2022/04/22 | 4585 | macros/latex/contrib/stex/README.md
+2022/05/24 | 17427 | macros/latex/contrib/stex/source/extensions/document-structure.dtx
+2022/05/24 | 16867 | macros/latex/contrib/stex/source/extensions/hwexam.dtx
2022/02/26 | 368 | macros/latex/contrib/stex/source/extensions/Makefile
-2022/02/26 | 39137 | macros/latex/contrib/stex/source/extensions/notesslides.dtx
-2022/02/26 | 30141 | macros/latex/contrib/stex/source/extensions/problem.dtx
-2022/02/26 | 1234 | macros/latex/contrib/stex/source/extensions/stex-extensions.ins
-2022/02/26 | 3300 | macros/latex/contrib/stex/source/extensions/tikzinput.dtx
+2022/05/24 | 28293 | macros/latex/contrib/stex/source/extensions/notesslides.dtx
+2022/05/24 | 23747 | macros/latex/contrib/stex/source/extensions/problem.dtx
+2022/04/08 | 1116 | macros/latex/contrib/stex/source/extensions/stex-extensions.ins
+2022/05/24 | 5974 | macros/latex/contrib/stex/source/extensions/tikzinput.dtx
2022/02/24 | 162 | macros/latex/contrib/stex/source/Makefile
2022/02/25 | 362 | macros/latex/contrib/stex/source/stex/Makefile
-2022/02/26 | 14472 | macros/latex/contrib/stex/source/stex/stex-basics.dtx
-2022/02/26 | 25246 | macros/latex/contrib/stex/source/stex/stex-features.dtx
-2022/02/26 | 18430 | macros/latex/contrib/stex/source/stex/stex-inheritance.dtx
-2022/02/26 | 1215 | macros/latex/contrib/stex/source/stex/stex.ins
-2022/02/26 | 28255 | macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
-2022/02/26 | 5809 | macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
-2022/02/26 | 26200 | macros/latex/contrib/stex/source/stex/stex-modules.dtx
-2022/02/26 | 1614 | macros/latex/contrib/stex/source/stex/stex-others.dtx
-2022/02/26 | 37095 | macros/latex/contrib/stex/source/stex/stex-proofs.dtx
-2022/02/26 | 15695 | macros/latex/contrib/stex/source/stex/stex-references.dtx
-2022/02/26 | 25685 | macros/latex/contrib/stex/source/stex/stex-statements.dtx
-2022/02/26 | 38583 | macros/latex/contrib/stex/source/stex/stex-symbols.dtx
-2022/02/26 | 26875 | macros/latex/contrib/stex/source/stex/stex-terms.dtx
+2022/05/24 | 18286 | macros/latex/contrib/stex/source/stex/stex-basics.dtx
+2022/05/22 | 37060 | macros/latex/contrib/stex/source/stex/stex-features.dtx
+2022/05/14 | 23219 | macros/latex/contrib/stex/source/stex/stex-inheritance.dtx
+2022/04/05 | 1215 | macros/latex/contrib/stex/source/stex/stex.ins
+2022/05/21 | 30030 | macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
+2022/05/24 | 6586 | macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
+2022/05/21 | 28547 | macros/latex/contrib/stex/source/stex/stex-modules.dtx
+2022/05/13 | 2496 | macros/latex/contrib/stex/source/stex/stex-others.dtx
+2022/05/21 | 20352 | macros/latex/contrib/stex/source/stex/stex-proofs.dtx
+2022/04/24 | 15752 | macros/latex/contrib/stex/source/stex/stex-references.dtx
+2022/05/13 | 29239 | macros/latex/contrib/stex/source/stex/stex-statements.dtx
+2022/05/21 | 45447 | macros/latex/contrib/stex/source/stex/stex-symbols.dtx
+2022/05/13 | 31046 | macros/latex/contrib/stex/source/stex/stex-terms.dtx
2022/02/26 | 440 | macros/latex/contrib/stex/tex/etc/beamernotesthemesTeX.sty
-2022/02/26 | 1758 | macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
+2022/05/21 | 1847 | macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
2022/02/24 | 896 | macros/latex/contrib/stex/tex/etc/hwexam-default.header
-2022/02/25 | 2180 | macros/latex/contrib/stex/tex/etc/lststex.sty
+2022/03/03 | 1826 | macros/latex/contrib/stex/tex/etc/lststex.sty
2022/02/24 | 1825 | macros/latex/contrib/stex/tex/etc/rustex.sty
-2022/02/25 | 1629 | macros/latex/contrib/stex/tex/etc/stexthm.sty
+2022/04/05 | 1332 | macros/latex/contrib/stex/tex/etc/stex-backend-latexml.cfg
+2022/04/05 | 332 | macros/latex/contrib/stex/tex/etc/stex-backend-pdflatex.cfg
+2022/05/22 | 1493 | macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg
+2022/05/23 | 201 | macros/latex/contrib/stex/tex/etc/stex-logo.sty
+2022/03/07 | 2585 | macros/latex/contrib/stex/tex/etc/stexthm.sty
2022/02/26 | 5083 | macros/latex/contrib/stex/tex/img/stex-cc-by-sa.png
2022/02/26 | 1082 | macros/latex/contrib/stex/tex/img/stex-cc_somerights.png
2022/02/26 | 2117 | macros/latex/contrib/stex/tex/img/stex-dangerous-bend.png
@@ -229667,7 +229682,7 @@
2022/02/25 | 524 | macros/latex/contrib/stex/tex/ldf/sproof-french.ldf
2022/02/25 | 434 | macros/latex/contrib/stex/tex/ldf/sproof-ngerman.ldf
2022/02/25 | 489 | macros/latex/contrib/stex/tex/ldf/sproof-russian.ldf
-2022/02/26 | 2213413 | macros/latex/contrib/stex.zip
+2022/05/24 | 2722538 | macros/latex/contrib/stex.zip
2011/12/21 | 746 | macros/latex/contrib/storebox/README
2011/12/21 | 23894 | macros/latex/contrib/storebox/storebox.dtx
2011/12/21 | 246 | macros/latex/contrib/storebox/storebox.ins
@@ -245265,11 +245280,11 @@
2021/05/16 | 694569 | macros/unicodetex/latex/nwafuthesis/logo/nwafu-bar.pdf
2021/02/25 | 656165 | macros/unicodetex/latex/nwafuthesis/logo/nwafu-circle.pdf
2022/04/04 | 33865 | macros/unicodetex/latex/nwafuthesis/logo/workflow.pdf
-2022/04/04 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
-2022/04/04 | 262328 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
-2022/04/04 | 2323852 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+2022/05/24 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
+2022/05/24 | 269229 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
+2022/05/24 | 2337625 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
2022/04/04 | 1542 | macros/unicodetex/latex/nwafuthesis/README.md
-2022/04/04 | 3418139 | macros/unicodetex/latex/nwafuthesis.zip
+2022/05/24 | 3431479 | macros/unicodetex/latex/nwafuthesis.zip
2022/04/20 | 966307 | macros/unicodetex/latex/polyglossia/polyglossia.dtx
2022/04/20 | 351613 | macros/unicodetex/latex/polyglossia/polyglossia.pdf
2022/04/20 | 1942 | macros/unicodetex/latex/polyglossia/README.md
@@ -245674,20 +245689,20 @@
2022/02/13 | 29260 | macros/xetex/latex/bidi-atbegshi/test-RTL.pdf
2022/02/13 | 586 | macros/xetex/latex/bidi-atbegshi/test-RTL.tex
2022/02/13 | 192092 | macros/xetex/latex/bidi-atbegshi.zip
-2022/05/22 | 2936 | macros/xetex/latex/bidi/bidi-bibitem.pdf
-2022/05/22 | 1396 | macros/xetex/latex/bidi/bidi-doc-intro.ltx
-2022/05/22 | 23945 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
-2022/05/22 | 4547 | macros/xetex/latex/bidi/bidi-doc-latex-pkgs.ltx
-2022/05/22 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
-2022/05/22 | 4497 | macros/xetex/latex/bidi/bidi-doc-latex-programming.ltx
-2022/05/22 | 534 | macros/xetex/latex/bidi/bidi-doc.ltx
-2022/05/22 | 178054 | macros/xetex/latex/bidi/bidi-doc.pdf
-2022/05/22 | 5939 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
-2022/05/22 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
-2022/05/22 | 3596 | macros/xetex/latex/bidi/bidi-doc-preamble.ltx
-2022/05/22 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
-2022/05/22 | 909740 | macros/xetex/latex/bidi/bidi.dtx
-2022/05/22 | 3139075 | macros/xetex/latex/bidi/bidi.pdf
+2022/05/24 | 2936 | macros/xetex/latex/bidi/bidi-bibitem.pdf
+2022/05/24 | 1396 | macros/xetex/latex/bidi/bidi-doc-intro.ltx
+2022/05/24 | 23945 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
+2022/05/24 | 4547 | macros/xetex/latex/bidi/bidi-doc-latex-pkgs.ltx
+2022/05/24 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
+2022/05/24 | 4497 | macros/xetex/latex/bidi/bidi-doc-latex-programming.ltx
+2022/05/24 | 534 | macros/xetex/latex/bidi/bidi-doc.ltx
+2022/05/24 | 177945 | macros/xetex/latex/bidi/bidi-doc.pdf
+2022/05/24 | 5939 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
+2022/05/24 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
+2022/05/24 | 3596 | macros/xetex/latex/bidi/bidi-doc-preamble.ltx
+2022/05/24 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
+2022/05/24 | 928304 | macros/xetex/latex/bidi/bidi.dtx
+2022/05/24 | 3203506 | macros/xetex/latex/bidi/bidi.pdf
2014/07/16 | 22035 | macros/xetex/latex/bidicontour/bidicontour-doc.pdf
2014/07/15 | 1803 | macros/xetex/latex/bidicontour/bidicontour-doc.tex
2014/07/15 | 7167 | macros/xetex/latex/bidicontour/bidicontour-example-copies.pdf
@@ -245697,7 +245712,7 @@
2014/07/15 | 4087 | macros/xetex/latex/bidicontour/bidicontour.sty
2014/07/15 | 1071 | macros/xetex/latex/bidicontour/README
2014/07/16 | 38915 | macros/xetex/latex/bidicontour.zip
-2022/05/22 | 761651 | macros/xetex/latex/bidi/gull.jpg
+2022/05/24 | 761651 | macros/xetex/latex/bidi/gull.jpg
2015/07/07 | 24129 | macros/xetex/latex/bidihl/bidihl-doc.pdf
2015/07/06 | 1029 | macros/xetex/latex/bidihl/bidihl-doc.tex
2015/07/06 | 7245 | macros/xetex/latex/bidihl/bidihl.sty
@@ -245710,7 +245725,7 @@
2014/07/15 | 13019 | macros/xetex/latex/bidipagegrid/bidipagegrid.sty
2014/07/15 | 1068 | macros/xetex/latex/bidipagegrid/README
2014/07/16 | 29164 | macros/xetex/latex/bidipagegrid.zip
-2022/05/22 | 1693 | macros/xetex/latex/bidi/picture.jpg
+2022/05/24 | 1693 | macros/xetex/latex/bidi/picture.jpg
2014/09/25 | 25208 | macros/xetex/latex/bidipresentation/bidiprescolors.cfg
2014/09/25 | 159986 | macros/xetex/latex/bidipresentation/bidipresentation.cls
2014/09/25 | 2479 | macros/xetex/latex/bidipresentation/fig-1.pdf
@@ -245718,14 +245733,14 @@
2014/09/26 | 75608 | macros/xetex/latex/bidipresentation/sample.pdf
2014/09/25 | 12758 | macros/xetex/latex/bidipresentation/sample.tex
2014/09/26 | 107612 | macros/xetex/latex/bidipresentation.zip
-2022/05/22 | 1323 | macros/xetex/latex/bidi/README
+2022/05/24 | 1323 | macros/xetex/latex/bidi/README
2014/07/16 | 18289 | macros/xetex/latex/bidishadowtext/bidishadowtext-demo.pdf
2014/07/16 | 1203 | macros/xetex/latex/bidishadowtext/bidishadowtext-demo.tex
2014/07/16 | 101629 | macros/xetex/latex/bidishadowtext/bidishadowtext-doc.pdf
2014/07/16 | 1667 | macros/xetex/latex/bidishadowtext/bidishadowtext-doc.tex
2014/07/16 | 2436 | macros/xetex/latex/bidishadowtext/bidishadowtext.sty
2014/07/16 | 120948 | macros/xetex/latex/bidishadowtext.zip
-2022/05/22 | 3964814 | macros/xetex/latex/bidi.zip
+2022/05/24 | 4029383 | macros/xetex/latex/bidi.zip
2018/08/15 | 10902 | macros/xetex/latex/businesscard-qrcode/businesscard-qrcode.cls
2018/08/15 | 51983 | macros/xetex/latex/businesscard-qrcode/examples/example.pdf
2018/08/15 | 932 | macros/xetex/latex/businesscard-qrcode/examples/example.tex
@@ -246233,9 +246248,9 @@
2014/12/05 | 4915 | macros/xetex/latex/xeindex/xeindex.sty
2014/12/05 | 19009 | macros/xetex/latex/xeindex/xeindex.tex
2014/12/05 | 79942 | macros/xetex/latex/xeindex.zip
-2022/05/22 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
-2022/05/22 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
-2022/05/22 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
+2022/05/24 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
+2022/05/24 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
+2022/05/24 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
2020/09/04 | 13130 | macros/xetex/latex/xepersian-hm/doc-ligature-xepersian-hm.pdf
2020/09/04 | 10104 | macros/xetex/latex/xepersian-hm/doc-ligature-xep.pdf
2020/09/04 | 63436 | macros/xetex/latex/xepersian-hm/doc-samples-glyph.pdf
@@ -246257,26 +246272,26 @@
2020/09/04 | 106056 | macros/xetex/latex/xepersian-hm/xepersian-XB.pdf
2020/09/04 | 2945 | macros/xetex/latex/xepersian-hm/xepersian-XB.tex
2020/09/04 | 2217805 | macros/xetex/latex/xepersian-hm.zip
-2022/05/22 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
-2022/05/22 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
-2022/05/22 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
-2022/05/22 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
-2022/05/22 | 1390 | macros/xetex/latex/xepersian/README
-2022/05/22 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
-2022/05/22 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
-2022/05/22 | 71644 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
-2022/05/22 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
-2022/05/22 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
-2022/05/22 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
-2022/05/22 | 2574 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
-2022/05/22 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
-2022/05/22 | 243585 | macros/xetex/latex/xepersian/xepersian-doc.pdf
-2022/05/22 | 25946 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
-2022/05/22 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
-2022/05/22 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
-2022/05/22 | 340551 | macros/xetex/latex/xepersian/xepersian.dtx
-2022/05/22 | 772104 | macros/xetex/latex/xepersian/xepersian.pdf
-2022/05/22 | 1126352 | macros/xetex/latex/xepersian.zip
+2022/05/24 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
+2022/05/24 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
+2022/05/24 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
+2022/05/24 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
+2022/05/24 | 1390 | macros/xetex/latex/xepersian/README
+2022/05/24 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
+2022/05/24 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
+2022/05/24 | 71644 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
+2022/05/24 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
+2022/05/24 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
+2022/05/24 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
+2022/05/24 | 2574 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+2022/05/24 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
+2022/05/24 | 243579 | macros/xetex/latex/xepersian/xepersian-doc.pdf
+2022/05/24 | 25946 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
+2022/05/24 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
+2022/05/24 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+2022/05/24 | 342009 | macros/xetex/latex/xepersian/xepersian.dtx
+2022/05/24 | 774115 | macros/xetex/latex/xepersian/xepersian.pdf
+2022/05/24 | 1129124 | macros/xetex/latex/xepersian.zip
2021/03/29 | 142 | macros/xetex/latex/xesoul/README
2021/03/29 | 3942 | macros/xetex/latex/xesoul/xesoul.dtx
2021/03/29 | 1517 | macros/xetex/latex/xesoul/xesoul.ins
@@ -275844,7 +275859,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2022/05/22 | 193319 | support/TeX4ht/source/ChangeLog
+2022/05/23 | 193636 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -275856,7 +275871,7 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2022/05/22 | 1120709 | support/TeX4ht/source/tex4ht-4ht.tex
+2022/05/23 | 1120840 | support/TeX4ht/source/tex4ht-4ht.tex
2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex
2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex
2021/05/03 | 21247 | support/TeX4ht/source/tex4ht-cond4ht.tex
@@ -275907,7 +275922,7 @@
2021/05/03 | 11161 | support/TeX4ht/source/tex4ht-ooimpress.tex
2021/05/03 | 45918 | support/TeX4ht/source/tex4ht-oo-xtpipes.tex
2022/05/01 | 13399 | support/TeX4ht/source/tex4ht-options.tex
-2022/04/19 | 290058 | support/TeX4ht/source/tex4ht-sty.tex
+2022/05/23 | 290059 | support/TeX4ht/source/tex4ht-sty.tex
2021/05/03 | 7226 | support/TeX4ht/source/tex4ht-svg.tex
2021/05/03 | 106563 | support/TeX4ht/source/tex4ht-t4ht.tex
2021/05/03 | 44160 | support/TeX4ht/source/tex4ht-tei.tex
@@ -280672,7 +280687,7 @@
2020/04/22 | 5992 | systems/texlive/tlnet/archive/bearwear.source.r54826.tar.xz
2022/04/26 | 666064 | systems/texlive/tlnet/archive/beaulivre.doc.r63133.tar.xz
2022/04/26 | 4388 | systems/texlive/tlnet/archive/beaulivre.r63133.tar.xz
-2022/03/05 | 889508 | systems/texlive/tlnet/archive/beebe.r62423.tar.xz
+2022/05/24 | 890976 | systems/texlive/tlnet/archive/beebe.r63377.tar.xz
2022/05/08 | 785552 | systems/texlive/tlnet/archive/begingreek.doc.r63255.tar.xz
2022/05/08 | 1808 | systems/texlive/tlnet/archive/begingreek.r63255.tar.xz
2022/05/08 | 7856 | systems/texlive/tlnet/archive/begingreek.source.r63255.tar.xz
@@ -280901,8 +280916,8 @@
2021/12/30 | 6024 | systems/texlive/tlnet/archive/biblatex-spbasic.r61439.tar.xz
2019/02/28 | 70196 | systems/texlive/tlnet/archive/biblatex-subseries.doc.r43330.tar.xz
2019/02/28 | 1384 | systems/texlive/tlnet/archive/biblatex-subseries.r43330.tar.xz
-2022/05/08 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r63255.tar.xz
-2022/05/08 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r63255.tar.xz
+2022/05/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r63386.tar.xz
+2022/05/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r63386.tar.xz
2021/03/07 | 469432 | systems/texlive/tlnet/archive/biblatex-trad.doc.r58169.tar.xz
2021/03/07 | 4192 | systems/texlive/tlnet/archive/biblatex-trad.r58169.tar.xz
2019/02/28 | 70876 | systems/texlive/tlnet/archive/biblatex-true-citepages-omit.doc.r44653.tar.xz
@@ -282221,8 +282236,8 @@
2020/06/24 | 31152 | systems/texlive/tlnet/archive/cquthesis.source.r55643.tar.xz
2019/02/28 | 29448 | systems/texlive/tlnet/archive/crbox.doc.r29803.tar.xz
2019/02/28 | 1544 | systems/texlive/tlnet/archive/crbox.r29803.tar.xz
-2022/04/25 | 130688 | systems/texlive/tlnet/archive/create-theorem.doc.r63120.tar.xz
-2022/04/25 | 9320 | systems/texlive/tlnet/archive/create-theorem.r63120.tar.xz
+2022/05/24 | 130016 | systems/texlive/tlnet/archive/create-theorem.doc.r63379.tar.xz
+2022/05/24 | 9424 | systems/texlive/tlnet/archive/create-theorem.r63379.tar.xz
2022/05/15 | 124044 | systems/texlive/tlnet/archive/crefthe.doc.r63296.tar.xz
2022/05/15 | 2992 | systems/texlive/tlnet/archive/crefthe.r63296.tar.xz
2020/03/24 | 34244 | systems/texlive/tlnet/archive/crimson.doc.r54512.tar.xz
@@ -283235,13 +283250,13 @@
2022/03/02 | 1633908 | systems/texlive/tlnet/archive/dvisvgm.amd64-freebsd.r62332.tar.xz
2022/03/02 | 1797964 | systems/texlive/tlnet/archive/dvisvgm.amd64-netbsd.r62310.tar.xz
2022/04/21 | 1532360 | systems/texlive/tlnet/archive/dvisvgm.armhf-linux.r63092.tar.xz
-2022/03/09 | 107332 | systems/texlive/tlnet/archive/dvisvgm.doc.r62517.tar.xz
+2022/05/24 | 107332 | systems/texlive/tlnet/archive/dvisvgm.doc.r63386.tar.xz
2022/03/03 | 1765660 | systems/texlive/tlnet/archive/dvisvgm.i386-cygwin.r62359.tar.xz
2022/03/02 | 1584792 | systems/texlive/tlnet/archive/dvisvgm.i386-freebsd.r62332.tar.xz
2022/03/02 | 1889744 | systems/texlive/tlnet/archive/dvisvgm.i386-linux.r62330.tar.xz
2022/03/02 | 1778072 | systems/texlive/tlnet/archive/dvisvgm.i386-netbsd.r62310.tar.xz
2022/03/02 | 1936672 | systems/texlive/tlnet/archive/dvisvgm.i386-solaris.r62332.tar.xz
-2022/03/09 | 884 | systems/texlive/tlnet/archive/dvisvgm.r62517.tar.xz
+2022/05/24 | 880 | systems/texlive/tlnet/archive/dvisvgm.r63386.tar.xz
2022/03/05 | 2649428 | systems/texlive/tlnet/archive/dvisvgm.universal-darwin.r62421.tar.xz
2022/05/22 | 1518060 | systems/texlive/tlnet/archive/dvisvgm.win32.r63357.tar.xz
2022/03/03 | 1738740 | systems/texlive/tlnet/archive/dvisvgm.x86_64-cygwin.r62357.tar.xz
@@ -283707,9 +283722,9 @@
2021/11/09 | 358088 | systems/texlive/tlnet/archive/etl.doc.r60998.tar.xz
2021/11/09 | 4424 | systems/texlive/tlnet/archive/etl.r60998.tar.xz
2021/11/09 | 15532 | systems/texlive/tlnet/archive/etl.source.r60998.tar.xz
-2021/09/24 | 1134960 | systems/texlive/tlnet/archive/etoc.doc.r60589.tar.xz
-2021/09/24 | 10608 | systems/texlive/tlnet/archive/etoc.r60589.tar.xz
-2021/09/24 | 122012 | systems/texlive/tlnet/archive/etoc.source.r60589.tar.xz
+2022/05/24 | 1134960 | systems/texlive/tlnet/archive/etoc.doc.r63386.tar.xz
+2022/05/24 | 10612 | systems/texlive/tlnet/archive/etoc.r63386.tar.xz
+2022/05/24 | 122016 | systems/texlive/tlnet/archive/etoc.source.r63386.tar.xz
2019/02/28 | 234632 | systems/texlive/tlnet/archive/etoolbox-de.doc.r21906.tar.xz
2019/02/28 | 404 | systems/texlive/tlnet/archive/etoolbox-de.r21906.tar.xz
2020/10/06 | 237928 | systems/texlive/tlnet/archive/etoolbox.doc.r56554.tar.xz
@@ -284226,9 +284241,9 @@
2021/08/05 | 377600 | systems/texlive/tlnet/archive/fontsize.doc.r60161.tar.xz
2021/08/05 | 4984 | systems/texlive/tlnet/archive/fontsize.r60161.tar.xz
2021/08/05 | 15124 | systems/texlive/tlnet/archive/fontsize.source.r60161.tar.xz
-2022/01/16 | 1221668 | systems/texlive/tlnet/archive/fontspec.doc.r61617.tar.xz
-2022/01/16 | 26664 | systems/texlive/tlnet/archive/fontspec.r61617.tar.xz
-2022/01/16 | 82844 | systems/texlive/tlnet/archive/fontspec.source.r61617.tar.xz
+2022/05/24 | 1221672 | systems/texlive/tlnet/archive/fontspec.doc.r63386.tar.xz
+2022/05/24 | 26664 | systems/texlive/tlnet/archive/fontspec.r63386.tar.xz
+2022/05/24 | 82848 | systems/texlive/tlnet/archive/fontspec.source.r63386.tar.xz
2021/10/21 | 11168 | systems/texlive/tlnet/archive/fonts-tlwg.doc.r60817.tar.xz
2021/10/21 | 5031944 | systems/texlive/tlnet/archive/fonts-tlwg.r60817.tar.xz
2021/10/21 | 7644464 | systems/texlive/tlnet/archive/fonts-tlwg.source.r60817.tar.xz
@@ -285085,8 +285100,8 @@
2019/02/28 | 24892 | systems/texlive/tlnet/archive/hustthesis.source.r42547.tar.xz
2021/06/02 | 150588 | systems/texlive/tlnet/archive/hvarabic.doc.r59423.tar.xz
2021/06/02 | 1468 | systems/texlive/tlnet/archive/hvarabic.r59423.tar.xz
-2022/05/21 | 908388 | systems/texlive/tlnet/archive/hvextern.doc.r63346.tar.xz
-2022/05/21 | 5660 | systems/texlive/tlnet/archive/hvextern.r63346.tar.xz
+2022/05/24 | 910272 | systems/texlive/tlnet/archive/hvextern.doc.r63386.tar.xz
+2022/05/24 | 6028 | systems/texlive/tlnet/archive/hvextern.r63386.tar.xz
2022/05/02 | 8725268 | systems/texlive/tlnet/archive/hvfloat.doc.r63201.tar.xz
2022/05/02 | 11776 | systems/texlive/tlnet/archive/hvfloat.r63201.tar.xz
2019/02/28 | 76336 | systems/texlive/tlnet/archive/hvindex.doc.r46051.tar.xz
@@ -286210,9 +286225,9 @@
2020/05/08 | 443500 | systems/texlive/tlnet/archive/lengthconvert.doc.r55064.tar.xz
2020/05/08 | 2020 | systems/texlive/tlnet/archive/lengthconvert.r55064.tar.xz
2020/05/08 | 4160 | systems/texlive/tlnet/archive/lengthconvert.source.r55064.tar.xz
-2022/04/06 | 920644 | systems/texlive/tlnet/archive/letgut.doc.r62949.tar.xz
-2022/04/06 | 24884 | systems/texlive/tlnet/archive/letgut.r62949.tar.xz
-2022/04/06 | 33060 | systems/texlive/tlnet/archive/letgut.source.r62949.tar.xz
+2022/05/24 | 920644 | systems/texlive/tlnet/archive/letgut.doc.r63386.tar.xz
+2022/05/24 | 24884 | systems/texlive/tlnet/archive/letgut.r63386.tar.xz
+2022/05/24 | 33056 | systems/texlive/tlnet/archive/letgut.source.r63386.tar.xz
2019/12/05 | 290936 | systems/texlive/tlnet/archive/letltxmacro.doc.r53022.tar.xz
2019/12/05 | 2092 | systems/texlive/tlnet/archive/letltxmacro.r53022.tar.xz
2019/12/05 | 5912 | systems/texlive/tlnet/archive/letltxmacro.source.r53022.tar.xz
@@ -287932,9 +287947,9 @@
2022/03/06 | 210180 | systems/texlive/tlnet/archive/njustthesis.doc.r62451.tar.xz
2022/03/06 | 4484 | systems/texlive/tlnet/archive/njustthesis.r62451.tar.xz
2022/03/06 | 4832 | systems/texlive/tlnet/archive/njustthesis.source.r62451.tar.xz
-2022/05/02 | 1257848 | systems/texlive/tlnet/archive/njuthesis.doc.r63202.tar.xz
-2022/05/02 | 15416 | systems/texlive/tlnet/archive/njuthesis.r63202.tar.xz
-2022/05/02 | 54568 | systems/texlive/tlnet/archive/njuthesis.source.r63202.tar.xz
+2022/05/24 | 1271208 | systems/texlive/tlnet/archive/njuthesis.doc.r63386.tar.xz
+2022/05/24 | 15628 | systems/texlive/tlnet/archive/njuthesis.r63386.tar.xz
+2022/05/24 | 55500 | systems/texlive/tlnet/archive/njuthesis.source.r63386.tar.xz
2022/01/10 | 637816 | systems/texlive/tlnet/archive/njuvisual.doc.r61555.tar.xz
2022/01/10 | 169212 | systems/texlive/tlnet/archive/njuvisual.r61555.tar.xz
2022/01/10 | 176228 | systems/texlive/tlnet/archive/njuvisual.source.r61555.tar.xz
@@ -288219,8 +288234,8 @@
2021/05/24 | 2392 | systems/texlive/tlnet/archive/ot-tableau.r59318.tar.xz
2019/02/28 | 60352 | systems/texlive/tlnet/archive/oubraces.doc.r21833.tar.xz
2019/02/28 | 1660 | systems/texlive/tlnet/archive/oubraces.r21833.tar.xz
-2022/05/08 | 322096 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r63255.tar.xz
-2022/05/08 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r63255.tar.xz
+2022/05/24 | 322100 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r63386.tar.xz
+2022/05/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r63386.tar.xz
2020/03/13 | 1596 | systems/texlive/tlnet/archive/outerhbox.r54254.tar.xz
2019/02/28 | 234580 | systems/texlive/tlnet/archive/outline.doc.r18360.tar.xz
2019/02/28 | 1528 | systems/texlive/tlnet/archive/outline.r18360.tar.xz
@@ -288486,9 +288501,9 @@
2021/11/02 | 5876 | systems/texlive/tlnet/archive/pdfoverlay.source.r60923.tar.xz
2019/02/28 | 740816 | systems/texlive/tlnet/archive/pdfpagediff.doc.r37946.tar.xz
2019/02/28 | 2924 | systems/texlive/tlnet/archive/pdfpagediff.r37946.tar.xz
-2022/01/30 | 322684 | systems/texlive/tlnet/archive/pdfpages.doc.r61801.tar.xz
-2022/01/30 | 14012 | systems/texlive/tlnet/archive/pdfpages.r61801.tar.xz
-2022/01/30 | 35232 | systems/texlive/tlnet/archive/pdfpages.source.r61801.tar.xz
+2022/05/24 | 322280 | systems/texlive/tlnet/archive/pdfpages.doc.r63386.tar.xz
+2022/05/24 | 14048 | systems/texlive/tlnet/archive/pdfpages.r63386.tar.xz
+2022/05/24 | 35348 | systems/texlive/tlnet/archive/pdfpages.source.r63386.tar.xz
2021/02/14 | 175708 | systems/texlive/tlnet/archive/pdfpc.doc.r57735.tar.xz
2019/02/28 | 74980 | systems/texlive/tlnet/archive/pdfpc-movie.doc.r48245.tar.xz
2019/02/28 | 2196 | systems/texlive/tlnet/archive/pdfpc-movie.r48245.tar.xz
@@ -288724,8 +288739,8 @@
2021/05/16 | 33484 | systems/texlive/tlnet/archive/pgf.source.r59210.tar.xz
2021/07/05 | 2355584 | systems/texlive/tlnet/archive/pgf-spectra.doc.r59827.tar.xz
2021/07/05 | 244204 | systems/texlive/tlnet/archive/pgf-spectra.r59827.tar.xz
-2020/05/31 | 268796 | systems/texlive/tlnet/archive/pgf-umlcd.doc.r55342.tar.xz
-2020/05/31 | 2924 | systems/texlive/tlnet/archive/pgf-umlcd.r55342.tar.xz
+2022/05/24 | 295968 | systems/texlive/tlnet/archive/pgf-umlcd.doc.r63386.tar.xz
+2022/05/24 | 3408 | systems/texlive/tlnet/archive/pgf-umlcd.r63386.tar.xz
2020/05/31 | 222752 | systems/texlive/tlnet/archive/pgf-umlsd.doc.r55342.tar.xz
2020/05/31 | 3552 | systems/texlive/tlnet/archive/pgf-umlsd.r55342.tar.xz
2019/02/28 | 174564 | systems/texlive/tlnet/archive/phaistos.doc.r18651.tar.xz
@@ -289559,8 +289574,8 @@
2019/02/28 | 56340 | systems/texlive/tlnet/archive/pxgreeks.doc.r21838.tar.xz
2019/02/28 | 2120 | systems/texlive/tlnet/archive/pxgreeks.r21838.tar.xz
2019/02/28 | 4644 | systems/texlive/tlnet/archive/pxgreeks.source.r21838.tar.xz
-2022/05/14 | 152444 | systems/texlive/tlnet/archive/pxjahyper.doc.r63290.tar.xz
-2022/05/14 | 17852 | systems/texlive/tlnet/archive/pxjahyper.r63290.tar.xz
+2022/05/24 | 152448 | systems/texlive/tlnet/archive/pxjahyper.doc.r63386.tar.xz
+2022/05/24 | 17856 | systems/texlive/tlnet/archive/pxjahyper.r63386.tar.xz
2020/05/05 | 110152 | systems/texlive/tlnet/archive/pxjodel.doc.r55006.tar.xz
2020/05/05 | 12536 | systems/texlive/tlnet/archive/pxjodel.r55006.tar.xz
2019/02/28 | 1640 | systems/texlive/tlnet/archive/pxpgfmark.doc.r30212.tar.xz
@@ -289837,8 +289852,8 @@
2022/04/24 | 184700 | systems/texlive/tlnet/archive/robotarm.doc.r63116.tar.xz
2022/04/24 | 2924 | systems/texlive/tlnet/archive/robotarm.r63116.tar.xz
2022/04/24 | 6884 | systems/texlive/tlnet/archive/robotarm.source.r63116.tar.xz
-2022/05/10 | 514096 | systems/texlive/tlnet/archive/roboto.doc.r63268.tar.xz
-2022/05/10 | 25354388 | systems/texlive/tlnet/archive/roboto.r63268.tar.xz
+2022/05/24 | 514100 | systems/texlive/tlnet/archive/roboto.doc.r63386.tar.xz
+2022/05/24 | 25354320 | systems/texlive/tlnet/archive/roboto.r63386.tar.xz
2019/02/28 | 57844 | systems/texlive/tlnet/archive/robustcommand.doc.r15878.tar.xz
2019/02/28 | 1176 | systems/texlive/tlnet/archive/robustcommand.r15878.tar.xz
2019/02/28 | 2852 | systems/texlive/tlnet/archive/robustcommand.source.r15878.tar.xz
@@ -290922,14 +290937,14 @@
2022/02/27 | 108804 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r62206.tar.xz
2022/02/27 | 87364 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r62220.tar.xz
2022/04/21 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r63092.tar.xz
-2022/05/23 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r63372.tar.xz
+2022/05/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r63384.tar.xz
2022/03/01 | 58328 | systems/texlive/tlnet/archive/tex4ht.i386-cygwin.r62282.tar.xz
2022/02/27 | 93760 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r62206.tar.xz
2022/02/27 | 91280 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r62210.tar.xz
2022/02/27 | 76200 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r62220.tar.xz
2022/02/27 | 83964 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r62206.tar.xz
-2022/05/23 | 939780 | systems/texlive/tlnet/archive/tex4ht.r63372.tar.xz
-2022/05/23 | 1256208 | systems/texlive/tlnet/archive/tex4ht.source.r63372.tar.xz
+2022/05/24 | 939852 | systems/texlive/tlnet/archive/tex4ht.r63384.tar.xz
+2022/05/24 | 1256292 | systems/texlive/tlnet/archive/tex4ht.source.r63384.tar.xz
2022/02/28 | 184748 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r62258.tar.xz
2022/02/27 | 57768 | systems/texlive/tlnet/archive/tex4ht.win32.r62199.tar.xz
2022/03/01 | 58016 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r62279.tar.xz
@@ -291164,7 +291179,7 @@
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz
-2022/05/23 | 406564 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63359.tar.xz
+2022/05/24 | 406660 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63377.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -291188,7 +291203,7 @@
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz
-2022/05/23 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63359.tar.xz
+2022/05/24 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63377.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2022/04/19 | 36296 | systems/texlive/tlnet/archive/texlive-scripts.win32.r63068.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -291899,11 +291914,11 @@
2021/07/16 | 315572 | systems/texlive/tlnet/archive/tudscr.source.r59942.tar.xz
2019/02/28 | 453460 | systems/texlive/tlnet/archive/tufte-latex.doc.r37649.tar.xz
2019/02/28 | 21568 | systems/texlive/tlnet/archive/tufte-latex.r37649.tar.xz
-2022/05/21 | 813888 | systems/texlive/tlnet/archive/tugboat.doc.r63347.tar.xz
-2022/05/21 | 220396 | systems/texlive/tlnet/archive/tugboat-plain.doc.r63348.tar.xz
-2022/05/21 | 33484 | systems/texlive/tlnet/archive/tugboat-plain.r63348.tar.xz
-2022/05/21 | 28976 | systems/texlive/tlnet/archive/tugboat.r63347.tar.xz
-2022/05/21 | 41208 | systems/texlive/tlnet/archive/tugboat.source.r63347.tar.xz
+2022/05/24 | 813888 | systems/texlive/tlnet/archive/tugboat.doc.r63386.tar.xz
+2022/05/24 | 220392 | systems/texlive/tlnet/archive/tugboat-plain.doc.r63386.tar.xz
+2022/05/24 | 33532 | systems/texlive/tlnet/archive/tugboat-plain.r63386.tar.xz
+2022/05/24 | 29004 | systems/texlive/tlnet/archive/tugboat.r63386.tar.xz
+2022/05/24 | 41208 | systems/texlive/tlnet/archive/tugboat.source.r63386.tar.xz
2019/02/28 | 262356 | systems/texlive/tlnet/archive/tui.doc.r27253.tar.xz
2019/02/28 | 3928 | systems/texlive/tlnet/archive/tui.r27253.tar.xz
2019/02/28 | 4272 | systems/texlive/tlnet/archive/turabian.doc.r36298.tar.xz
@@ -292255,21 +292270,21 @@
2022/04/19 | 1889696 | systems/texlive/tlnet/archive/utfsym.r63076.tar.xz
2019/02/28 | 2820 | systems/texlive/tlnet/archive/utopia.doc.r15878.tar.xz
2019/02/28 | 205556 | systems/texlive/tlnet/archive/utopia.r15878.tar.xz
-2022/05/08 | 138168 | systems/texlive/tlnet/archive/ut-thesis.doc.r63255.tar.xz
-2022/05/08 | 2616 | systems/texlive/tlnet/archive/ut-thesis.r63255.tar.xz
-2022/05/08 | 6656 | systems/texlive/tlnet/archive/ut-thesis.source.r63255.tar.xz
+2022/05/24 | 138164 | systems/texlive/tlnet/archive/ut-thesis.doc.r63386.tar.xz
+2022/05/24 | 2616 | systems/texlive/tlnet/archive/ut-thesis.r63386.tar.xz
+2022/05/24 | 6656 | systems/texlive/tlnet/archive/ut-thesis.source.r63386.tar.xz
2021/09/07 | 127872 | systems/texlive/tlnet/archive/uwa-colours.doc.r60443.tar.xz
2021/09/07 | 1228 | systems/texlive/tlnet/archive/uwa-colours.r60443.tar.xz
2021/09/07 | 3016 | systems/texlive/tlnet/archive/uwa-colours.source.r60443.tar.xz
-2022/05/08 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r63255.tar.xz
-2022/05/08 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r63255.tar.xz
-2022/05/08 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r63255.tar.xz
-2022/05/08 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r63255.tar.xz
-2022/05/08 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r63255.tar.xz
-2022/05/08 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r63255.tar.xz
-2022/05/08 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r63255.tar.xz
-2022/05/08 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r63255.tar.xz
-2022/05/08 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r63255.tar.xz
+2022/05/24 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r63386.tar.xz
+2022/05/24 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r63386.tar.xz
+2022/05/24 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r63386.tar.xz
+2022/05/24 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r63386.tar.xz
+2022/05/24 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r63386.tar.xz
+2022/05/24 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r63386.tar.xz
+2022/05/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r63386.tar.xz
+2022/05/24 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r63386.tar.xz
+2022/05/24 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r63386.tar.xz
2019/02/28 | 11764 | systems/texlive/tlnet/archive/uwmslide.doc.r27354.tar.xz
2019/02/28 | 3916 | systems/texlive/tlnet/archive/uwmslide.r27354.tar.xz
2019/02/28 | 137544 | systems/texlive/tlnet/archive/uwthesis.doc.r15878.tar.xz
@@ -293001,16 +293016,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2022/04/18 | 108451 | systems/texlive/tlnet/install-tl
-2022/05/23 | 5800261 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/05/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/05/24 | 5800378 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/05/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/05/23 | 20464469 | systems/texlive/tlnet/install-tl-windows.exe
-2022/05/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/05/23 | 25483922 | systems/texlive/tlnet/install-tl.zip
-2022/05/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/05/24 | 20460663 | systems/texlive/tlnet/install-tl-windows.exe
+2022/05/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/05/24 | 25483928 | systems/texlive/tlnet/install-tl.zip
+2022/05/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -293020,7 +293035,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/05/10 | 49662 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/05/22 | 7313 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/05/23 | 7332 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/04/27 | 215352 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -293062,12 +293077,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2022/05/23 | 17489266 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/05/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/05/24 | 17489970 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/05/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/05/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/05/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/05/23 | 2382040 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/05/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/05/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/05/24 | 2380364 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/12/21 | 58848 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/04/18 | 42116 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -298277,7 +298292,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2022/05/23 | 651183 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/05/24 | 651183 | 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
@@ -299879,9 +299894,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2022/03/12 | 39680 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2022/03/29 | 43240 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/05/23 | 277854 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/05/23 | 1454134 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/05/23 | 1341322 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/05/24 | 277883 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/05/24 | 1453096 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/05/24 | 1341087 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2022/03/12 | 13516 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2022/03/29 | 14391 | 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
@@ -300107,191 +300122,191 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2022/05/23 | 650885 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/05/23 | 51558 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2022/05/23 | 57331 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/05/23 | 1021846 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2022/05/23 | 1156465 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/05/23 | 28797 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2022/05/23 | 31520 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/05/23 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2022/05/23 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/05/23 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2022/05/23 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/05/23 | 86759 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2022/05/23 | 95283 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/05/23 | 68872 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2022/05/23 | 77067 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/05/23 | 27248 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2022/05/23 | 31344 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/05/23 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2022/05/23 | 394369 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/05/23 | 32955 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2022/05/23 | 37081 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/05/23 | 51484 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2022/05/23 | 57270 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/05/23 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2022/05/23 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/05/23 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2022/05/23 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/05/23 | 92918 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2022/05/23 | 103092 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/05/23 | 21314 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2022/05/23 | 24120 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/05/23 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/05/23 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2022/05/23 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/05/23 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2022/05/23 | 326660 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/05/23 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2022/05/23 | 45826 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/05/23 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2022/05/23 | 135376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/05/23 | 1302485 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2022/05/23 | 1454765 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/05/23 | 99818 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2022/05/23 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/05/23 | 43645 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2022/05/23 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/05/23 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2022/05/23 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/05/23 | 56993 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2022/05/23 | 63308 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/05/23 | 135948 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2022/05/23 | 155500 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/05/23 | 73478 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2022/05/23 | 78975 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/05/23 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2022/05/23 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/05/23 | 259257 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2022/05/23 | 296039 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/05/23 | 22147 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2022/05/23 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/05/23 | 97202 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2022/05/23 | 112590 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/05/23 | 64542 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2022/05/23 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/05/23 | 96634 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2022/05/23 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/05/23 | 38427 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2022/05/23 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/05/23 | 484371 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2022/05/23 | 565929 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/05/23 | 203837 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
-2022/05/23 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/05/23 | 152032 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2022/05/23 | 168819 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/05/23 | 95433 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2022/05/23 | 109479 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/05/23 | 16503 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2022/05/23 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/05/23 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2022/05/23 | 30543 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/05/23 | 631279 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2022/05/23 | 681941 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/05/23 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2022/05/23 | 598230 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/05/23 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2022/05/23 | 528017 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/05/23 | 93959 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2022/05/23 | 103338 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/05/23 | 1752146 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2022/05/23 | 1982084 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/05/23 | 68009 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2022/05/23 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/05/23 | 27590 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2022/05/23 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/05/23 | 7753 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2022/05/23 | 8784 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/05/23 | 190504 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2022/05/23 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/05/23 | 251130 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2022/05/23 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/05/23 | 99256 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2022/05/23 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/05/23 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2022/05/23 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/05/23 | 288200 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2022/05/23 | 325270 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/05/23 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2022/05/23 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/05/23 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2022/05/23 | 55568 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/05/23 | 31412 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2022/05/23 | 35167 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/05/23 | 38560 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2022/05/23 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/05/23 | 43362 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2022/05/23 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/05/23 | 45742 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2022/05/23 | 52326 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/05/23 | 197036 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2022/05/23 | 213279 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/05/23 | 36050 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2022/05/23 | 41183 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/05/23 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2022/05/23 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/05/23 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2022/05/23 | 202836 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/05/23 | 210274 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2022/05/23 | 245095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/05/23 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2022/05/23 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/05/23 | 1181123 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2022/05/23 | 1322741 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/05/23 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2022/05/23 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/05/23 | 31588 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2022/05/23 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/05/23 | 64708 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2022/05/23 | 72887 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/05/23 | 50798 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2022/05/23 | 58663 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/05/23 | 693068 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
-2022/05/23 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/05/23 | 1357072 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2022/05/23 | 1501238 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/05/23 | 42817 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2022/05/23 | 52480 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/05/23 | 57617 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2022/05/23 | 63739 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/05/23 | 25551 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2022/05/23 | 27638 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/05/23 | 16561 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2022/05/23 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/05/23 | 64489 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2022/05/23 | 71006 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/05/23 | 156965 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2022/05/23 | 173008 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/05/23 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2022/05/23 | 67254 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/05/23 | 100487 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2022/05/23 | 107704 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/05/23 | 2694876 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2022/05/23 | 2820687 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/05/23 | 55284 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2022/05/23 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/05/23 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2022/05/23 | 41202 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/05/23 | 28688 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2022/05/23 | 34051 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/05/23 | 67706 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2022/05/23 | 73529 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/05/23 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2022/05/23 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/05/23 | 55755 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2022/05/23 | 57526 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/05/23 | 591571 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2022/05/23 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/05/23 | 39728 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2022/05/23 | 43225 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/05/23 | 277858 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/05/23 | 1454660 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/05/23 | 1341300 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/05/23 | 13513 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2022/05/23 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/05/24 | 650885 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/05/24 | 51557 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2022/05/24 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/05/24 | 1021847 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2022/05/24 | 1156463 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/05/24 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2022/05/24 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/05/24 | 30145 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2022/05/24 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/05/24 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2022/05/24 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/05/24 | 86758 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2022/05/24 | 95285 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/05/24 | 68871 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2022/05/24 | 77067 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/05/24 | 27248 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2022/05/24 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/05/24 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2022/05/24 | 394369 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/05/24 | 32955 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2022/05/24 | 37081 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/05/24 | 51486 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2022/05/24 | 57271 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/05/24 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2022/05/24 | 270300 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/05/24 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2022/05/24 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/05/24 | 92917 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2022/05/24 | 103092 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/05/24 | 21312 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2022/05/24 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/05/24 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/05/24 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2022/05/24 | 52093 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/05/24 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2022/05/24 | 326661 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/05/24 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2022/05/24 | 45825 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/05/24 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2022/05/24 | 135375 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/05/24 | 1302485 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2022/05/24 | 1454764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/05/24 | 99816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2022/05/24 | 113051 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/05/24 | 43646 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2022/05/24 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/05/24 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2022/05/24 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/05/24 | 56992 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2022/05/24 | 63310 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/05/24 | 135950 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2022/05/24 | 155497 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/05/24 | 73477 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2022/05/24 | 78973 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/05/24 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2022/05/24 | 81460 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/05/24 | 259257 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2022/05/24 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/05/24 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2022/05/24 | 25059 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/05/24 | 97201 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2022/05/24 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/05/24 | 64543 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2022/05/24 | 73146 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/05/24 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2022/05/24 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/05/24 | 38426 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2022/05/24 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/05/24 | 484370 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2022/05/24 | 565929 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/05/24 | 203837 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
+2022/05/24 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/05/24 | 152031 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2022/05/24 | 168819 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/05/24 | 95433 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2022/05/24 | 109478 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/05/24 | 16503 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2022/05/24 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/05/24 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2022/05/24 | 30541 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/05/24 | 631279 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2022/05/24 | 681941 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/05/24 | 532453 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2022/05/24 | 598230 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/05/24 | 477848 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2022/05/24 | 528017 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/05/24 | 93958 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2022/05/24 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/05/24 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2022/05/24 | 1982085 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/05/24 | 68008 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2022/05/24 | 74068 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/05/24 | 27592 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2022/05/24 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/05/24 | 7751 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2022/05/24 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/05/24 | 190504 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2022/05/24 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/05/24 | 251129 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2022/05/24 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/05/24 | 99257 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2022/05/24 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/05/24 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2022/05/24 | 139101 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/05/24 | 288199 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2022/05/24 | 325269 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/05/24 | 199831 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2022/05/24 | 181514 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/05/24 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2022/05/24 | 55567 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/05/24 | 31412 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2022/05/24 | 35168 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/05/24 | 38560 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2022/05/24 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/05/24 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2022/05/24 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/05/24 | 45741 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2022/05/24 | 52327 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/05/24 | 197035 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2022/05/24 | 213279 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/05/24 | 36049 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2022/05/24 | 41181 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/05/24 | 755742 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2022/05/24 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/05/24 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2022/05/24 | 202835 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/05/24 | 210276 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2022/05/24 | 245096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/05/24 | 79024 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2022/05/24 | 88152 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/05/24 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2022/05/24 | 1322742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/05/24 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2022/05/24 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/05/24 | 31588 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2022/05/24 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/05/24 | 64709 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2022/05/24 | 72886 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/05/24 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2022/05/24 | 58664 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/05/24 | 693069 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
+2022/05/24 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/05/24 | 1357073 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2022/05/24 | 1501237 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/05/24 | 42818 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2022/05/24 | 52480 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/05/24 | 57617 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2022/05/24 | 63740 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/05/24 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2022/05/24 | 27636 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/05/24 | 16560 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2022/05/24 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/05/24 | 64490 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2022/05/24 | 71008 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/05/24 | 156964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2022/05/24 | 173007 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/05/24 | 58664 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2022/05/24 | 67254 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/05/24 | 100485 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2022/05/24 | 107704 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/05/24 | 2694877 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2022/05/24 | 2820688 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/05/24 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2022/05/24 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/05/24 | 37115 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2022/05/24 | 41202 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/05/24 | 28689 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2022/05/24 | 34051 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/05/24 | 67705 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2022/05/24 | 73529 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/05/24 | 316243 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2022/05/24 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/05/24 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2022/05/24 | 57526 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/05/24 | 591568 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2022/05/24 | 629432 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/05/24 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2022/05/24 | 43225 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/05/24 | 277859 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/05/24 | 1453509 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/05/24 | 1341143 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/05/24 | 13513 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2022/05/24 | 14411 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2022/05/23 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/05/24 | 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
@@ -300760,7 +300775,7 @@
2022/02/22 | 6917 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2022/05/23 | 965 | systems/win32/miktex/tm/packages/pr.ini
+2022/05/24 | 965 | 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
@@ -302611,7 +302626,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2022/05/24 | 186 | timestamp
+2022/05/25 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2022/02/28 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index a86585eb24..1125f45c81 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 2e56a3ad03..3002067191 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,246 +1,380 @@
-2022/05/23 | 99818 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2022/05/23 | 99256 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2022/05/23 | 97202 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2022/05/23 | 96634 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2022/05/23 | 965 | systems/win32/miktex/tm/packages/pr.ini
-2022/05/23 | 95433 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2022/05/23 | 95283 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/05/23 | 939780 | systems/texlive/tlnet/archive/tex4ht.r63372.tar.xz
-2022/05/23 | 93959 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2022/05/23 | 92918 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2022/05/24 | 99816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2022/05/24 | 99257 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2022/05/24 | 9870 | macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
+2022/05/24 | 983933 | macros/latex/contrib/stex/doc/stex-manual.pdf
+2022/05/24 | 97201 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2022/05/24 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2022/05/24 | 965 | systems/win32/miktex/tm/packages/pr.ini
+2022/05/24 | 95433 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2022/05/24 | 95285 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/05/24 | 9424 | systems/texlive/tlnet/archive/create-theorem.r63379.tar.xz
+2022/05/24 | 939852 | systems/texlive/tlnet/archive/tex4ht.r63384.tar.xz
+2022/05/24 | 93958 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2022/05/24 | 92917 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2022/05/24 | 928304 | macros/xetex/latex/bidi/bidi.dtx
+2022/05/24 | 920644 | systems/texlive/tlnet/archive/letgut.doc.r63386.tar.xz
+2022/05/24 | 910272 | systems/texlive/tlnet/archive/hvextern.doc.r63386.tar.xz
+2022/05/24 | 890976 | systems/texlive/tlnet/archive/beebe.r63377.tar.xz
+2022/05/24 | 88152 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/05/24 | 880 | systems/texlive/tlnet/archive/dvisvgm.r63386.tar.xz
+2022/05/24 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/05/24 | 86758 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2022/05/24 | 82848 | systems/texlive/tlnet/archive/fontspec.source.r63386.tar.xz
+2022/05/24 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/05/24 | 81460 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/05/24 | 813888 | systems/texlive/tlnet/archive/tugboat.doc.r63386.tar.xz
+2022/05/24 | 79024 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2022/05/24 | 78973 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/05/24 | 7751 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2022/05/24 | 774115 | macros/xetex/latex/xepersian/xepersian.pdf
+2022/05/24 | 77067 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/05/24 | 761651 | macros/xetex/latex/bidi/gull.jpg
+2022/05/24 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/05/24 | 755742 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2022/05/24 | 74068 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/05/24 | 73529 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/05/24 | 73477 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2022/05/24 | 73146 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/05/24 | 72886 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/05/24 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2022/05/24 | 71644 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
+2022/05/24 | 71008 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/05/24 | 693069 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
+2022/05/24 | 68871 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2022/05/24 | 681941 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/05/24 | 68008 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2022/05/24 | 67705 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2022/05/24 | 67254 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/05/24 | 6656 | systems/texlive/tlnet/archive/ut-thesis.source.r63386.tar.xz
+2022/05/24 | 6586 | macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
+2022/05/24 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r63386.tar.xz
+2022/05/24 | 651183 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/05/24 | 650885 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/05/24 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/05/24 | 64709 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2022/05/24 | 64543 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2022/05/24 | 64490 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2022/05/24 | 63740 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/05/24 | 63310 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/05/24 | 631279 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2022/05/24 | 629432 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/05/24 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
+2022/05/24 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/05/24 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
+2022/05/24 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r63386.tar.xz
+2022/05/24 | 6028 | systems/texlive/tlnet/archive/hvextern.r63386.tar.xz
+2022/05/24 | 598230 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/05/24 | 5974 | macros/latex/contrib/stex/source/extensions/tikzinput.dtx
+2022/05/24 | 5939 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
+2022/05/24 | 591568 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2022/05/24 | 58664 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2022/05/24 | 58664 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/05/24 | 5800378 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/05/24 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r63386.tar.xz
+2022/05/24 | 57617 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2022/05/24 | 57526 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/05/24 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/05/24 | 57271 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/05/24 | 56992 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2022/05/24 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r63386.tar.xz
+2022/05/24 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2022/05/24 | 565929 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/05/24 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2022/05/24 | 55567 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/05/24 | 55500 | systems/texlive/tlnet/archive/njuthesis.source.r63386.tar.xz
+2022/05/24 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2022/05/24 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
+2022/05/24 | 534 | macros/xetex/latex/bidi/bidi-doc.ltx
+2022/05/24 | 5345 | fonts/symbats3/README.md
+2022/05/24 | 532453 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2022/05/24 | 528017 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/05/24 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r63386.tar.xz
+2022/05/24 | 52480 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/05/24 | 52327 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/05/24 | 52093 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/05/24 | 52084 | fonts/symbats3/symbats3.sty
+2022/05/24 | 51557 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2022/05/24 | 51486 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2022/05/24 | 514100 | systems/texlive/tlnet/archive/roboto.doc.r63386.tar.xz
+2022/05/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r63386.tar.xz
+2022/05/24 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2022/05/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r63386.tar.xz
+2022/05/24 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2022/05/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/05/24 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/05/24 | 484370 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2022/05/24 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/05/24 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/05/24 | 477848 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2022/05/24 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2022/05/24 | 45825 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/05/24 | 45741 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2022/05/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/05/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/05/24 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
+2022/05/24 | 4547 | macros/xetex/latex/bidi/bidi-doc-latex-pkgs.ltx
+2022/05/24 | 4506 | fonts/roboto/README
+2022/05/24 | 4497 | macros/xetex/latex/bidi/bidi-doc-latex-programming.ltx
+2022/05/24 | 4398390 | install/macros/xetex/latex/bidi.tds.zip
+2022/05/24 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/05/24 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/05/24 | 43646 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2022/05/24 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2022/05/24 | 43225 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/05/24 | 42818 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2022/05/24 | 41 | fonts/symbats3/VERSION
+2022/05/24 | 41513892 | install/fonts/roboto.tds.zip
+2022/05/24 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
+2022/05/24 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2022/05/24 | 41208 | systems/texlive/tlnet/archive/tugboat.source.r63386.tar.xz
+2022/05/24 | 41202 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/05/24 | 41181 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/05/24 | 41137542 | fonts/roboto.zip
+2022/05/24 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
+2022/05/24 | 406660 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63377.tar.xz
+2022/05/24 | 4029383 | macros/xetex/latex/bidi.zip
+2022/05/24 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2022/05/24 | 394369 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/05/24 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
+2022/05/24 | 38560 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2022/05/24 | 38426 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2022/05/24 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/05/24 | 37115 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2022/05/24 | 37081 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/05/24 | 36049 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2022/05/24 | 3596 | macros/xetex/latex/bidi/bidi-doc-preamble.ltx
+2022/05/24 | 35348 | systems/texlive/tlnet/archive/pdfpages.source.r63386.tar.xz
+2022/05/24 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/05/24 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/05/24 | 35168 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/05/24 | 34999 | fonts/symbats3/codepoint.tex
+2022/05/24 | 3431479 | macros/unicodetex/latex/nwafuthesis.zip
+2022/05/24 | 342009 | macros/xetex/latex/xepersian/xepersian.dtx
+2022/05/24 | 3408 | systems/texlive/tlnet/archive/pgf-umlcd.r63386.tar.xz
+2022/05/24 | 34051 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/05/24 | 3372 | fonts/roboto/doc/roboto-samples.tex
+2022/05/24 | 33532 | systems/texlive/tlnet/archive/tugboat-plain.r63386.tar.xz
+2022/05/24 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r63386.tar.xz
+2022/05/24 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2022/05/24 | 33056 | systems/texlive/tlnet/archive/letgut.source.r63386.tar.xz
+2022/05/24 | 32955 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2022/05/24 | 326661 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/05/24 | 325269 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/05/24 | 322280 | systems/texlive/tlnet/archive/pdfpages.doc.r63386.tar.xz
+2022/05/24 | 322100 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r63386.tar.xz
+2022/05/24 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/05/24 | 3203506 | macros/xetex/latex/bidi/bidi.pdf
+2022/05/24 | 316243 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2022/05/24 | 31588 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2022/05/24 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/05/24 | 31412 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2022/05/24 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/05/24 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
+2022/05/24 | 30541 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/05/24 | 30145 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2022/05/24 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/05/24 | 295968 | systems/texlive/tlnet/archive/pgf-umlcd.doc.r63386.tar.xz
+2022/05/24 | 2936 | macros/xetex/latex/bidi/bidi-bibitem.pdf
+2022/05/24 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r63386.tar.xz
+2022/05/24 | 29004 | systems/texlive/tlnet/archive/tugboat.r63386.tar.xz
+2022/05/24 | 288199 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2022/05/24 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2022/05/24 | 28689 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2022/05/24 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/05/24 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2022/05/24 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/05/24 | 284251 | fonts/roboto/doc/roboto-samples.pdf
+2022/05/24 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2022/05/24 | 28293 | macros/latex/contrib/stex/source/extensions/notesslides.dtx
+2022/05/24 | 2820688 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/05/24 | 27849 | fonts/symbats3/unicodename.tex
+2022/05/24 | 27849 | fonts/symbats3/latexname.tex
+2022/05/24 | 277883 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/05/24 | 277859 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/05/24 | 27636 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/05/24 | 27592 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2022/05/24 | 27248 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2022/05/24 | 2722538 | macros/latex/contrib/stex.zip
+2022/05/24 | 270300 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/05/24 | 2694877 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2022/05/24 | 269229 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
+2022/05/24 | 26664 | systems/texlive/tlnet/archive/fontspec.r63386.tar.xz
+2022/05/24 | 2616 | systems/texlive/tlnet/archive/ut-thesis.r63386.tar.xz
+2022/05/24 | 25946 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
+2022/05/24 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r63386.tar.xz
+2022/05/24 | 259257 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2022/05/24 | 2574 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+2022/05/24 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2022/05/24 | 25483928 | systems/texlive/tlnet/install-tl.zip
+2022/05/24 | 25381 | macros/latex/contrib/stex/doc/packages/stex-symbols.tex
+2022/05/24 | 25354320 | systems/texlive/tlnet/archive/roboto.r63386.tar.xz
+2022/05/24 | 251129 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2022/05/24 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2022/05/24 | 25059 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/05/24 | 24884 | systems/texlive/tlnet/archive/letgut.r63386.tar.xz
+2022/05/24 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/05/24 | 245096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/05/24 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2022/05/24 | 243579 | macros/xetex/latex/xepersian/xepersian-doc.pdf
+2022/05/24 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/05/24 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/05/24 | 23945 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
+2022/05/24 | 2380364 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/05/24 | 23747 | macros/latex/contrib/stex/source/extensions/problem.dtx
+2022/05/24 | 2337625 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+2022/05/24 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2022/05/24 | 220392 | systems/texlive/tlnet/archive/tugboat-plain.doc.r63386.tar.xz
+2022/05/24 | 213279 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/05/24 | 21312 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2022/05/24 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+2022/05/24 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
+2022/05/24 | 210276 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2022/05/24 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/05/24 | 20460663 | systems/texlive/tlnet/install-tl-windows.exe
+2022/05/24 | 203837 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
+2022/05/24 | 203823 | fonts/symbats3.zip
+2022/05/24 | 202835 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/05/24 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2022/05/24 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2022/05/24 | 199831 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2022/05/24 | 1982085 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/05/24 | 197035 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2022/05/24 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
+2022/05/24 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/05/24 | 190504 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2022/05/24 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/05/24 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/05/24 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
+2022/05/24 | 18286 | macros/latex/contrib/stex/source/stex/stex-basics.dtx
+2022/05/24 | 181514 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/05/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r63386.tar.xz
+2022/05/24 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2022/05/24 | 17856 | systems/texlive/tlnet/archive/pxjahyper.r63386.tar.xz
+2022/05/24 | 177945 | macros/xetex/latex/bidi/bidi-doc.pdf
+2022/05/24 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2022/05/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r63386.tar.xz
+2022/05/24 | 17489970 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/05/24 | 17427 | macros/latex/contrib/stex/source/extensions/document-structure.dtx
+2022/05/24 | 173007 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/05/24 | 172989 | fonts/symbats3/symbats3.pdf
+2022/05/24 | 1693 | macros/xetex/latex/bidi/picture.jpg
+2022/05/24 | 168819 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/05/24 | 16867 | macros/latex/contrib/stex/source/extensions/hwexam.dtx
+2022/05/24 | 16560 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2022/05/24 | 16503 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2022/05/24 | 1645539 | macros/latex/contrib/stex/doc/stex-doc.pdf
+2022/05/24 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
+2022/05/24 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
+2022/05/24 | 156964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2022/05/24 | 15628 | systems/texlive/tlnet/archive/njuthesis.r63386.tar.xz
+2022/05/24 | 155497 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/05/24 | 1546 | macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
+2022/05/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/05/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/05/24 | 152448 | systems/texlive/tlnet/archive/pxjahyper.doc.r63386.tar.xz
+2022/05/24 | 152031 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2022/05/24 | 1501237 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/05/24 | 14967 | fonts/roboto/latex/roboto.sty
+2022/05/24 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
+2022/05/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/05/24 | 1454764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/05/24 | 1453509 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/05/24 | 1453096 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/05/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/05/24 | 14411 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/05/24 | 14048 | systems/texlive/tlnet/archive/pdfpages.r63386.tar.xz
+2022/05/24 | 1396 | macros/xetex/latex/bidi/bidi-doc-intro.ltx
+2022/05/24 | 139101 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/05/24 | 1390 | macros/xetex/latex/xepersian/README
+2022/05/24 | 138164 | systems/texlive/tlnet/archive/ut-thesis.doc.r63386.tar.xz
+2022/05/24 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
+2022/05/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r63384.tar.xz
+2022/05/24 | 135950 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2022/05/24 | 1357073 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2022/05/24 | 135375 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/05/24 | 13513 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2022/05/24 | 1341143 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/05/24 | 1341087 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/05/24 | 1323 | macros/xetex/latex/bidi/README
+2022/05/24 | 1322742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/05/24 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
+2022/05/24 | 1302485 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2022/05/24 | 130016 | systems/texlive/tlnet/archive/create-theorem.doc.r63379.tar.xz
+2022/05/24 | 1294051 | install/macros/xetex/latex/xepersian.tds.zip
+2022/05/24 | 1271208 | systems/texlive/tlnet/archive/njuthesis.doc.r63386.tar.xz
+2022/05/24 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2022/05/24 | 1256292 | systems/texlive/tlnet/archive/tex4ht.source.r63384.tar.xz
+2022/05/24 | 12511 | fonts/symbats3/symbats3.tex
+2022/05/24 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
+2022/05/24 | 1221672 | systems/texlive/tlnet/archive/fontspec.doc.r63386.tar.xz
+2022/05/24 | 122016 | systems/texlive/tlnet/archive/etoc.source.r63386.tar.xz
+2022/05/24 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2022/05/24 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2022/05/24 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/05/24 | 1156463 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/05/24 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/05/24 | 1134960 | systems/texlive/tlnet/archive/etoc.doc.r63386.tar.xz
+2022/05/24 | 113051 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/05/24 | 1129124 | macros/xetex/latex/xepersian.zip
+2022/05/24 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/05/24 | 111 | fonts/symbats3/MANIFEST
+2022/05/24 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63377.tar.xz
+2022/05/24 | 109478 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/05/24 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
+2022/05/24 | 107704 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/05/24 | 107332 | systems/texlive/tlnet/archive/dvisvgm.doc.r63386.tar.xz
+2022/05/24 | 10612 | systems/texlive/tlnet/archive/etoc.r63386.tar.xz
+2022/05/24 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/05/24 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/05/24 | 103092 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/05/24 | 1021847 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2022/05/24 | 100485 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2022/05/23 | 928 | macros/latex/contrib/hvextern/Changes
-2022/05/23 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/05/23 | 8784 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2022/05/23 | 8759036 | systems/texlive/tlnet/archive/gentium-tug.r63367.tar.xz
-2022/05/23 | 86759 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2022/05/23 | 849216 | systems/texlive/tlnet/archive/babel.doc.r63369.tar.xz
-2022/05/23 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/05/23 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/05/23 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2022/05/23 | 78975 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/05/23 | 7753 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2022/05/23 | 77067 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/05/23 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/05/23 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
2022/05/23 | 74944 | systems/texlive/tlnet/archive/xepersian.source.r63371.tar.xz
-2022/05/23 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/05/23 | 73529 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/05/23 | 73478 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2022/05/23 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/05/23 | 72887 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/05/23 | 7332 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/05/23 | 725112 | systems/texlive/tlnet/archive/functional.doc.r63368.tar.xz
-2022/05/23 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2022/05/23 | 71006 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2022/05/23 | 700228 | systems/texlive/tlnet/archive/babel.source.r63369.tar.xz
-2022/05/23 | 693068 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
-2022/05/23 | 68872 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2022/05/23 | 681941 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/05/23 | 68009 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2022/05/23 | 67706 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2022/05/23 | 67254 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/05/23 | 651183 | systems/win32/miktex/tm/packages/files.csv.lzma
-2022/05/23 | 650885 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/05/23 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/05/23 | 64708 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2022/05/23 | 64542 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2022/05/23 | 64489 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2022/05/23 | 63739 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/05/23 | 63308 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/05/23 | 631279 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2022/05/23 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/05/23 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/05/23 | 598230 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/05/23 | 6194 | macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
2022/05/23 | 59744 | systems/texlive/tlnet/archive/xepersian.r63371.tar.xz
-2022/05/23 | 591571 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2022/05/23 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2022/05/23 | 58663 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/05/23 | 5800261 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/05/23 | 57617 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2022/05/23 | 57526 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/05/23 | 57331 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/05/23 | 57270 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/05/23 | 56993 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2022/05/23 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2022/05/23 | 565929 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/05/23 | 55755 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2022/05/23 | 55568 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/05/23 | 55284 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2022/05/23 | 5380 | systems/texlive/tlnet/archive/causets.r63366.tar.xz
-2022/05/23 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2022/05/23 | 528017 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/05/23 | 52480 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/05/23 | 52326 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2022/05/23 | 521244 | systems/texlive/tlnet/archive/causets.doc.r63366.tar.xz
-2022/05/23 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/05/23 | 51558 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2022/05/23 | 51484 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2022/05/23 | 50798 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2022/05/23 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2022/05/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2022/05/23 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/05/23 | 484371 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2022/05/23 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/05/23 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/05/23 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
2022/05/23 | 46271 | macros/latex/contrib/hvextern/doc/hvextern.tex
-2022/05/23 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2022/05/23 | 45826 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/05/23 | 45742 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2022/05/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/05/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2022/05/23 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/05/23 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/05/23 | 43645 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2022/05/23 | 43362 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2022/05/23 | 43225 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/05/23 | 42817 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2022/05/23 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2022/05/23 | 41202 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/05/23 | 41183 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/05/23 | 406564 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63359.tar.xz
2022/05/23 | 400 | systems/texlive/tlnet/archive/latex-via-exemplos.r63374.tar.xz
-2022/05/23 | 39728 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2022/05/23 | 394369 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/05/23 | 38560 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2022/05/23 | 38427 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2022/05/23 | 3758040 | systems/texlive/tlnet/archive/bidi.doc.r63370.tar.xz
-2022/05/23 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/05/23 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2022/05/23 | 37081 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/05/23 | 36050 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2022/05/23 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/05/23 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/05/23 | 35167 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/05/23 | 34051 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/05/23 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2022/05/23 | 32955 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2022/05/23 | 326660 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/05/23 | 325270 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/05/23 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/05/23 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2022/05/23 | 31588 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2022/05/23 | 31520 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/05/23 | 31412 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2022/05/23 | 31344 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/05/23 | 30543 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/05/23 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
2022/05/23 | 2975 | macros/unicodetex/latex/njuthesis/njuthesis.ins
-2022/05/23 | 296039 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2022/05/23 | 29260 | systems/texlive/tlnet/archive/latex-lab-dev.source.r63373.tar.xz
-2022/05/23 | 288200 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2022/05/23 | 28797 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2022/05/23 | 28688 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2022/05/23 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/05/23 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2022/05/23 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/05/23 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2022/05/23 | 2820687 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/05/23 | 277858 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/05/23 | 277854 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/05/23 | 27638 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/05/23 | 27590 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2022/05/23 | 27248 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2022/05/23 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/05/23 | 2694876 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2022/05/23 | 290059 | support/TeX4ht/source/tex4ht-sty.tex
2022/05/23 | 26870 | macros/latex/contrib/hvextern/latex/hvextern.sty
-2022/05/23 | 259257 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2022/05/23 | 25551 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2022/05/23 | 25483922 | systems/texlive/tlnet/install-tl.zip
-2022/05/23 | 251130 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2022/05/23 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2022/05/23 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/05/23 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/05/23 | 245095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/05/23 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
2022/05/23 | 244950 | indexing/makeindexk.zip
2022/05/23 | 243059 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
-2022/05/23 | 24120 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/05/23 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/05/23 | 2382040 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/05/23 | 24071 | macros/latex/contrib/stex/doc/stex-manual.tex
2022/05/23 | 2312340 | systems/texlive/tlnet/archive/latex-lab-dev.doc.r63373.tar.xz
-2022/05/23 | 22147 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2022/05/23 | 213279 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/05/23 | 21314 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
2022/05/23 | 21200 | systems/texlive/tlnet/archive/gentium-tug.source.r63367.tar.xz
-2022/05/23 | 210274 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2022/05/23 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2022/05/23 | 2049324 | systems/texlive/tlnet/archive/latex-via-exemplos.doc.r63374.tar.xz
-2022/05/23 | 20464469 | systems/texlive/tlnet/install-tl-windows.exe
-2022/05/23 | 203837 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
-2022/05/23 | 202836 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/05/23 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2022/05/23 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2022/05/23 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2022/05/23 | 1982084 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/05/23 | 197036 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2022/05/23 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/05/23 | 201 | macros/latex/contrib/stex/tex/etc/stex-logo.sty
+2022/05/23 | 193636 | support/TeX4ht/source/ChangeLog
2022/05/23 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE
-2022/05/23 | 190504 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2022/05/23 | 1853 | macros/latex/contrib/stex/doc/packages/stex-basics.tex
2022/05/23 | 185176 | systems/texlive/tlnet/archive/babel.r63369.tar.xz
-2022/05/23 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/05/23 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/05/23 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/05/23 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2022/05/23 | 17787 | CTAN.sites
-2022/05/23 | 1752146 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2022/05/23 | 17489266 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/05/23 | 173008 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/05/23 | 168819 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/05/23 | 16561 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2022/05/23 | 16503 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2022/05/23 | 156965 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2022/05/23 | 155500 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/05/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/05/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/05/23 | 152032 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2022/05/23 | 1501238 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/05/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/05/23 | 1454765 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/05/23 | 1454660 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/05/23 | 1454134 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/05/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/05/23 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/05/23 | 16284 | macros/latex/contrib/stex/doc/stex-tutorial.tex
2022/05/23 | 141161 | macros/latex/contrib/create-theorem.zip
-2022/05/23 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/05/23 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r63372.tar.xz
-2022/05/23 | 135948 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2022/05/23 | 1357072 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2022/05/23 | 135376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2022/05/23 | 135256 | systems/texlive/tlnet/archive/bidi.source.r63370.tar.xz
-2022/05/23 | 13513 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2022/05/23 | 1341322 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2022/05/23 | 1341300 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2022/05/23 | 1335778 | macros/unicodetex/latex/njuthesis.zip
-2022/05/23 | 1322741 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/05/23 | 1302485 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2022/05/23 | 1275071 | macros/unicodetex/latex/njuthesis/njuthesis.pdf
-2022/05/23 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2022/05/23 | 1256208 | systems/texlive/tlnet/archive/tex4ht.source.r63372.tar.xz
-2022/05/23 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2022/05/23 | 1204768 | macros/latex/contrib/hvextern/doc/hvextern.pdf
2022/05/23 | 11888 | systems/texlive/tlnet/archive/functional.r63368.tar.xz
-2022/05/23 | 1181123 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
2022/05/23 | 117592 | systems/texlive/tlnet/archive/bidi.r63370.tar.xz
2022/05/23 | 1161629 | macros/latex/contrib/hvextern.zip
-2022/05/23 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/05/23 | 1156465 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/05/23 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/05/23 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/05/23 | 112590 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/05/23 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63359.tar.xz
-2022/05/23 | 109479 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/05/23 | 1120840 | support/TeX4ht/source/tex4ht-4ht.tex
2022/05/23 | 1088032 | systems/texlive/tlnet/archive/gentium-tug.doc.r63367.tar.xz
-2022/05/23 | 107704 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2022/05/23 | 10628 | systems/texlive/tlnet/archive/latex-lab-dev.r63373.tar.xz
2022/05/23 | 1057 | macros/unicodetex/latex/njuthesis/README.md
-2022/05/23 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/05/23 | 103338 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/05/23 | 103092 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/05/23 | 1021846 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
2022/05/23 | 1007548 | systems/texlive/tlnet/archive/xepersian.doc.r63371.tar.xz
-2022/05/23 | 100487 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2022/05/22 | 989 | graphics/pgf/contrib/causets/causet_tikz_example1.tex
2022/05/22 | 988 | indexing/makeindexk/configure.ac
2022/05/22 | 96 | indexing/makeindexk/tests/pprecB-0.ind
@@ -248,7 +382,6 @@
2022/05/22 | 9468 | systems/texlive/tlnet/archive/sidenotesplus.source.r63355.tar.xz
2022/05/22 | 942 | indexing/makeindexk/tests/romalpC-5.ind
2022/05/22 | 91878 | macros/latex/contrib/create-theorem/create-theorem.sty
-2022/05/22 | 909740 | macros/xetex/latex/bidi/bidi.dtx
2022/05/22 | 90350 | macros/latex/contrib/functional/functional.sty
2022/05/22 | 865189 | macros/latex/contrib/functional/functional.pdf
2022/05/22 | 861855 | macros/latex/required/babel/base/babel.pdf
@@ -266,16 +399,12 @@
2022/05/22 | 786 | indexing/makeindexk/tests/romalpB-7.ind
2022/05/22 | 786 | indexing/makeindexk/tests/romalpB-6.ind
2022/05/22 | 786 | indexing/makeindexk/tests/romalpB-5.ind
-2022/05/22 | 772104 | macros/xetex/latex/xepersian/xepersian.pdf
-2022/05/22 | 761651 | macros/xetex/latex/bidi/gull.jpg
2022/05/22 | 759813 | macros/latex/contrib/functional.zip
2022/05/22 | 74 | graphics/pgf/contrib/pgf-umlcd/demo/note.tex
2022/05/22 | 7461 | macros/latex/required/babel/base/babel.ins
2022/05/22 | 745 | graphics/pgf/contrib/pgf-umlcd/demo/inheritance.tex
2022/05/22 | 7444 | fonts/gentium-tug/doc/gentium-tug/README
-2022/05/22 | 7313 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/05/22 | 729252 | macros/latex/required/babel/base/babel.dtx
-2022/05/22 | 71644 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
2022/05/22 | 681 | indexing/makeindexk/tests/romalpD.idx
2022/05/22 | 676 | macros/latex/contrib/create-theorem/README.md
2022/05/22 | 6640 | systems/texlive/tlnet/archive/collection-latexextra.r63355.tar.xz
@@ -285,8 +414,6 @@
2022/05/22 | 631 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/assets/css/webfontsttf.css
2022/05/22 | 621 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/assets/css/webfonts.css
2022/05/22 | 617510 | support/TeX4ht/source/tex4ht-html4.tex
-2022/05/22 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
-2022/05/22 | 5939 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
2022/05/22 | 58635 | fonts/gentium-tug/doc/GentiumPlus-6.101/OFL-FAQ.txt
2022/05/22 | 5860 | systems/texlive/tlnet/archive/unbtex.r63356.tar.xz
2022/05/22 | 5792 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/about.html
@@ -294,9 +421,7 @@
2022/05/22 | 5640 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/about.html
2022/05/22 | 5496 | systems/texlive/tlnet/archive/sidenotesplus.r63355.tar.xz
2022/05/22 | 547 | graphics/pgf/contrib/pgf-umlcd/RELEASE_NOTES.md
-2022/05/22 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
2022/05/22 | 54048 | graphics/pgf/contrib/causets/causet_tikz_example2.pdf
-2022/05/22 | 534 | macros/xetex/latex/bidi/bidi-doc.ltx
2022/05/22 | 533226 | indexing/makeindexk/configure.texk
2022/05/22 | 5304 | fonts/gentium-tug/source/Makefile
2022/05/22 | 5275 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/developer.html
@@ -310,53 +435,42 @@
2022/05/22 | 467 | graphics/pgf/contrib/pgf-umlcd/README.md
2022/05/22 | 46696 | graphics/pgf/contrib/causets/causets.tex
2022/05/22 | 4630 | graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.tex
-2022/05/22 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
-2022/05/22 | 4547 | macros/xetex/latex/bidi/bidi-doc-latex-pkgs.ltx
2022/05/22 | 4543 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/resources.html
2022/05/22 | 450 | graphics/pgf/contrib/pgf-umlcd/demo/color.tex
-2022/05/22 | 4497 | macros/xetex/latex/bidi/bidi-doc-latex-programming.ltx
2022/05/22 | 4413 | fonts/gentium-tug/doc/GentiumPlus-6.101/OFL.txt
2022/05/22 | 4353 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/resources.html
2022/05/22 | 434 | graphics/pgf/contrib/pgf-umlcd/COPYING
2022/05/22 | 4327 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/versions.html
-2022/05/22 | 4324654 | install/macros/xetex/latex/bidi.tds.zip
2022/05/22 | 4224 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/about.md
2022/05/22 | 4223 | fonts/gentium-tug/doc/gentium-tug/FONTLOG.txt
2022/05/22 | 4168 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/about.md
2022/05/22 | 4156 | graphics/pgf/contrib/causets/causet_tikz_example2.tex
-2022/05/22 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
-2022/05/22 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
2022/05/22 | 40 | indexing/makeindexk/tests/pprec5.ist
2022/05/22 | 409 | graphics/pgf/contrib/pgf-umlcd/demo/multiple-inheritance.tex
2022/05/22 | 4087 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/versions.html
2022/05/22 | 399980 | systems/texlive/tlnet/archive/sidenotesplus.doc.r63355.tar.xz
2022/05/22 | 397 | graphics/pgf/contrib/pgf-umlcd/pgf-umlcd.sty
-2022/05/22 | 3964814 | macros/xetex/latex/bidi.zip
2022/05/22 | 391462 | install/macros/latex/contrib/pdfpages.tds.zip
-2022/05/22 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
2022/05/22 | 385 | graphics/pgf/contrib/pgf-umlcd/demo/implement-interface.tex
2022/05/22 | 38004 | graphics/pgf/contrib/pgf-umlcd/logo.png
2022/05/22 | 3763 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/developer.md
2022/05/22 | 37352 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/features.html
+2022/05/22 | 37060 | macros/latex/contrib/stex/source/stex/stex-features.dtx
2022/05/22 | 36 | indexing/makeindexk/tests/pprec7.ist
2022/05/22 | 36 | indexing/makeindexk/tests/pprec6.ist
2022/05/22 | 3693 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/developer.md
2022/05/22 | 361007 | macros/latex/contrib/pdfpages.zip
-2022/05/22 | 3596 | macros/xetex/latex/bidi/bidi-doc-preamble.ltx
2022/05/22 | 3552 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/assets/css/theme.css
2022/05/22 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
2022/05/22 | 34848 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/features.html
2022/05/22 | 344 | graphics/pgf/contrib/pgf-umlcd/demo/class.tex
2022/05/22 | 3439 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/design.html
-2022/05/22 | 340551 | macros/xetex/latex/xepersian/xepersian.dtx
2022/05/22 | 3380 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/design.html
2022/05/22 | 3324 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/resources.md
2022/05/22 | 3299 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/assets/css/themepdf.css
2022/05/22 | 3179 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/faq.md
2022/05/22 | 316 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/DOCUMENTATION.txt
-2022/05/22 | 3139075 | macros/xetex/latex/bidi/bidi.pdf
2022/05/22 | 3108 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/faq.md
-2022/05/22 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
2022/05/22 | 30894 | macros/latex/contrib/pdfpages/dummy.pdf
2022/05/22 | 308748 | graphics/pgf/contrib/pgf-umlcd.zip
2022/05/22 | 3007 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/resources.md
@@ -364,19 +478,14 @@
2022/05/22 | 300131 | macros/latex/contrib/functional/functional.tex
2022/05/22 | 2983 | macros/latex/contrib/pdfpages/pdfpages.ins
2022/05/22 | 2938 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/index.html
-2022/05/22 | 2936 | macros/xetex/latex/bidi/bidi-bibitem.pdf
2022/05/22 | 2890810 | install/macros/latex/required/babel-base.tds.zip
2022/05/22 | 287 | graphics/pgf/contrib/pgf-umlcd/demo/object-include-methods.tex
2022/05/22 | 2784 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/index.html
2022/05/22 | 276 | graphics/pgf/contrib/pgf-umlcd/demo/abstract-class.tex
2022/05/22 | 2754 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/versions.md
-2022/05/22 | 25946 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
-2022/05/22 | 2574 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
2022/05/22 | 2510 | macros/latex/required/babel/base/README.md
2022/05/22 | 24500 | graphics/pgf/contrib/causets/causets.sty
-2022/05/22 | 243585 | macros/xetex/latex/xepersian/xepersian-doc.pdf
2022/05/22 | 2434 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/design.md
-2022/05/22 | 23945 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
2022/05/22 | 23736 | macros/latex/contrib/create-theorem/create-theorem-doc.tex
2022/05/22 | 23513 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/features.md
2022/05/22 | 2344 | fonts/gentium-tug/source/make-zip-4CTAN.sh
@@ -390,15 +499,11 @@
2022/05/22 | 21813 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/features.md
2022/05/22 | 21495 | fonts/gentium-tug/doc/gentium-tug/gentium.tex
2022/05/22 | 211 | graphics/pgf/contrib/pgf-umlcd/demo/composition.tex
-2022/05/22 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
-2022/05/22 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
2022/05/22 | 2104 | indexing/makeindexk/tests/romalpC.idx
2022/05/22 | 20858 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/history.html
2022/05/22 | 2012 | systems/texlive/tlnet/archive/bxghost.r63354.tar.xz
2022/05/22 | 1980 | systems/texlive/tlnet/archive/bxghost.doc.r63354.tar.xz
-2022/05/22 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
2022/05/22 | 19595 | fonts/gentium-tug/doc/GentiumPlus-6.101/FONTLOG.txt
-2022/05/22 | 193319 | support/TeX4ht/source/ChangeLog
2022/05/22 | 1927 | graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.tex
2022/05/22 | 19267 | indexing/makeindexk/scanid.c
2022/05/22 | 19106 | macros/latex/contrib/create-theorem/LICENSE
@@ -406,84 +511,67 @@
2022/05/22 | 1884 | indexing/makeindexk/Makefile.am
2022/05/22 | 1851156 | macros/latex/required/babel/base.zip
2022/05/22 | 184 | graphics/pgf/contrib/pgf-umlcd/demo/aggregation.tex
-2022/05/22 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
2022/05/22 | 180 | graphics/pgf/contrib/pgf-umlcd/demo/interface.tex
2022/05/22 | 18092 | graphics/pgf/contrib/pgf-umlcd/LICENSE-GPL2.txt
-2022/05/22 | 178054 | macros/xetex/latex/bidi/bidi-doc.pdf
2022/05/22 | 178021 | macros/latex/contrib/pdfpages/pdfpages.dtx
2022/05/22 | 172 | graphics/pgf/contrib/pgf-umlcd/demo/object.tex
2022/05/22 | 170 | indexing/makeindexk/tests/romalpD-7.ind
2022/05/22 | 170 | indexing/makeindexk/tests/romalpD-6.ind
2022/05/22 | 170 | indexing/makeindexk/tests/romalpD-5.ind
2022/05/22 | 1697 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/index.md
-2022/05/22 | 1693 | macros/xetex/latex/bidi/picture.jpg
2022/05/22 | 164 | indexing/makeindexk/tests/romalpA.idx
2022/05/22 | 1628 | indexing/makeindexk/tests/romalpB.idx
2022/05/22 | 16235 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/history.md
-2022/05/22 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
2022/05/22 | 15869 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/history.html
-2022/05/22 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
2022/05/22 | 1559 | fonts/gentium-tug/doc/GentiumPlus-6.101/README.txt
2022/05/22 | 1518060 | systems/texlive/tlnet/archive/dvisvgm.win32.r63357.tar.xz
+2022/05/22 | 1493 | macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg
2022/05/22 | 14700 | graphics/pgf/contrib/pgf-umlcd/tikzlibraryumlcd.code.tex
2022/05/22 | 14627 | indexing/makeindexk/mkind.h
-2022/05/22 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
2022/05/22 | 1440628 | systems/texlive/tlnet/archive/unbtex.doc.r63356.tar.xz
2022/05/22 | 14142 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/charset.html
-2022/05/22 | 1396 | macros/xetex/latex/bidi/bidi-doc-intro.ltx
-2022/05/22 | 1390 | macros/xetex/latex/xepersian/README
2022/05/22 | 1382 | macros/latex/contrib/pdfpages/README
-2022/05/22 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
2022/05/22 | 13706 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/charset.html
-2022/05/22 | 1323 | macros/xetex/latex/bidi/README
-2022/05/22 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
2022/05/22 | 12 | macros/latex/contrib/create-theorem/DEPENDS.txt
-2022/05/22 | 1288794 | install/macros/xetex/latex/xepersian.tds.zip
2022/05/22 | 12739299 | install/fonts/gentium-tug.tds.zip
2022/05/22 | 12706174 | fonts/gentium-tug.zip
2022/05/22 | 12470 | macros/latex/contrib/pdfpages/dummy-l.pdf
-2022/05/22 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
2022/05/22 | 1209 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/support.md
2022/05/22 | 12023 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/history.md
2022/05/22 | 119454 | macros/latex/contrib/create-theorem/create-theorem-doc.pdf
2022/05/22 | 1154 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/support.md
-2022/05/22 | 1126352 | macros/xetex/latex/xepersian.zip
-2022/05/22 | 1120709 | support/TeX4ht/source/tex4ht-4ht.tex
2022/05/22 | 111 | graphics/pgf/contrib/pgf-umlcd/description.html
-2022/05/22 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
2022/05/22 | 106025 | graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg
2022/05/21 | 99154 | macros/latex/contrib/unbtex/unbtex-example/figuras/fig1.eps
2022/05/21 | 99072046 | systems/win32/TLW64/tl-win64.zip
2022/05/21 | 972 | macros/latex/contrib/unbtex/unbtex-example/codigos/ModalReduction.jl
-2022/05/21 | 908388 | systems/texlive/tlnet/archive/hvextern.doc.r63346.tar.xz
-2022/05/21 | 813888 | systems/texlive/tlnet/archive/tugboat.doc.r63347.tar.xz
2022/05/21 | 804 | language/japanese/BX/bxghost/bxghost.sty
2022/05/21 | 678008 | systems/texlive/tlnet/archive/lua-widow-control.doc.r63345.tar.xz
2022/05/21 | 624 | macros/latex/contrib/unbtex/unbtex-example/apendice-b.tex
-2022/05/21 | 5660 | systems/texlive/tlnet/archive/hvextern.r63346.tar.xz
2022/05/21 | 558 | macros/latex/contrib/unbtex/unbtex-example/anexo-a.tex
2022/05/21 | 5069 | macros/latex/contrib/unbtex/unbtex-example/references.bib
+2022/05/21 | 45447 | macros/latex/contrib/stex/source/stex/stex-symbols.dtx
2022/05/21 | 44516 | systems/texlive/tlnet/archive/lua-widow-control.source.r63345.tar.xz
2022/05/21 | 424 | macros/latex/contrib/unbtex/unbtex-example/anexo-b.tex
-2022/05/21 | 41208 | systems/texlive/tlnet/archive/tugboat.source.r63347.tar.xz
2022/05/21 | 4108 | language/japanese/BX/bxghost.zip
2022/05/21 | 3846 | language/japanese/BX/bxghost/bxghost-lib.sty
2022/05/21 | 3814 | macros/latex/contrib/unbtex/unbtex-example/capitulo3.tex
2022/05/21 | 3811362 | info/biblio/tugboat.bib
2022/05/21 | 373 | macros/latex/contrib/unbtex/unbtex-example/codigos/controle.m
2022/05/21 | 3573 | info/biblio/tugboat.ltx
-2022/05/21 | 33484 | systems/texlive/tlnet/archive/tugboat-plain.r63348.tar.xz
2022/05/21 | 31319 | macros/latex/contrib/unbtex/unbtex-example/figuras/img-grafico.pdf
-2022/05/21 | 28976 | systems/texlive/tlnet/archive/tugboat.r63347.tar.xz
+2022/05/21 | 30030 | macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
+2022/05/21 | 28547 | macros/latex/contrib/stex/source/stex/stex-modules.dtx
2022/05/21 | 2752 | macros/latex/contrib/unbtex/unbtex-example/capitulo1.tex
2022/05/21 | 2714 | macros/latex/contrib/unbtex/unbtex-example/apendice-a.tex
2022/05/21 | 26807 | macros/latex/contrib/unbtex/unbtex-example/capitulo2.tex
2022/05/21 | 245216 | macros/latex/contrib/unbtex/unbtex-example/figuras/img-marca.pdf
2022/05/21 | 2448 | macros/latex/contrib/unbtex/unbtex-example/capitulo4.tex
2022/05/21 | 2337 | language/japanese/BX/bxghost/README.md
-2022/05/21 | 220396 | systems/texlive/tlnet/archive/tugboat-plain.doc.r63348.tar.xz
2022/05/21 | 214 | macros/latex/contrib/unbtex/unbtex-example/capitulo5.tex
+2022/05/21 | 20352 | macros/latex/contrib/stex/source/stex/stex-proofs.dtx
2022/05/21 | 19971 | macros/latex/contrib/unbtex/unbtex-example/figuras/1280px-LaTeX-logo.png
+2022/05/21 | 1847 | macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
2022/05/21 | 18369 | graphics/pgf/contrib/causets/causet_tikz_example1.pdf
2022/05/21 | 1804 | macros/latex/contrib/unbtex/README.md
2022/05/21 | 17453 | macros/latex/contrib/unbtex/unbtex.cls
@@ -1096,7 +1184,6 @@
2022/05/18 | 84368 | systems/texlive/tlnet/archive/expex-acro.doc.r63319.tar.xz
2022/05/18 | 8126 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-nd-unofficial-mr-80x15.pdf
2022/05/18 | 811156 | systems/texlive/tlnet/archive/optex.r63325.tar.xz
-2022/05/18 | 796056 | macros/generic/markdown/markdown.pdf
2022/05/18 | 7940 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-sa-80x15.eps
2022/05/18 | 7819 | macros/latex/contrib/doclicense/images/doclicense-CC-by-88x31.eps
2022/05/18 | 7499 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-sa-unofficial-mr-80x15.pdf
@@ -1109,7 +1196,6 @@
2022/05/18 | 7048 | macros/latex/contrib/doclicense/license-texts/doclicense-CC-zero-1.0-plaintext.tex
2022/05/18 | 7002 | macros/latex/contrib/doclicense/images/doclicense-CC-by-sa-80x15.eps
2022/05/18 | 698463 | support/TeX4ht/source/tex4ht-fonts-modern.tex
-2022/05/18 | 686768 | macros/generic/markdown/markdown.html
2022/05/18 | 6616 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-80x15.eps
2022/05/18 | 6580 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nd-unofficial-mr-88x31.pdf
2022/05/18 | 6526 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nd-80x15.eps
@@ -1133,7 +1219,6 @@
2022/05/18 | 47116 | systems/texlive/tlnet/archive/biblatex-gb7714-2015.r63322.tar.xz
2022/05/18 | 4697 | macros/latex/contrib/doclicense/images/doclicense-CC-zero-88x31.pdf
2022/05/18 | 4540 | systems/texlive/tlnet/archive/expex-acro.r63319.tar.xz
-2022/05/18 | 4530 | macros/generic/markdown/markdown.css
2022/05/18 | 4460 | macros/latex/contrib/doclicense/images/doclicense-CC-by-sa-88x31.pdf
2022/05/18 | 44197 | macros/latex/contrib/doclicense/doclicense.dtx
2022/05/18 | 4365 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-eu-88x31.pdf
@@ -1160,7 +1245,6 @@
2022/05/18 | 3279 | macros/latex/contrib/media4svg/media4svg.lua
2022/05/18 | 3273 | macros/latex/contrib/doclicense/doclicense-ukrainian.ldf
2022/05/18 | 3253 | macros/latex/contrib/doclicense/images/doclicense-CC-by-sa-80x15.pdf
-2022/05/18 | 31 | macros/generic/markdown/VERSION
2022/05/18 | 31754 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-nd-unofficial-mr-88x31.eps
2022/05/18 | 312532 | systems/texlive/tlnet/archive/adjmulticol.doc.r63320.tar.xz
2022/05/18 | 308 | macros/latex/contrib/doclicense/doclicense-canadien.ldf
@@ -1199,7 +1283,6 @@
2022/05/18 | 23182 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-unofficial-mr-88x31.eps
2022/05/18 | 2293 | macros/latex/contrib/doclicense/doclicense-bulgarian.ldf
2022/05/18 | 2246 | macros/latex/contrib/doclicense/doclicense-french.ldf
-2022/05/18 | 22371 | macros/generic/markdown/libraries/markdown-tinyyaml.lua
2022/05/18 | 22306 | macros/latex/contrib/doclicense/license-texts/doclicense-CC-by-nc-sa-3.0-plaintext.tex
2022/05/18 | 22239 | macros/latex/contrib/doclicense/license-texts/doclicense-CC-by-sa-3.0-plaintext.tex
2022/05/18 | 22108 | macros/latex/contrib/doclicense/license-texts/doclicense-CC-by-nc-sa-3.0-latex.tex
@@ -1273,7 +1356,6 @@
2022/05/18 | 1175167 | macros/generic/xint/sourcexint.pdf
2022/05/18 | 11686 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-sa-unofficial-mr-88x31.pdf
2022/05/18 | 11647 | macros/latex/contrib/doclicense/images/doclicense-CC-by-sa-88x31.eps
-2022/05/18 | 1159396 | install/macros/generic/markdown.tds.zip
2022/05/18 | 115713 | info/tex-nutshell/tex-nutshell.tex
2022/05/18 | 11390 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-eu-88x31.eps
2022/05/18 | 11261 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nc-88x31.eps
@@ -1281,320 +1363,3 @@
2022/05/18 | 10917 | macros/latex/contrib/doclicense/images/doclicense-CC-by-unofficial-mr-88x31.eps
2022/05/18 | 1058714 | macros/generic/xint/xint.pdf
2022/05/18 | 10011 | macros/latex/contrib/doclicense/images/doclicense-CC-by-nd-88x31.eps
-2022/05/17 | 959 | macros/latex/contrib/beamer/base/themes/theme/beamerthemePaloAlto.sty
-2022/05/17 | 954 | macros/latex/contrib/beamer/doc/emulation-examples/beamerexample-foils.tex
-2022/05/17 | 951 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeBerkeley.sty
-2022/05/17 | 9407 | macros/latex/contrib/beamer/base/beamerbasedecode.sty
-2022/05/17 | 9209 | macros/latex/contrib/beamer/base/beamerbaseframesize.sty
-2022/05/17 | 91739 | macros/generic/expex-acro.zip
-2022/05/17 | 9134 | macros/latex/contrib/beamer/doc/beamerug-graphics.tex
-2022/05/17 | 908 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html
-2022/05/17 | 902 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeBoadilla.sty
-2022/05/17 | 87971 | macros/generic/expex-acro/expex-acro.pdf
-2022/05/17 | 877224 | macros/latex/contrib/hyperref/hyperref.dtx
-2022/05/17 | 863 | macros/latex/contrib/thuthesis/thuthesis-inline.cbx
-2022/05/17 | 861 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic1.jpg
-2022/05/17 | 858 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html
-2022/05/17 | 856 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeSingapore.sty
-2022/05/17 | 853 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemerose.sty
-2022/05/17 | 8496 | macros/latex/contrib/beamer/doc/beameruserguide.tex
-2022/05/17 | 835 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemeorchid.sty
-2022/05/17 | 8317 | macros/latex/contrib/beamer/doc/beamerug-tricks.tex
-2022/05/17 | 8313 | macros/latex/contrib/beamer/base/beamerbasemisc.sty
-2022/05/17 | 8300 | macros/latex/contrib/beamer/doc/solutions/conference-talks/conference-ornate-20min.fr.tex
-2022/05/17 | 823 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemestructure.sty
-2022/05/17 | 7986 | macros/latex/contrib/beamer/doc/beamerug-twoscreens.tex
-2022/05/17 | 790 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeHannover.sty
-2022/05/17 | 7810 | macros/optex/README
-2022/05/17 | 778 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
-2022/05/17 | 7755 | macros/latex/contrib/beamer/base/beamerbasetoc.sty
-2022/05/17 | 771 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html
-2022/05/17 | 768 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html
-2022/05/17 | 768 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html
-2022/05/17 | 768 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html
-2022/05/17 | 76557 | macros/latex/contrib/beamer/doc/beamerug-frames.tex
-2022/05/17 | 75 | macros/generic/markdown/examples/scientists.csv
-2022/05/17 | 7574 | macros/latex/contrib/beamer/base/beamerbasemodes.sty
-2022/05/17 | 7558 | macros/latex/contrib/beamer/doc/solutions/conference-talks/conference-ornate-20min.de.tex
-2022/05/17 | 7543 | macros/latex/contrib/hyperref/hyperref-patches.dtx
-2022/05/17 | 75212 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
-2022/05/17 | 7344 | macros/latex/contrib/beamer/base/beamerbaseboxes.sty
-2022/05/17 | 7298 | macros/latex/contrib/thuthesis/README.md
-2022/05/17 | 720 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemesidebartab.sty
-2022/05/17 | 7204 | macros/latex/contrib/beamer/CHANGELOG.md
-2022/05/17 | 716 | macros/latex/contrib/beamer/doc/beamerinnerthemeexample.tex
-2022/05/17 | 709 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemestructuresmallcapsserif.sty
-2022/05/17 | 7089 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemedefault.sty
-2022/05/17 | 702 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemestructureitalicserif.sty
-2022/05/17 | 701 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemecompatibility.sty
-2022/05/17 | 6946 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemedefault.sty
-2022/05/17 | 6858 | macros/latex/contrib/beamer/doc/solutions/conference-talks/conference-ornate-20min.en.tex
-2022/05/17 | 671 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemestructurebold.sty
-2022/05/17 | 6578 | macros/latex/contrib/beamer/base/multimedia/xmpmulti.sty
-2022/05/17 | 637 | macros/latex/contrib/beamer/base/beamerbasetranslator.sty
-2022/05/17 | 6319 | macros/latex/contrib/beamer/doc/beamerug-installation.tex
-2022/05/17 | 63065 | macros/latex/contrib/beamer/doc/beamerug-localstructure.tex
-2022/05/17 | 623398 | macros/generic/markdown/markdown.dtx
-2022/05/17 | 6217 | macros/latex/contrib/beamer/base/patch/beamerpatchparalist.sty
-2022/05/17 | 613 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic4.jpg
-2022/05/17 | 6039 | macros/latex/contrib/beamer/doc/solutions/generic-talks/generic-ornate-15min-45min.fr.tex
-2022/05/17 | 602 | macros/latex/contrib/thuthesis/latexmkrc
-2022/05/17 | 5966 | macros/latex/contrib/beamer/base/emulation/beamerprosper.sty
-2022/05/17 | 594 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeEastLansing.sty
-2022/05/17 | 582 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemelily.sty
-2022/05/17 | 581850 | info/latex-via-exemplos/latex-via-exemplos.tex
-2022/05/17 | 580 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemetree.sty
-2022/05/17 | 5753 | macros/latex/contrib/beamer/base/beamerbasetemplates.sty
-2022/05/17 | 5736 | macros/latex/contrib/hyperref/xr-hyper.sty
-2022/05/17 | 5712 | macros/latex/contrib/beamer/base/beamerbasenotes.sty
-2022/05/17 | 569 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeRochester.sty
-2022/05/17 | 558 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemeshadow.sty
-2022/05/17 | 5584 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/makeall.py
-2022/05/17 | 557 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeMadrid.sty
-2022/05/17 | 5514 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-style.tex
-2022/05/17 | 5492 | macros/latex/contrib/beamer/doc/solutions/generic-talks/generic-ornate-15min-45min.de.tex
-2022/05/17 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex
-2022/05/17 | 547609 | macros/latex/contrib/beamer/doc/beamerexample-lecture-beamer-version.pdf
-2022/05/17 | 5438 | macros/latex/contrib/thuthesis/data/denotation.tex
-2022/05/17 | 5356 | macros/latex/contrib/beamer/base/beamerbasetitle.sty
-2022/05/17 | 53027 | macros/latex/contrib/adjmulticol/sample.pdf
-2022/05/17 | 5252 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemesidebar.sty
-2022/05/17 | 51776 | macros/latex/contrib/beamer/base/art/beamericononline.eps
-2022/05/17 | 513879 | macros/latex/contrib/hyperref/doc/hyperref-doc.html
-2022/05/17 | 5103 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthememiniframes.sty
-2022/05/17 | 5086 | macros/latex/contrib/hyperref/hyperref.ins
-2022/05/17 | 5073 | macros/latex/contrib/beamer/doc/solutions/generic-talks/generic-ornate-15min-45min.en.tex
-2022/05/17 | 504 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeBerlin.sty
-2022/05/17 | 501 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeIlmenau.sty
-2022/05/17 | 50187 | macros/latex/contrib/hyperref/hluatex.dtx
-2022/05/17 | 49902 | macros/latex/contrib/thuthesis/thuthesis-author-year.bst
-2022/05/17 | 4960 | macros/latex/contrib/thuthesis/data/chap02.tex
-2022/05/17 | 493 | macros/latex/contrib/adjmulticol/README
-2022/05/17 | 490 | macros/latex/contrib/beamer/doc/beamerfontthemeexample.tex
-2022/05/17 | 486 | macros/latex/contrib/beamer/doc/beamerthemeexample.tex
-2022/05/17 | 485 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeAnnArbor.sty
-2022/05/17 | 482 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemeplain.sty
-2022/05/17 | 4796 | macros/latex/contrib/thuthesis/thusetup.tex
-2022/05/17 | 471 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic3.jpg
-2022/05/17 | 471 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeCambridgeUS.sty
-2022/05/17 | 470 | macros/generic/expex-acro/README.md
-2022/05/17 | 4656 | macros/latex/contrib/thuthesis/data/chap01.tex
-2022/05/17 | 464 | macros/latex/contrib/beamer/doc/beamerouterthemeexample.tex
-2022/05/17 | 462 | macros/latex/contrib/thuthesis/data/resolution.tex
-2022/05/17 | 462 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeDresden.sty
-2022/05/17 | 46116 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst
-2022/05/17 | 46113 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
-2022/05/17 | 459 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeSzeged.sty
-2022/05/17 | 4548 | macros/latex/contrib/beamer/base/beamerbasetheorems.sty
-2022/05/17 | 4485 | macros/generic/markdown/docstrip.cfg
-2022/05/17 | 4482 | macros/optex/doc/optex-doc.tex
-2022/05/17 | 4479 | macros/latex/contrib/hyperref/README.md
-2022/05/17 | 4468871 | install/macros/latex/contrib/hyperref.tds.zip
-2022/05/17 | 441714 | macros/latex/contrib/beamer/doc/beamerexample-lecture-print-version.pdf
-2022/05/17 | 4373 | macros/latex/contrib/beamer/doc/beamerug-transparencies.tex
-2022/05/17 | 4371 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemesmoothbars.sty
-2022/05/17 | 435 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic5.jpg
-2022/05/17 | 433 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemebars.sty
-2022/05/17 | 431 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemeclassic.sty
-2022/05/17 | 4288435 | macros/latex/contrib/hyperref.zip
-2022/05/17 | 425 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeFrankfurt.sty
-2022/05/17 | 4252 | macros/latex/contrib/beamer/base/themes/inner/beamerinnerthemeinmargin.sty
-2022/05/17 | 4236 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemedefault.sty
-2022/05/17 | 420 | macros/latex/contrib/thuthesis/ref/appendix.bib
-2022/05/17 | 41261 | macros/latex/contrib/beamer/doc/beamerug-guidelines.tex
-2022/05/17 | 4124 | macros/optex/base/optex.ini
-2022/05/17 | 407 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeJuanLesPins.sty
-2022/05/17 | 407 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeDarmstadt.sty
-2022/05/17 | 40720 | macros/latex/contrib/beamer/doc/beamerug-license.tex
-2022/05/17 | 40585 | macros/latex/contrib/beamer/doc/beamerug-overlays.tex
-2022/05/17 | 404492 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
-2022/05/17 | 403 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeWarsaw.sty
-2022/05/17 | 402 | macros/latex/contrib/beamer/base/themes/inner/beamerinnerthemecircles.sty
-2022/05/17 | 4026 | macros/latex/contrib/beamer/base/beamerbaseverbatim.sty
-2022/05/17 | 401 | macros/latex/contrib/beamer/base/themes/inner/beamerinnerthemerectangles.sty
-2022/05/17 | 39707 | macros/latex/contrib/beamer/doc/beamerug-globalstructure.tex
-2022/05/17 | 396 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemesplit.sty
-2022/05/17 | 393 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeLuebeck.sty
-2022/05/17 | 39313 | macros/latex/contrib/thuthesis/CHANGELOG.md
-2022/05/17 | 391 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeAntibes.sty
-2022/05/17 | 390 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeCopenhagen.sty
-2022/05/17 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf
-2022/05/17 | 3836 | macros/latex/contrib/thuthesis/data/chap03.tex
-2022/05/17 | 380 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-print-version.tex
-2022/05/17 | 3803 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemesmoothtree.sty
-2022/05/17 | 378 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeBergen.sty
-2022/05/17 | 378364 | systems/texlive/tlnet/archive/erewhon.doc.r63312.tar.xz
-2022/05/17 | 377654 | macros/latex/contrib/thuthesis/thuthesis-example.pdf
-2022/05/17 | 366 | macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
-2022/05/17 | 365 | macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
-2022/05/17 | 36330 | macros/generic/expex-acro/expex-acro.dtx
-2022/05/17 | 36306 | macros/latex/contrib/beamer/doc/beamerug-color.tex
-2022/05/17 | 3615 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeboxes.sty
-2022/05/17 | 35658 | macros/latex/contrib/beamer/doc/beamerug-animations.tex
-2022/05/17 | 3560207 | macros/latex/contrib/beamer.zip
-2022/05/17 | 355 | macros/latex/contrib/beamer/base/themes/theme/beamerthemedefault.sty
-2022/05/17 | 3556821 | install/macros/latex/contrib/beamer.tds.zip
-2022/05/17 | 351 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeMontpellier.sty
-2022/05/17 | 351 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeMalmoe.sty
-2022/05/17 | 3464 | macros/latex/contrib/beamer/base/art/beamericonarticle.tex
-2022/05/17 | 3444 | macros/latex/contrib/beamer/doc/licenses/manifest-code.txt
-2022/05/17 | 343911 | macros/latex/contrib/beamer/doc/beamerexample-conference-talk.pdf
-2022/05/17 | 342 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-beamer-version.tex
-2022/05/17 | 33808 | macros/latex/contrib/beamer/doc/beamerug-elements.tex
-2022/05/17 | 333 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemeprofessionalfonts.sty
-2022/05/17 | 332 | macros/latex/contrib/beamer/base/themes/theme/beamerthemePittsburgh.sty
-2022/05/17 | 33143 | macros/latex/contrib/beamer/base/art/beamericononline.20.eps
-2022/05/17 | 3294 | macros/latex/contrib/beamer/base/beamerbasearticle.sty
-2022/05/17 | 32823 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-logo.pdf
-2022/05/17 | 32653 | macros/latex/contrib/beamer/doc/beamerug-emulation.tex
-2022/05/17 | 320228 | macros/latex/contrib/adjmulticol.zip
-2022/05/17 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty
-2022/05/17 | 313 | macros/latex/contrib/thuthesis/spine.tex
-2022/05/17 | 3129 | macros/generic/markdown/examples/example.md
-2022/05/17 | 312211 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
-2022/05/17 | 3072 | macros/latex/contrib/beamer/doc/solutions/short-talks/speaker_introduction-ornate-2min.fr.tex
-2022/05/17 | 3049 | macros/latex/contrib/beamer/base/art/beamericonbook.tex
-2022/05/17 | 2961 | macros/latex/contrib/beamer/doc/solutions/short-talks/speaker_introduction-ornate-2min.de.tex
-2022/05/17 | 2958 | macros/latex/contrib/beamer/base/art/beamericonarticle.20.pdf
-2022/05/17 | 2956 | macros/latex/contrib/thuthesis/data/chap04.tex
-2022/05/17 | 2936 | macros/latex/contrib/beamer/base/art/beamericonarticle.pdf
-2022/05/17 | 29020 | macros/latex/contrib/beamer/base/beamerbasenavigation.sty
-2022/05/17 | 285 | macros/latex/contrib/thuthesis/data/comments.tex
-2022/05/17 | 28508 | macros/latex/contrib/beamer/base/beamerbaseoverlay.sty
-2022/05/17 | 28408 | macros/latex/contrib/hyperref/backref.dtx
-2022/05/17 | 279 | macros/latex/contrib/hyperref/ntheorem-hyper.sty
-2022/05/17 | 2771 | macros/latex/contrib/beamer/doc/beamerug-solutions.tex
-2022/05/17 | 275 | macros/latex/contrib/hyperref/minitoc-hyper.sty
-2022/05/17 | 2754 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemeshadow.sty
-2022/05/17 | 2734 | macros/latex/contrib/beamer/base/art/beamericonbook.20.pdf
-2022/05/17 | 27164 | macros/latex/contrib/hyperref/nameref.dtx
-2022/05/17 | 2667 | macros/latex/contrib/beamer/base/art/beamericonbook.pdf
-2022/05/17 | 266279 | macros/latex/contrib/adjmulticol/adjmulticol.pdf
-2022/05/17 | 26603 | macros/latex/contrib/beamer/base/art/beamericonarticle.eps
-2022/05/17 | 2627 | macros/latex/contrib/beamer/doc/solutions/short-talks/speaker_introduction-ornate-2min.en.tex
-2022/05/17 | 26232 | macros/latex/contrib/beamer/base/beamerbasecompatibility.sty
-2022/05/17 | 2596492 | systems/texlive/tlnet/archive/erewhon.r63312.tar.xz
-2022/05/17 | 2586 | macros/latex/contrib/thuthesis/thuthesis-example.tex
-2022/05/17 | 25572 | macros/latex/contrib/beamer/base/beamerbaseframe.sty
-2022/05/17 | 2529 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemesplit.sty
-2022/05/17 | 24762 | macros/latex/contrib/beamer/base/art/beamericonbook.20.eps
-2022/05/17 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip
-2022/05/17 | 24611 | macros/latex/contrib/beamer/base/art/beamericononline.pdf
-2022/05/17 | 24451 | macros/latex/contrib/beamer/base/art/beamericononline.20.pdf
-2022/05/17 | 24344 | macros/latex/contrib/beamer/base/beamerbaseauxtemplates.sty
-2022/05/17 | 24312 | macros/latex/contrib/beamer/doc/beamerug-tutorial.tex
-2022/05/17 | 2395232 | macros/optex.zip
-2022/05/17 | 2363000 | macros/latex/contrib/hyperref/doc/hyperref.pdf
-2022/05/17 | 2322 | macros/latex/contrib/beamer/base/themes/color/beamercolorthememonarca.sty
-2022/05/17 | 22964 | macros/latex/contrib/beamer/doc/licenses/fdl.txt
-2022/05/17 | 2280 | macros/latex/contrib/thuthesis/data/abstract.tex
-2022/05/17 | 2251679 | macros/latex/contrib/beamer/doc/beameruserguide.pdf
-2022/05/17 | 22108 | macros/latex/contrib/beamer/doc/beamerug-nonpresentation.tex
-2022/05/17 | 2190 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemeinfolines.sty
-2022/05/17 | 2144 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemelined.sty
-2022/05/17 | 2141 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemealbatross.sty
-2022/05/17 | 21365 | macros/latex/contrib/beamer/doc/beamerug-fonts.tex
-2022/05/17 | 21219 | macros/latex/contrib/beamer/base/art/beamericonbook.eps
-2022/05/17 | 209492 | macros/latex/contrib/thuthesis/thuthesis.dtx
-2022/05/17 | 2089 | macros/latex/contrib/beamer/doc/beamerlogo.pdf
-2022/05/17 | 20751 | macros/latex/contrib/beamer/doc/examples/a-conference-talk/beamerexample-conference-talk.tex
-2022/05/17 | 205468 | macros/latex/contrib/hyperref/doc/backref.pdf
-2022/05/17 | 2045 | macros/latex/contrib/beamer/doc/licenses/manifest-documentation.txt
-2022/05/17 | 2024 | macros/latex/contrib/thuthesis/Makefile
-2022/05/17 | 2024 | macros/latex/contrib/beamer/base/themes/outer/beamerouterthemetree.sty
-2022/05/17 | 19455 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx
-2022/05/17 | 19301 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-body.tex
-2022/05/17 | 1929 | macros/latex/contrib/hyperref/manifest.txt
-2022/05/17 | 19106 | macros/latex/contrib/thuthesis/LICENSE
-2022/05/17 | 19106 | macros/latex/contrib/beamer/doc/licenses/lppl-1-3c.txt
-2022/05/17 | 18834 | macros/latex/contrib/thuthesis/spine.pdf
-2022/05/17 | 1881 | macros/latex/contrib/beamer/base/emulation/beamerseminar.sty
-2022/05/17 | 18534 | macros/latex/contrib/beamer/doc/beamerug-themes.tex
-2022/05/17 | 1836 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
-2022/05/17 | 18092 | macros/latex/contrib/beamer/doc/licenses/gpl-2.0.txt
-2022/05/17 | 1808 | macros/latex/contrib/beamer/base/beamerbasetwoscreens.sty
-2022/05/17 | 180070 | macros/latex/contrib/hyperref/doc/nameref.pdf
-2022/05/17 | 1798 | macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
-2022/05/17 | 1797 | macros/latex/contrib/beamer/doc/emulation-examples/beamerexample-prosper.tex
-2022/05/17 | 1794 | macros/generic/expex-acro/expex-acro.ins
-2022/05/17 | 1770 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemeseagull.sty
-2022/05/17 | 17683 | macros/latex/contrib/beamer/base/beamerbaselocalstructure.sty
-2022/05/17 | 1753 | macros/latex/contrib/beamer/base/beamerbaseoptions.sty
-2022/05/17 | 1741 | macros/latex/contrib/beamer/base/emulation/beamerfoils.sty
-2022/05/17 | 1719 | macros/latex/contrib/thuthesis/data/appendix-survey.tex
-2022/05/17 | 17080 | macros/latex/contrib/beamer/base/art/beamericonarticle.20.eps
-2022/05/17 | 170462 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
-2022/05/17 | 1703244 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip
-2022/05/17 | 168949 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
-2022/05/17 | 1685602 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
-2022/05/17 | 1682 | macros/generic/markdown/examples/context-mkiv.tex
-2022/05/17 | 16788 | macros/generic/markdown/README.md
-2022/05/17 | 1664 | macros/latex/contrib/thuthesis/data/committee.tex
-2022/05/17 | 1651 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemedove.sty
-2022/05/17 | 16465 | macros/latex/contrib/beamer/doc/beamerug-interaction.tex
-2022/05/17 | 1639 | macros/generic/markdown/examples/latex.tex
-2022/05/17 | 163889 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex
-2022/05/17 | 1634 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic2.jpg
-2022/05/17 | 1619 | macros/latex/contrib/beamer/base/beamerarticle.sty
-2022/05/17 | 1616 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemecrane.sty
-2022/05/17 | 16062 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.cbx
-2022/05/17 | 1593 | macros/latex/contrib/beamer/base/beamerbaserequires.sty
-2022/05/17 | 1569 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemebeetle.sty
-2022/05/17 | 1553031 | install/macros/latex/contrib/thuthesis.tds.zip
-2022/05/17 | 1542 | macros/latex/contrib/beamer/doc/beamerthemeexamplebase.tex
-2022/05/17 | 1540 | macros/latex/contrib/beamer/AUTHORS.md
-2022/05/17 | 1526610 | macros/latex/contrib/thuthesis.zip
-2022/05/17 | 1491 | macros/generic/markdown/examples/context-mkii.tex
-2022/05/17 | 14834 | macros/latex/contrib/hyperref/doc/hyperref-doc.css
-2022/05/17 | 1478 | macros/latex/contrib/thuthesis/data/appendix.tex
-2022/05/17 | 1475 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemespruce.sty
-2022/05/17 | 1455 | macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
-2022/05/17 | 1452 | macros/latex/contrib/thuthesis/data/resume.tex
-2022/05/17 | 14512 | macros/latex/contrib/beamer/doc/beamerug-introduction.tex
-2022/05/17 | 142565 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
-2022/05/17 | 14186 | macros/latex/contrib/thuthesis/tsinghua-name-bachelor.pdf
-2022/05/17 | 1415023 | macros/optex/doc/optex-doc.pdf
-2022/05/17 | 140951 | macros/generic/markdown/markdown.png
-2022/05/17 | 1388 | macros/latex/contrib/beamer/base/multimedia/multimediasymbols.sty
-2022/05/17 | 1387 | macros/latex/contrib/thuthesis/thuthesis.ins
-2022/05/17 | 13733 | macros/latex/contrib/beamer/base/beamerbasesection.sty
-2022/05/17 | 1368 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemefly.sty
-2022/05/17 | 13642 | macros/latex/contrib/beamer/base/beamerbasefont.sty
-2022/05/17 | 1354 | macros/latex/contrib/beamer/doc/beamercolorthemeexample.tex
-2022/05/17 | 1353 | macros/latex/contrib/beamer/LICENSE.md
-2022/05/17 | 1333 | macros/generic/markdown/markdown.ins
-2022/05/17 | 132 | macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
-2022/05/17 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf
-2022/05/17 | 1309 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemebeaver.sty
-2022/05/17 | 13080 | macros/latex/contrib/beamer/base/themes/inner/beamerinnerthemedefault.sty
-2022/05/17 | 1306 | macros/latex/contrib/beamer/base/themes/theme/compatibility/beamerthemesidebar.sty
-2022/05/17 | 1265 | info/latex-via-exemplos/changelog.txt
-2022/05/17 | 12589 | macros/latex/contrib/beamer/base/beamerbasecolor.sty
-2022/05/17 | 12536 | macros/latex/contrib/beamer/doc/beamerug-compatibility.tex
-2022/05/17 | 12480 | macros/latex/contrib/beamer/doc/emulation-examples/beamerexample-seminar.tex
-2022/05/17 | 1247 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeMarburg.sty
-2022/05/17 | 12465 | macros/latex/contrib/beamer/doc/beamerug-macros.tex
-2022/05/17 | 1244 | macros/latex/contrib/beamer/doc/examples/a-lecture/beamerexample-lecture-pic6.jpg
-2022/05/17 | 12413 | macros/latex/contrib/beamer/base/beamer.cls
-2022/05/17 | 1240 | macros/latex/contrib/beamer/base/emulation/beamertexpower.sty
-2022/05/17 | 1230 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemewolverine.sty
-2022/05/17 | 12222 | macros/latex/contrib/beamer/doc/beamerug-workflow.tex
-2022/05/17 | 122105 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
-2022/05/17 | 12171 | macros/latex/contrib/beamer/base/beamerbaseframecomponents.sty
-2022/05/17 | 121139 | macros/latex/contrib/hyperref/ChangeLog.txt
-2022/05/17 | 1140 | macros/latex/contrib/beamer/base/beamerbasethemes.sty
-2022/05/17 | 1111 | macros/latex/contrib/beamer/README.md
-2022/05/17 | 1109756 | info/latex-via-exemplos/latex-via-exemplos.pdf
-2022/05/17 | 1109432 | info/latex-via-exemplos/latex-via-exemplos-oneside.pdf
-2022/05/17 | 1094 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemeseahorse.sty
-2022/05/17 | 10910 | macros/latex/contrib/beamer/doc/beamerug-notes.tex
-2022/05/17 | 1054 | macros/latex/contrib/beamer/base/themes/theme/beamerthemeGoettingen.sty
-2022/05/17 | 10543 | macros/latex/contrib/beamer/base/multimedia/multimedia.sty
-2022/05/17 | 1050 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemedolphin.sty
-2022/05/17 | 10230 | macros/latex/contrib/beamer/doc/emulation-examples/beamerexample-texpower.tex
-2022/05/17 | 1017096 | macros/latex/contrib/thuthesis/thuthesis.pdf
-2022/05/17 | 1013 | macros/latex/contrib/beamer/base/themes/color/beamercolorthemewhale.sty
-2022/05/17 | 1012 | macros/latex/contrib/beamer/base/themes/inner/beamerinnerthemerounded.sty
-2022/05/17 | 1008 | macros/latex/contrib/beamer/base/themes/font/beamerfontthemeserif.sty
-2022/05/17 | 1006 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html
-2022/05/17 | 10001 | macros/latex/contrib/thuthesis/ref/refs.bib
diff --git a/fonts/roboto/README b/fonts/roboto/README
index 92e7b87503..31d9077aca 100644
--- a/fonts/roboto/README
+++ b/fonts/roboto/README
@@ -1,5 +1,5 @@
This is the README for the roboto package, version
-2022-05-08.
+2022-05-24.
This package provides LaTeX, pdfLaTeX, XeLaTeX and
LuaLaTeX support for the Roboto, RobotoMono, RobotoSlab
diff --git a/fonts/roboto/doc/roboto-samples.pdf b/fonts/roboto/doc/roboto-samples.pdf
index a6c173b867..57a051a163 100644
--- a/fonts/roboto/doc/roboto-samples.pdf
+++ b/fonts/roboto/doc/roboto-samples.pdf
Binary files differ
diff --git a/fonts/roboto/doc/roboto-samples.tex b/fonts/roboto/doc/roboto-samples.tex
index f89b0a0c49..e9c980ddc4 100644
--- a/fonts/roboto/doc/roboto-samples.tex
+++ b/fonts/roboto/doc/roboto-samples.tex
@@ -92,7 +92,7 @@ Officially broken off. Often offline, find me flowerless.
\section*{LGR Condensed}
-{\robotolgr\robotocondensed\noindent
+{\robotocondensed\robotolgr\noindent
a b g d e z h j i k l m n x o p r s t u f q y w\\
A B G D E Z H J I K L M N X O P R S T U F Q Y W\\
}
diff --git a/fonts/symbats3/MANIFEST b/fonts/symbats3/MANIFEST
new file mode 100644
index 0000000000..06833fe90e
--- /dev/null
+++ b/fonts/symbats3/MANIFEST
@@ -0,0 +1,10 @@
+symbats3.tex
+symbats3.sty
+symbats3.pdf
+latexname.tex
+unicodename.tex
+codepoint.tex
+MANIFEST
+README.fd
+VERSION
+
diff --git a/fonts/symbats3/README.md b/fonts/symbats3/README.md
new file mode 100644
index 0000000000..438d6946b9
--- /dev/null
+++ b/fonts/symbats3/README.md
@@ -0,0 +1,163 @@
+
+[//]: # (symbats3 LaTeX class)
+
+# symbats3
+
+This is the README.md file for the symbats3 draft LaTeX class (2022-05-23)
+
+## Summary
+
+The _symbats3_ package makes available for LaTeX the glyphs in Feòrag’s
+Symbats3 neopagan dingbats fonts.
+
+## Font installation
+
+The fonts must be downloaded separately from Feòrag’s web site at
+https://www.feorag.com/freestuff/symbats.html
+
+Install them into your computer according to your operating system’s
+instructions, usually:
+
+### Linux
+Run the Font Manager app, click + and select the font files to install.
+
+### Mac OS X
+Run the Font Book app, click the Add button in the Font Book toolbar, locate and select a font, then click Open. Drag the font file to the Font Book app icon in the Dock. Double-click the font file in the Finder, then click Install Font in the dialog that appears.
+
+### Windows:
+Run Directory Explorer (what used to be called My Computer), right-click on each font file where you downloaded it, and select Install.
+
+## Automated package installation
+
+If this class is distributed from CTAN, it should be in a zip
+file (https://ctan.org/pkg/symbats3) which allows it to be installed
+automatically by the TeX Live Manager (tlmgr) and similar automated
+installers.
+
+If you are using automated LaTeX package installation, no further action
+is required: the package will be installed the first time you use it in
+a LaTeX document.
+
+## Manual installation
+
+Install the package file symbats3.sty into your Personal TeX Folder (create it if it does not already exist), eg
+
+### Linux
+```
+/texmf/tex/latex/symbats3
+```
+### Mac OS X
+```
+/Library/texmf/tex/latex/symbats3
+```
+### Windows
+(Win95–XP)
+```
+C:\texmf\tex\latex\symbats3
+```
+(Win 7–11)
+```
+Computer\System\Users\your~name\texmf
+```
+
+Note that MiKTeX users MUST add their Personal TeX Folder to their MiKTeX root when it is created; and MUST refresh their Font Name DataBase (FNDB) utility after installation: see the link below. No action is required for other systems.
+
+See http://latex.silmaril.ie/formattinginformation/personal.html for more information about your Personal TeX Folder and about how to use it in MiKTeX.
+
+
+## Installation on shared systems
+
+On multi-user systems (Unix-based), identify the shared local directory
+tree with the command
+
+```
+$ kpsewhich -expand-var '$TEXMFLOCAL'
+```
+
+This will give you the location of the shared `texmf` directory into
+which you must unzip these files.
+
+Do not forget to run your local TeX filename database indexer program
+(_texhash_ or _mktexlsr_) after installation, otherwise the files will
+not be found by LaTeX and nothing will work!
+
+
+## Manual installation (older non-TDS systems)
+
+To install this software manually, download and unzip the
+file into a temporary directory and move the class and/or package
+file[s] and other files to the proper locations where LaTeX will find
+them on your system. This is referred to in some documentation as “the
+`TEXINPUTS` directory”, although it may be called something else on your
+system.
+
+_It is your responsibility to know where this location is._ See the
+question in the TeX FAQ at https://texfaq.org/FAQ-inst-wlcf.html for
+more information. If you do not know, or cannot find it, or do not have
+access to it, your TeX system may be out of date and may need replacing.
+
+## Online systems and “last resort” systems
+
+Some online LaTeX systems use CTAN, so a package from there should be
+available on demand. For other online LaTeX systems where you do not
+have access to the file system, unzip the file into a
+temporary directory and upload the files to the online system. Follow
+their instructions for where to put them.
+
+In an emergency, or as a last resort on unmanageable systems, it is
+possible simply to put the class and/or package file[s] into your
+current working directory (the same folder as your `.tex` file[s]).
+
+While this may work, it is not supported, and may lead to other
+resources (packages, fonts, images etc) not being found.
+
+
+## Usage
+
+Include the line shown below in the Preamble of your LaTeX document:
+
+```LaTeX
+\usepackage[options]{symbats3}
+```
+Read the documentation for the options available, if
+any. The documentation is distributed as a PDF document in the zip file.
+You can also regenerate it by typesetting the `symbats3.tex` file with
+`xelatex` (and `biber`) in the normal way.
+
+
+## Bugs and TODO
+
+No outstanding reported bugs at the time of this version.
+
+For TODO items, see the PDF documentation.
+
+
+## Copyright
+
+The following statement is included in the source code:
+```
+%%
+%% This is file `symbats3.sty'
+%%
+%% This work has the LPPL maintenance status ‘maintained’.
+%%
+%% The source is maintained by Peter Flynn at Silmaril Consultants.
+%% Please report all bugs and comments to <peter@silmaril.ie>
+%%
+%% Copyright (c) 2021–2022 Peter Flynn and Silmaril Consultants
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% peter@silmaril.ie
+%%
+```
+
+
diff --git a/fonts/symbats3/VERSION b/fonts/symbats3/VERSION
new file mode 100644
index 0000000000..9536671383
--- /dev/null
+++ b/fonts/symbats3/VERSION
@@ -0,0 +1 @@
+Date of most recent change is 2022-05-23
diff --git a/fonts/symbats3/codepoint.tex b/fonts/symbats3/codepoint.tex
new file mode 100644
index 0000000000..69dd368989
--- /dev/null
+++ b/fonts/symbats3/codepoint.tex
@@ -0,0 +1,1550 @@
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+0021}{U+0021}
+&!&Exclamation Mark&\moonwaxfullwaneoutline&moonwaxfullwaneoutline&
+&
+\\
+\hypertarget{U+0022}{U+0022}
+&“&Quotation Mark&\valknutsolid&valknutsolid&
+&
+\\
+\hypertarget{U+0023}{U+0023}
+&\#&Number Sign&\oldgemini&oldgemini&
+\hyperlink{U+264A}{U+264A}
+&
+\\
+\hypertarget{U+0024}{U+0024}
+&\$&Dollar Sign&\moonfirstquarteroutline&moonfirstquarteroutline&
+&
+\\
+\hypertarget{U+0025}{U+0025}
+&\%&Percent Sign&\moonnew&moonnew&
+&
+\\
+\hypertarget{U+0026}{U+0026}
+&\&&Ampersand&\oldmoonwaningoutline&oldmoonwaningoutline&
+\hyperlink{U+263E}{U+263E}
+&
+\\
+\hypertarget{U+0027}{U+0027}
+&'&Apostrophe&\lightning&lightning&
+&
+\\
+\hypertarget{U+0028}{U+0028}
+&(&Left Parenthesis&\moonfirstquartersolid&moonfirstquartersolid&
+&
+\\
+\hypertarget{U+0029}{U+0029}
+&)&Right Parenthesis&\moonfull&moonfull&
+&
+\\
+\hypertarget{U+002A}{U+002A}
+&*&Asterisk&\moonwaxingsolid&moonwaxingsolid&
+&
+\\
+\hypertarget{U+002B}{U+002B}
+&+&Plus Sign&\moonwaningsolid&moonwaningsolid&
+&
+\\
+\hypertarget{U+002C}{U+002C}
+&\,&Comma&\oldceres&oldceres&
+\hyperlink{U+26B3}{U+26B3}
+&
+\\
+\hypertarget{U+002D}{U+002D}
+&-&Hyphen-Minus&\sunthreedoublespokes&sunthreedoublespokes&
+&
+\\
+\hypertarget{U+002E}{U+002E}
+&.&Full Stop&\sulphur&sulphur&
+&
+\\
+\hypertarget{U+002F}{U+002F}
+&/&Solidus&\crossedstaff&crossedstaff&
+&
+\\
+\hypertarget{U+0030}{U+0030}
+&0&Digit Zero&\sunfourspokes&sunfourspokes&
+&
+\\
+\hypertarget{U+0031}{U+0031}
+&1&Digit One&\sunwithrays&sunwithrays&
+&
+\\
+\hypertarget{U+0032}{U+0032}
+&2&Digit Two&\sunwithraysfourspokes&sunwithraysfourspokes&
+&
+\\
+\hypertarget{U+0033}{U+0033}
+&3&Digit Three&\oldsuncoronafourspokes&oldsuncoronafourspokes&
+\hyperlink{U+0038}{U+0038}
+&
+\\
+\hypertarget{U+0034}{U+0034}
+&4&Digit Four&\octile&octile&
+&
+\\
+\hypertarget{U+0035}{U+0035}
+&5&Digit Five&\sun&sun&
+&
+\\
+\hypertarget{U+0036}{U+0036}
+&6&Digit Six&\sunfourdoublespokes&sunfourdoublespokes&
+&
+\\
+\hypertarget{U+0037}{U+0037}
+&7&Digit Seven&\suneightspokes&suneightspokes&
+&
+\\
+\hypertarget{U+0038}{U+0038}
+&8&Digit Eight&\suncoronafourspokes&suncoronafourspokes&
+\hyperlink{U+0033}{U+0033}
+&
+\\
+\hypertarget{U+0039}{U+0039}
+&9&Digit Nine&\suncoronahubfourspokes&suncoronahubfourspokes&
+&
+\\
+\hypertarget{U+003A}{U+003A}
+&:&Colon&\valknutoutline&valknutoutline&
+&
+\\
+\hypertarget{U+003B}{U+003B}
+&;&Semicolon&\stareightarrows&stareightarrows&
+&
+\\
+\hypertarget{U+003C}{U+003C}
+&\<&Less-Than Sign&\oldearth&oldearth&
+\hyperlink{U+2641}{U+2641}
+&
+\\
+\hypertarget{U+003D}{U+003D}
+&=&Equals Sign&\suncoronasixspokes&suncoronasixspokes&
+&
+\\
+\hypertarget{U+003E}{U+003E}
+&\>&Greater-Than Sign&\recipe&recipe&
+&
+\\
+\hypertarget{U+003F}{U+003F}
+&?&Question Mark&\celtictrefoilknotopen&celtictrefoilknotopen&
+&
+\\
+\hypertarget{U+0040}{U+0040}
+&@&Commercial At&\moonwaxfullwanesolid&moonwaxfullwanesolid&
+&
+\\
+\hypertarget{U+0041}{U+0041}
+&A&Latin Capital Letter A&\whiteknifesouth&whiteknifesouth&
+&
+\\
+\hypertarget{U+0042}{U+0042}
+&B&Latin Capital Letter B&\oldsextile&oldsextile&
+\hyperlink{U+26B9}{U+26B9}
+&
+\\
+\hypertarget{U+0043}{U+0043}
+&C&Latin Capital Letter C&\oldconjunction&oldconjunction&
+\hyperlink{U+260C}{U+260C}
+&
+\\
+\hypertarget{U+0044}{U+0044}
+&D&Latin Capital Letter D&\whiteknifeeast&whiteknifeeast&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+0045}{U+0045}
+&E&Latin Capital Letter E&\pentagraminvintLcircled&pentagraminvintLcircled&
+&
+\hyperlink{U+00C9}{U+00C9}
+\\
+\hypertarget{U+0046}{U+0046}
+&F&Latin Capital Letter F&\whiteknifewest&whiteknifewest&
+&
+\\
+\hypertarget{U+0047}{U+0047}
+&G&Latin Capital Letter G&\mazesquarebase&mazesquarebase&
+&
+\\
+\hypertarget{U+0048}{U+0048}
+&H&Latin Capital Letter H&\mazeround&mazeround&
+&
+\\
+\hypertarget{U+0049}{U+0049}
+&I&Latin Capital Letter I&\pentagraminvintRsolid&pentagraminvintRsolid&
+&
+\hyperlink{none}{none}
+\\
+\hypertarget{U+004A}{U+004A}
+&J&Latin Capital Letter J&\rockartgoddess&rockartgoddess&
+&
+\\
+\hypertarget{U+004B}{U+004B}
+&K&Latin Capital Letter K&\rockarthorse&rockarthorse&
+&
+\\
+\hypertarget{U+004C}{U+004C}
+&L&Latin Capital Letter L&\labrys&labrys&
+&
+\\
+\hypertarget{U+004D}{U+004D}
+&M&Latin Capital Letter M&\dupsunfourspokes&dupsunfourspokes&
+&
+\\
+\hypertarget{U+004E}{U+004E}
+&N&Latin Capital Letter N&\oldsquare&oldsquare&
+\hyperlink{U+25A1}{U+25A1}
+&
+\\
+\hypertarget{U+004F}{U+004F}
+&O&Latin Capital Letter O&\pentagramroughinvsolid&pentagramroughinvsolid&
+&
+\hyperlink{U+006F}{U+006F}
+\\
+\hypertarget{U+0050}{U+0050}
+&P&Latin Capital Letter P&\pentagramintRtriangle&pentagramintRtriangle&
+&
+\\
+\hypertarget{U+0051}{U+0051}
+&Q&Latin Capital Letter Q&\pentagraminvcircled&pentagraminvcircled&
+&
+\hyperlink{U+0071}{U+0071}
+\\
+\hypertarget{U+0052}{U+0052}
+&R&Latin Capital Letter R&\pentagraminvintL&pentagraminvintL&
+&
+\hyperlink{U+0154}{U+0154}
+\\
+\hypertarget{U+0053}{U+0053}
+&S&Latin Capital Letter S&\whiteknifenorth&whiteknifenorth&
+&
+\\
+\hypertarget{U+0054}{U+0054}
+&T&Latin Capital Letter T&\pentagramroughinvcircled&pentagramroughinvcircled&
+&
+\\
+\hypertarget{U+0055}{U+0055}
+&U&Latin Capital Letter U&\oldpentagraminvsolid&oldpentagraminvsolid&
+\hyperlink{U+00CD}{U+00CD}
+&
+\\
+\hypertarget{U+0056}{U+0056}
+&V&Latin Capital Letter V&\oldopposition&oldopposition&
+\hyperlink{U+260D}{U+260D}
+&
+\\
+\hypertarget{U+0057}{U+0057}
+&W&Latin Capital Letter W&\oldpentagraminv&oldpentagraminv&
+\hyperlink{U+26E7}{U+26E7}
+&
+\\
+\hypertarget{U+0058}{U+0058}
+&X&Latin Capital Letter X&\oldascendingnode&oldascendingnode&
+\hyperlink{U+260A}{U+260A}
+&
+\\
+\hypertarget{U+0059}{U+0059}
+&Y&Latin Capital Letter Y&\pentagramroughinv&pentagramroughinv&
+&
+\\
+\hypertarget{U+005A}{U+005A}
+&Z&Latin Capital Letter Z&\olddescendingnode&olddescendingnode&
+\hyperlink{U+260B}{U+260B}
+&
+\\
+\hypertarget{U+005B}{U+005B}
+&[&Left Square Bracket&\fireelement&fireelement&
+&
+\\
+\hypertarget{U+005C}{U+005C}
+&\textbackslash&Reverse Solidus&\serpentimpaled&serpentimpaled&
+&
+\\
+\hypertarget{U+005D}{U+005D}
+&]&Right Square Bracket&\airelement&airelement&
+&
+\\
+\hypertarget{U+005E}{U+005E}
+&\^{}&Circumflex Accent&\moonlastquarteroutline&moonlastquarteroutline&
+&
+\\
+\hypertarget{U+005F}{U+005F}
+&\_&Low Line&\moonlastquartersolid&moonlastquartersolid&
+&
+\\
+\hypertarget{U+0060}{U+0060}
+&\`{}&Grave Accent&\oldmercury&oldmercury&
+\hyperlink{U+263F}{U+263F}
+&
+\\
+\hypertarget{U+0061}{U+0061}
+&a&Latin Small Letter A&\athamesouth&athamesouth&
+&
+\\
+\hypertarget{U+0062}{U+0062}
+&b&Latin Small Letter B&\olduranus&olduranus&
+\hyperlink{U+2645}{U+2645}
+&
+\\
+\hypertarget{U+0063}{U+0063}
+&c&Latin Small Letter C&\oldjupiter&oldjupiter&
+\hyperlink{U+2643}{U+2643}
+&
+\\
+\hypertarget{U+0064}{U+0064}
+&d&Latin Small Letter D&\athameeast&athameeast&
+&
+\\
+\hypertarget{U+0065}{U+0065}
+&e&Latin Small Letter E&\pentagramintRcircled&pentagramintRcircled&
+&
+\hyperlink{U+00E9}{U+00E9}
+\\
+\hypertarget{U+0066}{U+0066}
+&f&Latin Small Letter F&\athamewest&athamewest&
+&
+\\
+\hypertarget{U+0067}{U+0067}
+&g&Latin Small Letter G&\hammer&hammer&
+&
+\\
+\hypertarget{U+0068}{U+0068}
+&h&Latin Small Letter H&\awen&awen&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+0069}{U+0069}
+&i&Latin Small Letter I&\oldpentagramintRsolid&oldpentagramintRsolid&
+\hyperlink{U+00ED}{U+00ED}
+&
+\\
+\hypertarget{U+006A}{U+006A}
+&j&Latin Small Letter J&\fylfotilkley&fylfotilkley&
+&
+\\
+\hypertarget{U+006B}{U+006B}
+&k&Latin Small Letter K&\aegishjalmur&aegishjalmur&
+&
+\\
+\hypertarget{U+006C}{U+006C}
+&l&Latin Small Letter L&\eightsabbats&eightsabbats&
+&
+\\
+\hypertarget{U+006D}{U+006D}
+&m&Latin Small Letter M&\oldpluto&oldpluto&
+\hyperlink{U+2647}{U+2647}
+&
+\\
+\hypertarget{U+006E}{U+006E}
+&n&Latin Small Letter N&\oldneptune&oldneptune&
+\hyperlink{U+2646}{U+2646}
+&
+\\
+\hypertarget{U+006F}{U+006F}
+&o&Latin Small Letter O&\pentagramroughsolid&pentagramroughsolid&
+&
+\hyperlink{U+004F}{U+004F}
+\\
+\hypertarget{U+0070}{U+0070}
+&p&Latin Small Letter P&\pentagramwithtriangle&pentagramwithtriangle&
+&
+\\
+\hypertarget{U+0071}{U+0071}
+&q&Latin Small Letter Q&\pentagramcircled&pentagramcircled&
+&
+\hyperlink{U+0051}{U+0051}
+\\
+\hypertarget{U+0072}{U+0072}
+&r&Latin Small Letter R&\oldpentagramintR&oldpentagramintR&
+\hyperlink{U+26E5}{U+26E5}
+&
+\hyperlink{U+0155}{U+0155}
+\\
+\hypertarget{U+0073}{U+0073}
+&s&Latin Small Letter S&\athamenorth&athamenorth&
+&
+\\
+\hypertarget{U+0074}{U+0074}
+&t&Latin Small Letter T&\pentagramroughcircled&pentagramroughcircled&
+&
+\\
+\hypertarget{U+0075}{U+0075}
+&u&Latin Small Letter U&\pentagramsolid&pentagramsolid&
+&
+\\
+\hypertarget{U+0076}{U+0076}
+&v&Latin Small Letter V&\oldsaturn&oldsaturn&
+\hyperlink{U+2644}{U+2644}
+&
+\\
+\hypertarget{U+0077}{U+0077}
+&w&Latin Small Letter W&\oldpentagram&oldpentagram&
+\hyperlink{U+26E4}{U+26E4}
+&
+\\
+\hypertarget{U+0078}{U+0078}
+&x&Latin Small Letter X&\mars&mars&
+&
+\\
+\hypertarget{U+0079}{U+0079}
+&y&Latin Small Letter Y&\pentagramrough&pentagramrough&
+&
+\\
+\hypertarget{U+007A}{U+007A}
+&z&Latin Small Letter Z&\venus&venus&
+&
+\\
+\hypertarget{U+007B}{U+007B}
+&\{&Left Curly Bracket&\waterelement&waterelement&
+&
+\\
+\hypertarget{U+007C}{U+007C}
+&\|&Vertical Line&\celtictrefoilknotsolid&celtictrefoilknotsolid&
+&
+\\
+\hypertarget{U+007D}{U+007D}
+&\}&Right Curly Bracket&\earthelement&earthelement&
+&
+\\
+\hypertarget{U+007E}{U+007E}
+&\~{}&Tilde&\vargemini&vargemini&
+&
+\\
+\hypertarget{U+00A1}{U+00A1}
+&¡&Inv Exclamation Mark&\oldaries&oldaries&
+\hyperlink{U+2648}{U+2648}
+&
+\\
+\hypertarget{U+00A2}{U+00A2}
+&¢&Cent Sign&\oldcancer&oldcancer&
+\hyperlink{U+264B}{U+264B}
+&
+\\
+\hypertarget{U+00A3}{U+00A3}
+&£&Pound Sign&\oldmoonwaxingoutline&oldmoonwaxingoutline&
+\hyperlink{U+263D}{U+263D}
+&
+\\
+\hypertarget{U+00A7}{U+00A7}
+&§&Section Sign&\oldvirgo&oldvirgo&
+\hyperlink{U+264D}{U+264D}
+&
+\\
+\hypertarget{U+00AA}{U+00AA}
+&ª&Feminine Ordinal Indicator&\oldsaggitarius&oldsaggitarius&
+\hyperlink{U+2650}{U+2650}
+&
+\\
+\hypertarget{U+00B6}{U+00B6}
+&¶&Pilcrow Sign&\oldlibra&oldlibra&
+\hyperlink{U+264E}{U+264E}
+&
+\\
+\hypertarget{U+00BA}{U+00BA}
+&º&Masculine Ordinal Indicator&\oldcapricorn&oldcapricorn&
+\hyperlink{U+2651}{U+2651}
+&
+\\
+\hypertarget{U+00C0}{U+00C0}
+&À&Latin Capital Letter A with Grave&\powergoingforth&powergoingforth&
+&
+\\
+\hypertarget{U+00C5}{U+00C5}
+&Å&Latin Capital Letter A with Ring Above&\samhuinn&samhuinn&
+&
+\\
+\hypertarget{U+00C8}{U+00C8}
+&È&Latin Capital Letter E with Grave&\parting&parting&
+&
+\\
+\hypertarget{U+00C9}{U+00C9}
+&É&Latin Capital Letter E with Acute&\pentagraminvintRcircled&pentagraminvintRcircled&
+&
+\hyperlink{U+0045}{U+0045}
+\\
+\hypertarget{U+00CC}{U+00CC}
+&Ì&Latin Capital Letter I with Grave&\beltane&beltane&
+&
+\\
+\hypertarget{U+00CD}{U+00CD}
+&Í&Latin Capital Letter I with Acute&\pentagraminvsolid&pentagraminvsolid&
+\hyperlink{U+0055}{U+0055}
+&
+\\
+\hypertarget{U+00CE}{U+00CE}
+&Î&Latin Capital Letter I with Circumflex&\imbolc&imbolc&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+00CF}{U+00CF}
+&Ï&Latin Capital Letter I with Diaeresis&\eostre&eostre&
+&
+\\
+\hypertarget{U+00D3}{U+00D3}
+&Ó&Latin Capital Letter O with Acute&\venusfigureoutline&venusfigureoutline&
+&
+\\
+\hypertarget{U+00D4}{U+00D4}
+&Ô&Latin Capital Letter O with Circumflex&\lughnasadh&lughnasadh&
+&
+\\
+\hypertarget{U+00D9}{U+00D9}
+&Ù&Latin Capital Letter U with Grave&\perfectcouplethirddegree&perfectcouplethirddegree&
+&
+\\
+\hypertarget{U+00E0}{U+00E0}
+&à&Latin Small Letter A with Grave&\oldankh&oldankh&
+\hyperlink{U+2625}{U+2625}
+&
+\\
+\hypertarget{U+00E8}{U+00E8}
+&è&Latin Small Letter E with Grave&\salute&salute&
+&
+\\
+\hypertarget{U+00E9}{U+00E9}
+&é&Latin Small Letter E with Acute&\pentagramintLcircled&pentagramintLcircled&
+&
+\hyperlink{U+0065}{U+0065}
+\\
+\hypertarget{U+00EC}{U+00EC}
+&ì&Latin Small Letter I with Grave&\scourge&scourge&
+&
+\\
+\hypertarget{U+00ED}{U+00ED}
+&í&Latin Small Letter I with Acute&\pentagramintRsolid&pentagramintRsolid&
+\hyperlink{U+0069}{U+0069}
+&
+\\
+\hypertarget{U+00F2}{U+00F2}
+&ò&Latin Small Letter O with Grave&\goddessasmoon&goddessasmoon&
+&
+\\
+\hypertarget{U+00F3}{U+00F3}
+&ó&Latin Small Letter O with Acute&\venusfiguresolid&venusfiguresolid&
+&
+\\
+\hypertarget{U+00F9}{U+00F9}
+&ù&Latin Small Letter U with Grave&\perfectcouple&perfectcouple&
+&
+\\
+\hypertarget{U+0132}{U+0132}
+&IJ&Latin Capital Ligature Ij&\yule&yule&
+&
+\\
+\hypertarget{U+0154}{U+0154}
+&Ŕ&Latin Capital Letter R with Acute&\pentagraminvintR&pentagraminvintR&
+&
+\hyperlink{U+0052}{U+0052}
+\\
+\hypertarget{U+0155}{U+0155}
+&ŕ&Latin Small Letter R with Acute&\oldpentagramintL&oldpentagramintL&
+\hyperlink{U+26E6}{U+26E6}
+&
+\\
+\hypertarget{U+1681}{U+1681}
+&ᚁ&Ogham Letter Beith&\OGbeith&OGbeith&
+&
+\\
+\hypertarget{U+1682}{U+1682}
+&ᚂ&Ogham Letter Luis&\OGluis&OGluis&
+&
+\\
+\hypertarget{U+1683}{U+1683}
+&ᚃ&Ogham Letter Fearn&\OGfearn&OGfearn&
+&
+\\
+\hypertarget{U+1684}{U+1684}
+&ᚄ&Ogham Letter Sail&\OGsail&OGsail&
+&
+\\
+\hypertarget{U+1685}{U+1685}
+&ᚅ&Ogham Letter Nion&\OGnion&OGnion&
+&
+\\
+\hypertarget{U+1686}{U+1686}
+&ᚆ&Ogham Letter Uath&\OGuath&OGuath&
+&
+\\
+\hypertarget{U+1687}{U+1687}
+&ᚇ&Ogham Letter Dair&\OGdair&OGdair&
+&
+\\
+\hypertarget{U+1688}{U+1688}
+&ᚈ&Ogham Letter Tinne&\OGtinne&OGtinne&
+&
+\\
+\hypertarget{U+1689}{U+1689}
+&ᚉ&Ogham Letter Coll&\OGcoll&OGcoll&
+&
+\\
+\hypertarget{U+168A}{U+168A}
+&ᚊ&Ogham Letter Ceirt&\OGceirt&OGceirt&
+&
+\\
+\hypertarget{U+168B}{U+168B}
+&ᚋ&Ogham Letter Muin&\OGmuin&OGmuin&
+&
+\\
+\hypertarget{U+168C}{U+168C}
+&ᚌ&Ogham Letter Gort&\OGgort&OGgort&
+&
+\\
+\hypertarget{U+168D}{U+168D}
+&ᚍ&Ogham Letter Ngeadal&\OGngeadal&OGngeadal&
+&
+\\
+\hypertarget{U+168E}{U+168E}
+&ᚎ&Ogham Letter Straif&\OGstraif&OGstraif&
+&
+\\
+\hypertarget{U+168F}{U+168F}
+&ᚏ&Ogham Letter Ruis&\OGruis&OGruis&
+&
+\\
+\hypertarget{U+1690}{U+1690}
+&ᚐ&Ogham Letter Ailm&\OGailm&OGailm&
+&
+\\
+\hypertarget{U+1691}{U+1691}
+&ᚑ&Ogham Letter Onn&\OGonn&OGonn&
+&
+\\
+\hypertarget{U+1692}{U+1692}
+&ᚒ&Ogham Letter Ur&\OGur&OGur&
+&
+\\
+\hypertarget{U+1693}{U+1693}
+&ᚓ&Ogham Letter Eadhadh&\OGeadhadh&OGeadhadh&
+&
+\\
+\hypertarget{U+1694}{U+1694}
+&ᚔ&Ogham Letter Iodhadh&\OGiodhadh&OGiodhadh&
+&
+\\
+\hypertarget{U+1695}{U+1695}
+&ᚕ&Ogham Letter Eabhadh&\OGeabhadh&OGeabhadh&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+1696}{U+1696}
+&ᚖ&Ogham Letter Or&\OGor&OGor&
+&
+\\
+\hypertarget{U+1697}{U+1697}
+&ᚗ&Ogham Letter Uilleann&\OGuilleann&OGuilleann&
+&
+\\
+\hypertarget{U+1698}{U+1698}
+&ᚘ&Ogham Letter Ifin&\OGifin&OGifin&
+&
+\\
+\hypertarget{U+1699}{U+1699}
+&ᚙ&Ogham Letter Eamhancholl&\OGeamhancholl&OGeamhancholl&
+&
+\\
+\hypertarget{U+169A}{U+169A}
+&ᚚ&Ogham Letter Peith&\OGpeith&OGpeith&
+&
+\\
+\hypertarget{U+169B}{U+169B}
+&᚛&Ogham Feather Mark&\OGfeather&OGfeather&
+&
+\\
+\hypertarget{U+169C}{U+169C}
+&᚜&Ogham Reversed Feather Mark&\OGreversedfeather&OGreversedfeather&
+&
+\\
+\hypertarget{U+16A0}{U+16A0}
+&ᚠ&Runic Letter Fehu Feoh Fe F&\RUfehufeohfef&RUfehufeohfef&
+&
+\\
+\hypertarget{U+16A1}{U+16A1}
+&ᚡ&Runic Letter V&\RUv&RUv&
+&
+\\
+\hypertarget{U+16A2}{U+16A2}
+&ᚢ&Runic Letter Uruz Ur U&\RUuruzuru&RUuruzuru&
+&
+\\
+\hypertarget{U+16A3}{U+16A3}
+&ᚣ&Runic Letter Yr&\RUyr&RUyr&
+&
+\\
+\hypertarget{U+16A4}{U+16A4}
+&ᚤ&Runic Letter Y&\RUy&RUy&
+&
+\\
+\hypertarget{U+16A5}{U+16A5}
+&ᚥ&Runic Letter W&\RUw&RUw&
+&
+\\
+\hypertarget{U+16A6}{U+16A6}
+&ᚦ&Runic Letter Thurisaz Thurs Thorn&\RUthurisazthursthorn&RUthurisazthursthorn&
+&
+\\
+\hypertarget{U+16A7}{U+16A7}
+&ᚧ&Runic Letter Eth&\RUeth&RUeth&
+&
+\\
+\hypertarget{U+16A8}{U+16A8}
+&ᚨ&Runic Letter Ansuz A&\RUansuza&RUansuza&
+&
+\\
+\hypertarget{U+16A9}{U+16A9}
+&ᚩ&Runic Letter Os O&\RUoso&RUoso&
+&
+\\
+\hypertarget{U+16AA}{U+16AA}
+&ᚪ&Runic Letter Ac A&\RUaca&RUaca&
+&
+\\
+\hypertarget{U+16AB}{U+16AB}
+&ᚫ&Runic Letter Aesc&\RUaesc&RUaesc&
+&
+\\
+\hypertarget{U+16AC}{U+16AC}
+&ᚬ&Runic Letter Long-Branch-Oss O&\RUlongbranchosso&RUlongbranchosso&
+&
+\\
+\hypertarget{U+16AD}{U+16AD}
+&ᚭ&Runic Letter Short-Twig-Oss O&\RUshorttwigosso&RUshorttwigosso&
+&
+\\
+\hypertarget{U+16AE}{U+16AE}
+&ᚮ&Runic Letter O&\RUo&RUo&
+&
+\\
+\hypertarget{U+16AF}{U+16AF}
+&ᚯ&Runic Letter Oe&\RUoe&RUoe&
+&
+\\
+\hypertarget{U+16B0}{U+16B0}
+&ᚰ&Runic Letter On&\RUon&RUon&
+&
+\\
+\hypertarget{U+16B1}{U+16B1}
+&ᚱ&Runic Letter Raido Rad Reid R&\RUraidoradreidr&RUraidoradreidr&
+&
+\\
+\hypertarget{U+16B2}{U+16B2}
+&ᚲ&Runic Letter Kauna&\RUkauna&RUkauna&
+&
+\\
+\hypertarget{U+16B3}{U+16B3}
+&ᚳ&Runic Letter Cen&\RUcen&RUcen&
+&
+\\
+\hypertarget{U+16B4}{U+16B4}
+&ᚴ&Runic Letter Kaun K&\RUkaunk&RUkaunk&
+&
+\\
+\hypertarget{U+16B5}{U+16B5}
+&ᚵ&Runic Letter G&\RUg&RUg&
+&
+\\
+\hypertarget{U+16B6}{U+16B6}
+&ᚶ&Runic Letter Eng&\RUeng&RUeng&
+&
+\\
+\hypertarget{U+16B7}{U+16B7}
+&ᚷ&Runic Letter Gebo Gyfu G&\RUgebogyfug&RUgebogyfug&
+&
+\\
+\hypertarget{U+16B8}{U+16B8}
+&ᚸ&Runic Letter Gar&\RUgar&RUgar&
+&
+\\
+\hypertarget{U+16B9}{U+16B9}
+&ᚹ&Runic Letter Wunjo Wynn W&\RUwunjowynnw&RUwunjowynnw&
+&
+\\
+\hypertarget{U+16BA}{U+16BA}
+&ᚺ&Runic Letter Haglaz H&\RUhaglazh&RUhaglazh&
+&
+\\
+\hypertarget{U+16BB}{U+16BB}
+&ᚻ&Runic Letter Haegl H&\RUhaeglh&RUhaeglh&
+&
+\\
+\hypertarget{U+16BC}{U+16BC}
+&ᚼ&Runic Letter Long-Branch-Hagall H&\RUlongbranchhagallh&RUlongbranchhagallh&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+16BD}{U+16BD}
+&ᚽ&Runic Letter Short-Twig-Hagall H&\RUshorttwighagallh&RUshorttwighagallh&
+&
+\\
+\hypertarget{U+16BE}{U+16BE}
+&ᚾ&Runic Letter Naudiz Nyd Naud N&\RUnaudiznydnaudn&RUnaudiznydnaudn&
+&
+\\
+\hypertarget{U+16BF}{U+16BF}
+&ᚿ&Runic Letter Short-Twig-Naud N&\RUshorttwignaudn&RUshorttwignaudn&
+&
+\\
+\hypertarget{U+16C0}{U+16C0}
+&ᛀ&Runic Letter Dotted-N&\RUdottedn&RUdottedn&
+&
+\\
+\hypertarget{U+16C1}{U+16C1}
+&ᛁ&Runic Letter Isaz Is Iss I&\RUisazisissi&RUisazisissi&
+&
+\\
+\hypertarget{U+16C2}{U+16C2}
+&ᛂ&Runic Letter E&\RUe&RUe&
+&
+\\
+\hypertarget{U+16C3}{U+16C3}
+&ᛃ&Runic Letter Jeran J&\RUjeranj&RUjeranj&
+&
+\\
+\hypertarget{U+16C4}{U+16C4}
+&ᛄ&Runic Letter Ger&\RUger&RUger&
+&
+\\
+\hypertarget{U+16C5}{U+16C5}
+&ᛅ&Runic Letter Long-Branch-Ar Ae&\RUlongbrancharae&RUlongbrancharae&
+&
+\\
+\hypertarget{U+16C6}{U+16C6}
+&ᛆ&Runic Letter Short-Twig-Ar A&\RUshorttwigara&RUshorttwigara&
+&
+\\
+\hypertarget{U+16C7}{U+16C7}
+&ᛇ&Runic Letter Iwaz Eoh&\RUiwazeoh&RUiwazeoh&
+&
+\\
+\hypertarget{U+16C8}{U+16C8}
+&ᛈ&Runic Letter Pertho Peorth P&\RUperthopeorthp&RUperthopeorthp&
+&
+\\
+\hypertarget{U+16C9}{U+16C9}
+&ᛉ&Runic Letter Algiz Eolhx&\RUalgizeolhx&RUalgizeolhx&
+&
+\\
+\hypertarget{U+16CA}{U+16CA}
+&ᛊ&Runic Letter Sowilo S&\RUsowilos&RUsowilos&
+&
+\\
+\hypertarget{U+16CB}{U+16CB}
+&ᛋ&Runic Letter Sigel Long-Branch-Sol S&\RUsigellongbranchsols&RUsigellongbranchsols&
+&
+\\
+\hypertarget{U+16CC}{U+16CC}
+&ᛌ&Runic Letter Short-Twig-Sol S&\RUshorttwigsols&RUshorttwigsols&
+&
+\\
+\hypertarget{U+16CD}{U+16CD}
+&ᛍ&Runic Letter C&\RUc&RUc&
+&
+\\
+\hypertarget{U+16CE}{U+16CE}
+&ᛎ&Runic Letter Z&\RUz&RUz&
+&
+\\
+\hypertarget{U+16CF}{U+16CF}
+&ᛏ&Runic Letter Tiwaz Tir Tyr T&\RUtiwaztirtyrt&RUtiwaztirtyrt&
+&
+\\
+\hypertarget{U+16D0}{U+16D0}
+&ᛐ&Runic Letter Short-Twig-Tyr T&\RUshorttwigtyrt&RUshorttwigtyrt&
+&
+\\
+\hypertarget{U+16D1}{U+16D1}
+&ᛑ&Runic Letter D&\RUd&RUd&
+&
+\\
+\hypertarget{U+16D2}{U+16D2}
+&ᛒ&Runic Letter Berkanan Beorc Bjarkan B&\RUberkananbeorcbjarkanb&RUberkananbeorcbjarkanb&
+&
+\\
+\hypertarget{U+16D3}{U+16D3}
+&ᛓ&Runic Letter Short-Twig-Bjarkan B&\RUshorttwigbjarkanb&RUshorttwigbjarkanb&
+&
+\\
+\hypertarget{U+16D4}{U+16D4}
+&ᛔ&Runic Letter Dotted-P&\RUdottedp&RUdottedp&
+&
+\\
+\hypertarget{U+16D5}{U+16D5}
+&ᛕ&Runic Letter Open-P&\RUopenp&RUopenp&
+&
+\\
+\hypertarget{U+16D6}{U+16D6}
+&ᛖ&Runic Letter Ehwaz Eh E&\RUehwazehe&RUehwazehe&
+&
+\\
+\hypertarget{U+16D7}{U+16D7}
+&ᛗ&Runic Letter Mannaz Man M&\RUmannazmanm&RUmannazmanm&
+&
+\\
+\hypertarget{U+16D8}{U+16D8}
+&ᛘ&Runic Letter Long-Branch-Madr M&\RUlongbranchmadrm&RUlongbranchmadrm&
+&
+\\
+\hypertarget{U+16D9}{U+16D9}
+&ᛙ&Runic Letter Short-Twig-Madr M&\RUshorttwigmadrm&RUshorttwigmadrm&
+&
+\\
+\hypertarget{U+16DA}{U+16DA}
+&ᛚ&Runic Letter Laukaz Lagu Logr L&\RUlaukazlagulogrl&RUlaukazlagulogrl&
+&
+\\
+\hypertarget{U+16DB}{U+16DB}
+&ᛛ&Runic Letter Dotted-L&\RUdottedl&RUdottedl&
+&
+\\
+\hypertarget{U+16DC}{U+16DC}
+&ᛜ&Runic Letter Ingwaz&\RUingwaz&RUingwaz&
+&
+\\
+\hypertarget{U+16DD}{U+16DD}
+&ᛝ&Runic Letter Ing&\RUing&RUing&
+&
+\\
+\hypertarget{U+16DE}{U+16DE}
+&ᛞ&Runic Letter Dagaz Daeg D&\RUdagazdaegd&RUdagazdaegd&
+&
+\\
+\hypertarget{U+16DF}{U+16DF}
+&ᛟ&Runic Letter Othalan Ethel O&\RUothalanethelo&RUothalanethelo&
+&
+\\
+\hypertarget{U+16E0}{U+16E0}
+&ᛠ&Runic Letter Ear&\RUear&RUear&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+16E1}{U+16E1}
+&ᛡ&Runic Letter Ior&\RUior&RUior&
+&
+\\
+\hypertarget{U+16E2}{U+16E2}
+&ᛢ&Runic Letter Cweorth&\RUcweorth&RUcweorth&
+&
+\\
+\hypertarget{U+16E3}{U+16E3}
+&ᛣ&Runic Letter Calc&\RUcalc&RUcalc&
+&
+\\
+\hypertarget{U+16E4}{U+16E4}
+&ᛤ&Runic Letter Cealc&\RUcealc&RUcealc&
+&
+\\
+\hypertarget{U+16E5}{U+16E5}
+&ᛥ&Runic Letter Stan&\RUstan&RUstan&
+&
+\\
+\hypertarget{U+16E6}{U+16E6}
+&ᛦ&Runic Letter Long-Branch-Yr&\RUlongbranchyr&RUlongbranchyr&
+&
+\\
+\hypertarget{U+16E7}{U+16E7}
+&ᛧ&Runic Letter Short-Twig-Yr&\RUshorttwigyr&RUshorttwigyr&
+&
+\\
+\hypertarget{U+16E8}{U+16E8}
+&ᛨ&Runic Letter Icelandic-Yr&\RUicelandicyr&RUicelandicyr&
+&
+\\
+\hypertarget{U+16E9}{U+16E9}
+&ᛩ&Runic Letter Q&\RUq&RUq&
+&
+\\
+\hypertarget{U+16EA}{U+16EA}
+&ᛪ&Runic Letter X&\RUx&RUx&
+&
+\\
+\hypertarget{U+16EB}{U+16EB}
+&᛫&Runic Single Punctuation&\RUsinglepunctuation&RUsinglepunctuation&
+&
+\\
+\hypertarget{U+16EC}{U+16EC}
+&᛬&Runic Multiple Punctuation&\RUmultiplepunctuation&RUmultiplepunctuation&
+&
+\\
+\hypertarget{U+16ED}{U+16ED}
+&᛭&Runic Cross Punctuation&\RUcrosspunctuation&RUcrosspunctuation&
+&
+\\
+\hypertarget{U+16EE}{U+16EE}
+&ᛮ&Runic Arlaug Symbol&\RUarlaugsymbol&RUarlaugsymbol&
+&
+\\
+\hypertarget{U+16EF}{U+16EF}
+&ᛯ&Runic Tvimadur Symbol&\RUtvimadursymbol&RUtvimadursymbol&
+&
+\\
+\hypertarget{U+16F0}{U+16F0}
+&ᛰ&Runic Belgthor Symbol&\RUbelgthorsymbol&RUbelgthorsymbol&
+&
+\\
+\hypertarget{U+16F1}{U+16F1}
+&ᛱ&Runic Letter K&\RUk&RUk&
+&
+\\
+\hypertarget{U+16F2}{U+16F2}
+&ᛲ&Runic Letter Sh&\RUsh&RUsh&
+&
+\\
+\hypertarget{U+16F3}{U+16F3}
+&ᛳ&Runic Letter Oo&\RUoo&RUoo&
+&
+\\
+\hypertarget{U+16F4}{U+16F4}
+&ᛴ&Runic Letter Franks Casket Os&\RUfrankscasketos&RUfrankscasketos&
+&
+\\
+\hypertarget{U+16F5}{U+16F5}
+&ᛵ&Runic Letter Franks Casket Is&\RUfrankscasketis&RUfrankscasketis&
+&
+\\
+\hypertarget{U+16F6}{U+16F6}
+&ᛶ&Runic Letter Franks Casket Eh&\RUfrankscasketeh&RUfrankscasketeh&
+&
+\\
+\hypertarget{U+16F7}{U+16F7}
+&ᛷ&Runic Letter Franks Casket Ac&\RUfrankscasketac&RUfrankscasketac&
+&
+\\
+\hypertarget{U+16F8}{U+16F8}
+&ᛸ&Runic Letter Franks Casket Aesc&\RUfrankscasketaesc&RUfrankscasketaesc&
+&
+\\
+\hypertarget{U+2013}{U+2013}
+&–&En Dash&\oldaquarius&oldaquarius&
+\hyperlink{U+2652}{U+2652}
+&
+\\
+\hypertarget{U+2022}{U+2022}
+&•&Bullet&\scorpio&scorpio&
+&
+\\
+\hypertarget{U+211E}{U+211E}
+&℞&Prescription Take (Recipe)&\prescription&prescription&
+&
+\\
+\hypertarget{U+2122}{U+2122}
+&™&Trade Mark Sign&\oldtaurus&oldtaurus&
+\hyperlink{U+2649}{U+2649}
+&
+\\
+\hypertarget{U+221E}{U+221E}
+&∞&Infinity&\oldleo&oldleo&
+\hyperlink{U+264C}{U+264C}
+&
+\\
+\hypertarget{U+2220}{U+2220}
+&∠&Angle&\angleacute&angleacute&
+&
+\\
+\hypertarget{U+2260}{U+2260}
+&≠&Not Equal To&\oldpisces&oldpisces&
+\hyperlink{U+2653}{U+2653}
+&
+\\
+\hypertarget{U+2295}{U+2295}
+&⊕&Circled Plus&\circleplus&circleplus&
+&
+\\
+\hypertarget{U+25A1}{U+25A1}
+&□&White Square&\square&square&
+\hyperlink{U+004F}{U+004F}
+&
+\\
+\hypertarget{U+2609}{U+2609}
+&☉&Sun&\dupsun&dupsun&
+&
+\\
+\hypertarget{U+260A}{U+260A}
+&☊&Ascending Node&\ascendingnode&ascendingnode&
+\hyperlink{U+0058}{U+0058}
+&
+\\
+\hypertarget{U+260B}{U+260B}
+&☋&Descending Node&\descendingnode&descendingnode&
+\hyperlink{U+005A}{U+005A}
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+260C}{U+260C}
+&☌&Conjunction&\conjunction&conjunction&
+\hyperlink{U+0043}{U+0043}
+&
+\\
+\hypertarget{U+260D}{U+260D}
+&☍&Opposition&\opposition&opposition&
+\hyperlink{U+0056}{U+0056}
+&
+\\
+\hypertarget{U+2625}{U+2625}
+&☥&Ankh&\ankh&ankh&
+\hyperlink{U+00E0}{U+00E0}
+&
+\\
+\hypertarget{U+263C}{U+263C}
+&☼&White Sun with Rays&\sunrays&sunrays&
+&
+\\
+\hypertarget{U+263D}{U+263D}
+&☽&First Quarter Moon&\moonwaxingoutline&moonwaxingoutline&
+\hyperlink{U+00A3}{U+00A3}
+&
+\\
+\hypertarget{U+263E}{U+263E}
+&☾&Last Quarter Moon&\moonwaningoutline&moonwaningoutline&
+\hyperlink{U+0026}{U+0026}
+&
+\\
+\hypertarget{U+263F}{U+263F}
+&☿&Mercury&\mercury&mercury&
+\hyperlink{U+0060}{U+0060}
+&
+\\
+\hypertarget{U+2640}{U+2640}
+&♀&Female Sign&\female&female&
+&
+\\
+\hypertarget{U+2641}{U+2641}
+&♁&Earth&\earth&earth&
+\hyperlink{U+003C}{U+003C}
+&
+\\
+\hypertarget{U+2642}{U+2642}
+&♂&Male Sign&\male&male&
+&
+\\
+\hypertarget{U+2643}{U+2643}
+&♃&Jupiter&\jupiter&jupiter&
+\hyperlink{U+0063}{U+0063}
+&
+\\
+\hypertarget{U+2644}{U+2644}
+&♄&Saturn&\saturn&saturn&
+\hyperlink{U+0076}{U+0076}
+&
+\\
+\hypertarget{U+2645}{U+2645}
+&♅&Uranus&\uranus&uranus&
+\hyperlink{U+0062}{U+0062}
+&
+\\
+\hypertarget{U+2646}{U+2646}
+&♆&Neptune&\neptune&neptune&
+\hyperlink{U+006E}{U+006E}
+&
+\\
+\hypertarget{U+2647}{U+2647}
+&♇&Pluto&\pluto&pluto&
+\hyperlink{U+006D}{U+006D}
+&
+\\
+\hypertarget{U+2648}{U+2648}
+&♈&Aries&\aries&aries&
+\hyperlink{U+00A1}{U+00A1}
+&
+\\
+\hypertarget{U+2649}{U+2649}
+&♉&Taurus&\taurus&taurus&
+\hyperlink{U+2122}{U+2122}
+&
+\\
+\hypertarget{U+264A}{U+264A}
+&♊&Gemini&\gemini&gemini&
+\hyperlink{U+0023}{U+0023}
+&
+\\
+\hypertarget{U+264B}{U+264B}
+&♋&Cancer&\cancer&cancer&
+\hyperlink{U+00A2}{U+00A2}
+&
+\\
+\hypertarget{U+264C}{U+264C}
+&♌&Leo&\leo&leo&
+\hyperlink{U+221E}{U+221E}
+&
+\\
+\hypertarget{U+264D}{U+264D}
+&♍&Virgo&\virgo&virgo&
+\hyperlink{U+00A7}{U+00A7}
+&
+\\
+\hypertarget{U+264E}{U+264E}
+&♎&Libra&\libra&libra&
+\hyperlink{U+00B6}{U+00B6}
+&
+\\
+\hypertarget{U+264F}{U+264F}
+&♏&Scorpius&\scorpius&scorpius&
+&
+\\
+\hypertarget{U+2650}{U+2650}
+&♐&Sagittarius&\saggitarius&saggitarius&
+\hyperlink{U+00AA}{U+00AA}
+&
+\\
+\hypertarget{U+2651}{U+2651}
+&♑&Capricorn&\capricorn&capricorn&
+\hyperlink{U+00BA}{U+00BA}
+&
+\\
+\hypertarget{U+2652}{U+2652}
+&♒&Aquarius&\aquarius&aquarius&
+\hyperlink{U+2013}{U+2013}
+&
+\\
+\hypertarget{U+2653}{U+2653}
+&♓&Pisces&\pisces&pisces&
+\hyperlink{U+2260}{U+2260}
+&
+\\
+\hypertarget{U+26A2}{U+26A2}
+&⚢&Doubled Female Sign&\doubledfemale&doubledfemale&
+&
+\\
+\hypertarget{U+26A3}{U+26A3}
+&⚣&Doubled Male Sign&\doubledmale&doubledmale&
+&
+\\
+\hypertarget{U+26A4}{U+26A4}
+&⚤&Interlocked Female and Male Sign&\interlockedmalefemale&interlockedmalefemale&
+&
+\\
+\hypertarget{U+26A5}{U+26A5}
+&⚥&Male and Female Sign&\maleandfemale&maleandfemale&
+&
+\\
+\hypertarget{U+26A6}{U+26A6}
+&⚦&Male with Stroke Sign&\malewithstroke&malewithstroke&
+&
+\\
+\hypertarget{U+26A7}{U+26A7}
+&⚧&Male with Stroke and Male and Female Sign&\malewithstrokemalefemale&malewithstrokemalefemale&
+&
+\\
+\hypertarget{U+26A8}{U+26A8}
+&⚨&Vertical Male with Stroke Sign&\verticalmalewithstroke&verticalmalewithstroke&
+&
+\\
+\hypertarget{U+26A9}{U+26A9}
+&⚩&Horizontal Male with Stroke Sign&\horizontalmalewithstroke&horizontalmalewithstroke&
+&
+\\
+\hypertarget{U+26B2}{U+26B2}
+&⚲&Neuter&\neuter&neuter&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+26B3}{U+26B3}
+&⚳&Ceres&\ceres&ceres&
+\hyperlink{U+002C}{U+002C}
+&
+\\
+\hypertarget{U+26B4}{U+26B4}
+&⚴&Pallas&\pallas&pallas&
+&
+\\
+\hypertarget{U+26B5}{U+26B5}
+&⚵&Juno&\juno&juno&
+&
+\\
+\hypertarget{U+26B6}{U+26B6}
+&⚶&Vesta&\vesta&vesta&
+&
+\\
+\hypertarget{U+26B7}{U+26B7}
+&⚷&Chiron&\chiron&chiron&
+&
+\\
+\hypertarget{U+26B8}{U+26B8}
+&⚸&Black Moon Lilith&\blackmoonlilith&blackmoonlilith&
+&
+\\
+\hypertarget{U+26B9}{U+26B9}
+&⚹&Sextile&\sextile&sextile&
+\hyperlink{U+0042}{U+0042}
+&
+\\
+\hypertarget{U+26BA}{U+26BA}
+&⚺&Semisextile&\semisextile&semisextile&
+&
+\\
+\hypertarget{U+26BB}{U+26BB}
+&⚻&Quincunx&\quincunx&quincunx&
+&
+\\
+\hypertarget{U+26BC}{U+26BC}
+&⚼&Sesquiquadrate&\sesquiquadrate&sesquiquadrate&
+&
+\\
+\hypertarget{U+26E2}{U+26E2}
+&⛢&Astronomical Symbol For Uranus&\varuranus&varuranus&
+&
+\\
+\hypertarget{U+26E4}{U+26E4}
+&⛤&Pentagram&\pentagram&pentagram&
+\hyperlink{U+0077}{U+0077}
+&
+\\
+\hypertarget{U+26E5}{U+26E5}
+&⛥&Right-Handed Interlaced Pentagram&\pentagramintR&pentagramintR&
+&
+\\
+\hypertarget{U+26E6}{U+26E6}
+&⛦&Left-Handed Interlaced Pentagram&\pentagramintL&pentagramintL&
+\hyperlink{U+0155}{U+0155}
+&
+\\
+\hypertarget{U+26E7}{U+26E7}
+&⛧&Inv Pentagram&\pentagraminv&pentagraminv&
+\hyperlink{U+0057}{U+0057}
+&
+\\
+\hypertarget{U+2BC9}{U+2BC9}
+&⯉&Neptune Form Two&\neptuneformtwo&neptuneformtwo&
+&
+\\
+\hypertarget{U+2BD3}{U+2BD3}
+&⯓&Pluto Form Two&\plutoformtwo&plutoformtwo&
+&
+\\
+\hypertarget{U+2BD4}{U+2BD4}
+&&Pluto Form Three&\plutoformthree&plutoformthree&
+&
+\\
+\hypertarget{U+2BD5}{U+2BD5}
+&⯕&Pluto Form Four&\plutoformfour&plutoformfour&
+&
+\\
+\hypertarget{U+2BD6}{U+2BD6}
+&⯖&Pluto Form Five&\plutoformfive&plutoformfive&
+&
+\\
+\hypertarget{U+2BD7}{U+2BD7}
+&⯗&Transpluto&\transpluto&transpluto&
+&
+\\
+\hypertarget{U+2BD8}{U+2BD8}
+&⯘&Proserpina&\proserpina&proserpina&
+&
+\\
+\hypertarget{U+2BD9}{U+2BD9}
+&⯙&Astraea&\astraea&astraea&
+&
+\\
+\hypertarget{U+2BDA}{U+2BDA}
+&⯚&Hygiea&\hygiea&hygiea&
+&
+\\
+\hypertarget{U+2BDB}{U+2BDB}
+&⯛&Pholus&\pholus&pholus&
+&
+\\
+\hypertarget{U+2BDC}{U+2BDC}
+&⯜&Nessus&\nessus&nessus&
+&
+\\
+\hypertarget{U+2BDD}{U+2BDD}
+&⯝&White Moon Selena&\selena&selena&
+&
+\\
+\hypertarget{U+2BDE}{U+2BDE}
+&⯞&Black Diamond On Cross&\blackdiamondoncross&blackdiamondoncross&
+&
+\\
+\hypertarget{U+2BDF}{U+2BDF}
+&⯟&True Light Moon Arta&\truelightmoonarta&truelightmoonarta&
+&
+\\
+\hypertarget{U+2BE0}{U+2BE0}
+&⯠&Cupido&\cupido&cupido&
+&
+\\
+\hypertarget{U+2BE1}{U+2BE1}
+&⯡&Hades&\hades&hades&
+&
+\\
+\hypertarget{U+2BE2}{U+2BE2}
+&⯢&Zeus&\zeus&zeus&
+&
+\\
+\hypertarget{U+2BE3}{U+2BE3}
+&⯣&Kronos&\kronos&kronos&
+&
+\\
+\hypertarget{U+2BE4}{U+2BE4}
+&⯤&Apollon&\apollon&apollon&
+&
+\\
+\hypertarget{U+2BE5}{U+2BE5}
+&⯥&Admetos&\admetos&admetos&
+&
+\\
+\hypertarget{U+2BE6}{U+2BE6}
+&⯦&Vulcanus&\vulcanus&vulcanus&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+\hypertarget{U+2BE7}{U+2BE7}
+&⯧&Poseidon&\poseidon&poseidon&
+&
+\\
+\end{tabular}
diff --git a/fonts/symbats3/latexname.tex b/fonts/symbats3/latexname.tex
new file mode 100644
index 0000000000..e0e74811d7
--- /dev/null
+++ b/fonts/symbats3/latexname.tex
@@ -0,0 +1,1550 @@
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+2BE5
+&⯥&Admetos&\admetos&admetos&
+&
+\\
+U+006B
+&k&Latin Small Letter K&\aegishjalmur&aegishjalmur&
+&
+\\
+U+005D
+&]&Right Square Bracket&\airelement&airelement&
+&
+\\
+U+2220
+&∠&Angle&\angleacute&angleacute&
+&
+\\
+U+2625
+&☥&Ankh&\ankh&ankh&
+\hyperlink{U+00E0}{U+00E0}
+&
+\\
+U+2BE4
+&⯤&Apollon&\apollon&apollon&
+&
+\\
+U+2652
+&♒&Aquarius&\aquarius&aquarius&
+\hyperlink{U+2013}{U+2013}
+&
+\\
+U+2648
+&♈&Aries&\aries&aries&
+\hyperlink{U+00A1}{U+00A1}
+&
+\\
+U+260A
+&☊&Ascending Node&\ascendingnode&ascendingnode&
+\hyperlink{U+0058}{U+0058}
+&
+\\
+U+2BD9
+&⯙&Astraea&\astraea&astraea&
+&
+\\
+U+0064
+&d&Latin Small Letter D&\athameeast&athameeast&
+&
+\\
+U+0073
+&s&Latin Small Letter S&\athamenorth&athamenorth&
+&
+\\
+U+0061
+&a&Latin Small Letter A&\athamesouth&athamesouth&
+&
+\\
+U+0066
+&f&Latin Small Letter F&\athamewest&athamewest&
+&
+\\
+U+0068
+&h&Latin Small Letter H&\awen&awen&
+&
+\\
+U+00CC
+&Ì&Latin Capital Letter I with Grave&\beltane&beltane&
+&
+\\
+U+2BDE
+&⯞&Black Diamond On Cross&\blackdiamondoncross&blackdiamondoncross&
+&
+\\
+U+26B8
+&⚸&Black Moon Lilith&\blackmoonlilith&blackmoonlilith&
+&
+\\
+U+264B
+&♋&Cancer&\cancer&cancer&
+\hyperlink{U+00A2}{U+00A2}
+&
+\\
+U+2651
+&♑&Capricorn&\capricorn&capricorn&
+\hyperlink{U+00BA}{U+00BA}
+&
+\\
+U+003F
+&?&Question Mark&\celtictrefoilknotopen&celtictrefoilknotopen&
+&
+\\
+U+007C
+&\|&Vertical Line&\celtictrefoilknotsolid&celtictrefoilknotsolid&
+&
+\\
+U+26B3
+&⚳&Ceres&\ceres&ceres&
+\hyperlink{U+002C}{U+002C}
+&
+\\
+U+26B7
+&⚷&Chiron&\chiron&chiron&
+&
+\\
+U+2295
+&⊕&Circled Plus&\circleplus&circleplus&
+&
+\\
+U+260C
+&☌&Conjunction&\conjunction&conjunction&
+\hyperlink{U+0043}{U+0043}
+&
+\\
+U+002F
+&/&Solidus&\crossedstaff&crossedstaff&
+&
+\\
+U+2BE0
+&⯠&Cupido&\cupido&cupido&
+&
+\\
+U+260B
+&☋&Descending Node&\descendingnode&descendingnode&
+\hyperlink{U+005A}{U+005A}
+&
+\\
+U+26A2
+&⚢&Doubled Female Sign&\doubledfemale&doubledfemale&
+&
+\\
+U+26A3
+&⚣&Doubled Male Sign&\doubledmale&doubledmale&
+&
+\\
+U+2609
+&☉&Sun&\dupsun&dupsun&
+&
+\\
+U+004D
+&M&Latin Capital Letter M&\dupsunfourspokes&dupsunfourspokes&
+&
+\\
+U+007D
+&\}&Right Curly Bracket&\earthelement&earthelement&
+&
+\\
+U+2641
+&♁&Earth&\earth&earth&
+\hyperlink{U+003C}{U+003C}
+&
+\\
+U+006C
+&l&Latin Small Letter L&\eightsabbats&eightsabbats&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+00CF
+&Ï&Latin Capital Letter I with Diaeresis&\eostre&eostre&
+&
+\\
+U+2640
+&♀&Female Sign&\female&female&
+&
+\\
+U+005B
+&[&Left Square Bracket&\fireelement&fireelement&
+&
+\\
+U+006A
+&j&Latin Small Letter J&\fylfotilkley&fylfotilkley&
+&
+\\
+U+264A
+&♊&Gemini&\gemini&gemini&
+\hyperlink{U+0023}{U+0023}
+&
+\\
+U+00F2
+&ò&Latin Small Letter O with Grave&\goddessasmoon&goddessasmoon&
+&
+\\
+U+2BE1
+&⯡&Hades&\hades&hades&
+&
+\\
+U+0067
+&g&Latin Small Letter G&\hammer&hammer&
+&
+\\
+U+26A9
+&⚩&Horizontal Male with Stroke Sign&\horizontalmalewithstroke&horizontalmalewithstroke&
+&
+\\
+U+2BDA
+&⯚&Hygiea&\hygiea&hygiea&
+&
+\\
+U+00CE
+&Î&Latin Capital Letter I with Circumflex&\imbolc&imbolc&
+&
+\\
+U+26A4
+&⚤&Interlocked Female and Male Sign&\interlockedmalefemale&interlockedmalefemale&
+&
+\\
+U+26B5
+&⚵&Juno&\juno&juno&
+&
+\\
+U+2643
+&♃&Jupiter&\jupiter&jupiter&
+\hyperlink{U+0063}{U+0063}
+&
+\\
+U+2BE3
+&⯣&Kronos&\kronos&kronos&
+&
+\\
+U+004C
+&L&Latin Capital Letter L&\labrys&labrys&
+&
+\\
+U+264C
+&♌&Leo&\leo&leo&
+\hyperlink{U+221E}{U+221E}
+&
+\\
+U+264E
+&♎&Libra&\libra&libra&
+\hyperlink{U+00B6}{U+00B6}
+&
+\\
+U+0027
+&'&Apostrophe&\lightning&lightning&
+&
+\\
+U+00D4
+&Ô&Latin Capital Letter O with Circumflex&\lughnasadh&lughnasadh&
+&
+\\
+U+2642
+&♂&Male Sign&\male&male&
+&
+\\
+U+26A5
+&⚥&Male and Female Sign&\maleandfemale&maleandfemale&
+&
+\\
+U+26A6
+&⚦&Male with Stroke Sign&\malewithstroke&malewithstroke&
+&
+\\
+U+26A7
+&⚧&Male with Stroke and Male and Female Sign&\malewithstrokemalefemale&malewithstrokemalefemale&
+&
+\\
+U+0078
+&x&Latin Small Letter X&\mars&mars&
+&
+\\
+U+0048
+&H&Latin Capital Letter H&\mazeround&mazeround&
+&
+\\
+U+0047
+&G&Latin Capital Letter G&\mazesquarebase&mazesquarebase&
+&
+\\
+U+263F
+&☿&Mercury&\mercury&mercury&
+\hyperlink{U+0060}{U+0060}
+&
+\\
+U+0024
+&\$&Dollar Sign&\moonfirstquarteroutline&moonfirstquarteroutline&
+&
+\\
+U+0028
+&(&Left Parenthesis&\moonfirstquartersolid&moonfirstquartersolid&
+&
+\\
+U+0029
+&)&Right Parenthesis&\moonfull&moonfull&
+&
+\\
+U+005E
+&\^{}&Circumflex Accent&\moonlastquarteroutline&moonlastquarteroutline&
+&
+\\
+U+005F
+&\_&Low Line&\moonlastquartersolid&moonlastquartersolid&
+&
+\\
+U+0025
+&\%&Percent Sign&\moonnew&moonnew&
+&
+\\
+U+263E
+&☾&Last Quarter Moon&\moonwaningoutline&moonwaningoutline&
+\hyperlink{U+0026}{U+0026}
+&
+\\
+U+002B
+&+&Plus Sign&\moonwaningsolid&moonwaningsolid&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+0021
+&!&Exclamation Mark&\moonwaxfullwaneoutline&moonwaxfullwaneoutline&
+&
+\\
+U+0040
+&@&Commercial At&\moonwaxfullwanesolid&moonwaxfullwanesolid&
+&
+\\
+U+263D
+&☽&First Quarter Moon&\moonwaxingoutline&moonwaxingoutline&
+\hyperlink{U+00A3}{U+00A3}
+&
+\\
+U+002A
+&*&Asterisk&\moonwaxingsolid&moonwaxingsolid&
+&
+\\
+U+2BC9
+&⯉&Neptune Form Two&\neptuneformtwo&neptuneformtwo&
+&
+\\
+U+2646
+&♆&Neptune&\neptune&neptune&
+\hyperlink{U+006E}{U+006E}
+&
+\\
+U+2BDC
+&⯜&Nessus&\nessus&nessus&
+&
+\\
+U+26B2
+&⚲&Neuter&\neuter&neuter&
+&
+\\
+U+0034
+&4&Digit Four&\octile&octile&
+&
+\\
+U+1690
+&ᚐ&Ogham Letter Ailm&\OGailm&OGailm&
+&
+\\
+U+1681
+&ᚁ&Ogham Letter Beith&\OGbeith&OGbeith&
+&
+\\
+U+168A
+&ᚊ&Ogham Letter Ceirt&\OGceirt&OGceirt&
+&
+\\
+U+1689
+&ᚉ&Ogham Letter Coll&\OGcoll&OGcoll&
+&
+\\
+U+1687
+&ᚇ&Ogham Letter Dair&\OGdair&OGdair&
+&
+\\
+U+1695
+&ᚕ&Ogham Letter Eabhadh&\OGeabhadh&OGeabhadh&
+&
+\\
+U+1693
+&ᚓ&Ogham Letter Eadhadh&\OGeadhadh&OGeadhadh&
+&
+\\
+U+1699
+&ᚙ&Ogham Letter Eamhancholl&\OGeamhancholl&OGeamhancholl&
+&
+\\
+U+1683
+&ᚃ&Ogham Letter Fearn&\OGfearn&OGfearn&
+&
+\\
+U+169B
+&᚛&Ogham Feather Mark&\OGfeather&OGfeather&
+&
+\\
+U+168C
+&ᚌ&Ogham Letter Gort&\OGgort&OGgort&
+&
+\\
+U+1698
+&ᚘ&Ogham Letter Ifin&\OGifin&OGifin&
+&
+\\
+U+1694
+&ᚔ&Ogham Letter Iodhadh&\OGiodhadh&OGiodhadh&
+&
+\\
+U+1682
+&ᚂ&Ogham Letter Luis&\OGluis&OGluis&
+&
+\\
+U+168B
+&ᚋ&Ogham Letter Muin&\OGmuin&OGmuin&
+&
+\\
+U+168D
+&ᚍ&Ogham Letter Ngeadal&\OGngeadal&OGngeadal&
+&
+\\
+U+1685
+&ᚅ&Ogham Letter Nion&\OGnion&OGnion&
+&
+\\
+U+1691
+&ᚑ&Ogham Letter Onn&\OGonn&OGonn&
+&
+\\
+U+1696
+&ᚖ&Ogham Letter Or&\OGor&OGor&
+&
+\\
+U+169A
+&ᚚ&Ogham Letter Peith&\OGpeith&OGpeith&
+&
+\\
+U+169C
+&᚜&Ogham Reversed Feather Mark&\OGreversedfeather&OGreversedfeather&
+&
+\\
+U+168F
+&ᚏ&Ogham Letter Ruis&\OGruis&OGruis&
+&
+\\
+U+1684
+&ᚄ&Ogham Letter Sail&\OGsail&OGsail&
+&
+\\
+U+168E
+&ᚎ&Ogham Letter Straif&\OGstraif&OGstraif&
+&
+\\
+U+1688
+&ᚈ&Ogham Letter Tinne&\OGtinne&OGtinne&
+&
+\\
+U+1686
+&ᚆ&Ogham Letter Uath&\OGuath&OGuath&
+&
+\\
+U+1697
+&ᚗ&Ogham Letter Uilleann&\OGuilleann&OGuilleann&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+1692
+&ᚒ&Ogham Letter Ur&\OGur&OGur&
+&
+\\
+U+00E0
+&à&Latin Small Letter A with Grave&\oldankh&oldankh&
+\hyperlink{U+2625}{U+2625}
+&
+\\
+U+2013
+&–&En Dash&\oldaquarius&oldaquarius&
+\hyperlink{U+2652}{U+2652}
+&
+\\
+U+00A1
+&¡&Inv Exclamation Mark&\oldaries&oldaries&
+\hyperlink{U+2648}{U+2648}
+&
+\\
+U+0058
+&X&Latin Capital Letter X&\oldascendingnode&oldascendingnode&
+\hyperlink{U+260A}{U+260A}
+&
+\\
+U+00A2
+&¢&Cent Sign&\oldcancer&oldcancer&
+\hyperlink{U+264B}{U+264B}
+&
+\\
+U+00BA
+&º&Masculine Ordinal Indicator&\oldcapricorn&oldcapricorn&
+\hyperlink{U+2651}{U+2651}
+&
+\\
+U+002C
+&\,&Comma&\oldceres&oldceres&
+\hyperlink{U+26B3}{U+26B3}
+&
+\\
+U+0043
+&C&Latin Capital Letter C&\oldconjunction&oldconjunction&
+\hyperlink{U+260C}{U+260C}
+&
+\\
+U+005A
+&Z&Latin Capital Letter Z&\olddescendingnode&olddescendingnode&
+\hyperlink{U+260B}{U+260B}
+&
+\\
+U+003C
+&\<&Less-Than Sign&\oldearth&oldearth&
+\hyperlink{U+2641}{U+2641}
+&
+\\
+U+0023
+&\#&Number Sign&\oldgemini&oldgemini&
+\hyperlink{U+264A}{U+264A}
+&
+\\
+U+0063
+&c&Latin Small Letter C&\oldjupiter&oldjupiter&
+\hyperlink{U+2643}{U+2643}
+&
+\\
+U+221E
+&∞&Infinity&\oldleo&oldleo&
+\hyperlink{U+264C}{U+264C}
+&
+\\
+U+00B6
+&¶&Pilcrow Sign&\oldlibra&oldlibra&
+\hyperlink{U+264E}{U+264E}
+&
+\\
+U+0060
+&\`{}&Grave Accent&\oldmercury&oldmercury&
+\hyperlink{U+263F}{U+263F}
+&
+\\
+U+0026
+&\&&Ampersand&\oldmoonwaningoutline&oldmoonwaningoutline&
+\hyperlink{U+263E}{U+263E}
+&
+\\
+U+00A3
+&£&Pound Sign&\oldmoonwaxingoutline&oldmoonwaxingoutline&
+\hyperlink{U+263D}{U+263D}
+&
+\\
+U+006E
+&n&Latin Small Letter N&\oldneptune&oldneptune&
+\hyperlink{U+2646}{U+2646}
+&
+\\
+U+0056
+&V&Latin Capital Letter V&\oldopposition&oldopposition&
+\hyperlink{U+260D}{U+260D}
+&
+\\
+U+0155
+&ŕ&Latin Small Letter R with Acute&\oldpentagramintL&oldpentagramintL&
+\hyperlink{U+26E6}{U+26E6}
+&
+\\
+U+0069
+&i&Latin Small Letter I&\oldpentagramintRsolid&oldpentagramintRsolid&
+\hyperlink{U+00ED}{U+00ED}
+&
+\\
+U+0072
+&r&Latin Small Letter R&\oldpentagramintR&oldpentagramintR&
+\hyperlink{U+26E5}{U+26E5}
+&
+\hyperlink{U+0155}{U+0155}
+\\
+U+0055
+&U&Latin Capital Letter U&\oldpentagraminvsolid&oldpentagraminvsolid&
+\hyperlink{U+00CD}{U+00CD}
+&
+\\
+U+0057
+&W&Latin Capital Letter W&\oldpentagraminv&oldpentagraminv&
+\hyperlink{U+26E7}{U+26E7}
+&
+\\
+U+0077
+&w&Latin Small Letter W&\oldpentagram&oldpentagram&
+\hyperlink{U+26E4}{U+26E4}
+&
+\\
+U+2260
+&≠&Not Equal To&\oldpisces&oldpisces&
+\hyperlink{U+2653}{U+2653}
+&
+\\
+U+006D
+&m&Latin Small Letter M&\oldpluto&oldpluto&
+\hyperlink{U+2647}{U+2647}
+&
+\\
+U+00AA
+&ª&Feminine Ordinal Indicator&\oldsaggitarius&oldsaggitarius&
+\hyperlink{U+2650}{U+2650}
+&
+\\
+U+0076
+&v&Latin Small Letter V&\oldsaturn&oldsaturn&
+\hyperlink{U+2644}{U+2644}
+&
+\\
+U+0042
+&B&Latin Capital Letter B&\oldsextile&oldsextile&
+\hyperlink{U+26B9}{U+26B9}
+&
+\\
+U+004E
+&N&Latin Capital Letter N&\oldsquare&oldsquare&
+\hyperlink{U+25A1}{U+25A1}
+&
+\\
+U+0033
+&3&Digit Three&\oldsuncoronafourspokes&oldsuncoronafourspokes&
+\hyperlink{U+0038}{U+0038}
+&
+\\
+U+2122
+&™&Trade Mark Sign&\oldtaurus&oldtaurus&
+\hyperlink{U+2649}{U+2649}
+&
+\\
+U+0062
+&b&Latin Small Letter B&\olduranus&olduranus&
+\hyperlink{U+2645}{U+2645}
+&
+\\
+U+00A7
+&§&Section Sign&\oldvirgo&oldvirgo&
+\hyperlink{U+264D}{U+264D}
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+260D
+&☍&Opposition&\opposition&opposition&
+\hyperlink{U+0056}{U+0056}
+&
+\\
+U+26B4
+&⚴&Pallas&\pallas&pallas&
+&
+\\
+U+00C8
+&È&Latin Capital Letter E with Grave&\parting&parting&
+&
+\\
+U+0071
+&q&Latin Small Letter Q&\pentagramcircled&pentagramcircled&
+&
+\hyperlink{U+0051}{U+0051}
+\\
+U+00E9
+&é&Latin Small Letter E with Acute&\pentagramintLcircled&pentagramintLcircled&
+&
+\hyperlink{U+0065}{U+0065}
+\\
+U+26E6
+&⛦&Left-Handed Interlaced Pentagram&\pentagramintL&pentagramintL&
+\hyperlink{U+0155}{U+0155}
+&
+\\
+U+26E5
+&⛥&Right-Handed Interlaced Pentagram&\pentagramintR&pentagramintR&
+&
+\\
+U+0065
+&e&Latin Small Letter E&\pentagramintRcircled&pentagramintRcircled&
+&
+\hyperlink{U+00E9}{U+00E9}
+\\
+U+00ED
+&í&Latin Small Letter I with Acute&\pentagramintRsolid&pentagramintRsolid&
+\hyperlink{U+0069}{U+0069}
+&
+\\
+U+0050
+&P&Latin Capital Letter P&\pentagramintRtriangle&pentagramintRtriangle&
+&
+\\
+U+0051
+&Q&Latin Capital Letter Q&\pentagraminvcircled&pentagraminvcircled&
+&
+\hyperlink{U+0071}{U+0071}
+\\
+U+0045
+&E&Latin Capital Letter E&\pentagraminvintLcircled&pentagraminvintLcircled&
+&
+\hyperlink{U+00C9}{U+00C9}
+\\
+U+0052
+&R&Latin Capital Letter R&\pentagraminvintL&pentagraminvintL&
+&
+\hyperlink{U+0154}{U+0154}
+\\
+U+00C9
+&É&Latin Capital Letter E with Acute&\pentagraminvintRcircled&pentagraminvintRcircled&
+&
+\hyperlink{U+0045}{U+0045}
+\\
+U+0049
+&I&Latin Capital Letter I&\pentagraminvintRsolid&pentagraminvintRsolid&
+&
+\hyperlink{none}{none}
+\\
+U+0154
+&Ŕ&Latin Capital Letter R with Acute&\pentagraminvintR&pentagraminvintR&
+&
+\hyperlink{U+0052}{U+0052}
+\\
+U+00CD
+&Í&Latin Capital Letter I with Acute&\pentagraminvsolid&pentagraminvsolid&
+\hyperlink{U+0055}{U+0055}
+&
+\\
+U+26E7
+&⛧&Inv Pentagram&\pentagraminv&pentagraminv&
+\hyperlink{U+0057}{U+0057}
+&
+\\
+U+0079
+&y&Latin Small Letter Y&\pentagramrough&pentagramrough&
+&
+\\
+U+0074
+&t&Latin Small Letter T&\pentagramroughcircled&pentagramroughcircled&
+&
+\\
+U+0059
+&Y&Latin Capital Letter Y&\pentagramroughinv&pentagramroughinv&
+&
+\\
+U+0054
+&T&Latin Capital Letter T&\pentagramroughinvcircled&pentagramroughinvcircled&
+&
+\\
+U+004F
+&O&Latin Capital Letter O&\pentagramroughinvsolid&pentagramroughinvsolid&
+&
+\hyperlink{U+006F}{U+006F}
+\\
+U+006F
+&o&Latin Small Letter O&\pentagramroughsolid&pentagramroughsolid&
+&
+\hyperlink{U+004F}{U+004F}
+\\
+U+0075
+&u&Latin Small Letter U&\pentagramsolid&pentagramsolid&
+&
+\\
+U+26E4
+&⛤&Pentagram&\pentagram&pentagram&
+\hyperlink{U+0077}{U+0077}
+&
+\\
+U+0070
+&p&Latin Small Letter P&\pentagramwithtriangle&pentagramwithtriangle&
+&
+\\
+U+00F9
+&ù&Latin Small Letter U with Grave&\perfectcouple&perfectcouple&
+&
+\\
+U+00D9
+&Ù&Latin Capital Letter U with Grave&\perfectcouplethirddegree&perfectcouplethirddegree&
+&
+\\
+U+2BDB
+&⯛&Pholus&\pholus&pholus&
+&
+\\
+U+2653
+&♓&Pisces&\pisces&pisces&
+\hyperlink{U+2260}{U+2260}
+&
+\\
+U+2BD6
+&⯖&Pluto Form Five&\plutoformfive&plutoformfive&
+&
+\\
+U+2BD5
+&⯕&Pluto Form Four&\plutoformfour&plutoformfour&
+&
+\\
+U+2BD4
+&&Pluto Form Three&\plutoformthree&plutoformthree&
+&
+\\
+U+2BD3
+&⯓&Pluto Form Two&\plutoformtwo&plutoformtwo&
+&
+\\
+U+2647
+&♇&Pluto&\pluto&pluto&
+\hyperlink{U+006D}{U+006D}
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+2BE7
+&⯧&Poseidon&\poseidon&poseidon&
+&
+\\
+U+00C0
+&À&Latin Capital Letter A with Grave&\powergoingforth&powergoingforth&
+&
+\\
+U+211E
+&℞&Prescription Take (Recipe)&\prescription&prescription&
+&
+\\
+U+2BD8
+&⯘&Proserpina&\proserpina&proserpina&
+&
+\\
+U+26BB
+&⚻&Quincunx&\quincunx&quincunx&
+&
+\\
+U+003E
+&\>&Greater-Than Sign&\recipe&recipe&
+&
+\\
+U+004A
+&J&Latin Capital Letter J&\rockartgoddess&rockartgoddess&
+&
+\\
+U+004B
+&K&Latin Capital Letter K&\rockarthorse&rockarthorse&
+&
+\\
+U+16AA
+&ᚪ&Runic Letter Ac A&\RUaca&RUaca&
+&
+\\
+U+16AB
+&ᚫ&Runic Letter Aesc&\RUaesc&RUaesc&
+&
+\\
+U+16C9
+&ᛉ&Runic Letter Algiz Eolhx&\RUalgizeolhx&RUalgizeolhx&
+&
+\\
+U+16A8
+&ᚨ&Runic Letter Ansuz A&\RUansuza&RUansuza&
+&
+\\
+U+16EE
+&ᛮ&Runic Arlaug Symbol&\RUarlaugsymbol&RUarlaugsymbol&
+&
+\\
+U+16F0
+&ᛰ&Runic Belgthor Symbol&\RUbelgthorsymbol&RUbelgthorsymbol&
+&
+\\
+U+16D2
+&ᛒ&Runic Letter Berkanan Beorc Bjarkan B&\RUberkananbeorcbjarkanb&RUberkananbeorcbjarkanb&
+&
+\\
+U+16CD
+&ᛍ&Runic Letter C&\RUc&RUc&
+&
+\\
+U+16E3
+&ᛣ&Runic Letter Calc&\RUcalc&RUcalc&
+&
+\\
+U+16E4
+&ᛤ&Runic Letter Cealc&\RUcealc&RUcealc&
+&
+\\
+U+16B3
+&ᚳ&Runic Letter Cen&\RUcen&RUcen&
+&
+\\
+U+16ED
+&᛭&Runic Cross Punctuation&\RUcrosspunctuation&RUcrosspunctuation&
+&
+\\
+U+16E2
+&ᛢ&Runic Letter Cweorth&\RUcweorth&RUcweorth&
+&
+\\
+U+16D1
+&ᛑ&Runic Letter D&\RUd&RUd&
+&
+\\
+U+16DE
+&ᛞ&Runic Letter Dagaz Daeg D&\RUdagazdaegd&RUdagazdaegd&
+&
+\\
+U+16DB
+&ᛛ&Runic Letter Dotted-L&\RUdottedl&RUdottedl&
+&
+\\
+U+16C0
+&ᛀ&Runic Letter Dotted-N&\RUdottedn&RUdottedn&
+&
+\\
+U+16D4
+&ᛔ&Runic Letter Dotted-P&\RUdottedp&RUdottedp&
+&
+\\
+U+16C2
+&ᛂ&Runic Letter E&\RUe&RUe&
+&
+\\
+U+16E0
+&ᛠ&Runic Letter Ear&\RUear&RUear&
+&
+\\
+U+16D6
+&ᛖ&Runic Letter Ehwaz Eh E&\RUehwazehe&RUehwazehe&
+&
+\\
+U+16B6
+&ᚶ&Runic Letter Eng&\RUeng&RUeng&
+&
+\\
+U+16A7
+&ᚧ&Runic Letter Eth&\RUeth&RUeth&
+&
+\\
+U+16A0
+&ᚠ&Runic Letter Fehu Feoh Fe F&\RUfehufeohfef&RUfehufeohfef&
+&
+\\
+U+16F7
+&ᛷ&Runic Letter Franks Casket Ac&\RUfrankscasketac&RUfrankscasketac&
+&
+\\
+U+16F8
+&ᛸ&Runic Letter Franks Casket Aesc&\RUfrankscasketaesc&RUfrankscasketaesc&
+&
+\\
+U+16F6
+&ᛶ&Runic Letter Franks Casket Eh&\RUfrankscasketeh&RUfrankscasketeh&
+&
+\\
+U+16F5
+&ᛵ&Runic Letter Franks Casket Is&\RUfrankscasketis&RUfrankscasketis&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+16F4
+&ᛴ&Runic Letter Franks Casket Os&\RUfrankscasketos&RUfrankscasketos&
+&
+\\
+U+16B5
+&ᚵ&Runic Letter G&\RUg&RUg&
+&
+\\
+U+16B8
+&ᚸ&Runic Letter Gar&\RUgar&RUgar&
+&
+\\
+U+16B7
+&ᚷ&Runic Letter Gebo Gyfu G&\RUgebogyfug&RUgebogyfug&
+&
+\\
+U+16C4
+&ᛄ&Runic Letter Ger&\RUger&RUger&
+&
+\\
+U+16BB
+&ᚻ&Runic Letter Haegl H&\RUhaeglh&RUhaeglh&
+&
+\\
+U+16BA
+&ᚺ&Runic Letter Haglaz H&\RUhaglazh&RUhaglazh&
+&
+\\
+U+16E8
+&ᛨ&Runic Letter Icelandic-Yr&\RUicelandicyr&RUicelandicyr&
+&
+\\
+U+16DD
+&ᛝ&Runic Letter Ing&\RUing&RUing&
+&
+\\
+U+16DC
+&ᛜ&Runic Letter Ingwaz&\RUingwaz&RUingwaz&
+&
+\\
+U+16E1
+&ᛡ&Runic Letter Ior&\RUior&RUior&
+&
+\\
+U+16C1
+&ᛁ&Runic Letter Isaz Is Iss I&\RUisazisissi&RUisazisissi&
+&
+\\
+U+16C7
+&ᛇ&Runic Letter Iwaz Eoh&\RUiwazeoh&RUiwazeoh&
+&
+\\
+U+16C3
+&ᛃ&Runic Letter Jeran J&\RUjeranj&RUjeranj&
+&
+\\
+U+16F1
+&ᛱ&Runic Letter K&\RUk&RUk&
+&
+\\
+U+16B2
+&ᚲ&Runic Letter Kauna&\RUkauna&RUkauna&
+&
+\\
+U+16B4
+&ᚴ&Runic Letter Kaun K&\RUkaunk&RUkaunk&
+&
+\\
+U+16DA
+&ᛚ&Runic Letter Laukaz Lagu Logr L&\RUlaukazlagulogrl&RUlaukazlagulogrl&
+&
+\\
+U+16C5
+&ᛅ&Runic Letter Long-Branch-Ar Ae&\RUlongbrancharae&RUlongbrancharae&
+&
+\\
+U+16BC
+&ᚼ&Runic Letter Long-Branch-Hagall H&\RUlongbranchhagallh&RUlongbranchhagallh&
+&
+\\
+U+16D8
+&ᛘ&Runic Letter Long-Branch-Madr M&\RUlongbranchmadrm&RUlongbranchmadrm&
+&
+\\
+U+16AC
+&ᚬ&Runic Letter Long-Branch-Oss O&\RUlongbranchosso&RUlongbranchosso&
+&
+\\
+U+16E6
+&ᛦ&Runic Letter Long-Branch-Yr&\RUlongbranchyr&RUlongbranchyr&
+&
+\\
+U+16D7
+&ᛗ&Runic Letter Mannaz Man M&\RUmannazmanm&RUmannazmanm&
+&
+\\
+U+16EC
+&᛬&Runic Multiple Punctuation&\RUmultiplepunctuation&RUmultiplepunctuation&
+&
+\\
+U+16BE
+&ᚾ&Runic Letter Naudiz Nyd Naud N&\RUnaudiznydnaudn&RUnaudiznydnaudn&
+&
+\\
+U+16AE
+&ᚮ&Runic Letter O&\RUo&RUo&
+&
+\\
+U+16AF
+&ᚯ&Runic Letter Oe&\RUoe&RUoe&
+&
+\\
+U+16B0
+&ᚰ&Runic Letter On&\RUon&RUon&
+&
+\\
+U+16F3
+&ᛳ&Runic Letter Oo&\RUoo&RUoo&
+&
+\\
+U+16D5
+&ᛕ&Runic Letter Open-P&\RUopenp&RUopenp&
+&
+\\
+U+16A9
+&ᚩ&Runic Letter Os O&\RUoso&RUoso&
+&
+\\
+U+16DF
+&ᛟ&Runic Letter Othalan Ethel O&\RUothalanethelo&RUothalanethelo&
+&
+\\
+U+16C8
+&ᛈ&Runic Letter Pertho Peorth P&\RUperthopeorthp&RUperthopeorthp&
+&
+\\
+U+16E9
+&ᛩ&Runic Letter Q&\RUq&RUq&
+&
+\\
+U+16B1
+&ᚱ&Runic Letter Raido Rad Reid R&\RUraidoradreidr&RUraidoradreidr&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+16F2
+&ᛲ&Runic Letter Sh&\RUsh&RUsh&
+&
+\\
+U+16C6
+&ᛆ&Runic Letter Short-Twig-Ar A&\RUshorttwigara&RUshorttwigara&
+&
+\\
+U+16D3
+&ᛓ&Runic Letter Short-Twig-Bjarkan B&\RUshorttwigbjarkanb&RUshorttwigbjarkanb&
+&
+\\
+U+16BD
+&ᚽ&Runic Letter Short-Twig-Hagall H&\RUshorttwighagallh&RUshorttwighagallh&
+&
+\\
+U+16D9
+&ᛙ&Runic Letter Short-Twig-Madr M&\RUshorttwigmadrm&RUshorttwigmadrm&
+&
+\\
+U+16BF
+&ᚿ&Runic Letter Short-Twig-Naud N&\RUshorttwignaudn&RUshorttwignaudn&
+&
+\\
+U+16AD
+&ᚭ&Runic Letter Short-Twig-Oss O&\RUshorttwigosso&RUshorttwigosso&
+&
+\\
+U+16CC
+&ᛌ&Runic Letter Short-Twig-Sol S&\RUshorttwigsols&RUshorttwigsols&
+&
+\\
+U+16D0
+&ᛐ&Runic Letter Short-Twig-Tyr T&\RUshorttwigtyrt&RUshorttwigtyrt&
+&
+\\
+U+16E7
+&ᛧ&Runic Letter Short-Twig-Yr&\RUshorttwigyr&RUshorttwigyr&
+&
+\\
+U+16CB
+&ᛋ&Runic Letter Sigel Long-Branch-Sol S&\RUsigellongbranchsols&RUsigellongbranchsols&
+&
+\\
+U+16EB
+&᛫&Runic Single Punctuation&\RUsinglepunctuation&RUsinglepunctuation&
+&
+\\
+U+16CA
+&ᛊ&Runic Letter Sowilo S&\RUsowilos&RUsowilos&
+&
+\\
+U+16E5
+&ᛥ&Runic Letter Stan&\RUstan&RUstan&
+&
+\\
+U+16A6
+&ᚦ&Runic Letter Thurisaz Thurs Thorn&\RUthurisazthursthorn&RUthurisazthursthorn&
+&
+\\
+U+16CF
+&ᛏ&Runic Letter Tiwaz Tir Tyr T&\RUtiwaztirtyrt&RUtiwaztirtyrt&
+&
+\\
+U+16EF
+&ᛯ&Runic Tvimadur Symbol&\RUtvimadursymbol&RUtvimadursymbol&
+&
+\\
+U+16A2
+&ᚢ&Runic Letter Uruz Ur U&\RUuruzuru&RUuruzuru&
+&
+\\
+U+16A1
+&ᚡ&Runic Letter V&\RUv&RUv&
+&
+\\
+U+16A5
+&ᚥ&Runic Letter W&\RUw&RUw&
+&
+\\
+U+16B9
+&ᚹ&Runic Letter Wunjo Wynn W&\RUwunjowynnw&RUwunjowynnw&
+&
+\\
+U+16EA
+&ᛪ&Runic Letter X&\RUx&RUx&
+&
+\\
+U+16A4
+&ᚤ&Runic Letter Y&\RUy&RUy&
+&
+\\
+U+16A3
+&ᚣ&Runic Letter Yr&\RUyr&RUyr&
+&
+\\
+U+16CE
+&ᛎ&Runic Letter Z&\RUz&RUz&
+&
+\\
+U+2650
+&♐&Sagittarius&\saggitarius&saggitarius&
+\hyperlink{U+00AA}{U+00AA}
+&
+\\
+U+00E8
+&è&Latin Small Letter E with Grave&\salute&salute&
+&
+\\
+U+00C5
+&Å&Latin Capital Letter A with Ring Above&\samhuinn&samhuinn&
+&
+\\
+U+2644
+&♄&Saturn&\saturn&saturn&
+\hyperlink{U+0076}{U+0076}
+&
+\\
+U+2022
+&•&Bullet&\scorpio&scorpio&
+&
+\\
+U+264F
+&♏&Scorpius&\scorpius&scorpius&
+&
+\\
+U+00EC
+&ì&Latin Small Letter I with Grave&\scourge&scourge&
+&
+\\
+U+2BDD
+&⯝&White Moon Selena&\selena&selena&
+&
+\\
+U+26BA
+&⚺&Semisextile&\semisextile&semisextile&
+&
+\\
+U+005C
+&\textbackslash&Reverse Solidus&\serpentimpaled&serpentimpaled&
+&
+\\
+U+26BC
+&⚼&Sesquiquadrate&\sesquiquadrate&sesquiquadrate&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+26B9
+&⚹&Sextile&\sextile&sextile&
+\hyperlink{U+0042}{U+0042}
+&
+\\
+U+25A1
+&□&White Square&\square&square&
+\hyperlink{U+004F}{U+004F}
+&
+\\
+U+003B
+&;&Semicolon&\stareightarrows&stareightarrows&
+&
+\\
+U+002E
+&.&Full Stop&\sulphur&sulphur&
+&
+\\
+U+0035
+&5&Digit Five&\sun&sun&
+&
+\\
+U+0038
+&8&Digit Eight&\suncoronafourspokes&suncoronafourspokes&
+\hyperlink{U+0033}{U+0033}
+&
+\\
+U+0039
+&9&Digit Nine&\suncoronahubfourspokes&suncoronahubfourspokes&
+&
+\\
+U+003D
+&=&Equals Sign&\suncoronasixspokes&suncoronasixspokes&
+&
+\\
+U+0037
+&7&Digit Seven&\suneightspokes&suneightspokes&
+&
+\\
+U+0036
+&6&Digit Six&\sunfourdoublespokes&sunfourdoublespokes&
+&
+\\
+U+0030
+&0&Digit Zero&\sunfourspokes&sunfourspokes&
+&
+\\
+U+263C
+&☼&White Sun with Rays&\sunrays&sunrays&
+&
+\\
+U+002D
+&-&Hyphen-Minus&\sunthreedoublespokes&sunthreedoublespokes&
+&
+\\
+U+0031
+&1&Digit One&\sunwithrays&sunwithrays&
+&
+\\
+U+0032
+&2&Digit Two&\sunwithraysfourspokes&sunwithraysfourspokes&
+&
+\\
+U+2649
+&♉&Taurus&\taurus&taurus&
+\hyperlink{U+2122}{U+2122}
+&
+\\
+U+2BD7
+&⯗&Transpluto&\transpluto&transpluto&
+&
+\\
+U+2BDF
+&⯟&True Light Moon Arta&\truelightmoonarta&truelightmoonarta&
+&
+\\
+U+2645
+&♅&Uranus&\uranus&uranus&
+\hyperlink{U+0062}{U+0062}
+&
+\\
+U+003A
+&:&Colon&\valknutoutline&valknutoutline&
+&
+\\
+U+0022
+&“&Quotation Mark&\valknutsolid&valknutsolid&
+&
+\\
+U+007E
+&\~{}&Tilde&\vargemini&vargemini&
+&
+\\
+U+26E2
+&⛢&Astronomical Symbol For Uranus&\varuranus&varuranus&
+&
+\\
+U+007A
+&z&Latin Small Letter Z&\venus&venus&
+&
+\\
+U+00D3
+&Ó&Latin Capital Letter O with Acute&\venusfigureoutline&venusfigureoutline&
+&
+\\
+U+00F3
+&ó&Latin Small Letter O with Acute&\venusfiguresolid&venusfiguresolid&
+&
+\\
+U+26A8
+&⚨&Vertical Male with Stroke Sign&\verticalmalewithstroke&verticalmalewithstroke&
+&
+\\
+U+26B6
+&⚶&Vesta&\vesta&vesta&
+&
+\\
+U+264D
+&♍&Virgo&\virgo&virgo&
+\hyperlink{U+00A7}{U+00A7}
+&
+\\
+U+2BE6
+&⯦&Vulcanus&\vulcanus&vulcanus&
+&
+\\
+U+007B
+&\{&Left Curly Bracket&\waterelement&waterelement&
+&
+\\
+U+0044
+&D&Latin Capital Letter D&\whiteknifeeast&whiteknifeeast&
+&
+\\
+U+0053
+&S&Latin Capital Letter S&\whiteknifenorth&whiteknifenorth&
+&
+\\
+U+0041
+&A&Latin Capital Letter A&\whiteknifesouth&whiteknifesouth&
+&
+\\
+U+0046
+&F&Latin Capital Letter F&\whiteknifewest&whiteknifewest&
+&
+\\
+U+0132
+&IJ&Latin Capital Ligature Ij&\yule&yule&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+2BE2
+&⯢&Zeus&\zeus&zeus&
+&
+\\
+\end{tabular}
diff --git a/fonts/symbats3/symbats3.pdf b/fonts/symbats3/symbats3.pdf
new file mode 100644
index 0000000000..a9b8e7752d
--- /dev/null
+++ b/fonts/symbats3/symbats3.pdf
Binary files differ
diff --git a/fonts/symbats3/symbats3.sty b/fonts/symbats3/symbats3.sty
new file mode 100644
index 0000000000..bf8f40bce8
--- /dev/null
+++ b/fonts/symbats3/symbats3.sty
@@ -0,0 +1,716 @@
+%%
+%% This is file `symbats3.sty'
+%%
+%% The source is maintained by Peter Flynn at Silmaril Consultants.
+%% Please report all bugs and comments to <peter@silmaril.ie>
+%%
+%% Copyright (c) 2021–2022 Peter Flynn and Silmaril Consultants
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% peter@silmaril.ie
+%%
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\ProvidesPackage{symbats3}[2022/01/18 v0.8 Pagan fonts package]
+%
+% OPTIONS
+%
+% The [descenders] option turns on the automatic alignment of
+% every glyph so that its bottom-most point is level with the
+% descenders of the surrounding font. This is done by measuring
+% the depth of the common descenders and setting the adjustment
+% to the negative value of that depth. An argument to each glyph
+% command is passed to this macro so that a manual override can be
+% made on a glyph-by-glyph basis.
+%
+\DeclareOption{descenders}{%
+ \renewcommand{\SY@getdesc}[1]{%
+ \ifx\relax#1%
+ \setlength{\SY@baselineadjust}{\depthof{ypjg}}%
+ \setlength{\SY@baselineadjust}{-\SY@baselineadjust}%
+ \else
+ \setlength{\SY@baselineadjust}{#1}%
+ \fi}%
+}
+% \SY@baselineadjust is the vertical adjustment needed.
+\newdimen{\SY@baselineadjust}
+% The [non-option] default is for the vertical adjustment to be zero
+% (but still allow for an option for manual adjustment).
+\newcommand{\SY@getdesc}[1]{%
+ \ifx\relax#1%
+ \setlength{\SY@baselineadjust}{0pt}%
+ \else
+ \setlength{\SY@baselineadjust}{#1}%
+ \fi
+}
+\ProcessOptions
+\RequirePackage{fontspec,calc}
+\newfontface{\symbats}{Symbats Regular}
+%
+
+\DeclareTextSymbol{\SY@admetos}{TU}{"2BE5}
+\newcommand{\admetos}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@admetos}}
+\DeclareTextSymbol{\SY@aegishjalmur}{TU}{"006B}
+\newcommand{\aegishjalmur}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@aegishjalmur}}
+\DeclareTextSymbol{\SY@airelement}{TU}{"005D}
+\newcommand{\airelement}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@airelement}}
+\DeclareTextSymbol{\SY@angleacute}{TU}{"2220}
+\newcommand{\angleacute}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@angleacute}}
+\DeclareTextSymbol{\SY@ankh}{TU}{"2625}
+\newcommand{\ankh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@ankh}}
+\DeclareTextSymbol{\SY@apollon}{TU}{"2BE4}
+\newcommand{\apollon}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@apollon}}
+\DeclareTextSymbol{\SY@aquarius}{TU}{"2652}
+\newcommand{\aquarius}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@aquarius}}
+\DeclareTextSymbol{\SY@aries}{TU}{"2648}
+\newcommand{\aries}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@aries}}
+\DeclareTextSymbol{\SY@ascendingnode}{TU}{"260A}
+\newcommand{\ascendingnode}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@ascendingnode}}
+\DeclareTextSymbol{\SY@astraea}{TU}{"2BD9}
+\newcommand{\astraea}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@astraea}}
+\DeclareTextSymbol{\SY@athameeast}{TU}{"0064}
+\newcommand{\athameeast}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@athameeast}}
+\DeclareTextSymbol{\SY@athamenorth}{TU}{"0073}
+\newcommand{\athamenorth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@athamenorth}}
+\DeclareTextSymbol{\SY@athamesouth}{TU}{"0061}
+\newcommand{\athamesouth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@athamesouth}}
+\DeclareTextSymbol{\SY@athamewest}{TU}{"0066}
+\newcommand{\athamewest}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@athamewest}}
+\DeclareTextSymbol{\SY@awen}{TU}{"0068}
+\newcommand{\awen}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@awen}}
+\DeclareTextSymbol{\SY@beltane}{TU}{"00CC}
+\newcommand{\beltane}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@beltane}}
+\DeclareTextSymbol{\SY@blackdiamondoncross}{TU}{"2BDE}
+\newcommand{\blackdiamondoncross}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@blackdiamondoncross}}
+\DeclareTextSymbol{\SY@blackmoonlilith}{TU}{"26B8}
+\newcommand{\blackmoonlilith}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@blackmoonlilith}}
+\DeclareTextSymbol{\SY@cancer}{TU}{"264B}
+\newcommand{\cancer}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@cancer}}
+\DeclareTextSymbol{\SY@capricorn}{TU}{"2651}
+\newcommand{\capricorn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@capricorn}}
+\DeclareTextSymbol{\SY@celtictrefoilknotopen}{TU}{"003F}
+\newcommand{\celtictrefoilknotopen}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@celtictrefoilknotopen}}
+\DeclareTextSymbol{\SY@celtictrefoilknotsolid}{TU}{"007C}
+\newcommand{\celtictrefoilknotsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@celtictrefoilknotsolid}}
+\DeclareTextSymbol{\SY@ceres}{TU}{"26B3}
+\newcommand{\ceres}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@ceres}}
+\DeclareTextSymbol{\SY@chiron}{TU}{"26B7}
+\newcommand{\chiron}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@chiron}}
+\DeclareTextSymbol{\SY@circleplus}{TU}{"2295}
+\newcommand{\circleplus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@circleplus}}
+\DeclareTextSymbol{\SY@conjunction}{TU}{"260C}
+\newcommand{\conjunction}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@conjunction}}
+\DeclareTextSymbol{\SY@crossedstaff}{TU}{"002F}
+\newcommand{\crossedstaff}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@crossedstaff}}
+\DeclareTextSymbol{\SY@cupido}{TU}{"2BE0}
+\newcommand{\cupido}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@cupido}}
+\DeclareTextSymbol{\SY@descendingnode}{TU}{"260B}
+\newcommand{\descendingnode}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@descendingnode}}
+\DeclareTextSymbol{\SY@doubledfemale}{TU}{"26A2}
+\newcommand{\doubledfemale}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@doubledfemale}}
+\DeclareTextSymbol{\SY@doubledmale}{TU}{"26A3}
+\newcommand{\doubledmale}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@doubledmale}}
+\DeclareTextSymbol{\SY@dupsun}{TU}{"2609}
+\newcommand{\dupsun}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@dupsun}}
+\DeclareTextSymbol{\SY@dupsunfourspokes}{TU}{"004D}
+\newcommand{\dupsunfourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@dupsunfourspokes}}
+\DeclareTextSymbol{\SY@earthelement}{TU}{"007D}
+\newcommand{\earthelement}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@earthelement}}
+\DeclareTextSymbol{\SY@earth}{TU}{"2641}
+\newcommand{\earth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@earth}}
+\DeclareTextSymbol{\SY@eightsabbats}{TU}{"006C}
+\newcommand{\eightsabbats}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@eightsabbats}}
+\DeclareTextSymbol{\SY@eostre}{TU}{"00CF}
+\newcommand{\eostre}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@eostre}}
+\DeclareTextSymbol{\SY@female}{TU}{"2640}
+\newcommand{\female}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@female}}
+\DeclareTextSymbol{\SY@fireelement}{TU}{"005B}
+\newcommand{\fireelement}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@fireelement}}
+\DeclareTextSymbol{\SY@fylfotilkley}{TU}{"006A}
+\newcommand{\fylfotilkley}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@fylfotilkley}}
+\DeclareTextSymbol{\SY@gemini}{TU}{"264A}
+\newcommand{\gemini}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@gemini}}
+\DeclareTextSymbol{\SY@goddessasmoon}{TU}{"00F2}
+\newcommand{\goddessasmoon}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@goddessasmoon}}
+\DeclareTextSymbol{\SY@hades}{TU}{"2BE1}
+\newcommand{\hades}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@hades}}
+\DeclareTextSymbol{\SY@hammer}{TU}{"0067}
+\newcommand{\hammer}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@hammer}}
+\DeclareTextSymbol{\SY@horizontalmalewithstroke}{TU}{"26A9}
+\newcommand{\horizontalmalewithstroke}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@horizontalmalewithstroke}}
+\DeclareTextSymbol{\SY@hygiea}{TU}{"2BDA}
+\newcommand{\hygiea}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@hygiea}}
+\DeclareTextSymbol{\SY@imbolc}{TU}{"00CE}
+\newcommand{\imbolc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@imbolc}}
+\DeclareTextSymbol{\SY@interlockedmalefemale}{TU}{"26A4}
+\newcommand{\interlockedmalefemale}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@interlockedmalefemale}}
+\DeclareTextSymbol{\SY@juno}{TU}{"26B5}
+\newcommand{\juno}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@juno}}
+\DeclareTextSymbol{\SY@jupiter}{TU}{"2643}
+\newcommand{\jupiter}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@jupiter}}
+\DeclareTextSymbol{\SY@kronos}{TU}{"2BE3}
+\newcommand{\kronos}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@kronos}}
+\DeclareTextSymbol{\SY@labrys}{TU}{"004C}
+\newcommand{\labrys}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@labrys}}
+\DeclareTextSymbol{\SY@leo}{TU}{"264C}
+\newcommand{\leo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@leo}}
+\DeclareTextSymbol{\SY@libra}{TU}{"264E}
+\newcommand{\libra}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@libra}}
+\DeclareTextSymbol{\SY@lightning}{TU}{"0027}
+\newcommand{\lightning}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@lightning}}
+\DeclareTextSymbol{\SY@lughnasadh}{TU}{"00D4}
+\newcommand{\lughnasadh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@lughnasadh}}
+\DeclareTextSymbol{\SY@male}{TU}{"2642}
+\newcommand{\male}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@male}}
+\DeclareTextSymbol{\SY@maleandfemale}{TU}{"26A5}
+\newcommand{\maleandfemale}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@maleandfemale}}
+\DeclareTextSymbol{\SY@malewithstroke}{TU}{"26A6}
+\newcommand{\malewithstroke}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@malewithstroke}}
+\DeclareTextSymbol{\SY@malewithstrokemalefemale}{TU}{"26A7}
+\newcommand{\malewithstrokemalefemale}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@malewithstrokemalefemale}}
+\DeclareTextSymbol{\SY@mars}{TU}{"0078}
+\newcommand{\mars}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@mars}}
+\DeclareTextSymbol{\SY@mazeround}{TU}{"0048}
+\newcommand{\mazeround}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@mazeround}}
+\DeclareTextSymbol{\SY@mazesquarebase}{TU}{"0047}
+\newcommand{\mazesquarebase}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@mazesquarebase}}
+\DeclareTextSymbol{\SY@mercury}{TU}{"263F}
+\newcommand{\mercury}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@mercury}}
+\DeclareTextSymbol{\SY@moonfirstquarteroutline}{TU}{"0024}
+\newcommand{\moonfirstquarteroutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonfirstquarteroutline}}
+\DeclareTextSymbol{\SY@moonfirstquartersolid}{TU}{"0028}
+\newcommand{\moonfirstquartersolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonfirstquartersolid}}
+\DeclareTextSymbol{\SY@moonfull}{TU}{"0029}
+\newcommand{\moonfull}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonfull}}
+\DeclareTextSymbol{\SY@moonlastquarteroutline}{TU}{"005E}
+\newcommand{\moonlastquarteroutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonlastquarteroutline}}
+\DeclareTextSymbol{\SY@moonlastquartersolid}{TU}{"005F}
+\newcommand{\moonlastquartersolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonlastquartersolid}}
+\DeclareTextSymbol{\SY@moonnew}{TU}{"0025}
+\newcommand{\moonnew}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonnew}}
+\DeclareTextSymbol{\SY@moonwaningoutline}{TU}{"263E}
+\newcommand{\moonwaningoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaningoutline}}
+\DeclareTextSymbol{\SY@moonwaningsolid}{TU}{"002B}
+\newcommand{\moonwaningsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaningsolid}}
+\DeclareTextSymbol{\SY@moonwaxfullwaneoutline}{TU}{"0021}
+\newcommand{\moonwaxfullwaneoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaxfullwaneoutline}}
+\DeclareTextSymbol{\SY@moonwaxfullwanesolid}{TU}{"0040}
+\newcommand{\moonwaxfullwanesolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaxfullwanesolid}}
+\DeclareTextSymbol{\SY@moonwaxingoutline}{TU}{"263D}
+\newcommand{\moonwaxingoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaxingoutline}}
+\DeclareTextSymbol{\SY@moonwaxingsolid}{TU}{"002A}
+\newcommand{\moonwaxingsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@moonwaxingsolid}}
+\DeclareTextSymbol{\SY@neptuneformtwo}{TU}{"2BC9}
+\newcommand{\neptuneformtwo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@neptuneformtwo}}
+\DeclareTextSymbol{\SY@neptune}{TU}{"2646}
+\newcommand{\neptune}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@neptune}}
+\DeclareTextSymbol{\SY@nessus}{TU}{"2BDC}
+\newcommand{\nessus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@nessus}}
+\DeclareTextSymbol{\SY@neuter}{TU}{"26B2}
+\newcommand{\neuter}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@neuter}}
+\DeclareTextSymbol{\SY@octile}{TU}{"0034}
+\newcommand{\octile}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@octile}}
+\DeclareTextSymbol{\OG@ailm}{TU}{"1690}
+\newcommand{\OGailm}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ailm}}
+\DeclareTextSymbol{\OG@beith}{TU}{"1681}
+\newcommand{\OGbeith}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@beith}}
+\DeclareTextSymbol{\OG@ceirt}{TU}{"168A}
+\newcommand{\OGceirt}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ceirt}}
+\DeclareTextSymbol{\OG@coll}{TU}{"1689}
+\newcommand{\OGcoll}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@coll}}
+\DeclareTextSymbol{\OG@dair}{TU}{"1687}
+\newcommand{\OGdair}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@dair}}
+\DeclareTextSymbol{\OG@eabhadh}{TU}{"1695}
+\newcommand{\OGeabhadh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@eabhadh}}
+\DeclareTextSymbol{\OG@eadhadh}{TU}{"1693}
+\newcommand{\OGeadhadh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@eadhadh}}
+\DeclareTextSymbol{\OG@eamhancholl}{TU}{"1699}
+\newcommand{\OGeamhancholl}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@eamhancholl}}
+\DeclareTextSymbol{\OG@fearn}{TU}{"1683}
+\newcommand{\OGfearn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@fearn}}
+\DeclareTextSymbol{\OG@feather}{TU}{"169B}
+\newcommand{\OGfeather}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@feather}}
+\DeclareTextSymbol{\OG@gort}{TU}{"168C}
+\newcommand{\OGgort}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@gort}}
+\DeclareTextSymbol{\OG@ifin}{TU}{"1698}
+\newcommand{\OGifin}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ifin}}
+\DeclareTextSymbol{\OG@iodhadh}{TU}{"1694}
+\newcommand{\OGiodhadh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@iodhadh}}
+\DeclareTextSymbol{\OG@luis}{TU}{"1682}
+\newcommand{\OGluis}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@luis}}
+\DeclareTextSymbol{\OG@muin}{TU}{"168B}
+\newcommand{\OGmuin}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@muin}}
+\DeclareTextSymbol{\OG@ngeadal}{TU}{"168D}
+\newcommand{\OGngeadal}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ngeadal}}
+\DeclareTextSymbol{\OG@nion}{TU}{"1685}
+\newcommand{\OGnion}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@nion}}
+\DeclareTextSymbol{\OG@onn}{TU}{"1691}
+\newcommand{\OGonn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@onn}}
+\DeclareTextSymbol{\OG@or}{TU}{"1696}
+\newcommand{\OGor}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@or}}
+\DeclareTextSymbol{\OG@peith}{TU}{"169A}
+\newcommand{\OGpeith}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@peith}}
+\DeclareTextSymbol{\OG@reversedfeather}{TU}{"169C}
+\newcommand{\OGreversedfeather}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@reversedfeather}}
+\DeclareTextSymbol{\OG@ruis}{TU}{"168F}
+\newcommand{\OGruis}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ruis}}
+\DeclareTextSymbol{\OG@sail}{TU}{"1684}
+\newcommand{\OGsail}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@sail}}
+\DeclareTextSymbol{\OG@straif}{TU}{"168E}
+\newcommand{\OGstraif}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@straif}}
+\DeclareTextSymbol{\OG@tinne}{TU}{"1688}
+\newcommand{\OGtinne}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@tinne}}
+\DeclareTextSymbol{\OG@uath}{TU}{"1686}
+\newcommand{\OGuath}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@uath}}
+\DeclareTextSymbol{\OG@uilleann}{TU}{"1697}
+\newcommand{\OGuilleann}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@uilleann}}
+\DeclareTextSymbol{\OG@ur}{TU}{"1692}
+\newcommand{\OGur}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\OG@ur}}
+\DeclareTextSymbol{\SY@oldankh}{TU}{"00E0}
+\newcommand{\oldankh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldankh}}
+\DeclareTextSymbol{\SY@oldaquarius}{TU}{"2013}
+\newcommand{\oldaquarius}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldaquarius}}
+\DeclareTextSymbol{\SY@oldaries}{TU}{"00A1}
+\newcommand{\oldaries}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldaries}}
+\DeclareTextSymbol{\SY@oldascendingnode}{TU}{"0058}
+\newcommand{\oldascendingnode}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldascendingnode}}
+\DeclareTextSymbol{\SY@oldcancer}{TU}{"00A2}
+\newcommand{\oldcancer}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldcancer}}
+\DeclareTextSymbol{\SY@oldcapricorn}{TU}{"00BA}
+\newcommand{\oldcapricorn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldcapricorn}}
+\DeclareTextSymbol{\SY@oldceres}{TU}{"002C}
+\newcommand{\oldceres}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldceres}}
+\DeclareTextSymbol{\SY@oldconjunction}{TU}{"0043}
+\newcommand{\oldconjunction}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldconjunction}}
+\DeclareTextSymbol{\SY@olddescendingnode}{TU}{"005A}
+\newcommand{\olddescendingnode}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@olddescendingnode}}
+\DeclareTextSymbol{\SY@oldearth}{TU}{"003C}
+\newcommand{\oldearth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldearth}}
+\DeclareTextSymbol{\SY@oldgemini}{TU}{"0023}
+\newcommand{\oldgemini}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldgemini}}
+\DeclareTextSymbol{\SY@oldjupiter}{TU}{"0063}
+\newcommand{\oldjupiter}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldjupiter}}
+\DeclareTextSymbol{\SY@oldleo}{TU}{"221E}
+\newcommand{\oldleo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldleo}}
+\DeclareTextSymbol{\SY@oldlibra}{TU}{"00B6}
+\newcommand{\oldlibra}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldlibra}}
+\DeclareTextSymbol{\SY@oldmercury}{TU}{"0060}
+\newcommand{\oldmercury}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldmercury}}
+\DeclareTextSymbol{\SY@oldmoonwaningoutline}{TU}{"0026}
+\newcommand{\oldmoonwaningoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldmoonwaningoutline}}
+\DeclareTextSymbol{\SY@oldmoonwaxingoutline}{TU}{"00A3}
+\newcommand{\oldmoonwaxingoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldmoonwaxingoutline}}
+\DeclareTextSymbol{\SY@oldneptune}{TU}{"006E}
+\newcommand{\oldneptune}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldneptune}}
+\DeclareTextSymbol{\SY@oldopposition}{TU}{"0056}
+\newcommand{\oldopposition}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldopposition}}
+\DeclareTextSymbol{\SY@oldpentagramintL}{TU}{"0155}
+\newcommand{\oldpentagramintL}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagramintL}}
+\DeclareTextSymbol{\SY@oldpentagramintRsolid}{TU}{"0069}
+\newcommand{\oldpentagramintRsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagramintRsolid}}
+\DeclareTextSymbol{\SY@oldpentagramintR}{TU}{"0072}
+\newcommand{\oldpentagramintR}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagramintR}}
+\DeclareTextSymbol{\SY@oldpentagraminvsolid}{TU}{"0055}
+\newcommand{\oldpentagraminvsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagraminvsolid}}
+\DeclareTextSymbol{\SY@oldpentagraminv}{TU}{"0057}
+\newcommand{\oldpentagraminv}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagraminv}}
+\DeclareTextSymbol{\SY@oldpentagram}{TU}{"0077}
+\newcommand{\oldpentagram}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpentagram}}
+\DeclareTextSymbol{\SY@oldpisces}{TU}{"2260}
+\newcommand{\oldpisces}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpisces}}
+\DeclareTextSymbol{\SY@oldpluto}{TU}{"006D}
+\newcommand{\oldpluto}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldpluto}}
+\DeclareTextSymbol{\SY@oldsaggitarius}{TU}{"00AA}
+\newcommand{\oldsaggitarius}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldsaggitarius}}
+\DeclareTextSymbol{\SY@oldsaturn}{TU}{"0076}
+\newcommand{\oldsaturn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldsaturn}}
+\DeclareTextSymbol{\SY@oldsextile}{TU}{"0042}
+\newcommand{\oldsextile}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldsextile}}
+\DeclareTextSymbol{\SY@oldsquare}{TU}{"004E}
+\newcommand{\oldsquare}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldsquare}}
+\DeclareTextSymbol{\SY@oldsuncoronafourspokes}{TU}{"0033}
+\newcommand{\oldsuncoronafourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldsuncoronafourspokes}}
+\DeclareTextSymbol{\SY@oldtaurus}{TU}{"2122}
+\newcommand{\oldtaurus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldtaurus}}
+\DeclareTextSymbol{\SY@olduranus}{TU}{"0062}
+\newcommand{\olduranus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@olduranus}}
+\DeclareTextSymbol{\SY@oldvirgo}{TU}{"00A7}
+\newcommand{\oldvirgo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@oldvirgo}}
+\DeclareTextSymbol{\SY@opposition}{TU}{"260D}
+\newcommand{\opposition}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@opposition}}
+\DeclareTextSymbol{\SY@pallas}{TU}{"26B4}
+\newcommand{\pallas}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pallas}}
+\DeclareTextSymbol{\SY@parting}{TU}{"00C8}
+\newcommand{\parting}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@parting}}
+\DeclareTextSymbol{\SY@pentagramcircled}{TU}{"0071}
+\newcommand{\pentagramcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramcircled}}
+\DeclareTextSymbol{\SY@pentagramintLcircled}{TU}{"00E9}
+\newcommand{\pentagramintLcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintLcircled}}
+\DeclareTextSymbol{\SY@pentagramintL}{TU}{"26E6}
+\newcommand{\pentagramintL}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintL}}
+\DeclareTextSymbol{\SY@pentagramintR}{TU}{"26E5}
+\newcommand{\pentagramintR}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintR}}
+\DeclareTextSymbol{\SY@pentagramintRcircled}{TU}{"0065}
+\newcommand{\pentagramintRcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintRcircled}}
+\DeclareTextSymbol{\SY@pentagramintRsolid}{TU}{"00ED}
+\newcommand{\pentagramintRsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintRsolid}}
+\DeclareTextSymbol{\SY@pentagramintRtriangle}{TU}{"0050}
+\newcommand{\pentagramintRtriangle}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramintRtriangle}}
+\DeclareTextSymbol{\SY@pentagraminvcircled}{TU}{"0051}
+\newcommand{\pentagraminvcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvcircled}}
+\DeclareTextSymbol{\SY@pentagraminvintLcircled}{TU}{"0045}
+\newcommand{\pentagraminvintLcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvintLcircled}}
+\DeclareTextSymbol{\SY@pentagraminvintL}{TU}{"0052}
+\newcommand{\pentagraminvintL}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvintL}}
+\DeclareTextSymbol{\SY@pentagraminvintRcircled}{TU}{"00C9}
+\newcommand{\pentagraminvintRcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvintRcircled}}
+\DeclareTextSymbol{\SY@pentagraminvintRsolid}{TU}{"0049}
+\newcommand{\pentagraminvintRsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvintRsolid}}
+\DeclareTextSymbol{\SY@pentagraminvintR}{TU}{"0154}
+\newcommand{\pentagraminvintR}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvintR}}
+\DeclareTextSymbol{\SY@pentagraminvsolid}{TU}{"00CD}
+\newcommand{\pentagraminvsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminvsolid}}
+\DeclareTextSymbol{\SY@pentagraminv}{TU}{"26E7}
+\newcommand{\pentagraminv}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagraminv}}
+\DeclareTextSymbol{\SY@pentagramrough}{TU}{"0079}
+\newcommand{\pentagramrough}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramrough}}
+\DeclareTextSymbol{\SY@pentagramroughcircled}{TU}{"0074}
+\newcommand{\pentagramroughcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramroughcircled}}
+\DeclareTextSymbol{\SY@pentagramroughinv}{TU}{"0059}
+\newcommand{\pentagramroughinv}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramroughinv}}
+\DeclareTextSymbol{\SY@pentagramroughinvcircled}{TU}{"0054}
+\newcommand{\pentagramroughinvcircled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramroughinvcircled}}
+\DeclareTextSymbol{\SY@pentagramroughinvsolid}{TU}{"004F}
+\newcommand{\pentagramroughinvsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramroughinvsolid}}
+\DeclareTextSymbol{\SY@pentagramroughsolid}{TU}{"006F}
+\newcommand{\pentagramroughsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramroughsolid}}
+\DeclareTextSymbol{\SY@pentagramsolid}{TU}{"0075}
+\newcommand{\pentagramsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramsolid}}
+\DeclareTextSymbol{\SY@pentagram}{TU}{"26E4}
+\newcommand{\pentagram}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagram}}
+\DeclareTextSymbol{\SY@pentagramwithtriangle}{TU}{"0070}
+\newcommand{\pentagramwithtriangle}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pentagramwithtriangle}}
+\DeclareTextSymbol{\SY@perfectcouple}{TU}{"00F9}
+\newcommand{\perfectcouple}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@perfectcouple}}
+\DeclareTextSymbol{\SY@perfectcouplethirddegree}{TU}{"00D9}
+\newcommand{\perfectcouplethirddegree}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@perfectcouplethirddegree}}
+\DeclareTextSymbol{\SY@pholus}{TU}{"2BDB}
+\newcommand{\pholus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pholus}}
+\DeclareTextSymbol{\SY@pisces}{TU}{"2653}
+\newcommand{\pisces}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pisces}}
+\DeclareTextSymbol{\SY@plutoformfive}{TU}{"2BD6}
+\newcommand{\plutoformfive}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@plutoformfive}}
+\DeclareTextSymbol{\SY@plutoformfour}{TU}{"2BD5}
+\newcommand{\plutoformfour}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@plutoformfour}}
+\DeclareTextSymbol{\SY@plutoformthree}{TU}{"2BD4}
+\newcommand{\plutoformthree}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@plutoformthree}}
+\DeclareTextSymbol{\SY@plutoformtwo}{TU}{"2BD3}
+\newcommand{\plutoformtwo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@plutoformtwo}}
+\DeclareTextSymbol{\SY@pluto}{TU}{"2647}
+\newcommand{\pluto}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@pluto}}
+\DeclareTextSymbol{\SY@poseidon}{TU}{"2BE7}
+\newcommand{\poseidon}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@poseidon}}
+\DeclareTextSymbol{\SY@powergoingforth}{TU}{"00C0}
+\newcommand{\powergoingforth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@powergoingforth}}
+\DeclareTextSymbol{\SY@prescription}{TU}{"211E}
+\newcommand{\prescription}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@prescription}}
+\DeclareTextSymbol{\SY@proserpina}{TU}{"2BD8}
+\newcommand{\proserpina}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@proserpina}}
+\DeclareTextSymbol{\SY@quincunx}{TU}{"26BB}
+\newcommand{\quincunx}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@quincunx}}
+\DeclareTextSymbol{\SY@recipe}{TU}{"003E}
+\newcommand{\recipe}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@recipe}}
+\DeclareTextSymbol{\SY@rockartgoddess}{TU}{"004A}
+\newcommand{\rockartgoddess}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@rockartgoddess}}
+\DeclareTextSymbol{\SY@rockarthorse}{TU}{"004B}
+\newcommand{\rockarthorse}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@rockarthorse}}
+\DeclareTextSymbol{\RU@aca}{TU}{"16AA}
+\newcommand{\RUaca}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@aca}}
+\DeclareTextSymbol{\RU@aesc}{TU}{"16AB}
+\newcommand{\RUaesc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@aesc}}
+\DeclareTextSymbol{\RU@algizeolhx}{TU}{"16C9}
+\newcommand{\RUalgizeolhx}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@algizeolhx}}
+\DeclareTextSymbol{\RU@ansuza}{TU}{"16A8}
+\newcommand{\RUansuza}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ansuza}}
+\DeclareTextSymbol{\RU@arlaugsymbol}{TU}{"16EE}
+\newcommand{\RUarlaugsymbol}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@arlaugsymbol}}
+\DeclareTextSymbol{\RU@belgthorsymbol}{TU}{"16F0}
+\newcommand{\RUbelgthorsymbol}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@belgthorsymbol}}
+\DeclareTextSymbol{\RU@berkananbeorcbjarkanb}{TU}{"16D2}
+\newcommand{\RUberkananbeorcbjarkanb}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@berkananbeorcbjarkanb}}
+\DeclareTextSymbol{\RU@c}{TU}{"16CD}
+\newcommand{\RUc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@c}}
+\DeclareTextSymbol{\RU@calc}{TU}{"16E3}
+\newcommand{\RUcalc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@calc}}
+\DeclareTextSymbol{\RU@cealc}{TU}{"16E4}
+\newcommand{\RUcealc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@cealc}}
+\DeclareTextSymbol{\RU@cen}{TU}{"16B3}
+\newcommand{\RUcen}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@cen}}
+\DeclareTextSymbol{\RU@crosspunctuation}{TU}{"16ED}
+\newcommand{\RUcrosspunctuation}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@crosspunctuation}}
+\DeclareTextSymbol{\RU@cweorth}{TU}{"16E2}
+\newcommand{\RUcweorth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@cweorth}}
+\DeclareTextSymbol{\RU@d}{TU}{"16D1}
+\newcommand{\RUd}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@d}}
+\DeclareTextSymbol{\RU@dagazdaegd}{TU}{"16DE}
+\newcommand{\RUdagazdaegd}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@dagazdaegd}}
+\DeclareTextSymbol{\RU@dottedl}{TU}{"16DB}
+\newcommand{\RUdottedl}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@dottedl}}
+\DeclareTextSymbol{\RU@dottedn}{TU}{"16C0}
+\newcommand{\RUdottedn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@dottedn}}
+\DeclareTextSymbol{\RU@dottedp}{TU}{"16D4}
+\newcommand{\RUdottedp}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@dottedp}}
+\DeclareTextSymbol{\RU@e}{TU}{"16C2}
+\newcommand{\RUe}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@e}}
+\DeclareTextSymbol{\RU@ear}{TU}{"16E0}
+\newcommand{\RUear}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ear}}
+\DeclareTextSymbol{\RU@ehwazehe}{TU}{"16D6}
+\newcommand{\RUehwazehe}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ehwazehe}}
+\DeclareTextSymbol{\RU@eng}{TU}{"16B6}
+\newcommand{\RUeng}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@eng}}
+\DeclareTextSymbol{\RU@eth}{TU}{"16A7}
+\newcommand{\RUeth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@eth}}
+\DeclareTextSymbol{\RU@fehufeohfef}{TU}{"16A0}
+\newcommand{\RUfehufeohfef}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@fehufeohfef}}
+\DeclareTextSymbol{\RU@frankscasketac}{TU}{"16F7}
+\newcommand{\RUfrankscasketac}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@frankscasketac}}
+\DeclareTextSymbol{\RU@frankscasketaesc}{TU}{"16F8}
+\newcommand{\RUfrankscasketaesc}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@frankscasketaesc}}
+\DeclareTextSymbol{\RU@frankscasketeh}{TU}{"16F6}
+\newcommand{\RUfrankscasketeh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@frankscasketeh}}
+\DeclareTextSymbol{\RU@frankscasketis}{TU}{"16F5}
+\newcommand{\RUfrankscasketis}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@frankscasketis}}
+\DeclareTextSymbol{\RU@frankscasketos}{TU}{"16F4}
+\newcommand{\RUfrankscasketos}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@frankscasketos}}
+\DeclareTextSymbol{\RU@g}{TU}{"16B5}
+\newcommand{\RUg}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@g}}
+\DeclareTextSymbol{\RU@gar}{TU}{"16B8}
+\newcommand{\RUgar}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@gar}}
+\DeclareTextSymbol{\RU@gebogyfug}{TU}{"16B7}
+\newcommand{\RUgebogyfug}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@gebogyfug}}
+\DeclareTextSymbol{\RU@ger}{TU}{"16C4}
+\newcommand{\RUger}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ger}}
+\DeclareTextSymbol{\RU@haeglh}{TU}{"16BB}
+\newcommand{\RUhaeglh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@haeglh}}
+\DeclareTextSymbol{\RU@haglazh}{TU}{"16BA}
+\newcommand{\RUhaglazh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@haglazh}}
+\DeclareTextSymbol{\RU@icelandicyr}{TU}{"16E8}
+\newcommand{\RUicelandicyr}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@icelandicyr}}
+\DeclareTextSymbol{\RU@ing}{TU}{"16DD}
+\newcommand{\RUing}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ing}}
+\DeclareTextSymbol{\RU@ingwaz}{TU}{"16DC}
+\newcommand{\RUingwaz}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ingwaz}}
+\DeclareTextSymbol{\RU@ior}{TU}{"16E1}
+\newcommand{\RUior}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@ior}}
+\DeclareTextSymbol{\RU@isazisissi}{TU}{"16C1}
+\newcommand{\RUisazisissi}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@isazisissi}}
+\DeclareTextSymbol{\RU@iwazeoh}{TU}{"16C7}
+\newcommand{\RUiwazeoh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@iwazeoh}}
+\DeclareTextSymbol{\RU@jeranj}{TU}{"16C3}
+\newcommand{\RUjeranj}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@jeranj}}
+\DeclareTextSymbol{\RU@k}{TU}{"16F1}
+\newcommand{\RUk}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@k}}
+\DeclareTextSymbol{\RU@kauna}{TU}{"16B2}
+\newcommand{\RUkauna}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@kauna}}
+\DeclareTextSymbol{\RU@kaunk}{TU}{"16B4}
+\newcommand{\RUkaunk}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@kaunk}}
+\DeclareTextSymbol{\RU@laukazlagulogrl}{TU}{"16DA}
+\newcommand{\RUlaukazlagulogrl}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@laukazlagulogrl}}
+\DeclareTextSymbol{\RU@longbrancharae}{TU}{"16C5}
+\newcommand{\RUlongbrancharae}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@longbrancharae}}
+\DeclareTextSymbol{\RU@longbranchhagallh}{TU}{"16BC}
+\newcommand{\RUlongbranchhagallh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@longbranchhagallh}}
+\DeclareTextSymbol{\RU@longbranchmadrm}{TU}{"16D8}
+\newcommand{\RUlongbranchmadrm}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@longbranchmadrm}}
+\DeclareTextSymbol{\RU@longbranchosso}{TU}{"16AC}
+\newcommand{\RUlongbranchosso}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@longbranchosso}}
+\DeclareTextSymbol{\RU@longbranchyr}{TU}{"16E6}
+\newcommand{\RUlongbranchyr}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@longbranchyr}}
+\DeclareTextSymbol{\RU@mannazmanm}{TU}{"16D7}
+\newcommand{\RUmannazmanm}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@mannazmanm}}
+\DeclareTextSymbol{\RU@multiplepunctuation}{TU}{"16EC}
+\newcommand{\RUmultiplepunctuation}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@multiplepunctuation}}
+\DeclareTextSymbol{\RU@naudiznydnaudn}{TU}{"16BE}
+\newcommand{\RUnaudiznydnaudn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@naudiznydnaudn}}
+\DeclareTextSymbol{\RU@o}{TU}{"16AE}
+\newcommand{\RUo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@o}}
+\DeclareTextSymbol{\RU@oe}{TU}{"16AF}
+\newcommand{\RUoe}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@oe}}
+\DeclareTextSymbol{\RU@on}{TU}{"16B0}
+\newcommand{\RUon}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@on}}
+\DeclareTextSymbol{\RU@oo}{TU}{"16F3}
+\newcommand{\RUoo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@oo}}
+\DeclareTextSymbol{\RU@openp}{TU}{"16D5}
+\newcommand{\RUopenp}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@openp}}
+\DeclareTextSymbol{\RU@oso}{TU}{"16A9}
+\newcommand{\RUoso}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@oso}}
+\DeclareTextSymbol{\RU@othalanethelo}{TU}{"16DF}
+\newcommand{\RUothalanethelo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@othalanethelo}}
+\DeclareTextSymbol{\RU@perthopeorthp}{TU}{"16C8}
+\newcommand{\RUperthopeorthp}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@perthopeorthp}}
+\DeclareTextSymbol{\RU@q}{TU}{"16E9}
+\newcommand{\RUq}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@q}}
+\DeclareTextSymbol{\RU@raidoradreidr}{TU}{"16B1}
+\newcommand{\RUraidoradreidr}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@raidoradreidr}}
+\DeclareTextSymbol{\RU@sh}{TU}{"16F2}
+\newcommand{\RUsh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@sh}}
+\DeclareTextSymbol{\RU@shorttwigara}{TU}{"16C6}
+\newcommand{\RUshorttwigara}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigara}}
+\DeclareTextSymbol{\RU@shorttwigbjarkanb}{TU}{"16D3}
+\newcommand{\RUshorttwigbjarkanb}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigbjarkanb}}
+\DeclareTextSymbol{\RU@shorttwighagallh}{TU}{"16BD}
+\newcommand{\RUshorttwighagallh}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwighagallh}}
+\DeclareTextSymbol{\RU@shorttwigmadrm}{TU}{"16D9}
+\newcommand{\RUshorttwigmadrm}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigmadrm}}
+\DeclareTextSymbol{\RU@shorttwignaudn}{TU}{"16BF}
+\newcommand{\RUshorttwignaudn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwignaudn}}
+\DeclareTextSymbol{\RU@shorttwigosso}{TU}{"16AD}
+\newcommand{\RUshorttwigosso}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigosso}}
+\DeclareTextSymbol{\RU@shorttwigsols}{TU}{"16CC}
+\newcommand{\RUshorttwigsols}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigsols}}
+\DeclareTextSymbol{\RU@shorttwigtyrt}{TU}{"16D0}
+\newcommand{\RUshorttwigtyrt}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigtyrt}}
+\DeclareTextSymbol{\RU@shorttwigyr}{TU}{"16E7}
+\newcommand{\RUshorttwigyr}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@shorttwigyr}}
+\DeclareTextSymbol{\RU@sigellongbranchsols}{TU}{"16CB}
+\newcommand{\RUsigellongbranchsols}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@sigellongbranchsols}}
+\DeclareTextSymbol{\RU@singlepunctuation}{TU}{"16EB}
+\newcommand{\RUsinglepunctuation}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@singlepunctuation}}
+\DeclareTextSymbol{\RU@sowilos}{TU}{"16CA}
+\newcommand{\RUsowilos}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@sowilos}}
+\DeclareTextSymbol{\RU@stan}{TU}{"16E5}
+\newcommand{\RUstan}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@stan}}
+\DeclareTextSymbol{\RU@thurisazthursthorn}{TU}{"16A6}
+\newcommand{\RUthurisazthursthorn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@thurisazthursthorn}}
+\DeclareTextSymbol{\RU@tiwaztirtyrt}{TU}{"16CF}
+\newcommand{\RUtiwaztirtyrt}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@tiwaztirtyrt}}
+\DeclareTextSymbol{\RU@tvimadursymbol}{TU}{"16EF}
+\newcommand{\RUtvimadursymbol}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@tvimadursymbol}}
+\DeclareTextSymbol{\RU@uruzuru}{TU}{"16A2}
+\newcommand{\RUuruzuru}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@uruzuru}}
+\DeclareTextSymbol{\RU@v}{TU}{"16A1}
+\newcommand{\RUv}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@v}}
+\DeclareTextSymbol{\RU@w}{TU}{"16A5}
+\newcommand{\RUw}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@w}}
+\DeclareTextSymbol{\RU@wunjowynnw}{TU}{"16B9}
+\newcommand{\RUwunjowynnw}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@wunjowynnw}}
+\DeclareTextSymbol{\RU@x}{TU}{"16EA}
+\newcommand{\RUx}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@x}}
+\DeclareTextSymbol{\RU@y}{TU}{"16A4}
+\newcommand{\RUy}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@y}}
+\DeclareTextSymbol{\RU@yr}{TU}{"16A3}
+\newcommand{\RUyr}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@yr}}
+\DeclareTextSymbol{\RU@z}{TU}{"16CE}
+\newcommand{\RUz}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\RU@z}}
+\DeclareTextSymbol{\SY@saggitarius}{TU}{"2650}
+\newcommand{\saggitarius}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@saggitarius}}
+\DeclareTextSymbol{\SY@salute}{TU}{"00E8}
+\newcommand{\salute}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@salute}}
+\DeclareTextSymbol{\SY@samhuinn}{TU}{"00C5}
+\newcommand{\samhuinn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@samhuinn}}
+\DeclareTextSymbol{\SY@saturn}{TU}{"2644}
+\newcommand{\saturn}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@saturn}}
+\DeclareTextSymbol{\SY@scorpio}{TU}{"2022}
+\newcommand{\scorpio}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@scorpio}}
+\DeclareTextSymbol{\SY@scorpius}{TU}{"264F}
+\newcommand{\scorpius}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@scorpius}}
+\DeclareTextSymbol{\SY@scourge}{TU}{"00EC}
+\newcommand{\scourge}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@scourge}}
+\DeclareTextSymbol{\SY@selena}{TU}{"2BDD}
+\newcommand{\selena}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@selena}}
+\DeclareTextSymbol{\SY@semisextile}{TU}{"26BA}
+\newcommand{\semisextile}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@semisextile}}
+\DeclareTextSymbol{\SY@serpentimpaled}{TU}{"005C}
+\newcommand{\serpentimpaled}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@serpentimpaled}}
+\DeclareTextSymbol{\SY@sesquiquadrate}{TU}{"26BC}
+\newcommand{\sesquiquadrate}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sesquiquadrate}}
+\DeclareTextSymbol{\SY@sextile}{TU}{"26B9}
+\newcommand{\sextile}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sextile}}
+\DeclareTextSymbol{\SY@square}{TU}{"25A1}
+\newcommand{\square}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@square}}
+\DeclareTextSymbol{\SY@stareightarrows}{TU}{"003B}
+\newcommand{\stareightarrows}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@stareightarrows}}
+\DeclareTextSymbol{\SY@sulphur}{TU}{"002E}
+\newcommand{\sulphur}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sulphur}}
+\DeclareTextSymbol{\SY@sun}{TU}{"0035}
+\newcommand{\sun}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sun}}
+\DeclareTextSymbol{\SY@suncoronafourspokes}{TU}{"0038}
+\newcommand{\suncoronafourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@suncoronafourspokes}}
+\DeclareTextSymbol{\SY@suncoronahubfourspokes}{TU}{"0039}
+\newcommand{\suncoronahubfourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@suncoronahubfourspokes}}
+\DeclareTextSymbol{\SY@suncoronasixspokes}{TU}{"003D}
+\newcommand{\suncoronasixspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@suncoronasixspokes}}
+\DeclareTextSymbol{\SY@suneightspokes}{TU}{"0037}
+\newcommand{\suneightspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@suneightspokes}}
+\DeclareTextSymbol{\SY@sunfourdoublespokes}{TU}{"0036}
+\newcommand{\sunfourdoublespokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunfourdoublespokes}}
+\DeclareTextSymbol{\SY@sunfourspokes}{TU}{"0030}
+\newcommand{\sunfourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunfourspokes}}
+\DeclareTextSymbol{\SY@sunrays}{TU}{"263C}
+\newcommand{\sunrays}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunrays}}
+\DeclareTextSymbol{\SY@sunthreedoublespokes}{TU}{"002D}
+\newcommand{\sunthreedoublespokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunthreedoublespokes}}
+\DeclareTextSymbol{\SY@sunwithrays}{TU}{"0031}
+\newcommand{\sunwithrays}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunwithrays}}
+\DeclareTextSymbol{\SY@sunwithraysfourspokes}{TU}{"0032}
+\newcommand{\sunwithraysfourspokes}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@sunwithraysfourspokes}}
+\DeclareTextSymbol{\SY@taurus}{TU}{"2649}
+\newcommand{\taurus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@taurus}}
+\DeclareTextSymbol{\SY@transpluto}{TU}{"2BD7}
+\newcommand{\transpluto}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@transpluto}}
+\DeclareTextSymbol{\SY@truelightmoonarta}{TU}{"2BDF}
+\newcommand{\truelightmoonarta}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@truelightmoonarta}}
+\DeclareTextSymbol{\SY@uranus}{TU}{"2645}
+\newcommand{\uranus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@uranus}}
+\DeclareTextSymbol{\SY@valknutoutline}{TU}{"003A}
+\newcommand{\valknutoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@valknutoutline}}
+\DeclareTextSymbol{\SY@valknutsolid}{TU}{"0022}
+\newcommand{\valknutsolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@valknutsolid}}
+\DeclareTextSymbol{\SY@vargemini}{TU}{"007E}
+\newcommand{\vargemini}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@vargemini}}
+\DeclareTextSymbol{\SY@varuranus}{TU}{"26E2}
+\newcommand{\varuranus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@varuranus}}
+\DeclareTextSymbol{\SY@venus}{TU}{"007A}
+\newcommand{\venus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@venus}}
+\DeclareTextSymbol{\SY@venusfigureoutline}{TU}{"00D3}
+\newcommand{\venusfigureoutline}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@venusfigureoutline}}
+\DeclareTextSymbol{\SY@venusfiguresolid}{TU}{"00F3}
+\newcommand{\venusfiguresolid}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@venusfiguresolid}}
+\DeclareTextSymbol{\SY@verticalmalewithstroke}{TU}{"26A8}
+\newcommand{\verticalmalewithstroke}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@verticalmalewithstroke}}
+\DeclareTextSymbol{\SY@vesta}{TU}{"26B6}
+\newcommand{\vesta}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@vesta}}
+\DeclareTextSymbol{\SY@virgo}{TU}{"264D}
+\newcommand{\virgo}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@virgo}}
+\DeclareTextSymbol{\SY@vulcanus}{TU}{"2BE6}
+\newcommand{\vulcanus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@vulcanus}}
+\DeclareTextSymbol{\SY@waterelement}{TU}{"007B}
+\newcommand{\waterelement}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@waterelement}}
+\DeclareTextSymbol{\SY@whiteknifeeast}{TU}{"0044}
+\newcommand{\whiteknifeeast}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@whiteknifeeast}}
+\DeclareTextSymbol{\SY@whiteknifenorth}{TU}{"0053}
+\newcommand{\whiteknifenorth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@whiteknifenorth}}
+\DeclareTextSymbol{\SY@whiteknifesouth}{TU}{"0041}
+\newcommand{\whiteknifesouth}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@whiteknifesouth}}
+\DeclareTextSymbol{\SY@whiteknifewest}{TU}{"0046}
+\newcommand{\whiteknifewest}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@whiteknifewest}}
+\DeclareTextSymbol{\SY@yule}{TU}{"0132}
+\newcommand{\yule}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@yule}}
+\DeclareTextSymbol{\SY@zeus}{TU}{"2BE2}
+\newcommand{\zeus}[1][\relax]{\SY@getdesc{#1}\raisebox{\SY@baselineadjust}{\symbats\SY@zeus}}
+%
+\endinput
+%
+\let\samhain\samhuinn
+\let\bealtaine\beltane
+\let\oimelc\imbolc
+%
+\endinput
diff --git a/fonts/symbats3/symbats3.tex b/fonts/symbats3/symbats3.tex
new file mode 100644
index 0000000000..10002e4512
--- /dev/null
+++ b/fonts/symbats3/symbats3.tex
@@ -0,0 +1,319 @@
+\PassOptionsToPackage{svgnames}{xcolor}
+\documentclass{article}
+\usepackage{fontspec,symbats3,array,parskip,fancyhdr,setspace,relsize}
+\usepackage[backend=biber,style=authoryear]{biblatex}
+\usepackage{draftwatermark,enumitem,xcolor,multicol,menukeys,sectsty}
+\usepackage[normalem]{ulem}
+\addbibresource{symbats3.bib}
+\ULdepth=0pt
+\makeatletter
+\UL@height=.4pt
+\renewcommand\uline{%
+ \bgroup\markoverwith{\textcolor{Red}{\rule[\ULdepth]{2pt}{\UL@height}}}\ULon}
+\allsectionsfont{\sffamily}
+\makeatother
+\setmainfont{Alegreya}
+\setsansfont{Alegreya Sans}
+\setmonofont[Scale=MatchLowercase]{InconsolataN}
+\usepackage[a4paper,margin=1cm,top=2cm,bottom=2cm]{geometry}
+\def\,{,}
+\def\<{\texttt{<}}
+\def\|{\textbar}
+\def\>{\texttt{>}}
+\setcounter{tocdepth}{1}
+\newcommand{\vstrut}{\vrule height1.2em width0pt}
+\pagestyle{fancy}
+\rhead{\scriptsize\leftmark}
+\lhead{}
+\renewcommand{\abstractname}{Summary}
+\usepackage{hyperref}
+\hypersetup{colorlinks=true,linkcolor=MediumBlue,urlcolor=MediumBlue}
+\begin{document}\raggedright
+\title{Symbats 3.0 font macros for \LaTeX}
+\author{Peter Flynn\\Silmaril Consultants\\\texttt{peter@silmaril.ie}}
+\maketitle
+\begin{center}
+\begin{minipage}{.75\textwidth}
+\begin{abstract}\onehalfspacing\raggedright\parindent1em\noindent
+{S\smaller YMBATS} is a Neopagan dingbats typeface family that includes
+various religious, astrological and other symbols, plus support for
+Runic and Ogham script. The designer, Feòrag, has kindly released the
+fonts under the SIL Open Font License Version 1.1 (26 February 2007).
+
+This \LaTeX\ package (\textsf{symbats}) is released under the
+\LaTeX\ Project Public License (LPPL), version 1.3c. This is a draft
+package and is not yet available for public test. Future (working)
+versions will be uploaded to the Comprehensive \TeX\ Archive Network
+(CTAN).
+
+\subsubsection*{Current status}
+\begin{enumerate}
+ \item Names for use as commands in \LaTeX\ have been specified for
+ all identified glyphs, but need further checking
+ \item Names for glyphs positioned for older versions of the fonts
+ have been prefixed `old' where this was identifiable;
+ \item Names for Runic are prefixed `RU' and names for Ogham are
+ prefixed `OG';
+ \item Names which otherwise appear to be duplicates have been
+ prefixed `dup'.
+\end{enumerate}
+\subsubsection*{Errors and omissions}
+The maintainer of this package is Peter Flynn
+\href{mailto:peter@silmaril.ie}{\nolinkurl{peter@silmaril.ie}}. Please
+notify any errors or omissions, especially corrections to the naming,
+to the maintainer.
+\end{abstract}
+\tableofcontents
+\subsection*{History}
+\begin{itemize}[nosep]
+ \item[0.8] 2022-01-18 Baseline adjustment option added,
+ documentation updated
+ \item[0.7] 2022-01-11 Last duplicated names fixed, .sty file created
+ manually
+ \item[0.6] 2022-01-08 Names edited and normalised, out for checking
+ \item[0.5] 2022-01-06 Got feedback, edited names as suggested,
+ created Makefile
+ \item[0.4] 2022-01-04 Sent name list to Feòrag for checking
+ \item[0.3] 2022-01-03 Created CSV and \LaTeX\ files
+ \item[0.2] 2022-01-02 First pass at constructing names for the
+ glyphs
+ \item[0.1] 2021-12-20 Downloaded font, extracted list of glyph
+ codepoints
+\end{itemize}
+\end{minipage}
+\end{center}
+\clearpage
+\begin{multicols*}{2}
+\large
+\section{Symbats 3.0}
+Symbats is a Neopagan dingbats font which has been developed by Feòrag
+over a couple of decades, and recently re-released in an updated
+version announced in a Twitter
+post\footnote{\url{https://twitter.com/Feorag/status/1473048711601266690?s=20}}
+on Winter Solstice Eve 2021.
+
+The font comes in three weights, and has many additions and
+redesigns. The files are distributed in OpenType format
+(\texttt{.otf}) from the author's
+website.\footnote{\url{https://www.feorag.com/freestuff/symbats.html}}\label{intro}
+
+\subsection{\LaTeX\ version}
+
+For the \LaTeX\ version, I have assigned control sequences
+(\LaTeX\ commands) to all the glyphs. They are listed in this document
+three times, in different orders for ease of reference:
+\begin{enumerate}[nosep]
+\item index order of Unicode codepoint;
+\item alphabetical order of \LaTeX\ name;
+\item alphabetical order of Unicode name.
+\end{enumerate}
+
+\subsection{Numeric character positions}\label{numpos}
+
+For historical reasons, some of the glyphs are in the code positions
+of ASCII printable characters (U+0021 to U+007E), where they were
+originally placed for ease of typing in pre-Unicode days.
+
+For compatibility with older versions, these glyphs are still in
+place, but in cases where there are now real Unicode codepoints for the
+exact characters by name, the glyph is duplicated at the new position
+and the glyph at the original location has its name prefixed with
+`\texttt{old}'. To the best of my understanding, the two glyphs are
+identical in each case.
+
+These duplications are noted in the following tables in the
+\textbf{Dupes} column with a clickable link to the other position
+(note that all these links go to the first listing, the index order of
+codepoint, not to the listing in which you clicked).
+
+For example, Earth (\oldearth) was originally at U+003C, but
+Unicode now defines an actual codepoint named `Earth' at U+2641, so
+the glyph is named in that location as \verb+\earth+ and the
+original at U+003C is named \verb+\oldearth+; but they are identical.
+
+\subsection{Naming}
+
+In choosing the names, the methodology used was:
+
+\begin{enumerate}
+
+\item If the glyph has an established name (Sun, Earth, Pentagram)
+ that name is used in all lowercase, eg \verb+\earth+;
+
+\item Glyphs with multiple variants (moon, new moon, waxing moon,
+ waning moon, etc) are named with the principal component first, eg
+ \verb+\moonnew+, \verb+\moonfull+, \verb+\moonwaningoutline+,
+ \verb+\moonwaningsolid+, etc.
+
+ These can best be compared in the Unicode name order listing in
+ \hyperref[unicodename]{\S\ref{unicodename}} starting on
+ p.\pageref{unicodename}.
+
+\item Variations in \textbf{pentagrams} include:
+ \begin{itemize}[nosep]
+ \item \textbf{rough} (sketched lines);
+ \item \textbf{inverted} (abbreviated to \texttt{inv} to save typing);
+ \item \textbf{interlaced} (lines pass in front and behind others);
+ \item handedness of the interlacing (\textbf{Right} \textit{vs}
+ \textbf{Left}) using capital \texttt{R} and \texttt{L};
+ \item \textbf{circled} (ring around) \textit{vs} \textbf{solid}
+ (reversed out).
+ \end{itemize}
+ For the first three (rough, inverted, and interlaced) there is no
+ explicit opposite in the name, so the complement of
+ \verb+\pentagramroughcircled+ is just \verb+\pentagramcircled+:
+ there is no `smooth' in the name.
+
+ Similarly, upright symbols are not
+ named as such, only the inverted versions get an `\texttt{inv}' in
+ their name.
+
+ Where there is an obvious complement, this is linked in the
+ \textbf{Compl} column in a similar manner to the \textbf{Dupes}
+ method described in \hyperref[numpos]{\S\ref{numpos}}.
+
+\item Variations in \textbf{sun} and \textbf{moon} include:
+ \begin{itemize}[nosep]
+ \item glyph in \textbf{outline} or \textbf{solid} (ie empty or filled);
+ \item sun — number of \textbf{spokes} [is this the correct term? rays?];
+ \item sun — \textbf{corona} (external ring);
+ \item sun — \textbf{hub} (centre ring);
+ \item moon — phase (new, first quarter, third quarter, full, waxing,
+ waning).
+ \end{itemize}
+ As with the pentagrams, the absence of an effect is signalled by
+ the absence of the term in the name.
+
+\item Ogham letter names are prefixed with `\texttt{OG}';
+
+\item Runic letter names are prefixed with `\texttt{RU}';
+
+\item For any existing glyph for which a formal Unicode codepoint now
+ exists, the name in the original location is prefixed by
+ `\texttt{old}' as described in \hyperref[numpos]{\S\ref{numpos}};
+
+\item A few names are not known, or not readily identifiable, or lost
+ to the mists of time. These have been guessed at, and I would
+ welcome suggestions.
+
+\end{enumerate}
+
+\section{Usage}
+
+\begin{enumerate}
+
+\item Download the fonts from the URI given in
+ \hyperref[intro]{\S\ref{intro} Introduction} and install them into
+ your computer according to your operating system's instructions
+ (see instructions at the end of this page).
+
+\item Install the package file \verb+symbats3.sty+ into your
+ Personal \TeX\ Folder (create it if it does not already exist), eg
+ {\small\begin{description}[nosep,leftmargin=1em,font=\sffamily]
+ \item[Linux] \texttt{~/texmf/tex/latex/symbats3}
+ \item[Mac OS\thinspace X]
+ \texttt{~/Library/texmf/tex/latex/symbats3}
+ \item[Windows] (Win95–XP) \verb+C:\texmf\tex\latex\symbats3+\\
+ (Win 7–11) \verb+Computer\System\Users\your~name\texmf+
+ \par\smallskip
+ \textbf{Note} MiK\TeX\ users \textsf{\smaller MUST} add their Personal
+ \TeX\ Folder to their MiK\TeX\ root when it is created; and
+ \textsf{\smaller MUST} refresh their Font
+ Name DataBase (FNDB) utility after installation: see the link
+ below. No action is required for other systems.
+ \end{description}}
+
+ See
+ \url{http://latex.silmaril.ie/formattinginformation/personal.html}
+ for more information about your
+ Personal \TeX\ Folder and about how to use it in MiK\TeX\ \parencite{fi}.
+
+\item Add the line \verb+\usepackage{symbats3}+ to the Preamble of
+ your \LaTeX\ document.
+
+ \end{enumerate}
+
+Note that the \textsf{symbats3} package \textsf{\smaller REQUIRES} the
+\textsf{fontspec} package for Unicode and OpenType fonts. The
+\textsf{symbats3} package \textsf{\smaller CANNOT} be used with the old
+\textsf{fontenc} and \textsf{inputenc} packages.
+
+\subsection{Options}
+
+There is only one option to this version of the package:
+\verb+[descenders]+, which lowers the height of the glyphs to align with
+the descenders of the surrounding text.
+
+By default, the glyphs print with their baseline aligned with the
+baseline of the surrounding text, eg
+
+\uline{\hbox{\sffamily\huge Baseline: \pentagram}}
+
+In many cases the glyph fits better if it is aligned instead with the
+bottom of the descenders (q, y, p, j, g) of the surrounding text, eg
+
+\uline{\hbox{\sffamily\huge Descenders (qypjg): \pentagram[-.5ex]}}
+
+The package option \verb+[descenders]+ will automatically calculate the
+depth of the descenders for the current font and lower the glyph to
+align with them, eg
+
+\verb+\usepackage[descenders]{symbats3}+
+
+In addition, there is an optional argument to every glyph command to
+specify a different height or depth, eg
+
+\verb+\pentagraminvsolid[-.666ex]+
+
+will produce
+
+\uline{\hbox{\sffamily\huge Manual: \pentagraminvsolid[-.666ex]}}
+
+\bigskip\hrule\bigskip
+
+\section*{Note on required features}
+In this document, the keywords
+ {\sffamily {\smaller MUST}}, {\sffamily {\smaller MUST NOT}}, {\sffamily {\smaller REQUIRED}},
+ {\sffamily {\smaller SHALL}}, {\sffamily {\smaller SHALL NOT}}, {\sffamily {\smaller SHOULD}},
+ {\sffamily {\smaller SHOULD NOT}},
+ {\sffamily {\smaller RECOMMENDED}},
+ {\sffamily {\smaller MAY}}, and
+ {\sffamily {\smaller OPTIONAL}} have a specific
+ meaning when shown in {\sffamily {\smaller THIS TYPESTYLE}}, and
+ {\sffamily {\smaller MUST}} be interpreted as described in
+ RFC 2119 \parencite{rfc2119}.
+When shown in another typestyle, these words keep their conventional
+ contextual degree of meaning.\par
+
+\printbibliography
+
+\vfill
+\section*{Installing OpenType™ and TrueType™ fonts}
+
+ \begin{description}
+ \item[Linux:] Run the \textsf{Font Manager} app, click
+ \keys{\texttt{+}} and select the font files to install.
+ \item[Mac OS X] Run the \textsf{Font Book} app, click the
+ \textsf{Add} button in the Font Book toolbar, locate and select
+ a font, then click \textsf{Open}. Drag the font file to the Font
+ Book app icon in the Dock. Double-click the font file in the
+ Finder, then click \textsf{Install Font} in the dialog that
+ appears.
+ \item[Windows:] Run \textsf{Directory Explorer} (what used to be
+ called \textsf{My Computer}), right-click on
+ each font file where you downloaded it, and select \textsf{Install}.
+ \end{description}
+
+\end{multicols*}
+\clearpage
+\section{Symbats3 in index order of Unicode codepoint}\label{codepoint}
+\input{codepoint}
+\clearpage
+\section{Symbats3 in alphabetical order of \LaTeX\ name}\label{latexname}
+\input{latexname}
+\clearpage
+\section{Symbats3 in alphabetical order of Unicode name}\label{unicodename}
+\input{unicodename}
+%\clearpage
+%\input{test}
+\end{document}
diff --git a/fonts/symbats3/unicodename.tex b/fonts/symbats3/unicodename.tex
new file mode 100644
index 0000000000..55ee8ea7ef
--- /dev/null
+++ b/fonts/symbats3/unicodename.tex
@@ -0,0 +1,1550 @@
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+2BE5
+&⯥&Admetos&\admetos&admetos&
+&
+\\
+U+0026
+&\&&Ampersand&\oldmoonwaningoutline&oldmoonwaningoutline&
+\hyperlink{U+263E}{U+263E}
+&
+\\
+U+2220
+&∠&Angle&\angleacute&angleacute&
+&
+\\
+U+2625
+&☥&Ankh&\ankh&ankh&
+\hyperlink{U+00E0}{U+00E0}
+&
+\\
+U+2BE4
+&⯤&Apollon&\apollon&apollon&
+&
+\\
+U+0027
+&'&Apostrophe&\lightning&lightning&
+&
+\\
+U+2652
+&♒&Aquarius&\aquarius&aquarius&
+\hyperlink{U+2013}{U+2013}
+&
+\\
+U+2648
+&♈&Aries&\aries&aries&
+\hyperlink{U+00A1}{U+00A1}
+&
+\\
+U+260A
+&☊&Ascending Node&\ascendingnode&ascendingnode&
+\hyperlink{U+0058}{U+0058}
+&
+\\
+U+002A
+&*&Asterisk&\moonwaxingsolid&moonwaxingsolid&
+&
+\\
+U+2BD9
+&⯙&Astraea&\astraea&astraea&
+&
+\\
+U+26E2
+&⛢&Astronomical Symbol For Uranus&\varuranus&varuranus&
+&
+\\
+U+2BDE
+&⯞&Black Diamond On Cross&\blackdiamondoncross&blackdiamondoncross&
+&
+\\
+U+26B8
+&⚸&Black Moon Lilith&\blackmoonlilith&blackmoonlilith&
+&
+\\
+U+2022
+&•&Bullet&\scorpio&scorpio&
+&
+\\
+U+264B
+&♋&Cancer&\cancer&cancer&
+\hyperlink{U+00A2}{U+00A2}
+&
+\\
+U+2651
+&♑&Capricorn&\capricorn&capricorn&
+\hyperlink{U+00BA}{U+00BA}
+&
+\\
+U+00A2
+&¢&Cent Sign&\oldcancer&oldcancer&
+\hyperlink{U+264B}{U+264B}
+&
+\\
+U+26B3
+&⚳&Ceres&\ceres&ceres&
+\hyperlink{U+002C}{U+002C}
+&
+\\
+U+26B7
+&⚷&Chiron&\chiron&chiron&
+&
+\\
+U+2295
+&⊕&Circled Plus&\circleplus&circleplus&
+&
+\\
+U+005E
+&\^{}&Circumflex Accent&\moonlastquarteroutline&moonlastquarteroutline&
+&
+\\
+U+003A
+&:&Colon&\valknutoutline&valknutoutline&
+&
+\\
+U+002C
+&\,&Comma&\oldceres&oldceres&
+\hyperlink{U+26B3}{U+26B3}
+&
+\\
+U+0040
+&@&Commercial At&\moonwaxfullwanesolid&moonwaxfullwanesolid&
+&
+\\
+U+260C
+&☌&Conjunction&\conjunction&conjunction&
+\hyperlink{U+0043}{U+0043}
+&
+\\
+U+2BE0
+&⯠&Cupido&\cupido&cupido&
+&
+\\
+U+260B
+&☋&Descending Node&\descendingnode&descendingnode&
+\hyperlink{U+005A}{U+005A}
+&
+\\
+U+0038
+&8&Digit Eight&\suncoronafourspokes&suncoronafourspokes&
+\hyperlink{U+0033}{U+0033}
+&
+\\
+U+0035
+&5&Digit Five&\sun&sun&
+&
+\\
+U+0034
+&4&Digit Four&\octile&octile&
+&
+\\
+U+0039
+&9&Digit Nine&\suncoronahubfourspokes&suncoronahubfourspokes&
+&
+\\
+U+0031
+&1&Digit One&\sunwithrays&sunwithrays&
+&
+\\
+U+0037
+&7&Digit Seven&\suneightspokes&suneightspokes&
+&
+\\
+U+0036
+&6&Digit Six&\sunfourdoublespokes&sunfourdoublespokes&
+&
+\\
+U+0033
+&3&Digit Three&\oldsuncoronafourspokes&oldsuncoronafourspokes&
+\hyperlink{U+0038}{U+0038}
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+0032
+&2&Digit Two&\sunwithraysfourspokes&sunwithraysfourspokes&
+&
+\\
+U+0030
+&0&Digit Zero&\sunfourspokes&sunfourspokes&
+&
+\\
+U+0024
+&\$&Dollar Sign&\moonfirstquarteroutline&moonfirstquarteroutline&
+&
+\\
+U+26A2
+&⚢&Doubled Female Sign&\doubledfemale&doubledfemale&
+&
+\\
+U+26A3
+&⚣&Doubled Male Sign&\doubledmale&doubledmale&
+&
+\\
+U+2641
+&♁&Earth&\earth&earth&
+\hyperlink{U+003C}{U+003C}
+&
+\\
+U+2013
+&–&En Dash&\oldaquarius&oldaquarius&
+\hyperlink{U+2652}{U+2652}
+&
+\\
+U+003D
+&=&Equals Sign&\suncoronasixspokes&suncoronasixspokes&
+&
+\\
+U+0021
+&!&Exclamation Mark&\moonwaxfullwaneoutline&moonwaxfullwaneoutline&
+&
+\\
+U+2640
+&♀&Female Sign&\female&female&
+&
+\\
+U+00AA
+&ª&Feminine Ordinal Indicator&\oldsaggitarius&oldsaggitarius&
+\hyperlink{U+2650}{U+2650}
+&
+\\
+U+263D
+&☽&First Quarter Moon&\moonwaxingoutline&moonwaxingoutline&
+\hyperlink{U+00A3}{U+00A3}
+&
+\\
+U+002E
+&.&Full Stop&\sulphur&sulphur&
+&
+\\
+U+264A
+&♊&Gemini&\gemini&gemini&
+\hyperlink{U+0023}{U+0023}
+&
+\\
+U+0060
+&\`{}&Grave Accent&\oldmercury&oldmercury&
+\hyperlink{U+263F}{U+263F}
+&
+\\
+U+003E
+&\>&Greater-Than Sign&\recipe&recipe&
+&
+\\
+U+2BE1
+&⯡&Hades&\hades&hades&
+&
+\\
+U+26A9
+&⚩&Horizontal Male with Stroke Sign&\horizontalmalewithstroke&horizontalmalewithstroke&
+&
+\\
+U+2BDA
+&⯚&Hygiea&\hygiea&hygiea&
+&
+\\
+U+002D
+&-&Hyphen-Minus&\sunthreedoublespokes&sunthreedoublespokes&
+&
+\\
+U+221E
+&∞&Infinity&\oldleo&oldleo&
+\hyperlink{U+264C}{U+264C}
+&
+\\
+U+26A4
+&⚤&Interlocked Female and Male Sign&\interlockedmalefemale&interlockedmalefemale&
+&
+\\
+U+00A1
+&¡&Inv Exclamation Mark&\oldaries&oldaries&
+\hyperlink{U+2648}{U+2648}
+&
+\\
+U+26E7
+&⛧&Inv Pentagram&\pentagraminv&pentagraminv&
+\hyperlink{U+0057}{U+0057}
+&
+\\
+U+26B5
+&⚵&Juno&\juno&juno&
+&
+\\
+U+2643
+&♃&Jupiter&\jupiter&jupiter&
+\hyperlink{U+0063}{U+0063}
+&
+\\
+U+2BE3
+&⯣&Kronos&\kronos&kronos&
+&
+\\
+U+263E
+&☾&Last Quarter Moon&\moonwaningoutline&moonwaningoutline&
+\hyperlink{U+0026}{U+0026}
+&
+\\
+U+0041
+&A&Latin Capital Letter A&\whiteknifesouth&whiteknifesouth&
+&
+\\
+U+00C0
+&À&Latin Capital Letter A with Grave&\powergoingforth&powergoingforth&
+&
+\\
+U+00C5
+&Å&Latin Capital Letter A with Ring Above&\samhuinn&samhuinn&
+&
+\\
+U+0042
+&B&Latin Capital Letter B&\oldsextile&oldsextile&
+\hyperlink{U+26B9}{U+26B9}
+&
+\\
+U+0043
+&C&Latin Capital Letter C&\oldconjunction&oldconjunction&
+\hyperlink{U+260C}{U+260C}
+&
+\\
+U+0044
+&D&Latin Capital Letter D&\whiteknifeeast&whiteknifeeast&
+&
+\\
+U+0045
+&E&Latin Capital Letter E&\pentagraminvintLcircled&pentagraminvintLcircled&
+&
+\hyperlink{U+00C9}{U+00C9}
+\\
+U+00C9
+&É&Latin Capital Letter E with Acute&\pentagraminvintRcircled&pentagraminvintRcircled&
+&
+\hyperlink{U+0045}{U+0045}
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+00C8
+&È&Latin Capital Letter E with Grave&\parting&parting&
+&
+\\
+U+0046
+&F&Latin Capital Letter F&\whiteknifewest&whiteknifewest&
+&
+\\
+U+0047
+&G&Latin Capital Letter G&\mazesquarebase&mazesquarebase&
+&
+\\
+U+0048
+&H&Latin Capital Letter H&\mazeround&mazeround&
+&
+\\
+U+0049
+&I&Latin Capital Letter I&\pentagraminvintRsolid&pentagraminvintRsolid&
+&
+\hyperlink{none}{none}
+\\
+U+00CD
+&Í&Latin Capital Letter I with Acute&\pentagraminvsolid&pentagraminvsolid&
+\hyperlink{U+0055}{U+0055}
+&
+\\
+U+00CE
+&Î&Latin Capital Letter I with Circumflex&\imbolc&imbolc&
+&
+\\
+U+00CF
+&Ï&Latin Capital Letter I with Diaeresis&\eostre&eostre&
+&
+\\
+U+00CC
+&Ì&Latin Capital Letter I with Grave&\beltane&beltane&
+&
+\\
+U+004A
+&J&Latin Capital Letter J&\rockartgoddess&rockartgoddess&
+&
+\\
+U+004B
+&K&Latin Capital Letter K&\rockarthorse&rockarthorse&
+&
+\\
+U+004C
+&L&Latin Capital Letter L&\labrys&labrys&
+&
+\\
+U+004D
+&M&Latin Capital Letter M&\dupsunfourspokes&dupsunfourspokes&
+&
+\\
+U+004E
+&N&Latin Capital Letter N&\oldsquare&oldsquare&
+\hyperlink{U+25A1}{U+25A1}
+&
+\\
+U+004F
+&O&Latin Capital Letter O&\pentagramroughinvsolid&pentagramroughinvsolid&
+&
+\hyperlink{U+006F}{U+006F}
+\\
+U+00D3
+&Ó&Latin Capital Letter O with Acute&\venusfigureoutline&venusfigureoutline&
+&
+\\
+U+00D4
+&Ô&Latin Capital Letter O with Circumflex&\lughnasadh&lughnasadh&
+&
+\\
+U+0050
+&P&Latin Capital Letter P&\pentagramintRtriangle&pentagramintRtriangle&
+&
+\\
+U+0051
+&Q&Latin Capital Letter Q&\pentagraminvcircled&pentagraminvcircled&
+&
+\hyperlink{U+0071}{U+0071}
+\\
+U+0052
+&R&Latin Capital Letter R&\pentagraminvintL&pentagraminvintL&
+&
+\hyperlink{U+0154}{U+0154}
+\\
+U+0154
+&Ŕ&Latin Capital Letter R with Acute&\pentagraminvintR&pentagraminvintR&
+&
+\hyperlink{U+0052}{U+0052}
+\\
+U+0053
+&S&Latin Capital Letter S&\whiteknifenorth&whiteknifenorth&
+&
+\\
+U+0054
+&T&Latin Capital Letter T&\pentagramroughinvcircled&pentagramroughinvcircled&
+&
+\\
+U+0055
+&U&Latin Capital Letter U&\oldpentagraminvsolid&oldpentagraminvsolid&
+\hyperlink{U+00CD}{U+00CD}
+&
+\\
+U+00D9
+&Ù&Latin Capital Letter U with Grave&\perfectcouplethirddegree&perfectcouplethirddegree&
+&
+\\
+U+0056
+&V&Latin Capital Letter V&\oldopposition&oldopposition&
+\hyperlink{U+260D}{U+260D}
+&
+\\
+U+0057
+&W&Latin Capital Letter W&\oldpentagraminv&oldpentagraminv&
+\hyperlink{U+26E7}{U+26E7}
+&
+\\
+U+0058
+&X&Latin Capital Letter X&\oldascendingnode&oldascendingnode&
+\hyperlink{U+260A}{U+260A}
+&
+\\
+U+0059
+&Y&Latin Capital Letter Y&\pentagramroughinv&pentagramroughinv&
+&
+\\
+U+005A
+&Z&Latin Capital Letter Z&\olddescendingnode&olddescendingnode&
+\hyperlink{U+260B}{U+260B}
+&
+\\
+U+0132
+&IJ&Latin Capital Ligature Ij&\yule&yule&
+&
+\\
+U+0061
+&a&Latin Small Letter A&\athamesouth&athamesouth&
+&
+\\
+U+00E0
+&à&Latin Small Letter A with Grave&\oldankh&oldankh&
+\hyperlink{U+2625}{U+2625}
+&
+\\
+U+0062
+&b&Latin Small Letter B&\olduranus&olduranus&
+\hyperlink{U+2645}{U+2645}
+&
+\\
+U+0063
+&c&Latin Small Letter C&\oldjupiter&oldjupiter&
+\hyperlink{U+2643}{U+2643}
+&
+\\
+U+0064
+&d&Latin Small Letter D&\athameeast&athameeast&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+0065
+&e&Latin Small Letter E&\pentagramintRcircled&pentagramintRcircled&
+&
+\hyperlink{U+00E9}{U+00E9}
+\\
+U+00E9
+&é&Latin Small Letter E with Acute&\pentagramintLcircled&pentagramintLcircled&
+&
+\hyperlink{U+0065}{U+0065}
+\\
+U+00E8
+&è&Latin Small Letter E with Grave&\salute&salute&
+&
+\\
+U+0066
+&f&Latin Small Letter F&\athamewest&athamewest&
+&
+\\
+U+0067
+&g&Latin Small Letter G&\hammer&hammer&
+&
+\\
+U+0068
+&h&Latin Small Letter H&\awen&awen&
+&
+\\
+U+0069
+&i&Latin Small Letter I&\oldpentagramintRsolid&oldpentagramintRsolid&
+\hyperlink{U+00ED}{U+00ED}
+&
+\\
+U+00ED
+&í&Latin Small Letter I with Acute&\pentagramintRsolid&pentagramintRsolid&
+\hyperlink{U+0069}{U+0069}
+&
+\\
+U+00EC
+&ì&Latin Small Letter I with Grave&\scourge&scourge&
+&
+\\
+U+006A
+&j&Latin Small Letter J&\fylfotilkley&fylfotilkley&
+&
+\\
+U+006B
+&k&Latin Small Letter K&\aegishjalmur&aegishjalmur&
+&
+\\
+U+006C
+&l&Latin Small Letter L&\eightsabbats&eightsabbats&
+&
+\\
+U+006D
+&m&Latin Small Letter M&\oldpluto&oldpluto&
+\hyperlink{U+2647}{U+2647}
+&
+\\
+U+006E
+&n&Latin Small Letter N&\oldneptune&oldneptune&
+\hyperlink{U+2646}{U+2646}
+&
+\\
+U+006F
+&o&Latin Small Letter O&\pentagramroughsolid&pentagramroughsolid&
+&
+\hyperlink{U+004F}{U+004F}
+\\
+U+00F3
+&ó&Latin Small Letter O with Acute&\venusfiguresolid&venusfiguresolid&
+&
+\\
+U+00F2
+&ò&Latin Small Letter O with Grave&\goddessasmoon&goddessasmoon&
+&
+\\
+U+0070
+&p&Latin Small Letter P&\pentagramwithtriangle&pentagramwithtriangle&
+&
+\\
+U+0071
+&q&Latin Small Letter Q&\pentagramcircled&pentagramcircled&
+&
+\hyperlink{U+0051}{U+0051}
+\\
+U+0072
+&r&Latin Small Letter R&\oldpentagramintR&oldpentagramintR&
+\hyperlink{U+26E5}{U+26E5}
+&
+\hyperlink{U+0155}{U+0155}
+\\
+U+0155
+&ŕ&Latin Small Letter R with Acute&\oldpentagramintL&oldpentagramintL&
+\hyperlink{U+26E6}{U+26E6}
+&
+\\
+U+0073
+&s&Latin Small Letter S&\athamenorth&athamenorth&
+&
+\\
+U+0074
+&t&Latin Small Letter T&\pentagramroughcircled&pentagramroughcircled&
+&
+\\
+U+0075
+&u&Latin Small Letter U&\pentagramsolid&pentagramsolid&
+&
+\\
+U+00F9
+&ù&Latin Small Letter U with Grave&\perfectcouple&perfectcouple&
+&
+\\
+U+0076
+&v&Latin Small Letter V&\oldsaturn&oldsaturn&
+\hyperlink{U+2644}{U+2644}
+&
+\\
+U+0077
+&w&Latin Small Letter W&\oldpentagram&oldpentagram&
+\hyperlink{U+26E4}{U+26E4}
+&
+\\
+U+0078
+&x&Latin Small Letter X&\mars&mars&
+&
+\\
+U+0079
+&y&Latin Small Letter Y&\pentagramrough&pentagramrough&
+&
+\\
+U+007A
+&z&Latin Small Letter Z&\venus&venus&
+&
+\\
+U+007B
+&\{&Left Curly Bracket&\waterelement&waterelement&
+&
+\\
+U+26E6
+&⛦&Left-Handed Interlaced Pentagram&\pentagramintL&pentagramintL&
+\hyperlink{U+0155}{U+0155}
+&
+\\
+U+0028
+&(&Left Parenthesis&\moonfirstquartersolid&moonfirstquartersolid&
+&
+\\
+U+005B
+&[&Left Square Bracket&\fireelement&fireelement&
+&
+\\
+U+264C
+&♌&Leo&\leo&leo&
+\hyperlink{U+221E}{U+221E}
+&
+\\
+U+003C
+&\<&Less-Than Sign&\oldearth&oldearth&
+\hyperlink{U+2641}{U+2641}
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+264E
+&♎&Libra&\libra&libra&
+\hyperlink{U+00B6}{U+00B6}
+&
+\\
+U+005F
+&\_&Low Line&\moonlastquartersolid&moonlastquartersolid&
+&
+\\
+U+26A5
+&⚥&Male and Female Sign&\maleandfemale&maleandfemale&
+&
+\\
+U+2642
+&♂&Male Sign&\male&male&
+&
+\\
+U+26A7
+&⚧&Male with Stroke and Male and Female Sign&\malewithstrokemalefemale&malewithstrokemalefemale&
+&
+\\
+U+26A6
+&⚦&Male with Stroke Sign&\malewithstroke&malewithstroke&
+&
+\\
+U+00BA
+&º&Masculine Ordinal Indicator&\oldcapricorn&oldcapricorn&
+\hyperlink{U+2651}{U+2651}
+&
+\\
+U+263F
+&☿&Mercury&\mercury&mercury&
+\hyperlink{U+0060}{U+0060}
+&
+\\
+U+2BC9
+&⯉&Neptune Form Two&\neptuneformtwo&neptuneformtwo&
+&
+\\
+U+2646
+&♆&Neptune&\neptune&neptune&
+\hyperlink{U+006E}{U+006E}
+&
+\\
+U+2BDC
+&⯜&Nessus&\nessus&nessus&
+&
+\\
+U+26B2
+&⚲&Neuter&\neuter&neuter&
+&
+\\
+U+2260
+&≠&Not Equal To&\oldpisces&oldpisces&
+\hyperlink{U+2653}{U+2653}
+&
+\\
+U+0023
+&\#&Number Sign&\oldgemini&oldgemini&
+\hyperlink{U+264A}{U+264A}
+&
+\\
+U+169B
+&᚛&Ogham Feather Mark&\OGfeather&OGfeather&
+&
+\\
+U+1690
+&ᚐ&Ogham Letter Ailm&\OGailm&OGailm&
+&
+\\
+U+1681
+&ᚁ&Ogham Letter Beith&\OGbeith&OGbeith&
+&
+\\
+U+168A
+&ᚊ&Ogham Letter Ceirt&\OGceirt&OGceirt&
+&
+\\
+U+1689
+&ᚉ&Ogham Letter Coll&\OGcoll&OGcoll&
+&
+\\
+U+1687
+&ᚇ&Ogham Letter Dair&\OGdair&OGdair&
+&
+\\
+U+1695
+&ᚕ&Ogham Letter Eabhadh&\OGeabhadh&OGeabhadh&
+&
+\\
+U+1693
+&ᚓ&Ogham Letter Eadhadh&\OGeadhadh&OGeadhadh&
+&
+\\
+U+1699
+&ᚙ&Ogham Letter Eamhancholl&\OGeamhancholl&OGeamhancholl&
+&
+\\
+U+1683
+&ᚃ&Ogham Letter Fearn&\OGfearn&OGfearn&
+&
+\\
+U+168C
+&ᚌ&Ogham Letter Gort&\OGgort&OGgort&
+&
+\\
+U+1698
+&ᚘ&Ogham Letter Ifin&\OGifin&OGifin&
+&
+\\
+U+1694
+&ᚔ&Ogham Letter Iodhadh&\OGiodhadh&OGiodhadh&
+&
+\\
+U+1682
+&ᚂ&Ogham Letter Luis&\OGluis&OGluis&
+&
+\\
+U+168B
+&ᚋ&Ogham Letter Muin&\OGmuin&OGmuin&
+&
+\\
+U+168D
+&ᚍ&Ogham Letter Ngeadal&\OGngeadal&OGngeadal&
+&
+\\
+U+1685
+&ᚅ&Ogham Letter Nion&\OGnion&OGnion&
+&
+\\
+U+1691
+&ᚑ&Ogham Letter Onn&\OGonn&OGonn&
+&
+\\
+U+1696
+&ᚖ&Ogham Letter Or&\OGor&OGor&
+&
+\\
+U+169A
+&ᚚ&Ogham Letter Peith&\OGpeith&OGpeith&
+&
+\\
+U+168F
+&ᚏ&Ogham Letter Ruis&\OGruis&OGruis&
+&
+\\
+U+1684
+&ᚄ&Ogham Letter Sail&\OGsail&OGsail&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+168E
+&ᚎ&Ogham Letter Straif&\OGstraif&OGstraif&
+&
+\\
+U+1688
+&ᚈ&Ogham Letter Tinne&\OGtinne&OGtinne&
+&
+\\
+U+1686
+&ᚆ&Ogham Letter Uath&\OGuath&OGuath&
+&
+\\
+U+1697
+&ᚗ&Ogham Letter Uilleann&\OGuilleann&OGuilleann&
+&
+\\
+U+1692
+&ᚒ&Ogham Letter Ur&\OGur&OGur&
+&
+\\
+U+169C
+&᚜&Ogham Reversed Feather Mark&\OGreversedfeather&OGreversedfeather&
+&
+\\
+U+260D
+&☍&Opposition&\opposition&opposition&
+\hyperlink{U+0056}{U+0056}
+&
+\\
+U+26B4
+&⚴&Pallas&\pallas&pallas&
+&
+\\
+U+26E4
+&⛤&Pentagram&\pentagram&pentagram&
+\hyperlink{U+0077}{U+0077}
+&
+\\
+U+0025
+&\%&Percent Sign&\moonnew&moonnew&
+&
+\\
+U+2BDB
+&⯛&Pholus&\pholus&pholus&
+&
+\\
+U+00B6
+&¶&Pilcrow Sign&\oldlibra&oldlibra&
+\hyperlink{U+264E}{U+264E}
+&
+\\
+U+2653
+&♓&Pisces&\pisces&pisces&
+\hyperlink{U+2260}{U+2260}
+&
+\\
+U+002B
+&+&Plus Sign&\moonwaningsolid&moonwaningsolid&
+&
+\\
+U+2BD6
+&⯖&Pluto Form Five&\plutoformfive&plutoformfive&
+&
+\\
+U+2BD5
+&⯕&Pluto Form Four&\plutoformfour&plutoformfour&
+&
+\\
+U+2BD4
+&&Pluto Form Three&\plutoformthree&plutoformthree&
+&
+\\
+U+2BD3
+&⯓&Pluto Form Two&\plutoformtwo&plutoformtwo&
+&
+\\
+U+2647
+&♇&Pluto&\pluto&pluto&
+\hyperlink{U+006D}{U+006D}
+&
+\\
+U+2BE7
+&⯧&Poseidon&\poseidon&poseidon&
+&
+\\
+U+00A3
+&£&Pound Sign&\oldmoonwaxingoutline&oldmoonwaxingoutline&
+\hyperlink{U+263D}{U+263D}
+&
+\\
+U+211E
+&℞&Prescription Take (Recipe)&\prescription&prescription&
+&
+\\
+U+2BD8
+&⯘&Proserpina&\proserpina&proserpina&
+&
+\\
+U+003F
+&?&Question Mark&\celtictrefoilknotopen&celtictrefoilknotopen&
+&
+\\
+U+26BB
+&⚻&Quincunx&\quincunx&quincunx&
+&
+\\
+U+0022
+&“&Quotation Mark&\valknutsolid&valknutsolid&
+&
+\\
+U+005C
+&\textbackslash&Reverse Solidus&\serpentimpaled&serpentimpaled&
+&
+\\
+U+007D
+&\}&Right Curly Bracket&\earthelement&earthelement&
+&
+\\
+U+26E5
+&⛥&Right-Handed Interlaced Pentagram&\pentagramintR&pentagramintR&
+&
+\\
+U+0029
+&)&Right Parenthesis&\moonfull&moonfull&
+&
+\\
+U+005D
+&]&Right Square Bracket&\airelement&airelement&
+&
+\\
+U+16EE
+&ᛮ&Runic Arlaug Symbol&\RUarlaugsymbol&RUarlaugsymbol&
+&
+\\
+U+16F0
+&ᛰ&Runic Belgthor Symbol&\RUbelgthorsymbol&RUbelgthorsymbol&
+&
+\\
+U+16ED
+&᛭&Runic Cross Punctuation&\RUcrosspunctuation&RUcrosspunctuation&
+&
+\\
+U+16AA
+&ᚪ&Runic Letter Ac A&\RUaca&RUaca&
+&
+\\
+U+16AB
+&ᚫ&Runic Letter Aesc&\RUaesc&RUaesc&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+16C9
+&ᛉ&Runic Letter Algiz Eolhx&\RUalgizeolhx&RUalgizeolhx&
+&
+\\
+U+16A8
+&ᚨ&Runic Letter Ansuz A&\RUansuza&RUansuza&
+&
+\\
+U+16D2
+&ᛒ&Runic Letter Berkanan Beorc Bjarkan B&\RUberkananbeorcbjarkanb&RUberkananbeorcbjarkanb&
+&
+\\
+U+16E3
+&ᛣ&Runic Letter Calc&\RUcalc&RUcalc&
+&
+\\
+U+16E4
+&ᛤ&Runic Letter Cealc&\RUcealc&RUcealc&
+&
+\\
+U+16B3
+&ᚳ&Runic Letter Cen&\RUcen&RUcen&
+&
+\\
+U+16CD
+&ᛍ&Runic Letter C&\RUc&RUc&
+&
+\\
+U+16E2
+&ᛢ&Runic Letter Cweorth&\RUcweorth&RUcweorth&
+&
+\\
+U+16DE
+&ᛞ&Runic Letter Dagaz Daeg D&\RUdagazdaegd&RUdagazdaegd&
+&
+\\
+U+16DB
+&ᛛ&Runic Letter Dotted-L&\RUdottedl&RUdottedl&
+&
+\\
+U+16C0
+&ᛀ&Runic Letter Dotted-N&\RUdottedn&RUdottedn&
+&
+\\
+U+16D4
+&ᛔ&Runic Letter Dotted-P&\RUdottedp&RUdottedp&
+&
+\\
+U+16D1
+&ᛑ&Runic Letter D&\RUd&RUd&
+&
+\\
+U+16E0
+&ᛠ&Runic Letter Ear&\RUear&RUear&
+&
+\\
+U+16D6
+&ᛖ&Runic Letter Ehwaz Eh E&\RUehwazehe&RUehwazehe&
+&
+\\
+U+16B6
+&ᚶ&Runic Letter Eng&\RUeng&RUeng&
+&
+\\
+U+16C2
+&ᛂ&Runic Letter E&\RUe&RUe&
+&
+\\
+U+16A7
+&ᚧ&Runic Letter Eth&\RUeth&RUeth&
+&
+\\
+U+16A0
+&ᚠ&Runic Letter Fehu Feoh Fe F&\RUfehufeohfef&RUfehufeohfef&
+&
+\\
+U+16F7
+&ᛷ&Runic Letter Franks Casket Ac&\RUfrankscasketac&RUfrankscasketac&
+&
+\\
+U+16F8
+&ᛸ&Runic Letter Franks Casket Aesc&\RUfrankscasketaesc&RUfrankscasketaesc&
+&
+\\
+U+16F6
+&ᛶ&Runic Letter Franks Casket Eh&\RUfrankscasketeh&RUfrankscasketeh&
+&
+\\
+U+16F5
+&ᛵ&Runic Letter Franks Casket Is&\RUfrankscasketis&RUfrankscasketis&
+&
+\\
+U+16F4
+&ᛴ&Runic Letter Franks Casket Os&\RUfrankscasketos&RUfrankscasketos&
+&
+\\
+U+16B8
+&ᚸ&Runic Letter Gar&\RUgar&RUgar&
+&
+\\
+U+16B7
+&ᚷ&Runic Letter Gebo Gyfu G&\RUgebogyfug&RUgebogyfug&
+&
+\\
+U+16C4
+&ᛄ&Runic Letter Ger&\RUger&RUger&
+&
+\\
+U+16B5
+&ᚵ&Runic Letter G&\RUg&RUg&
+&
+\\
+U+16BB
+&ᚻ&Runic Letter Haegl H&\RUhaeglh&RUhaeglh&
+&
+\\
+U+16BA
+&ᚺ&Runic Letter Haglaz H&\RUhaglazh&RUhaglazh&
+&
+\\
+U+16E8
+&ᛨ&Runic Letter Icelandic-Yr&\RUicelandicyr&RUicelandicyr&
+&
+\\
+U+16DD
+&ᛝ&Runic Letter Ing&\RUing&RUing&
+&
+\\
+U+16DC
+&ᛜ&Runic Letter Ingwaz&\RUingwaz&RUingwaz&
+&
+\\
+U+16E1
+&ᛡ&Runic Letter Ior&\RUior&RUior&
+&
+\\
+U+16C1
+&ᛁ&Runic Letter Isaz Is Iss I&\RUisazisissi&RUisazisissi&
+&
+\\
+U+16C7
+&ᛇ&Runic Letter Iwaz Eoh&\RUiwazeoh&RUiwazeoh&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+16C3
+&ᛃ&Runic Letter Jeran J&\RUjeranj&RUjeranj&
+&
+\\
+U+16B2
+&ᚲ&Runic Letter Kauna&\RUkauna&RUkauna&
+&
+\\
+U+16B4
+&ᚴ&Runic Letter Kaun K&\RUkaunk&RUkaunk&
+&
+\\
+U+16F1
+&ᛱ&Runic Letter K&\RUk&RUk&
+&
+\\
+U+16DA
+&ᛚ&Runic Letter Laukaz Lagu Logr L&\RUlaukazlagulogrl&RUlaukazlagulogrl&
+&
+\\
+U+16C5
+&ᛅ&Runic Letter Long-Branch-Ar Ae&\RUlongbrancharae&RUlongbrancharae&
+&
+\\
+U+16BC
+&ᚼ&Runic Letter Long-Branch-Hagall H&\RUlongbranchhagallh&RUlongbranchhagallh&
+&
+\\
+U+16D8
+&ᛘ&Runic Letter Long-Branch-Madr M&\RUlongbranchmadrm&RUlongbranchmadrm&
+&
+\\
+U+16AC
+&ᚬ&Runic Letter Long-Branch-Oss O&\RUlongbranchosso&RUlongbranchosso&
+&
+\\
+U+16E6
+&ᛦ&Runic Letter Long-Branch-Yr&\RUlongbranchyr&RUlongbranchyr&
+&
+\\
+U+16D7
+&ᛗ&Runic Letter Mannaz Man M&\RUmannazmanm&RUmannazmanm&
+&
+\\
+U+16BE
+&ᚾ&Runic Letter Naudiz Nyd Naud N&\RUnaudiznydnaudn&RUnaudiznydnaudn&
+&
+\\
+U+16AF
+&ᚯ&Runic Letter Oe&\RUoe&RUoe&
+&
+\\
+U+16B0
+&ᚰ&Runic Letter On&\RUon&RUon&
+&
+\\
+U+16F3
+&ᛳ&Runic Letter Oo&\RUoo&RUoo&
+&
+\\
+U+16D5
+&ᛕ&Runic Letter Open-P&\RUopenp&RUopenp&
+&
+\\
+U+16AE
+&ᚮ&Runic Letter O&\RUo&RUo&
+&
+\\
+U+16A9
+&ᚩ&Runic Letter Os O&\RUoso&RUoso&
+&
+\\
+U+16DF
+&ᛟ&Runic Letter Othalan Ethel O&\RUothalanethelo&RUothalanethelo&
+&
+\\
+U+16C8
+&ᛈ&Runic Letter Pertho Peorth P&\RUperthopeorthp&RUperthopeorthp&
+&
+\\
+U+16E9
+&ᛩ&Runic Letter Q&\RUq&RUq&
+&
+\\
+U+16B1
+&ᚱ&Runic Letter Raido Rad Reid R&\RUraidoradreidr&RUraidoradreidr&
+&
+\\
+U+16C6
+&ᛆ&Runic Letter Short-Twig-Ar A&\RUshorttwigara&RUshorttwigara&
+&
+\\
+U+16D3
+&ᛓ&Runic Letter Short-Twig-Bjarkan B&\RUshorttwigbjarkanb&RUshorttwigbjarkanb&
+&
+\\
+U+16BD
+&ᚽ&Runic Letter Short-Twig-Hagall H&\RUshorttwighagallh&RUshorttwighagallh&
+&
+\\
+U+16D9
+&ᛙ&Runic Letter Short-Twig-Madr M&\RUshorttwigmadrm&RUshorttwigmadrm&
+&
+\\
+U+16BF
+&ᚿ&Runic Letter Short-Twig-Naud N&\RUshorttwignaudn&RUshorttwignaudn&
+&
+\\
+U+16AD
+&ᚭ&Runic Letter Short-Twig-Oss O&\RUshorttwigosso&RUshorttwigosso&
+&
+\\
+U+16CC
+&ᛌ&Runic Letter Short-Twig-Sol S&\RUshorttwigsols&RUshorttwigsols&
+&
+\\
+U+16D0
+&ᛐ&Runic Letter Short-Twig-Tyr T&\RUshorttwigtyrt&RUshorttwigtyrt&
+&
+\\
+U+16E7
+&ᛧ&Runic Letter Short-Twig-Yr&\RUshorttwigyr&RUshorttwigyr&
+&
+\\
+U+16F2
+&ᛲ&Runic Letter Sh&\RUsh&RUsh&
+&
+\\
+U+16CB
+&ᛋ&Runic Letter Sigel Long-Branch-Sol S&\RUsigellongbranchsols&RUsigellongbranchsols&
+&
+\\
+U+16CA
+&ᛊ&Runic Letter Sowilo S&\RUsowilos&RUsowilos&
+&
+\\
+U+16E5
+&ᛥ&Runic Letter Stan&\RUstan&RUstan&
+&
+\\
+U+16A6
+&ᚦ&Runic Letter Thurisaz Thurs Thorn&\RUthurisazthursthorn&RUthurisazthursthorn&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+16CF
+&ᛏ&Runic Letter Tiwaz Tir Tyr T&\RUtiwaztirtyrt&RUtiwaztirtyrt&
+&
+\\
+U+16A2
+&ᚢ&Runic Letter Uruz Ur U&\RUuruzuru&RUuruzuru&
+&
+\\
+U+16A1
+&ᚡ&Runic Letter V&\RUv&RUv&
+&
+\\
+U+16A5
+&ᚥ&Runic Letter W&\RUw&RUw&
+&
+\\
+U+16B9
+&ᚹ&Runic Letter Wunjo Wynn W&\RUwunjowynnw&RUwunjowynnw&
+&
+\\
+U+16EA
+&ᛪ&Runic Letter X&\RUx&RUx&
+&
+\\
+U+16A3
+&ᚣ&Runic Letter Yr&\RUyr&RUyr&
+&
+\\
+U+16A4
+&ᚤ&Runic Letter Y&\RUy&RUy&
+&
+\\
+U+16CE
+&ᛎ&Runic Letter Z&\RUz&RUz&
+&
+\\
+U+16EC
+&᛬&Runic Multiple Punctuation&\RUmultiplepunctuation&RUmultiplepunctuation&
+&
+\\
+U+16EB
+&᛫&Runic Single Punctuation&\RUsinglepunctuation&RUsinglepunctuation&
+&
+\\
+U+16EF
+&ᛯ&Runic Tvimadur Symbol&\RUtvimadursymbol&RUtvimadursymbol&
+&
+\\
+U+2650
+&♐&Sagittarius&\saggitarius&saggitarius&
+\hyperlink{U+00AA}{U+00AA}
+&
+\\
+U+2644
+&♄&Saturn&\saturn&saturn&
+\hyperlink{U+0076}{U+0076}
+&
+\\
+U+264F
+&♏&Scorpius&\scorpius&scorpius&
+&
+\\
+U+00A7
+&§&Section Sign&\oldvirgo&oldvirgo&
+\hyperlink{U+264D}{U+264D}
+&
+\\
+U+003B
+&;&Semicolon&\stareightarrows&stareightarrows&
+&
+\\
+U+26BA
+&⚺&Semisextile&\semisextile&semisextile&
+&
+\\
+U+26BC
+&⚼&Sesquiquadrate&\sesquiquadrate&sesquiquadrate&
+&
+\\
+U+26B9
+&⚹&Sextile&\sextile&sextile&
+\hyperlink{U+0042}{U+0042}
+&
+\\
+U+002F
+&/&Solidus&\crossedstaff&crossedstaff&
+&
+\\
+U+2609
+&☉&Sun&\dupsun&dupsun&
+&
+\\
+U+2649
+&♉&Taurus&\taurus&taurus&
+\hyperlink{U+2122}{U+2122}
+&
+\\
+U+007E
+&\~{}&Tilde&\vargemini&vargemini&
+&
+\\
+U+2122
+&™&Trade Mark Sign&\oldtaurus&oldtaurus&
+\hyperlink{U+2649}{U+2649}
+&
+\\
+U+2BD7
+&⯗&Transpluto&\transpluto&transpluto&
+&
+\\
+U+2BDF
+&⯟&True Light Moon Arta&\truelightmoonarta&truelightmoonarta&
+&
+\\
+U+2645
+&♅&Uranus&\uranus&uranus&
+\hyperlink{U+0062}{U+0062}
+&
+\\
+U+007C
+&\|&Vertical Line&\celtictrefoilknotsolid&celtictrefoilknotsolid&
+&
+\\
+U+26A8
+&⚨&Vertical Male with Stroke Sign&\verticalmalewithstroke&verticalmalewithstroke&
+&
+\\
+U+26B6
+&⚶&Vesta&\vesta&vesta&
+&
+\\
+U+264D
+&♍&Virgo&\virgo&virgo&
+\hyperlink{U+00A7}{U+00A7}
+&
+\\
+U+2BE6
+&⯦&Vulcanus&\vulcanus&vulcanus&
+&
+\\
+U+2BDD
+&⯝&White Moon Selena&\selena&selena&
+&
+\\
+U+25A1
+&□&White Square&\square&square&
+\hyperlink{U+004F}{U+004F}
+&
+\\
+U+263C
+&☼&White Sun with Rays&\sunrays&sunrays&
+&
+\\
+\end{tabular}
+\par
+\begin{tabular}{@{}
+ >{\ttfamily}l@{}
+ >{\sffamily}c@{\hspace{2mm}}
+ >{\sffamily\raggedright\vstrut}p{.3\textwidth}
+ >{\Large\symbats}c
+ >{\ttfamily\raggedright\arraybackslash\textbackslash}m{.29\textwidth}
+ >{\ttfamily}l@{\hspace{2mm}}
+ >{\ttfamily}l@{}}
+\normalfont\bfseries Code&
+\normalfont\bfseries Char&
+\normalfont\bfseries Unicode name&
+\normalfont\normalsize\bfseries Glyph&
+\multicolumn1{>{\normalfont\bfseries}l}{\LaTeX\ name}&
+\normalfont\bfseries Dupes&
+\normalfont\bfseries Compl\\\hline\vrule height1.75em width0pt
+U+2BE2
+&⯢&Zeus&\zeus&zeus&
+&
+\\
+\end{tabular}
diff --git a/info/biblio/texbook3.bib b/info/biblio/texbook3.bib
index 6d71227c01..bed4dbd2b5 100644
--- a/info/biblio/texbook3.bib
+++ b/info/biblio/texbook3.bib
@@ -17,7 +17,7 @@
%%% telephone = "+1 801 581 5254",
%%% FAX = "+1 801 581 4148",
%%% URL = "http://www.math.utah.edu/~beebe",
-%%% checksum = "17785 23334 105569 1001976",
+%%% checksum = "24140 23334 105574 1001991",
%%% email = "beebe at math.utah.edu, beebe at acm.org,
%%% beebe at computer.org (Internet)",
%%% codetable = "ISO/ASCII",
@@ -3132,7 +3132,7 @@
volume = "40",
number = "3",
pages = "78--93",
- month = "????",
+ month = jul # "\slash " # sep,
year = "2018",
CODEN = "IAHCEX",
DOI = "https://doi.org/10.1109/MAHC.2018.033841114",
diff --git a/macros/latex/contrib/stex/README.md b/macros/latex/contrib/stex/README.md
index 13caa1f734..b5eed1a41f 100644
--- a/macros/latex/contrib/stex/README.md
+++ b/macros/latex/contrib/stex/README.md
@@ -3,8 +3,13 @@ sTeX: An Infrastructure for Semantic Preloading of LaTeX Documents
![CI Status](https://github.com/slatex/sTeX/workflows/CI/badge.svg)
This repository contains the sTeX package collection, a version of TeX/LaTeX that allows
-to markup TeX/LaTeX documents semantically without leaving the document format,
-essentially turning it into a document format for mathematical knowledge management (MKM).
+to markup TeX/LaTeX documents semantically without leaving the document format.
+
+Running `pdflatex` over sTeX-annotated documents formats them into normal-looking PDF. But
+sTeX also comes with a [conversion pipeline](https://github.com/slatex/RusTeX) into
+semantically annotated HTML5, which can host semantic added-value services that make the
+documents active (i.e. interactive and user-adaptive) and essentially turning LaTeX into a
+document format for (mathematical) knowledge management (MKM).
## Copyright & License
@@ -12,12 +17,41 @@ Copyright (c) 2022 Michael Kohlhase
The package is distributed under the terms of the LaTeX Project Public License (LPPL)
## Maintainers
-Michael Kohlhase, Dennis Müller, FAU Erlangen-Nürnberg.
+[Michael Kohlhase](https://kwarc.info/kohlhase), [Dennis Müller](https://kwarc.info/people/dmueller), FAU Erlangen-Nürnberg.
## Documentation
-See the
-[documentation of the sTeX package](https://github.com/slatex/sTeX/blob/main/doc/stex-doc.pdf)
-for details.
+The [sTeX manual ](https://github.com/slatex/sTeX/blob/main/doc/stex-manual.pdf) gives a
+general introduction and motivation. The
+[sTeX package documentation](https://github.com/slatex/sTeX/blob/main/doc/stex-doc.pdf)
+gives the details of the implementation. A complete list of sTeX-related publications can
+be found [here](https://kwarc.github.io/bibs/sTeX/).
+
+## sTeX Corpus & Best Practices
+
+sTeX comes with a large corpus of pre-annotated materials that act as evaluation grounds
+and regression tests for the sTeX functionality and best practices that are publicly
+available.
+* [HelloWorld](https://gl.mathhub.info/HelloWorld) a collection of simple hello world
+ examples the show off the best practices of sTeX annotation.
+* [SMGLoM](https://gl.mathhub.info/smglom), the Semantic, Multilingual Glossary of
+ Mathematics (and similar disciplines). SMGloM provides a large set of definitions and
+ well-designed semantic macros for core mathematical (and computation) concepts and
+ objects. This resource greatly facilitates "getting off the ground" in semantic
+ annotation.
+* [MiKoMH](https://gl.mathhub.info/MiKoMH) a set of semantically annotated courses in
+ computer science and (symbolic) AI (ca. 5000 pages of slides and notes). Ca. 3000
+ problem/solutions exist are only available upon request.
+* [sTeX3 Labs](https://gl.mathhub.info/sTeX) a set of experimental re-formalizations of
+ (mostly) [SMGLoM](https://gl.mathhub.info/smglom) material to fully take advantage of
+ the sTeX3 functionality and the
+ [rusTeX](https://github.com/slatex/RusTeX)/[MMT](https://uniformal.github.io) pipeline
+ and knowledge managemen facilities.
+
+All of these are hosted on [MathHub](https://mathhub.info), an experimental portal for the
+management of active mathematical documents and flexiformal mathematics. The organization
+of the material into "mathematical archives" (GIT repositories with a particular
+standardized structure on [a GitLab repository management server](https://gl.mathhub.info)
+greatly enhances modularization and the provision of added value services.
## Setup
@@ -31,10 +65,10 @@ Then update your `TEXINPUTS` environment variable, e.g. by placing the followin
export TEXINPUTS="$(TEXINPUTS):<sTeXDIR>//:
```
-Similarly, set your `MATHHUB` environment variable to where you intend to keep your sTeX archives. For details, see the documentation linked above.
+Similarly, set your `MATHHUB` environment variable to where you intend to keep your sTeX
+archives. For details, see the documentation linked above. For a LaTeX IDE, update the directory path where `pdflatex` looks for paths.
-For a LaTeX IDE, update the directory path where `pdflatex` looks for paths.
-For larger documents it may be necessary to enlarge the internal memory allocation of the TEX/LATEX executables. This can be done by adding the following configurations in `texmf.cnf` (or changing them, if they already exist).
+For larger documents it may (rarely) be necessary to enlarge the internal memory allocation of the TEX/LATEX executables. This can be done by adding the following configurations in `texmf.cnf` (or changing them, if they already exist).
```
param_size = 20000 % simultaneous macro parameters, also applies to MP
nest_size = 1000 % simultaneous semantic levels (e.g., groups)
diff --git a/macros/latex/contrib/stex/doc/packages/stex-basics.tex b/macros/latex/contrib/stex/doc/packages/stex-basics.tex
index daa6d6418d..f766b9b22f 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-basics.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-basics.tex
@@ -1,3 +1,9 @@
+We can use \sTeX by simply including the package with |\usepackage{stex}|,
+or -- primarily for individual fragments to be included in other
+documents -- by using the \sTeX document class with |\documentclass{stex}|
+which combines the \pkg{standalone} document class with the \pkg{stex}
+package.
+
Both the \pkg{stex} package and document class offer the following
options:
@@ -5,12 +11,31 @@ options:
\item[\texttt{lang}] (\meta{language}$\ast$) Languages
to load with the \pkg{babel} package.
\item[\texttt{mathhub}] (\meta{directory}) MathHub folder
- to search for repositories.
- \item[\texttt{sms}] (\meta{boolean}) use \emph{persisted}
- mode (not yet implemented).
+ to search for repositories -- this is not necessary if the
+ |MATHHUB| system variable is set.
+ \item[\texttt{writesms}] (\meta{boolean}) with this package
+ option, \sTeX will write the contents of all external
+ modules imported via \stexcode"\importmodule" or \stexcode"\usemodule"
+ into a file \stexcode"\jobname.sms" (analogously to
+ the table of contents \stexcode".toc"-file).
+ \item[\texttt{usems}] (\meta{boolean}) subsequently tells
+ \sTeX to read the generated sms-file at the beginning of the
+ document. This allows for e.g. collaborating on documents
+ without all authors having to have all used archives and
+ modules available -- one author can load the modules
+ with \texttt{writesms}, and the rest can use the
+ the modules with \texttt{usesms}. Furthermore, the sms
+ file can be submitted alongside a \texttt{tex}-file,
+ effectively making it ``standalone''.
\item[\texttt{image}] (\meta{boolean}) passed on to
\pkg{tikzinput}.
\item[\texttt{debug}] (\meta{log-prefix}$\ast$) Logs debugging
information with the given prefixes to the terminal,
- or all if |all| is given.
-\end{description} \ No newline at end of file
+ or all if |all| is given. Largely irrelevant for the
+ majority of users.
+\end{description}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-document-structure.tex b/macros/latex/contrib/stex/doc/packages/stex-document-structure.tex
index 1c8fe97dac..f8d570ea5e 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-document-structure.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-document-structure.tex
@@ -1 +1,155 @@
-\textcolor{red}{TODO: document-structure documentation} \ No newline at end of file
+The \pkg{document-structure} package supplies an infrastructure for writing {\omdoc} documents in {\LaTeX}.
+This includes a simple structure sharing mechanism for \sTeX that allows to to move from
+a copy-and-paste document development model to a copy-and-reference model, which
+conserves space and simplifies document management. The augmented structure can be used
+by MKM systems for added-value services, either directly from the \sTeX sources, or
+after translation.
+
+
+ The \pkg{document-structure} package supplies macros and environments that allow to label document
+ fragments and to reference them later in the same document or in other documents. In
+ essence, this enhances the document-as-trees model to
+ documents-as-directed-acyclic-graphs (DAG) model. This structure can be used by MKM
+ systems for added-value services, either directly from the \sTeX sources, or after
+ translation. Currently, trans-document referencing provided by this package can only be
+ used in the \sTeX collection.
+
+ DAG models of documents allow to replace the ``Copy and Paste'' in the source document
+ with a label-and-reference model where document are shared in the document source and the
+ formatter does the copying during document formatting/presentation.
+
+The \pkg{document-structure} package accepts the following options:
+\begin{center}
+ \begin{tabular}{|l|p{10cm}|}\hline
+ \texttt{class=\meta{name}} & load \meta{name}|.cls| instead of |article.cls|\\\hline
+ \texttt{topsect=\meta{sect}} & The top-level sectioning level; the default for
+ \meta{sect} is \texttt{section}\\\hline
+ \end{tabular}
+\end{center}
+
+\begin{environment}{sfragment}
+ The structure of the document is given by nested |sfragment| environments. In the
+ {\LaTeX} route, the |sfragment| environment is flexibly mapped to sectioning commands,
+ inducing the proper sectioning level from the nesting of |sfragment|
+ environments. Correspondingly, the |sfragment| environment takes an optional key/value
+ argument for metadata followed by a regular argument for the (section) title of the
+ sfragment. The optional metadata argument has the keys |id| for an identifier,
+ |creators| and |contributors| for the Dublin Core metadata~\cite{DCMI:dmt03}. The option
+ |short| allows to give a short title for the generated section. If the title contains
+ semantic macros, they need to be protected by |\protect|\ednote{MK: still?}, and we need
+ to give the |loadmodules| key it needs no value. For instance we would have
+\begin{latexcode}
+\begin{smodule}{foo}
+ \symdef{bar}{B^a_r}
+ ...
+ \begin{sfragment}[id=sec.barderiv,loadmodules]
+ {Introducing $\protect\bar$ Derivations}
+\end{latexcode}
+
+\sTeX automatically computes the sectioning level, from the nesting of |sfragment|
+environments.
+\end{environment}
+
+But sometimes, we want to skip levels (e.g. to use a |\subsection*| as an introduction for
+a chapter).
+
+\begin{environment}{blindfragment}
+ Therefore the \pkg{document-structure} package provides a variant |blindfragment| that
+ does not produce markup, but increments the sectioning level and logically groups
+ document parts that belong together, but where traditional document markup relies on
+ convention rather than explicit markup. The |blindfragment| environment is useful
+ e.g. for creating frontmatter at the correct level. The example below shows a typical
+ setup for the outer document structure of a book with parts and chapters.
+
+\begin{latexcode}
+\begin{document}
+\begin{blindfragment}
+\begin{blindfragment}
+\begin{frontmatter}
+\maketitle\newpage
+\begin{sfragment}{Preface}
+... <<preface>> ...
+\end{sfragment}
+\clearpage\setcounter{tocdepth}{4}\tableofcontents\clearpage
+\end{frontmatter}
+\end{blindfragment}
+... <<introductory remarks>> ...
+\end{blindfragment}
+\begin{sfragment}{Introduction}
+... <<intro>> ...
+\end{sfragment}
+... <<more chapters>> ...
+\bibliographystyle{alpha}\bibliography{kwarc}
+\end{document}
+\end{latexcode}
+
+Here we use two levels of |blindfragment|:
+\begin{itemize}
+\item The outer one groups the introductory parts of the book (which we assume to have a
+ sectioning hierarchy topping at the part level). This |blindfragment| makes sure that
+ the introductory remarks become a ``chapter'' instead of a ``part''.
+\item The inner one groups the frontmatter\footnote{We shied away from redefining the
+ |frontmatter| to induce a blindfragment, but this may be the ``right'' way to go in
+ the future.} and makes the preface of the book a section-level construct.\ednote{MK:
+ We need a substitute for the ``Note that here the |display=flow| on the |sfragment|
+ environment prevents numbering as is traditional for prefaces.''}
+\end{itemize}
+\end{environment}
+
+\begin{function}{\skipfragment}
+ The |\skipfragment| ``skips an |sfragment|'', i.e. it just steps the respective sectioning
+ counter. This macro is useful, when we want to keep two documents in sync structurally,
+ so that section numbers match up: Any section that is left out in one becomes a
+ |\skipfragment|.
+\end{function}
+
+\begin{function}{\currentsectionlevel,\CurrentSectionLevel}
+ The |\currentsectionlevel| macro supplies the name of the current sectioning level,
+ e.g. ``chapter'', or ``subsection''. |\CurrentSectionLevel| is the capitalized
+ variant. They are useful to write something like ``In this |\currentsectionlevel|, we
+ will\ldots'' in an |sfragment| environment, where we do not know which sectioning level we
+ will end up.
+\end{function}
+
+\begin{function}{\prematurestop,\afterprematurestop}
+ For prematurely stopping the formatting of a document, \sTeX provides the
+ |\prematurestop| macro. It can be used everywhere in a document and ignores all input
+ after that -- backing out of the |sfragment| environment as needed. After that -- and
+ before the implicit |\end{document}| it calls the internal |\afterprematurestop|, which
+ can be customized to do additional cleanup or e.g. print the bibliography.
+
+ |\prematurestop| is useful when one has a driver file, e.g. for a course taught multiple
+ years and wants to generate course notes up to the current point in the lecture. Instead
+ of commenting out the remaining parts, one can just move the |\prematurestop| macro.
+ This is especially useful, if we need the rest of the file for processing, e.g. to
+ generate a theory graph of the whole course with the already-covered parts marked up as
+ an overview over the progress; see |import_graph.py| from the |lmhtools|
+ utilities~\cite{lmhtools:github:on}.
+\end{function}
+
+Text fragments and modules can be made more re-usable by the use of global variables. For
+instance, the admin section of a course can be made course-independent (and therefore
+re-usable) by using variables (actually token registers) |courseAcronym| and |courseTitle|
+instead of the text itself. The variables can then be set in the \sTeX preamble of the
+course notes file.
+
+\begin{function}{\setSGvar,\useSGvar}
+ |\setSGvar{|\meta{vname}|}{|\meta{text}|}| to set the global variable \meta{vname} to
+ \meta{text} and |\useSGvar{|\meta{vname}|}| to reference it.
+\end{function}
+
+\begin{function}{\ifSGvar}
+ With|\ifSGvar| we can test for the contents of a global variable: the macro call
+ |\ifSGvar{|\meta{vname}|}{|\meta{val}|}{|\meta{ctext}|}| tests the content of the global
+ variable \meta{vname}, only if (after expansion) it is equal to \meta{val}, the
+ conditional text \meta{ctext} is formatted.
+\end{function}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: article.cls topsect DCMI:dmt03 loadmodules lmhtools
+% LocalWords: prematurestop afterprematurestop import_graph.py STRlabel STRcopy vname
+% LocalWords: STRsemantics setSGvar ifSGvar ctext
diff --git a/macros/latex/contrib/stex/doc/packages/stex-features.tex b/macros/latex/contrib/stex/doc/packages/stex-features.tex
index e70bbaa0e8..b5ce5906d1 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-features.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-features.tex
@@ -1,18 +1,173 @@
+\begin{sfragment}{The \texttt{mathstructure} Environment}
+\begin{smodule}[ns=https://github.com/slatex/sTeX/doc]{MathStructures}
+ A common occurence in mathematics is bundling several
+ interrelated ``declarations'' together into \emph{structures}.
+ For example:
+ \begin{itemize}
+ \item A \emph{monoid} is a structure $\mathstruct{M,\circ,e}$
+ with $\circ:M\times M\to M$ and $e\in M$ such that...
+ \item A \emph{topological space} is a structure
+ $\mathstruct{X,\mathcal T}$ where $X$ is a set and
+ $\mathcal T$ is a topology on $X$
+ \item A \emph{partial order} is a structure $\mathstruct{S,\leq}$
+ where $\leq$ is a binary relation on $S$ such that...
+ \end{itemize}
+
+ This phenomenon is important and common enough to warrant special
+ support, in particular because it requires being able
+ to \emph{instantiate} such structures (or, rather,
+ structure \emph{signatures}) in order to talk about (concrete
+ or variable) \emph{particular} monoids, topological spaces,
+ partial orders etc.
+
+ \begin{environment}{mathstructure}
+ The \stexcode"mathstructure" environment allows us to do
+ exactly that. It behaves exactly like the
+ \stexcode"smodule" environment, but is itself only allowed
+ inside an \stexcode"smodule" environment, and allows
+ for instantiation later on.
+ \end{environment}
+
+ How this works is again best demonstrated by example:
+ \symdef{funtype}[args=ai]{#1 \comp\to #2}{##1 \comp\times ##2}
+ \symdef{fun}[args=bi]{#1 \comp\mapsto #2}
+ \symdef{set}{\comp{\texttt{Set}}}
+
+ \stexexample{%
+\begin{mathstructure}{monoid}
+ \symdef{universe}[type=\set]{\comp{U}}
+ \symdef{op}[
+ args=2,
+ type=\funtype{\universe,\universe}{\universe},
+ op=\circ
+ ]{#1 \comp{\circ} #2}
+ \symdef{unit}[type=\universe]{\comp{e}}
+\end{mathstructure}
+
+A \symname{monoid} is...
+ }
+ Note that the \stexcode"\symname{monoid}" is appropriately
+ highlighted and (depending on your pdf viewer)
+ shows a URI on hovering -- implying that the \stexcode"mathstructure"
+ environment has generated a \emph{symbol} |monoid| for us.
+ It has not generated a semantic macro though, since
+ we can not use the |monoid|-symbol \emph{directly}. Instead,
+ we can instantiate it, for example for integers:
+
+ \stexexample{%
+\symdef{Int}[type=\set]{\comp{\mathbb Z}}
+\symdef{addition}[
+ type=\funtype{\Int,\Int}{\Int},
+ args=2,
+ op=+
+]{##1 \comp{+} ##2}
+\symdef{zero}[type=\Int]{\comp{0}}
+
+$\mathstruct{\Int,\addition!,\zero}$ is a \symname{monoid}.
+ }
+
+ So far, we have not actually instantiated |monoid|, but now
+ that we have all the symbols to do so, we can:
+
+ \stexexample{%
+\instantiate{intmonoid}{monoid}{\mathbb{Z}_{+,0}}[
+ universe = Int ,
+ op = addition ,
+ unit = zero
+]
+
+$\intmonoid{universe}$, $\intmonoid{unit}$ and $\intmonoid{op}{a}{b}$.
+
+Also: $\intmonoid!$
+ }
+ \begin{function}{\instantiate}
+ So summarizing:
+ \stexcode"\instantiate" takes four arguments: The
+ (macro-)name of the instance, a key-value pair assigning
+ declarations in the corresponding \stexcode"mathstructure"
+ to symbols currently in scope, the name of the \stexcode"mathstructure"
+ to instantiate, and lastly a notation for the instance itself.
+
+ It then generates a semantic macro that takes as argument
+ the name of a declaration in the instantiated \stexcode"mathstructure"
+ and resolves it to the corresponding instance of that particular declaration.
+ \end{function}
+
+ \begin{mmtbox}
+ \stexcode"\instantiate" and \stexcode"mathstructure" make use of the
+ \emph{Theories-as-Types} paradigm (see \cite{MueRabKoh:tat18}):
+
+ \stexcode"mathstructure{<name>}" simply creates a nested theory with name
+ |<name>-structure|. The \emph{constant} |<name>| is defined as
+ |Mod(<name>-structure)| -- a \emph{dependent record type with manifest fields},
+ the fields of which are generated from (and correspond to) the constants in
+ |<name>-structure|.
+
+ \stexcode"\instantiate" generates a constant whose definiens is a record term of
+ type |Mod(<name>-structure)|, with the fields assigned based on the respective
+ key-value-list.
+ \end{mmtbox}
+
+ Notably, \stexcode"\instantiate" throws an error if not \emph{every}
+ declaration in the instantiated \stexcode"mathstructure" is being assigned.
+
+ You might consequently ask what the usefulness of \stexcode"mathstructure"
+ even is.
+
+ \begin{function}{\varinstantiate}
+ The answer is that we can also instantiate a
+ \stexcode"mathstructure" with a \emph{variable}.
+ The syntax of \stexcode"\varianstantiate" is equivalent
+ to that of \stexcode"\instantiate", but all of the key-value-pairs
+ are optional, and if not explicitly assigned (to a symbol \emph{or}
+ a variable declared with \stexcode"\vardef") inherit their notation
+ from the one in the \stexcode"mathstructure" environment.
+ \end{function}
+
+ This allows us to do things like:
+
+ \stexexample{%
+\varinstantiate{varM}{monoid}{M}
+
+A \symname{monoid} is a structure
+$\varM!:=\mathstruct{\varM{universe},\varM{op}!,\varM{unit}}$
+such that
+$\varM{op}!:\funtype{\varM{universe},\varM{universe}}{\varM{universe}}$ ...
+}
+
+and
+
+\stexexample{%
+ \varinstantiate{varMb}{monoid}{M_2}[universe = Int]
+
+ Let $\varMb!:=\mathstruct{\varMb{universe},\varMb{op}!,\varMb{unit}}$
+be a \symname{monoid} on $\Int$ ...
+ }
+
+ We will return to these two example later, when we also know
+ how to handle the \emph{axioms} of a monoid.
+\end{smodule}
+\end{sfragment}
+
+\begin{sfragment}{The \texttt{copymodule} Environment}
+
+ \textcolor{red}{TODO: explain}
+
Given modules:
-\stexexample{
- \begin{smodule}{magma}
- \symdef{universe}{\comp{\mathcal U}}
- \symdef{operation}[args=2,op=\circ]{#1 \comp\circ #2}
- \end{smodule}
- \begin{smodule}{monoid}
- \importmodule{magma}
- \symdef{unit}{\comp e}
- \end{smodule}
- \begin{smodule}{group}
- \importmodule{monoid}
- \symdef{inverse}[args=1]{{#1}^{\comp{-1}}}
- \end{smodule}
+\stexexample{%
+\begin{smodule}{magma}
+ \symdef{universe}{\comp{\mathcal U}}
+ \symdef{operation}[args=2,op=\circ]{#1 \comp\circ #2}
+\end{smodule}
+\begin{smodule}{monoid}
+ \importmodule{magma}
+ \symdef{unit}{\comp e}
+\end{smodule}
+\begin{smodule}{group}
+ \importmodule{monoid}
+ \symdef{inverse}[args=1]{{#1}^{\comp{-1}}}
+\end{smodule}
}
We can form a module for \emph{rings} by ``cloning''
@@ -20,48 +175,64 @@ an instance of |group| (for addition) and |monoid| (for multiplication),
respectively, and ``glueing them together'' to ensure they share the
same universe:
-\stexexample{
- \begin{smodule}{ring}
- \begin{copymodule}{group}{addition}
- \renamedecl[name=universe]{universe}{runiverse}
- \renamedecl[name=plus]{operation}{rplus}
- \renamedecl[name=zero]{unit}{rzero}
- \renamedecl[name=uminus]{inverse}{ruminus}
- \end{copymodule}
- \notation*{rplus}[plus,op=+,prec=60]{#1 \comp+ #2}
- %\setnotation{rplus}{plus}
- \notation*{rzero}[zero]{\comp0}
- %\setnotation{rzero}{zero}
- \notation*{ruminus}[uminus,op=-]{\comp- #1}
- %\setnotation{ruminus}{uminus}
- \begin{copymodule}{monoid}{multiplication}
- \assign{universe}{\runiverse}
- \renamedecl[name=times]{operation}{rtimes}
- \renamedecl[name=one]{unit}{rone}
- \end{copymodule}
- \notation*{rtimes}[cdot,op=\cdot,prec=50]{#1 \comp\cdot #2}
- %\setnotation{rtimes}{cdot}
- \notation*{rone}[one]{\comp1}
- %\setnotation{rone}{one}
- Test: $\rtimes a{\rplus c{\rtimes de}}$
- \end{smodule}
+\stexexample{%
+\begin{smodule}{ring}
+ \begin{copymodule}{group}{addition}
+ \renamedecl[name=universe]{universe}{runiverse}
+ \renamedecl[name=plus]{operation}{rplus}
+ \renamedecl[name=zero]{unit}{rzero}
+ \renamedecl[name=uminus]{inverse}{ruminus}
+ \end{copymodule}
+ \notation*{rplus}[plus,op=+,prec=60]{#1 \comp+ #2}
+%\setnotation{rplus}{plus}
+ \notation*{rzero}[zero]{\comp0}
+%\setnotation{rzero}{zero}
+ \notation*{ruminus}[uminus,op=-]{\comp- #1}
+%\setnotation{ruminus}{uminus}
+ \begin{copymodule}{monoid}{multiplication}
+ \assign{universe}{\runiverse}
+ \renamedecl[name=times]{operation}{rtimes}
+ \renamedecl[name=one]{unit}{rone}
+ \end{copymodule}
+ \notation*{rtimes}[cdot,op=\cdot,prec=50]{#1 \comp\cdot #2}
+%\setnotation{rtimes}{cdot}
+ \notation*{rone}[one]{\comp1}
+%\setnotation{rone}{one}
+ Test: $\rtimes a{\rplus c{\rtimes de}}$
+\end{smodule}
}
\textcolor{red}{TODO: explain donotclone}
+
+\end{sfragment}
+
+\begin{sfragment}{The \texttt{interpretmodule} Environment}
+
+ \textcolor{red}{TODO: explain}
+
+\stexexample{%
+\begin{smodule}{int}
+ \symdef{Integers}{\comp{\mathbb Z}}
+ \symdef{plus}[args=2,op=+]{#1 \comp+ #2}
+ \symdef{zero}{\comp0}
+ \symdef{uminus}[args=1,op=-]{\comp-#1}
+
+ \begin{interpretmodule}{group}{intisgroup}
+ \assign{universe}{\Integers}
+ \assign{operation}{\plus!}
+ \assign{unit}{\zero}
+ \assign{inverse}{\uminus!}
+ \end{interpretmodule}
+\end{smodule}
+}
+
+\end{sfragment}
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
-\stexexample{
- \begin{smodule}{int}
- \symdef{Integers}{\comp{\mathbb Z}}
- \symdef{plus}[args=2,op=+]{#1 \comp+ #2}
- \symdef{zero}{\comp0}
- \symdef{uminus}[args=1,op=-]{\comp-#1}
-
- \begin{interpretmodule}{group}{intisgroup}
- \assign{universe}{\Integers}
- \assign{operation}{\plus!}
- \assign{unit}{\zero}
- \assign{inverse}{\uminus!}
- \end{interpretmodule}
- \end{smodule}
-} \ No newline at end of file
+% LocalWords: circ,e intmonoid MueRabKoh:tat18 varinstantiate 2,op runiverse rplus prec
+% LocalWords: rzero uminus ruminus plus,op uminus,op rtimes cdot,op cdot,prec 1,op
+% LocalWords: donotclone intisgroup
diff --git a/macros/latex/contrib/stex/doc/packages/stex-hwexam.tex b/macros/latex/contrib/stex/doc/packages/stex-hwexam.tex
index 5f1758b015..5aced96e66 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-hwexam.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-hwexam.tex
@@ -1 +1,84 @@
-\textcolor{red}{TODO: hwexam documentation} \ No newline at end of file
+
+The \pkg{hwexam} package and class supplies an infrastructure that allows to format
+nice-looking assignment sheets by simply including problems from problem files marked up
+with the \pkg{roblem} package. It is designed to be compatible with |problems.sty|, and
+inherits some of the functionality.
+
+\begin{variable}{solutions,notes,hints,gnotes,pts,min}
+ The \pkg{wexam} package and class take the options |solutions|, |notes|, |hints|,
+ |gnotes|, |pts|, |min|, and |boxed| that are just passed on to the \pkg{problems}
+ package (cf. its documentation for a description of the intended behavior).
+\end{variable}
+
+This package supplies the \DescribeEnv{assignment}|assignment| environment that groups
+problems into assignment sheets. It takes an optional KeyVal argument with the keys
+\DescribeMacro{number}|number| (for the assignment number; if none is given, 1 is
+assumed as the default or --- in multi-assignment documents --- the ordinal of the
+|assignment| environment), \DescribeMacro{title}|title| (for the assignment title; this
+is referenced in the title of the assignment sheet), \DescribeMacro{type}|type| (for the
+assignment type; e.g. ``quiz'', or ``homework''), \DescribeMacro{given}|given| (for the
+date the assignment was given), and \DescribeMacro{due}|due| (for the date the
+assignment is due).
+
+Furthermore, the \pkg{hwexam} package takes the option
+\DescribeMacro{multiple}|multiple| that allows to combine multiple assignment sheets
+into a compound document (the assignment sheets are treated as section, there is a table
+of contents, etc.).
+
+Finally, there is the option \DescribeMacro{test}|test| that modifies the behavior to
+facilitate formatting tests. Only in |test| mode, the macros |\testspace|,
+|\testnewpage|, and |\testemptypage| have an effect: they generate space for the
+students to solve the given problems. Thus they can be left in the {\LaTeX} source.
+
+\DescribeMacro{\testspace}|\testspace| takes an argument that expands to a dimension,
+and leaves vertical space accordingly. \DescribeMacro{\testnewpage}|\testnewpage| makes
+a new page in |test| mode, and \DescribeMacro{\testemptypage}|\testemptypage| generates
+an empty page with the cautionary message that this page was intentionally left empty.
+
+Finally, the \DescribeEnv{testheading}|\testheading| takes an optional keyword argument
+where the keys \DescribeMacro{duration}|duration| specifies a string that specifies the
+duration of the test, \DescribeMacro{min}|min| specifies the equivalent in number of
+minutes, and \DescribeMacro{reqpts}|reqpts| the points that are required for a perfect
+grade.
+
+\begin{latexcode}
+\title{320101 General Computer Science (Fall 2010)}
+\begin{testheading}[duration=one hour,min=60,reqpts=27]
+ Good luck to all students!
+\end{testheading}
+\end{latexcode}
+
+Will result in
+\begin{center}
+ \begin{minipage}{.9\textwidth}
+\makeatletter
+\@problem{1.1}{4}{10}
+\@problem{2.1}{4}{8}
+\@problem{2.2}{6}{10}
+\@problem{2.3}{6}{10}
+\@problem{3.1}{4}{8}
+\@problem{3.2}{4}{8}
+\@problem{3.3}{2}{4}
+\makeatother
+\title{320101 General Computer Science (Fall 2010)}
+\begin{testheading}[duration=one hour,min=60,reqpts=27]
+ good luck
+\end{testheading}
+\end{minipage}
+\end{center}
+\ednote{MK: The first three ``problems'' come from the stex examples above, how do we get rid
+ of this?}
+
+\begin{function}{\inputassignment}
+ The |\inputassignment| macro can be used to input an assignment from another file. It
+ takes an optional KeyVal argument and a second argument which is a path to the file
+ containing the problem (the macro assumes that there is only one |assignment|
+ environment in the included file). The keys |number|, |title|, |type|, |given|, and
+ |due| are just as for the |assignment| environment and (if given) overwrite the ones
+ specified in the |assignment| environment in the included file.
+\end{function}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-inheritance.tex b/macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
index 41631f94d2..be7c4e68ec 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-inheritance.tex
@@ -1 +1,131 @@
-\textcolor{red}{TODO: inheritance documentation} \ No newline at end of file
+\begin{sfragment}{Simple Inheritance and Namespaces}
+
+ \begin{function}{\importmodule,\usemodule}
+ \stexcode"\importmodule[Some/Archive]{path?ModuleName}" is only allowed within an
+ \stexcode"smodule"-environment and makes the symbols declared in |ModuleName|
+ available therein. Additionally the symbols of |ModuleName| will be exported if the
+ current module is imported somewhere else via \stexcode"\importmodule".
+
+ \stexcode"\usemodule" behaves the same way, but without exporting the content of the
+ used module.
+ \end{function}
+
+ It is worth going into some detail how exactly \stexcode"\importmodule"
+ and \stexcode"\usemodule" resolve their arguments to find
+ the desired module -- which is closely related to the
+ \emph{namespace} generated for a module, that is used to generate
+ its URI.
+
+ \begin{dangerbox}
+ Ideally, \sTeX would use arbitrary URIs for modules, with no
+ forced relationships between the \emph{logical} namespace
+ of a module and the \emph{physical} location of the file
+ declaring the module -- like \mmt does things.
+
+ Unfortunately, \TeX\ only provides very restricted access to
+ the file system, so we are forced to generate namespaces
+ systematically in such a way that they reflect the physical
+ location of the associated files, so that \sTeX can resolve
+ them accordingly. Largely, users need not concern themselves
+ with namespaces at all, but for completenesses sake, we describe
+ how they are constructed:
+
+ \begin{itemize}
+ \item If \stexcode"\begin{smodule}{Foo}"
+ \iffalse\end{smodule}\fi occurs in a file
+ |/path/to/file/Foo[.|\meta{lang}|].tex| which does not belong
+ to an archive, the namespace is |file://path/to/file|.
+ \item If the same statement occurs in a file
+ |/path/to/file/bar[.|\meta{lang}|].tex|, the namespace is
+ |file://path/to/file/bar|.
+ \end{itemize}
+
+ In other words: outside of archives, the namespace corresponds to
+ the file URI with the filename dropped iff it is equal to the
+ module name, and ignoring the (optional) language suffix.
+
+ If the current file is in an archive, the procedure is the same
+ except that the initial segment of the file path up to the archive's
+ |source|-folder is replaced by the archive's namespace URI.
+\end{dangerbox}
+
+\begin{dangerbox}
+ Conversely, here is how namespaces/URIs and file paths are computed
+ in import statements, examplary \stexcode"\importmodule":
+
+ \begin{itemize}
+ \item \stexcode"\importmodule{Foo}" outside of an archive refers
+ to module |Foo| in the current namespace. Consequently, |Foo|
+ must have been declared earlier in the same document or, if not,
+ in a file |Foo[.|\meta{lang}|].tex| in the same directory.
+ \item The same statement \emph{within} an archive refers to either
+ the module |Foo| declared earlier in the same document, or
+ otherwise to the module |Foo| in the archive's top-level namespace.
+ In the latter case, is has to be declared in a file |Foo[.|\meta{lang}|].tex|
+ directly in the archive's |source|-folder.
+ \item Similarly, in \stexcode"\importmodule{some/path?Foo}" the path
+ |some/path| refers to either the sub-directory and relative
+ namespace path of the current directory and namespace outside of an archive,
+ or relative to the current archive's top-level namespace and |source|-folder,
+ respectively.
+
+ The module |Foo| must either be declared in the file
+ \meta{top-directory}|/some/path/Foo[.|\meta{lang}|].tex|, or in
+ \meta{top-directory}|/some/path[.|\meta{lang}|].tex| (which are
+ checked in that order).
+ \item Similarly, \stexcode"\importmodule[Some/Archive]{some/path?Foo}"
+ is resolved like the previous cases, but relative to the archive
+ |Some/Archive| in the mathhub-directory.
+ \item Finally, \stexcode"\importmodule{full://uri?Foo}" naturally refers to the
+ module |Foo| in the namespace |full://uri|. Since the file this module
+ is declared in can not be determined directly from the URI, the module
+ must be in memory already, e.g. by being referenced earlier in the
+ same document.
+
+ Since this is less compatible with a modular development, using full
+ URIs directly is strongly discouraged, unless the module is delared in
+ the current file directly.
+ \end{itemize}
+
+ \end{dangerbox}
+
+ \begin{function}{\STEXexport}
+ \stexcode"\importmodule" and \stexcode"\usemodule" import all symbols, notations,
+ semantic macros and (recursively) \stexcode"\importmodule"s. If you want to
+ additionally export e.g. convenience macros and other (\sTeX) code from a module, you
+ can use the command \stexcode"\STEXexport{<code>}" in your module. Then |<code>| is
+ executed (both immediately and) every time the current module is opened via
+ \stexcode"\importmodule" or \stexcode"\usemodule".
+ \end{function}
+
+ \begin{dangerbox}
+ For persistency reasons, everything in an \stexcode"\STEXexport"
+ is digested by \TeX in the \LaTeX3-category code scheme.
+ This means that the characters \stexcode"_" and \stexcode":"
+ are considered \emph{letters} and valid parts of
+ control sequence names, and space characters are ignored entirely.
+ For spaces, use the character \stexcode"~" instead, and
+ keep in mind, that if you want to use subscripts, you
+ should use \stexcode"\c_math_subscript_token" instead
+ of \stexcode"_"!
+
+
+ Also note, that \stexcode"\newcommand" defines macros \emph{globally}
+ and throws an error if the macro already exists,
+ potentially leading to low-level \LaTeX\xspace errors if
+ we put a \stexcode"\newcommand" in an \stexcode"\STEXexport"
+ and the |<code>| is executed more than once in a document
+ -- which can happen easily.
+
+ A safer alternative is to use macro definition principles,
+ that are safe to use even if the macro being defined already
+ exists, and ideally are local to the current \TeX\xspace group,
+ such as \stexcode"\def" or \stexcode"\let".
+ \end{dangerbox}
+
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-mathhub.tex b/macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
index 4b05134e70..fb872acfba 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-mathhub.tex
@@ -1,5 +1,6 @@
\begin{sfragment}{The Local MathHub-Directory}
- |\usemodule|, |\importmodule|, |\inputref| etc. allow for
+ \stexcode"\usemodule", \stexcode"\importmodule",
+ \stexcode"\inputref" etc. allow for
including content modularly without having to specify absolute
paths, which would differ between users and machines. Instead,
\sTeX uses \emph{archives} that determine the global
@@ -7,30 +8,30 @@
for \sTeX to find content referenced via such URIs.
All \sTeX archives need to exist in the local |MathHub|-directory.
- \sTeX knows where this folder is via one of three means:
+ \sTeX knows where this folder is via one of four means:
\begin{enumerate}
- \item If the \sTeX package is loaded with the option
- |mathhub=/path/to/mathhub|, then \sTeX will consider
- |/path/to/mathhub| as the local |MathHub|-directory.
- \item If the |mathhub| package option is \emph{not}
- set, but the macro |\mathhub| exists when the
- \sTeX-package is loaded, then this macro is
- assumed to point to the local |MathHub|-directory; i.e.
- |\def\mathhub{/path/to/mathhub}\usepackage{stex}|
- will set the |MathHub|-directory as |path/to/mathhub|.
- \item Otherwise, \sTeX will attempt to retrieve the
- system variable |MATHHUB|, assuming it will
- point to the local |MathHub|-directory. Since this
- variant needs setting up only \emph{once} and is
- machine-specific (rather than defined in tex code),
- it is compatible with collaborating and sharing tex
- content, and hence recommended.
+ \item If the \sTeX package is loaded with the option |mathhub=/path/to/mathhub|, then
+ \sTeX will consider |/path/to/mathhub| as the local |MathHub|-directory.
+ \item If the |mathhub| package option is \emph{not} set, but the macro |\mathhub|
+ exists when the \sTeX-package is loaded, then this macro is assumed to point to the
+ local |MathHub|-directory; i.e.
+ \stexcode"\def\mathhub{/path/to/mathhub}\usepackage{stex}" will set the
+ |MathHub|-directory as |path/to/mathhub|.
+ \item Otherwise, \sTeX will attempt to retrieve the system variable |MATHHUB|,
+ assuming it will point to the local |MathHub|-directory. Since this variant needs
+ setting up only \emph{once} and is machine-specific (rather than defined in tex
+ code), it is compatible with collaborating and sharing tex content, and hence
+ recommended.
+ \item Finally, if all else fails, \sTeX will look for a file
+ |~/.stex/mathhub.path|. If this file exists, \sTeX will assume that it contains the
+ path to the local |MathHub|-directory. This method is recommended on systems where
+ it is difficult to set environment variables.
\end{enumerate}
\end{sfragment}
\begin{sfragment}{The Structure of \sTeX Archives}
- An \sTeX archive |group/name| needs to be stored in the
+ An \sTeX archive |group/name| is stored in the
directory |/path/to/mathhub/group/name|; e.g. assuming your
local |MathHub|-directory is set as |/user/foo/MathHub|, then
in order for the |smglom/calculus|-archive to be found by the
@@ -43,19 +44,41 @@
|MANIFEST.MF|, the content of which we will consider shortly
\end{itemize}
An additional |lib|-directory is optional, and is where \sTeX will
- look for files included via |\libinput|.
+ look for files included via \stexcode"\libinput".
Additionally a \emph{group} of archives |group/name| may have
an additional archive |group/meta-inf|. If this |meta-inf|-archive
- has a |/lib|-subdirectory, it too will be searched by |\libinput|
+ has a |/lib|-subdirectory, it too will be searched by \stexcode"\libinput"
from all tex files in any archive in the |group/*|-group.
+
+ \paragraph{} We recommend the following additional directory structure in the
+ |source|-folder of an \sTeX archive:
+ \begin{itemize}
+ \item |/source/mod/| -- individual \sTeX modules, containing
+ symbol declarations, notations, and
+ \stexcode"\begin{sparagraph}[type=symdoc,for=...]"
+ environments for ``encyclopaedic'' symbol documentations
+ \iffalse\end{sparagraph}\fi
+ \item |/source/def/| -- definitions
+ \item |/source/ex/| -- examples
+ \item |/source/thm/| -- theorems, lemmata and proofs; preferably
+ proofs in separate files to allow for multiple proofs for the
+ same statement
+ \item |/source/snip/| -- individual text snippets such as remarks,
+ explanations etc.
+ \item |/source/frag/| -- individual document fragments,
+ ideally only \stexcode"\inputref"ing snippets, definitions,
+ examples etc. in some desirable order
+ \item |/source/tikz/| -- tikz images, as individual |.tex|-files
+ \item |/source/PIC/| -- image files.
+ \end{itemize}
+
\end{sfragment}
\begin{sfragment}{MANIFEST.MF-Files}
- The |MANIFEST.MF| in the |META-INF|-directory consists of
- key-value-pairs, instructing \sTeX (and associated software)
- of various properties of an archive. For example,
- the |MANIFEST.MF| of the |smglom/calculus|-archive looks like this:
+ The |MANIFEST.MF| in the |META-INF|-directory consists of key-value-pairs, informing
+ \sTeX (and associated software) of various properties of an archive. For example, the
+ |MANIFEST.MF| of the |smglom/calculus|-archive looks like this:
\begin{framed}
\begin{verbatim}
@@ -86,4 +109,95 @@
e.g. for |lmh install|.
\end{itemize}
-\end{sfragment} \ No newline at end of file
+\end{sfragment}
+
+\begin{sfragment}{Using Files in \sTeX Archives Directly}
+ Several macros provided by \sTeX allow for directly including
+ files in repositories. These are:
+ \begin{function}{\mhinput}
+ \stexcode"\mhinput[Some/Archive]{some/file}" directly
+ inputs the file |some/file| in the |source|-folder of
+ |Some/Archive|.
+ \end{function}
+ \begin{function}{\inputref}
+ \stexcode"\inputref[Some/Archive]{some/file}" behaves like \stexcode"\mhinput", but
+ wraps the input in a |\begingroup ... \endgroup|. When converting to |xhtml|, the
+ file is not input at all, and instead an |html|-annotation is inserted that
+ references the file, e.g. for lazy loading.
+
+ In the majority of practical cases \stexcode"\inputref" is likely to be preferred
+ over \stexcode"\mhinput" because it leads to less duplication in the generated
+ |xhtml|.
+ \end{function}
+ \begin{function}{\ifinput}
+ Both \stexcode"\mhinput" and \stexcode"\inputref"
+ set \stexcode"\ifinput" to ``true'' during input. This allows
+ for selectively including e.g. bibliographies only if the
+ current file is not being currently included in a larger document.
+ \end{function}
+ \begin{function}{\addmhbibresource}
+ \stexcode"\addmhbibresource[Some/Archive]{some/file}" searches for a file like
+ \stexcode"\mhinput" does, but calls |\addbibresource| to the result and looks for
+ the file in the archive root directory directly, rather than the |source|
+ directory. Typical invocations are
+ \begin{itemize}
+ \item |\addmhbibresource{lib/refs.bib}|, which specifies a bibliography in the |lib|
+ folder in the local archive or
+ \item |\addmhbibresource[HW/meta-inf]{lib/refs.bib}| in another.
+ \end{itemize}
+ \end{function}
+ \begin{function}{\libinput}
+ \stexcode"\libinput{some/file}"
+ searches for a file |some/file| in
+ \begin{itemize}
+ \item the |lib|-directory of the current archive, and
+ \item the |lib|-directory of a |meta-inf|-archive in
+ (any of) the archive groups containing the current archive
+ \end{itemize}
+ and include all found files in reverse order;
+ e.g. \stexcode"\libinput{preamble}" in a |.tex|-file in
+ |smglom/calculus| will \emph{first} input |.../smglom/meta-inf/lib/preamble.tex|
+ and then |../smglom/calculus/lib/preamble.tex|.
+
+ \stexcode|\libinput| will throw an error if \emph{no} candidate for |some/file|
+ is found.
+ \end{function}
+ \begin{function}{\libusepackage}
+ \stexcode"\libusepackage[package-options]{some/file}" searches for a file
+ |some/file.sty| in the same way that \stexcode"\libinput" does, but will
+ call\\
+ |\usepackage[package-options]{path/to/some/file}| instead of |\input|.
+
+ \stexcode|\libusepackage| throws an error if not \emph{exactly one} candidate for
+ |some/file| is found.
+ \end{function}
+
+ \begin{remark}
+ A good practice is to have individual \sTeX fragments
+ follow basically this document frame:
+ \begin{latexcode}[gobble=12]
+ \documentclass{stex}
+ \libinput{preamble}
+ \begin{document}
+ ...
+ \ifinputref \else \libinput{postamble} \fi
+ \end{document}
+ \end{latexcode}
+ Then the |preamble.tex| files can take care of loading the generally required
+ packages, setting presentation customizations etc. (per archive or archive group
+ or both), and |postamble.tex| can e.g. print the bibliography, index etc.
+
+ \stexcode|\libusepackage| is particularly useful in |preamble.tex| when we want to
+ use custom packages that are not part of {\TeX}Live. In this case we commit the
+ respective packages in one of the |lib| folders and use \stexcode|\libusepackage|
+ to load them.
+ \end{remark}
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+%%% LocalWords: mathhub symdoc,for lmh subdirs arithmetics,smglom sets,smglom mv,smglom
+%%% LocalWords: linear-algebra,smglom
diff --git a/macros/latex/contrib/stex/doc/packages/stex-metatheory.tex b/macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
index 1585ba504c..4feb646eb9 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
@@ -1 +1,30 @@
-\textcolor{red}{TODO: metatheory documentation} \ No newline at end of file
+The \pkg{stex-metatheory} package contains \sTeX symbols so ubiquitous, that it is
+virtually impossible to describe any flexiformal content without them, or that are
+required to annotate even the most primitive symbols with meaningful
+(foundation-independent) ``type''-annotations, or required for basic structuring
+principles (theorems, definitions). As such, it serves as the default meta theory for any
+\sTeX module.
+
+We can also see the \pkg{stex-metatheory} as a foundation of mathematics in the sense of
+\cite{rabe:future:15}, albeit an informal one (the ones discussed there are all formal
+foundations). The state of the \pkg{stex-metatheory} is necessarily incomplete, and will
+stay so for a long while: It arises as a collection of empirically useful symbols that are
+collected as more and more mathematics are encoded in \sTeX and are classified as
+foundational.
+
+Formal foundations should ideally instantiate these symbols with their formal counterparts,
+e.g. |isa| corresponds to a typing operation in typed setting, or the $\in$-operator in
+set-theoretic contexts; |bind| corresponds to a universal quantifier in ($n$th-order)
+logic, or a $\Pi$ in dependent type theories.
+
+We make this theory part of the \sTeX collection due to the obiquity
+of the symbols involved. Note however, that the metatheory is
+for all practical purposes a ``normal'' \sTeX module, and the
+symbols contained ``normal'' \sTeX symbols.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: stex-metatheory th-order
diff --git a/macros/latex/contrib/stex/doc/packages/stex-modules.tex b/macros/latex/contrib/stex/doc/packages/stex-modules.tex
index c067f28a1c..424c2200e8 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-modules.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-modules.tex
@@ -1 +1,73 @@
-\textcolor{red}{TODO: modules documentation} \ No newline at end of file
+\begin{sfragment}{The \texttt{smodule}-Environment}
+ \begin{environment}{smodule}
+ A new module is declared using the basic syntax
+ \begin{center}
+ \stexcode"\begin{smodule}[options]{ModuleName}...\end{smodule}".
+ \end{center}
+ A module is required to declare any new formal content such as symbols or
+ notations (but not variables, which may be introduced anywhere).
+
+ The |smodule|-environment takes several keyword arguments, all of which are
+ optional:
+
+ \begin{itemize}
+ \item[|title|] (\meta{token list}) to display in customizations.
+ \item[|type|] (\meta{string}$\ast$) for use in customizations.
+ \item[|deprecate|] (\meta{module}) if set, will throw a warning
+ when loaded, urging to use \meta{module} instead.
+ \item[|id|] (\meta{string}) for cross-referencing.
+ \item[|ns|] (\meta{URI}) the namespace to use. \emph{Should not be used,
+ unless you know precisely what you're doing}. If not explicitly set, is
+ computed using \cs{stex_modules_current_namespace:}.
+ \item[|lang|] (\meta{language}) if not set, computed from the current file name (e.g. |foo.en.tex|).
+ \item[|sig|] (\meta{language}) if the current file is a translation of a file with the same base name
+ but a different language suffix, setting |sig=<lang>| will preload the module
+ from that language file. This helps ensuring that the (formal) content of both modules
+ is (almost) identical across languages and avoids duplication.
+ \item[|creators|] (\meta{string}$\ast$) names of the creators.
+ \item[|contributors|] (\meta{string}$\ast$) names of contributors.
+ \item[|srccite|] (\meta{string}) a source citation for the content of this module.
+ \end{itemize}
+ \end{environment}
+
+ \begin{mmtbox}
+ An \sTeX module corresponds to an \mmt/\omdoc \emph{theory}.
+ As such it gets assigned a module URI (\emph{universal resource identifier})
+ of the form |<namespace>?<module-name>|.
+ \end{mmtbox}
+
+ By default, opening a module will produce no output whatsoever,
+ e.g.:
+ \stexexample{%
+\begin{smodule}[title={This is Some Module}]{SomeModule}
+ Hello World
+\end{smodule}
+ }
+
+ \begin{function}{\stexpatchmodule}
+ We can customize this behavior either for all modules or
+ only for modules with a specific |type| using the command
+ \stexcode"\stexpatchmodule[optional-type]{begin-code}{end-code}".
+ Some optional parameters are then available in |\smodule*|-macros,
+ specifically |\smoduletitle|, |\smoduletype| and |\smoduleid|.
+ \end{function}
+ For example:
+
+ \stexexample{%
+\stexpatchmodule[display]
+ {\textbf{Module (\smoduletitle)}\par}
+ {\par\noindent\textbf{End of Module (\smoduletitle)}}
+
+\begin{smodule}[type=display,title={Some New Module}]{SomeModule2}
+ Hello World
+\end{smodule}
+ }
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: srccite mmtbox stexexample stexpatchmodule smoduletitle smoduleid
+% LocalWords: display,title
diff --git a/macros/latex/contrib/stex/doc/packages/stex-problem.tex b/macros/latex/contrib/stex/doc/packages/stex-problem.tex
index 1ce5aaa3a2..a90c36412d 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-problem.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-problem.tex
@@ -1 +1,151 @@
-\textcolor{red}{TODO: problem documentation} \ No newline at end of file
+The \pkg{problem} package supplies an infrastructure that allows specify problem. Problems
+are text fragments that come with auxiliary functions: hints, notes, and
+solutions\footnote{for the moment multiple choice problems are not supported, but may
+ well be in a future version}. Furthermore, we can specify how long the solution to a
+given problem is estimated to take and how many points will be awarded for a perfect
+solution.
+
+Finally, the \pkg{problem} package facilitates the management of problems in small files,
+so that problems can be re-used in multiple environment.
+
+\begin{function}{solutions,notes,hints,gnotes,pts,min,boxed,test}
+ The \pkg{problem} package takes the options |solutions| (should solutions be output?),
+ |notes| (should the problem notes be presented?), |hints| (do we give the hints?),
+ |gnotes| (do we show grading notes?), |pts| (do we display the points awarded for
+ solving the problem?), |min| (do we display the estimated minutes for problem
+ soling). If theses are specified, then the corresponding auxiliary parts of the problems
+ are output, otherwise, they remain invisible.
+
+ The |boxed| option specifies that problems should be formatted in framed boxes so that
+ they are more visible in the text. Finally, the |test| option signifies that we are in a
+ test situation, so this option does not show the solutions (of course), but leaves space
+ for the students to solve them.
+\end{function}
+
+\begin{environment}{problem}
+ The main environment provided by the \pkg{problem}package is (surprise surprise) the
+ |problem| environment. It is used to mark up problems and exercises. The environment
+ takes an optional KeyVal argument with the keys |id| as an identifier that can be
+ reference later, |pts| for the points to be gained from this exercise in homework or
+ quiz situations, |min| for the estimated minutes needed to solve the problem, and
+ finally |title| for an informative title of the problem.
+\end{environment}
+
+\stexexample{%
+\documentclass{article}
+\usepackage[solutions,hints,pts,min]{problem}
+\begin{document}
+ \begin{sproblem}[id=elefants,pts=10,min=2,title=Fitting Elefants]
+ How many Elefants can you fit into a Volkswagen beetle?
+ \begin{hint}
+ Think positively, this is simple!
+ \end{hint}
+ \begin{exnote}
+ Justify your answer
+ \end{exnote}
+\begin{solution}[for=elefants,height=3cm]
+ Four, two in the front seats, and two in the back.
+ \begin{gnote}
+ if they do not give the justification deduct 5 pts
+ \end{gnote}
+\end{solution}
+\end{sproblem}
+\end{document}
+}
+
+\begin{environment}{solution}
+ The |solution| environment can be to specify a solution to a problem. If the package
+ option |solutions| is set or |\solutionstrue| is set in the text, then the solution will
+ be presented in the output. The |solution| environment takes an optional KeyVal argument
+ with the keys |id| for an identifier that can be reference |for| to specify which
+ problem this is a solution for, and |height| that allows to specify the amount of space
+ to be left in test situations (i.e. if the |test| option is set in the |\usepackage|
+ statement).
+\end{environment}
+
+\begin{environment}{hint,exnote,gnote}
+ The |hint| and |exnote| environments can be used in a |problem| environment to give
+ hints and to make notes that elaborate certain aspects of the problem. The |gnote|
+ (grading notes) environment can be used to document situtations that may arise in
+ grading.
+\end{environment}
+
+\begin{function}{\startsolutions,\stopsolutions}
+ Sometimes we would like to locally override the |solutions| option we have given to the
+ package. To turn on solutions we use the |\startsolutions|, to turn them off,
+ |\stopsolutions|. These two can be used at any point in the documents.
+\end{function}
+
+\begin{function}{\ifsolutions}
+ Also, sometimes, we want content (e.g. in an exam with master solutions) conditional on
+ whether solutions are shown. This can be done with the |\ifsolutions| conditional.
+\end{function}
+
+\begin{environment}{mcb}
+ Multiple choice blocks can be formatted using the |mcb| environment, in which single
+ choices are marked up with |\mcc| macro.
+\end{environment}
+
+\begin{function}{\mcc}
+ |\mcc[|\meta{keyvals}|]{|\meta{text}|}| takes an optional key/value argument
+ \meta{keyvals} for choice metadata and a required argument \meta{text} for the proposed
+ answer text. The following keys are supported
+ \begin{itemize}
+ \item |T| for true answers, |F| for false ones,
+ \item |Ttext| the verdict for true answers, |Ftext| for false ones, and
+ \item |feedback| for a short feedback text given to the student.
+ \end{itemize}
+\end{function}
+
+If we start the solutions, then we get
+
+\stexexample{%
+\startsolutions
+\begin{sproblem}[title=Functions,name=functions1]
+ What is the keyword to introduce a function definition in python?
+ \begin{mcb}
+ \mcc[T]{def}
+ \mcc[F,feedback=that is for C and C++]{function}
+ \mcc[F,feedback=that is for Standard ML]{fun}
+ \mcc[F,Ftext=Nooooooooo,feedback=that is for Java]{public static void}
+ \end{mcb}
+\end{sproblem}
+}
+without solutions (that is what the students see during the exam/quiz)\ednote{MK: that did
+not work!}
+\stexexample{%
+\stopsolutions
+\begin{sproblem}[title=Functions,name=functions1]
+ What is the keyword to introduce a function definition in python?
+ \begin{mcb}
+ \mcc[T]{def}
+ \mcc[F,feedback=that is for C and C++]{function}
+ \mcc[F,feedback=that is for Standard ML]{fun}
+ \mcc[F,Ftext=Nooooooooo,feedback=that is for Java]{public static void}
+ \end{mcb}
+\end{sproblem}
+}
+
+\begin{function}{\includeproblem}
+ The |\includeproblem| macro can be used to include a problem from another file. It takes
+ an optional KeyVal argument and a second argument which is a path to the file containing
+ the problem (the macro assumes that there is only one problem in the include file). The
+ keys |title|, |min|, and |pts| specify the problem title, the estimated minutes for
+ solving the problem and the points to be gained, and their values (if given) overwrite
+ the ones specified in the |problem| environment in the included file.
+\end{function}
+
+The sum of the points and estimated minutes (that we specified in the |pts| and |min| keys
+to the |problem| environment or the |\includeproblem| macro) to the log file and the
+screen after each run. This is useful in preparing exams, where we want to make sure that
+the students can indeed solve the problems in an allotted time period.
+
+The |\min| and |\pts| macros allow to specify (i.e. to print to the margin) the
+distribution of time and reward to parts of a problem, if the |pts| and |pts| options are
+set. This allows to give students hints about the estimated time and the points to be
+awarded.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-proofs.tex b/macros/latex/contrib/stex/doc/packages/stex-proofs.tex
index 0523c65948..d06db1282f 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-proofs.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-proofs.tex
@@ -1 +1,214 @@
-\textcolor{red}{TODO: sproofs documentation} \ No newline at end of file
+The \pkg{stex-proof} package supplies macros and environment that allow to annotate the
+structure of mathematical proofs in \sTeX document. This structure can be used by MKM
+systems for added-value services, either directly from the \sTeX sources, or after
+translation.
+
+We will go over the general intuition by way of a running example:
+
+\begin{latexcode}
+\begin{sproof}[id=simple-proof]
+ {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$}
+ \begin{spfcases}{For the induction we have to consider three cases:}
+ \begin{spfcase}{$n=1$}
+ \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep}
+ \end{spfcase}
+ \begin{spfcase}{$n=2$}
+ \begin{spfcomment}[type=inline]
+ This case is not really necessary, but we do it for the
+ fun of it (and to get more intuition).
+ \end{spfcomment}
+ \begin{spfstep}[type=inline] We compute $1+3=2^{2}=4$.\end{spfstep}
+ \end{spfcase}
+ \begin{spfcase}{$n>1$}
+ \begin{spfstep}[type=assumption,id=ind-hyp]
+ Now, we assume that the assertion is true for a certain $k\geq 1$,
+ i.e. $\sum_{i=1}^k{(2i-1)}=k^{2}$.
+ \end{spfstep}
+ \begin{spfcomment}
+ We have to show that we can derive the assertion for $n=k+1$ from
+ this assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$.
+ \end{spfcomment}
+ \begin{spfstep}
+ We obtain $\sum_{i=1}^{k+1}{2i-1}=\sum_{i=1}^k{2i-1}+2(k+1)-1$
+ \spfjust[method=arith:split-sum]{by splitting the sum}.
+ \end{spfstep}
+ \begin{spfstep}
+ Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$
+ \spfjust[method=fertilize]{by inductive hypothesis}.
+ \end{spfstep}
+ \begin{spfstep}[type=conclusion]
+ We can \spfjust[method=simplify]{simplify} the right-hand side to
+ ${k+1}^2$, which proves the assertion.
+ \end{spfstep}
+ \end{spfcase}
+ \begin{spfstep}[type=conclusion]
+ We have considered all the cases, so we have proven the assertion.
+ \end{spfstep}
+ \end{spfcases}
+\end{sproof}
+\end{latexcode}
+
+This yields the following result:
+
+\begin{mdframed}
+ \begin{sproof}[id=simple-proof]
+ {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$}
+ \begin{spfcases}{For the induction we have to consider the following cases:}
+ \begin{spfcase}{$n=1$}
+ \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep}
+ \end{spfcase}
+ \begin{spfcase}{$n=2$}
+ \begin{spfcomment}[type=inline]
+ This case is not really necessary, but we do it for the fun
+ of it (and to get more intuition).
+ \end{spfcomment}
+ \begin{spfstep}[type=inline]
+ We compute $1+3=2^{2}=4$
+ \end{spfstep}
+ \end{spfcase}
+ \begin{spfcase}{$n>1$}
+ \begin{spfstep}[type=hypothesis,id=ind-hyp]
+ Now, we assume that the assertion is true for a certain $k\geq 1$, i.e.
+ $\sum_{i=1}^k{(2i-1)}=k^{2}$.
+ \end{spfstep}
+ \begin{spfcomment}
+ We have to show that we can derive the assertion for $n=k+1$ from this
+ assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$.
+ \end{spfcomment}
+ \begin{spfstep}[id=splitit]
+ We obtain $\sum_{i=1}^{k+1}{(2i-1)}=\sum_{i=1}^k{(2i-1)}+2(k+1)-1$
+ \spfjust[method=arith:split-sum]{by splitting the sum}.
+ \end{spfstep}
+ \begin{spfstep}[id=byindhyp]
+ Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$
+ \spfjust[method=fertilize]{by \premise[ind-hyp]{inductive hypothesis}}.
+ \end{spfstep}
+ \begin{spfstep}[type=conclusion]
+ We can \spfjust[method=simplify-eq]{simplify the \justarg[rhs]{right-hand side}} to
+ $(k+1)^2$, which proves the assertion.
+ \end{spfstep}
+ \end{spfcase}
+ \begin{spfstep}[type=conclusion]
+ We have considered all the cases, so we have proven the assertion.
+ \end{spfstep}
+ \end{spfcases}
+\end{sproof}
+\end{mdframed}
+
+\begin{environment}{sproof}
+ The |sproof| environment is the main container for proofs. It takes an optional |KeyVal|
+ argument that allows to specify the |id| (identifier) and |for| (for which assertion is
+ this a proof) keys. The regular argument of the |proof| environment contains an
+ introductory comment, that may be used to announce the proof style. The |proof|
+ environment contains a sequence of |spfstep|, |spfcomment|, and |spfcases| environments
+ that are used to markup the proof steps.
+\end{environment}
+
+\begin{function}{\spfidea}
+ The |\spfidea| macro allows to give a one-paragraph description of the proof idea.
+\end{function}
+
+\begin{function}{\spfsketch}
+ For one-line proof sketches, we use the |\spfsketch| macro, which takes the same
+ optional argument as |sproof| and another one: a natural language text that sketches
+ the proof.
+\end{function}
+
+\begin{environment}{spfstep}
+ Regular proof steps are marked up with the |step| environment, which takes an optional
+ |KeyVal| argument for annotations. A proof step usually contains a local assertion
+ (the text of the step) together with some kind of evidence that this can be derived
+ from already established assertions.
+\end{environment}
+
+\begin{function}{\spfjust}
+ This evidence is marked up with the |\spfjust| macro in the \pkg{stex-proofs}
+ package. This environment totally invisible to the formatted result; it wraps the text
+ in the proof step that corresponds to the evidence. The environment takes an optional
+ |KeyVal| argument, which can have the |method| key, whose value is the name of a proof
+ method (this will only need to mean something to the application that consumes the
+ semantic annotations). Furthermore, the justification can contain ``premises''
+ (specifications to assertions that were used justify the step) and ``arguments''
+ (other information taken into account by the proof method).
+\end{function}
+
+\begin{function}{\premise}
+ The |\premise| macro allows to mark up part of the text as reference to an assertion
+ that is used in the argumentation. In the running example we have used the |\premise|
+ macro to identify the inductive hypothesis.
+\end{function}
+
+\begin{function}{\justarg}
+ The |\justarg| macro is very similar to |\premise| with the difference that it is used
+ to mark up arguments to the proof method. Therefore the content of the first argument
+ is interpreted as a mathematical object rather than as an identifier as in the case of
+ |\premise|. In our example, we specified that the simplification should take place on
+ the right hand side of the equation. Other examples include proof methods that
+ instantiate. Here we would indicate the substituted object in a |\justarg| macro.
+\end{function}
+
+Note that both |\premise| and |\justarg| can be used with an empty second argument to
+mark up premises and arguments that are not explicitly mentioned in the text.
+
+\begin{environment}{subproof}
+ The |spfcases| environment is used to mark up a subproof. This environment takes an
+ optional |KeyVal| argument for semantic annotations and a second argument that allows
+ to specify an introductory comment (just like in the |proof| environment). The
+ |method| key can be used to give the name of the proof method
+ executed to make this subproof.
+\end{environment}
+
+\begin{environment}{spfcases}
+ The |spfcases| environment is used to mark up a proof by cases. Technically it is a
+ variant of the |subproof| where the |method| is |by-cases|. Its contents are |spfcase|
+ environments that mark up the cases one by one.
+\end{environment}
+
+\begin{environment}{spfcase}
+ The content of a |spfcases| environment are a sequence of case proofs marked up in the
+ |spfcase| environment, which takes an optional |KeyVal| argument for semantic
+ annotations. The second argument is used to specify the the description of the case
+ under consideration. The content of a |spfcase| environment is the same as that of a
+ |sproof|, i.e. |spfstep|s, |spfcomment|s, and |spfcases| environments.
+\end{environment}
+
+\begin{function}{\spfcasesketch}
+ |\spfcasesketch| is a variant of the |spfcase| environment that takes the same
+ arguments, but instead of the |spfstep|s in the body uses a third argument for a proof
+ sketch.
+\end{function}
+
+\begin{environment}{spfcomment}
+ The |spfcomment| environment is much like a |step|, only that it does not have an
+ object-level assertion of its own. Rather than asserting some fact that is relevant
+ for the proof, it is used to explain where the proof is going, what we are attempting
+ to to, or what we have achieved so far. As such, it cannot be the target of a
+ |\premise|.
+\end{environment}
+
+\begin{function}{\sproofend}
+ Traditionally, the end of a mathematical proof is marked with a little box at the end of
+ the last line of the proof (if there is space and on the end of the next line if there
+ isn't), like so:\sproofend
+
+ The \pkg{stex-proofs} package provides the |\sproofend| macro for this.
+\end{function}
+
+\begin{variable}{\sProofEndSymbol}
+ If a different symbol for the proof end is to be used (e.g. {\sl{q.e.d}}), then this can
+ be obtained by specifying it using the |\sProofEndSymbol| configuration macro (e.g. by
+ specifying |\sProofEndSymbol{q.e.d}|).
+\end{variable}
+
+Some of the proof structuring macros above will insert proof end symbols for sub-proofs,
+in most cases, this is desirable to make the proof structure explicit, but sometimes this
+wastes space (especially, if a proof ends in a case analysis which will supply its own
+proof end marker). To suppress it locally, just set |proofend={}| in them or use use
+|\sProofEndSymbol{}|.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: hypothesis,id geq splitit arith:split-sum byindhyp rhs proofend
diff --git a/macros/latex/contrib/stex/doc/packages/stex-references.tex b/macros/latex/contrib/stex/doc/packages/stex-references.tex
index bf8a8ed66c..11de003e9b 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-references.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-references.tex
@@ -1 +1,8 @@
-\textcolor{red}{TODO: references documentation} \ No newline at end of file
+\begin{sfragment}[id=sec.references]{Referencing Symbols and Statements}
+\textcolor{red}{TODO: references documentation}
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-slides.tex b/macros/latex/contrib/stex/doc/packages/stex-slides.tex
index 1f9d0c989d..a900c1fcbb 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-slides.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-slides.tex
@@ -1 +1,212 @@
-\textcolor{red}{TODO: notesslides documentation} \ No newline at end of file
+The \pkg{notesslides} document class is derived from |beamer.cls|~\cite{beamerclass:on},
+it adds a ``notes version'' for course notes that is more suited to printing than the one
+supplied by |beamer.cls|.
+
+The \pkg{notesslides} class takes the notion of a slide frame from Till Tantau's excellent
+\pkg{beamer} class and adapts its notion of frames for use in the \sTeX and \omdoc. To
+support semantic course notes, it extends the notion of mixing frames and explanatory
+text, but rather than treating the frames as images (or integrating their contents into
+the flowing text), the \pkg{notesslides} package displays the slides as such in the course
+notes to give students a visual anchor into the slide presentation in the course (and to
+distinguish the different writing styles in slides and course notes).
+
+In practice we want to generate two documents from the same source: the slides for
+presentation in the lecture and the course notes as a narrative document for home
+study. To achieve this, the \pkg{notesslides} class has two modes: \emph{slides mode} and
+\emph{notes mode} which are determined by the package option.
+
+
+\begin{variable}{slides,notes,sectocframes,frameimages,fiboxed}
+ The \pkg{notesslides} class takes a variety of class options:
+ \begin{itemize}
+ \item The options |slides| and |notes| switch between slides mode and notes mode (see
+ Section~\ref{sec:user:notesslides}).
+ \item If the option |sectocframes| is given, then for the |sfragment|s, special frames
+ with the |sfragment| title (and number) are generated.
+ \item If the option |frameimages| is set, then slide mode also shows the
+ |\frameimage|-generated frames (see section~\ref{sec:user:frameimage}). If also the
+ |fiboxed| option is given, the slides are surrounded by a box.
+ \end{itemize}
+\end{variable}
+
+\begin{environment}{frame,note}
+ Slides are represented with the |frame| environment just like in the \pkg{beamer} class,
+ see~\cite{Tantau:ugbc} for details. The \pkg{notesslides} class adds the |note|
+ environment for encapsulating the course note fragments.\footnote{MK: it would be very
+ nice, if we did not need this environment, and this should be possible in principle,
+ but not without intensive LaTeX trickery. Hints to the author are welcome.}
+\end{environment}
+
+\begin{dangerbox}
+ Note that it is essential to start and end the |notes| environment at the start of the
+ line -- in particular, there may not be leading blanks -- else {\LaTeX} becomes confused
+ and throws error messages that are difficult to decipher.
+\end{dangerbox}
+
+By interleaving the |frame| and |note| environments, we can build course notes as shown
+here:
+
+\begin{latexcode}
+\ifnotes\maketitle\else
+\frame[noframenumbering]\maketitle\fi
+
+\begin{note}
+ We start this course with ...
+\end{note}
+
+\begin{frame}
+ \frametitle{The first slide}
+ ...
+\end{frame}
+\begin{note}
+ ... and more explanatory text
+\end{note}
+
+\begin{frame}
+ \frametitle{The second slide}
+ ...
+\end{frame}
+...
+\end{latexcode}
+
+\begin{function}{\ifnotes}
+ Note the use of the |\ifnotes| conditional, which allows different treatment between
+ |notes| and |slides| mode -- manually setting |\notestrue| or |\notesfalse| is strongly
+ discouraged however.
+\end{function}
+
+\begin{dangerbox}
+ We need to give the title frame the |noframenumbering| option so that the frame
+ numbering is kept in sync between the slides and the course notes.
+\end{dangerbox}
+
+\begin{dangerbox}
+ The \pkg{beamer} class recommends not to use the |allowframebreaks| option on frames
+ (even though it is very convenient). This holds even more in the |notesslides| case: At
+ least in conjunction with |\newpage|, frame numbering behaves funnily (we have tried to
+ fix this, but who knows).
+\end{dangerbox}
+
+\begin{function}{\inputref*}
+ If we want to transclude a the contents of a file as a note, we can use a new variant
+ |\inputref*| of the |\inputref| macro: |\inputref*{foo}| is equivalent to
+ |\begin{note}\inputref{foo}\end{note}|.
+\end{function}
+
+\begin{environment}{nparagraph, nparagraph, ndefinition, nexample, nsproof, nassertion}
+ There are some environments that tend to occur at the top-level of |note|
+ environments. We make convenience versions of these: e.g. the |nparagraph| environment
+ is just an |sparagraph| inside a |note| environment (but looks nicer in the source,
+ since it avoids one level of source indenting). Similarly, we have the |nfragment|,
+ |ndefinition|, |nexample|, |nsproof|, and |nassertion| environments.
+\end{environment}
+
+\begin{function} {\setslidelogo}
+ The default logo provided by the \pkg{notesslides} package is the {\sTeX} logo it can be
+ customized using |\setslidelogo{|\meta{logo name}|}|.
+\end{function}
+
+\begin{function}{\setsource}
+ The default footer line of the \pkg{notesslides} package mentions copyright and
+ licensing. In the \pkg{beamer} class, |\source| stores the author's name as the
+ copyright holder . By default it is \emph{Michael Kohlhase} in the \pkg{notesslides}
+ package since he is the main user and designer of this
+ package. |\setsource{|\meta{name}|}| can change the writer's name.
+\end{function}
+
+\begin{function}{\setlicensing}
+ For licensing, we use the Creative Commons Attribuition-ShareAlike license by default to
+ strengthen the public domain. If package |hyperref| is loaded, then we can attach a
+ hyperlink to the license logo. |\setlicensing[|\meta{url}|]{|\meta{logo name}|}| is used
+ for customization, where \meta{url} is optional.
+\end{function}
+
+Sometimes, we want to integrate slides as images after all -- e.g. because we already
+have a PowerPoint presentation, to which we want to add \sTeX notes.
+
+\begin{function}{\frameimage,\mhframeimage}
+ In this case we can use |\frameimage[|\meta{opt}|]{|\meta{path}|}|, where \meta{opt} are
+ the options of |\includegraphics| from the \pkg{graphicx} package~\cite{CarRah:tpp99}
+ and \meta{path} is the file path (extension can be left off like in
+ |\includegraphics|). We have added the |label| key that allows to give a frame label
+ that can be referenced like a regular |beamer| frame.
+
+The |\mhframeimage| macro is a variant of |\frameimage| with repository support. Instead
+of writing
+\begin{latexcode}
+\frameimage{\MathHub{fooMH/bar/source/baz/foobar}}
+\end{latexcode}
+ we can simply write (assuming that |\MathHub| is defined as above)
+\begin{latexcode}
+\mhframeimage[fooMH/bar]{baz/foobar}
+\end{latexcode}
+ Note that the |\mhframeimage| form is more semantic, which allows more advanced document
+management features in \textsf{MathHub}.
+\end{function}
+
+If |baz/foobar| is the ``current module'', i.e. if we are on the \textsf{MathHub} path
+\ldots|MathHub/fooMH/bar|\ldots, then stating the repository in the first optional
+argument is redundant, so we can just use
+\begin{latexcode}
+\mhframeimage{baz/foobar}
+\end{latexcode}
+
+\begin{function}{\textwarning}
+ The |\textwarning| macro generates a warning sign: \textwarning
+\end{function}
+
+In course notes, we sometimes want to point to an ``excursion'' -- material that is either
+presupposed or tangential to the course at the moment -- e.g. in an appendix. The typical
+setup is the following:
+
+\begin{latexcode}
+\excursion{founif}{../ex/founif}{We will cover first-order unification in}
+...
+\begin{appendix}\printexcursions\end{appendix}
+\end{latexcode}
+
+\begin{function}{\excursion}
+ The |\excursion{|\meta{ref}|}{|\meta{path}|}{|\meta{text}|}| is syntactic sugar for
+
+\begin{latexcode}
+\begin{nparagraph}[title=Excursion]
+ \activateexcursion{founif}{../ex/founif}
+ We will cover first-order unification in \sref{founif}.
+\end{nparagraph}
+\end{latexcode}
+\end{function}
+
+\begin{function}{\activateexcursion,\printexcursion,\excursionref}
+ Here |\activateexcursion{|\meta{path}|}| augments the |\printexcursions| macro by a call
+ |\inputref{|\meta{path}|}|. In this way, the |\printexcursions| macro (usually in the
+ appendix) will collect up all excursions that are specified in the main text.
+
+ Sometimes, we want to reference -- in an excursion -- part of another. We can use
+ |\excursionref{|\meta{label}|}| for that.
+\end{function}
+
+\begin{function}{\excursiongroup}
+ Finally, we usually want to put the excursions into an |sfragment| environment and add
+ an introduction, therefore we provide the a variant of the |\printexcursions| macro:
+ |\excursiongroup[id=|\meta{id}|,intro=|\meta{path}|]| is equivalent to
+\begin{latexcode}
+\begin{note}
+\begin{sfragment}[id=<id>]{Excursions}
+ \inputref{<path>}
+ \printexcursions
+\end{sfragment}
+\end{note}
+\end{latexcode}
+\end{function}
+
+\begin{dangerbox}
+ When option |book| which uses |\pagestyle{headings}| is given and semantic macros are
+ given in the |sfragment| titles, then they sometimes are not defined by the time the
+ heading is formatted. Need to look into how the headings are made. This is a problem of
+ the underlying \pkg{document-structure} package.
+\end{dangerbox}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/packages/stex-statements.tex b/macros/latex/contrib/stex/doc/packages/stex-statements.tex
index aa9f5f76ab..6a2478fa7d 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-statements.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-statements.tex
@@ -1 +1,145 @@
-\textcolor{red}{TODO: statements documentation} \ No newline at end of file
+\begin{sfragment}{Definitions, Theorems, Examples, Paragraphs}
+\begin{smodule}{Statements}
+ As mentioned earlier, we can semantically mark-up
+ \emph{statements} such as definitions, theorems, lemmata, examples, etc.
+
+ The corresponding environments for that are:
+ \begin{itemize}
+ \item \stexcode"sdefinition" for definitions,
+ \item \stexcode"sassertion" for assertions, i.e.
+ propositions that are declared to be \emph{true},
+ such as theorems, lemmata, axioms,
+ \item \stexcode"sexample" for examples and counterexamples, and
+ \item \stexcode"sparagraph" for ``other'' semantic paragraphs,
+ such as comments, remarks, conjectures, etc.
+ \end{itemize}
+
+ The \emph{presentation} of these environments can be customized
+ to use e.g. predefined |theorem|-environments, see \sref{sec.customhighlight}
+ for details.
+
+ All of these environments take optional arguments in the form of
+ |key=value|-pairs. Common to all of them are the keys |id=| (for cross-referencing,
+ see \sref{sec.references}), |type=| for customization (see \sref{sec.customhighlight})
+ and additional information (e.g. definition principles, ``difficulty'' etc), as well
+ as |title=| (for giving the paragraph a title), and finally |for=|.
+
+ The |for=| key expects a comma-separated list of existing
+ symbols, allowing for e.g. things like
+ \symdef{addition}[args=a,prec=100]{#1}{##1 \comp+ ##2}
+ \symdef{multiplication}[args=a,prec=50]{#1}{##1 \comp\cdot ##2}
+ \stexexample{%
+\begin{sexample}[
+ id=additionandmultiplication.ex,
+ for={addition,multiplication},
+ type={trivial,boring},
+ title={An Example}
+]
+ $\addition{2,3}$ is $5$, $\multiplication{2,3}$ is $6$.
+\end{sexample}
+ }
+
+ \begin{function}{\definiendum,\definame,\Definame}
+ \stexcode"sdefinition" (and \stexcode"sparagraph" with
+ |type=symdoc|) introduce three new macros:
+ \stexcode"definiendum" behaves like \stexcode"symref"
+ (and \stexcode"definame"/\stexcode"Definame"
+ like \stexcode"symname"/\stexcode"Symname", respectively),
+ but highlights the referenced symbol as \emph{being defined}
+ in the current definition.
+ \end{function}
+
+ \begin{mmtbox}
+ The special |type=symdoc| for \stexcode"sparagraph" is intended to be used for
+ ``informal definitions'', or encyclopedia-style descriptions for symbols.
+
+ The \mmt system can use those (in lieu of an actual \stexcode"sdefinition" in scope)
+ to present to users, e.g. when hovering over symbols.
+ \end{mmtbox}
+
+ \begin{function}{\definiens}
+ Additionally, \stexcode"sdefinition" (and \stexcode"sparagraph" with
+ |type=symdoc|) introduces \stexcode"\definiens[<optional symbolname>]{<code>}"
+ which marks up |<code>| as being the explicit \emph{definiens}
+ of |<optional symbolname>| (in case |for=| has multiple symbols).
+ \end{function}
+
+ All four statement environments -- i.e. \stexcode|sdefinition|,
+ \stexcode|sassertion|, \stexcode|sexample|, and \stexcode|sparagraph| -- also take an
+ optional parameter |name=| -- if this one is given a value, the environment will
+ generate a \emph{symbol} by that name (but with no semantic macro). Not only does this
+ allow for \stexcode"\symref" et al, it allows us to resume our earlier example for
+ monoids much more nicely:\ednote{MK: we should reference the example explicitly here.}
+
+ \symdef{set}{\comp{\texttt{Set}}}
+ \symdef{equal}[args=2]{#1 \comp= #2}
+ \symdef{inset}[args=2]{#1 \comp\in #2}
+ \symdef{funtype}[args=ai]{#1 \comp\to #2}{##1 \comp\times ##2}
+
+ \stexexample{%
+\begin{mathstructure}{monoid}
+ \symdef{universe}[type=\set]{\comp{U}}
+ \symdef{op}[
+ args=2,
+ type=\funtype{\universe,\universe}{\universe},
+ op=\circ
+ ]{#1 \comp{\circ} #2}
+ \symdef{unit}[type=\universe]{\comp{e}}
+
+ \begin{sparagraph}[type=symdoc,for=monoid]
+ A \definame{monoid} is a structure
+ $\mathstruct{\universe,\op!,\unit}$
+ where $\op!:\funtype{\universe}{\universe}$ and
+ $\inset{\unit}{\universe}$ such that
+
+ \begin{sassertion}[name=associative,
+ type=axiom,
+ title=Associativity]
+ $\op!$ is associative
+ \end{sassertion}
+ \begin{sassertion}[name=isunit,
+ type=axiom,
+ title=Unit]
+ $\equal{\op{\svar{x}}{\unit}}{\svar{x}}$
+ for all $\inset{\svar{x}}{\universe}$
+ \end{sassertion}
+ \end{sparagraph}
+\end{mathstructure}
+
+An example for a \symname{monoid} is...
+ }
+
+ The main difference to before\ednote{MK: reference} is that the two
+ \stexcode|sassertion|s now have |name=| attributes. Thus the \stexcode"mathstructure"
+ \symname{monoid} now contains two additional symbols, namely the axioms for
+ associativity and that $e$ is a unit. Note that both symbols do not represent the mere
+ \emph{propositions} that e.g. $\circ$ is associative, but \emph{the assertion that it
+ is actually true} that $\circ$ is associative.
+
+ If we now want to instantiate |monoid| (unless with a variable,
+ of course), we also need to assign |associative| and |neutral|
+ to analogous assertions. So the earlier example
+ \begin{latexcode}[gobble=8]
+ \instantiate{intmonoid}{monoid}{\mathbb{Z}_{+,0}}[
+ universe = Int ,
+ op = addition ,
+ unit = zero
+ ]
+ \end{latexcode}
+ ...will not work anymore. We now need to give assertions that
+ |addition| is associative and that |zero| is a unit with respect
+ to addition.\footnote{Of course, \sTeX can not check that
+ the assertions are the ``correct'' ones -- but if
+ the assertions (both in |monoid| as well as those for addition and
+ zero) are properly marked up, \mmt can. \textcolor{red}{TODO: should}}
+
+\end{smodule}
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: sec.customhighlight a,prec additionandmultiplication.ex trivial,boring
+% LocalWords: addition,multiplication symdoc symdoc,for isunit
diff --git a/macros/latex/contrib/stex/doc/packages/stex-symbols.tex b/macros/latex/contrib/stex/doc/packages/stex-symbols.tex
index 50b450a248..e7bafeda6b 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-symbols.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-symbols.tex
@@ -1 +1,587 @@
-\textcolor{red}{TODO: symbols documentation} \ No newline at end of file
+\begin{smodule}[ns=https://github.com/slatex/sTeX/doc]{SymbolsAndNotations}
+\begin{sfragment}{Declaring New Symbols and Notations}
+ Inside an \stexcode"smodule" environment, we can declare new \sTeX symbols.
+
+\begin{function}{\symdecl}
+ The most basic command for doing so is using \stexcode"\symdecl{symbolname}". This
+ introduces a new symbol with name |symbolname|, arity $0$ and semantic macro
+ \stexcode"\symbolname".
+
+ The starred variant \stexcode"\symdecl*{symbolname}" will declare a symbol, but not
+ introduce a semantic macro. If we don't want to supply a notation (for example to
+ introduce concepts like ``abelian'', which is not something that has a notation), the
+ starred variant is likely to be what we want.
+\end{function}
+\begin{mmtbox}
+ \stexcode"\symdecl" introduces a new \omdoc/\mmt constant in the current module
+ (=\omdoc/\mmt theory). Correspondingly, they get assigned the URI
+ |<module-URI>?<constant-name>|.
+\end{mmtbox}
+
+Without a semantic macro or a notation, the only meaningful way to reference a symbol is
+via \stexcode"\symref",\stexcode"\symname" etc.
+
+\stexexample{%
+\symdecl*{foo}
+Given a \symname{foo}, we can...
+}
+
+Obviously, most semantic macros should take actual \emph{arguments}, implying that the
+symbol we introduce is an \emph{operator} or \emph{function}. We can let
+\stexcode"\symdecl" know the \emph{arity} (i.e. number of arguments) of a symbol like
+this:
+
+\stexexample{%
+\symdecl{binarysymbol}[args=2]
+\symref{binarysymbol}{this} is a symbol taking two arguments.
+}
+
+So far we have gained exactly \ldots nothing by adding the arity information: we cannot do
+anything with the arguments in the text.
+
+We will now see what we can gain with more machinery.
+
+\begin{function}{\notation}
+ We probably want to supply a notation as well, in which case we can finally actually use
+ the semantic macro in math mode. We can do so using the \stexcode"\notation" command,
+ like this:
+
+\stexexample{%
+\notation{binarysymbol}{\text{First: }#1\text{; Second: }#2}
+$\binarysymbol{a}{b}$ }
+\end{function}
+
+\begin{mmtbox}
+ Applications of semantic macros, such as \stexcode"\binarysymbol{a}{b}" are translated
+ to \mmt/\omdoc as |OMA|-terms with head |<OMS name="...?binarysymbol"/>|.
+
+ Semantic macros with no arguments correspond to |OMS| directly.
+\end{mmtbox}
+
+\begin{function}{\comp}
+ For many semantic services e.g. semantic highlighting or \defemph{wikification} (linking
+ user-visible notation components to the definition of the respective symbol they come
+ from), we need to specify the notation components. Unfortunately, there is currently no
+ way the \sTeX engine can infer this by itself, so we have to specify it manually in the
+ notation specification. We can do so with the \stexcode"\comp" command.
+\end{function}
+
+We can introduce a new notation |highlight| for \stexcode"\binarysymbol" that fixes this
+flaw, which we can subsequently use with \stexcode"\binarysymbol[highlight]":
+
+\stexexample{%
+\notation{binarysymbol}[highlight]
+ {\comp{\text{First: }}#1\comp{\text{; Second: }}#2}
+$\binarysymbol[highlight]{a}{b}$
+}
+
+\begin{dangerbox}
+ Ideally, \stexcode"\comp" would not be necessary: Everything in a notation that is
+ \emph{not} an argument should be a notation component. Unfortunately, it is
+ computationally expensive to determine where an argument begins and ends, and the
+ argument markers |#n| may themselves be nested in other macro applications or
+ \TeX\xspace groups, making it ultimately almost impossible to determine them
+ automatically while also remaining compatible with arbitrary highlighting customizations
+ (such as tooltips, hyperlinks, colors) that users might employ, and that are ultimately
+ invoked by \stexcode"\comp".
+\end{dangerbox}
+
+\begin{dangerbox}
+ Note that it is required that
+ \begin{enumerate}
+ \item the argument markers |#n| never occur inside a \stexcode"\comp", and
+ \item no semantic arguments may ever occur inside a notation.
+ \end{enumerate}
+ Both criteria are not just required for technical reasons, but conceptionally
+ meaningful:
+
+ The underlying principle is that the arguments to a semantic macro represent
+ \emph{arguments to the mathematical operation} represented by a symbol. For example, a
+ semantic macro \stexcode"\addition{a}{b}" taking two arguments would represent \emph{the
+ actual addition of (mathematical objects) $a$ and $b$}. It should therefore be
+ impossible for $a$ or $b$ to be part of a notation component of \stexcode"\addition".
+
+ Similarly, a semantic macro can not conceptually be part of the notation of
+ \stexcode"\addition", since a semantic macro represents a \emph{distinct mathematical
+ concept} with \emph{its own semantics}, whereas notations are syntactic
+ representations of the very symbol to which the notation belongs.
+
+ If you want an argument to a semantic macro to be a purely syntactic parameter, then you
+ are likely somewhat confused with respect to the distinction between the precise
+ \emph{syntax} and \emph{semantics} of the symbol you are trying to declare (which
+ happens quite often even to experienced \sTeX users), and might want to give those
+ another thought - quite likely, the macro you aim to implement does not actually
+ represent a semantically meaningful mathematical concept, and you will want to use
+ \stexcode"\def" and similar native \LaTeX\xspace macro definitions rather than semantic
+ macros.
+\end{dangerbox}
+
+\begin{function}{\symdef}
+ In the vast majority of cases where a symbol declaration should come with a semantic
+ macro, we will want to supply a notation immediately. For that reason, the
+ \stexcode"\symdef" command combines the functionality of both \stexcode"\symdecl" and
+ \stexcode"\notation" with the optional arguments of both:
+\end{function}
+
+\stexexample{%
+\symdef{newbinarysymbol}[hl,args=2]
+ {\comp{\text{1.: }}#1\comp{\text{; 2.: }}#2}
+$\newbinarysymbol{a}{b}$
+}
+
+We just declared a new symbol |newbinarysymbol| with |args=2| and immediately provided it
+with a notation with identifier |hl|. Since |hl| is the \emph{first} (and so far, only)
+notation supplied for |newbinarysymbol|, using \stexcode"\newbinarysymbol" without
+optional argument defaults to this notation.\bigskip
+
+But one man's meat is another man's poison: it is very subjective what the ``default
+notation'' of an operator should be. Different communities have different practices. For
+instance, the complex unit is written as $i$ in Mathematics and as $j$ in electrical
+engineering. So to allow modular specification and facilitate re-use of document fragments
+\sTeX allows to re-set notation defaults.
+
+\begin{function}{\setnotation}
+ The first notation provided will stay the default notation unless explicitly changed --
+ this is enabled by the \stexcode"\setnotation" command:
+ \stexcode"\setnotation{symbolname}{notation-id}" sets the default notation of
+ \stexcode"\symbolname" to |notation-id|, i.e. henceforth, \stexcode"\symbolname" behaves
+ like \stexcode"\symbolname[notation-id]" from now on.
+\end{function}
+
+Often, a default notation is set right after the corresponding notation is introduced --
+the starred version \stexcode"\notation*" for that reason introduces a new notation and
+immediately sets it to be the new default notation. So expressed differently, the
+\emph{first} \stexcode"\notation" for a symbol behaves exactly like \stexcode"\notation*",
+and \stexcode"\notation*{foo}[bar]{...}" behaves exactly like
+\stexcode"\notation{foo}[bar]{...}\setnotation{foo}{bar}".
+
+\begin{function}{\textsymdecl}
+ In the less mathematical settings where we want a symbol and
+ semantic macro for some concept with a notation \emph{beyond}
+ its mere name, but which should also be available in \TeX's text
+ mode, the command \stexcode"\textsymdecl" is useful.
+ For example, we can declare a symbol \stexcode"openmath"
+ with the notation \stexcode"\textsc{OpenMath}" using
+ \textsymdecl{openmath}[name=OpenMath]{\textsc{OpenMath}}
+ \stexcode"\textsymdecl{openmath}[name=OpenMath]{\textsc{OpenMath}}".
+ The \stexcode"\openmath" yields \openmath both in text and math
+ mode.
+\end{function}
+
+\begin{sfragment}{Operator Notations}
+ Once we have a semantic macro with arguments, such as \stexcode"\newbinarysymbol", the
+ semantic macro represents the \emph{application} of the symbol to a list of
+ arguments. What if we want to refer to the operator \emph{itself}, though?
+
+ We can do so by supplying the \stexcode"\notation" (or \stexcode"\symdef") with an
+ \emph{operator notation}, indicated with the optional argument |op=|. We can then
+ invoke the operator notation using \stexcode"\symbolname![notation-identifier]". Since
+ operator notations never take arguments, we do not need to use \stexcode"\comp" in it,
+ the whole notation is wrapped in a \stexcode"\comp" automatically:
+
+ \stexexample{%
+ \notation{newbinarysymbol}[ab, op={\text{a:}\cdot\text{; b:}\cdot}]
+ {\comp{\text{a:}}#1\comp{\text{; b:}}#2} \symname{newbinarysymbol} is also
+ occasionally written $\newbinarysymbol![ab]$
+ }
+
+ \begin{mmtbox}
+ \stexcode"\symbolname!" is translated to \omdoc/\mmt as |<OMS name="...?symbolname"/>|
+ directly.
+ \end{mmtbox}
+
+\end{sfragment}
+\end{sfragment}
+
+\begin{sfragment}{Argument Modes}
+ The notations so far used \emph{simple} arguments which we call \emph{mode}-|i|
+ arguments. Declaring a new symbol with \stexcode"\symdecl{foo}[args=3]" is equivalent to
+ writing \stexcode"\symdecl{foo}[args=iii]", indicating that the semantic macro takes
+ three mode-|i| arguments. However, there are three more argument modes which we will
+ investigate now, namely mode-|b|, mode-|a| and mode-|B| arguments.
+
+\begin{sfragment}{Mode-\texttt b Arguments}
+
+A mode-|b| argument represents a \emph{variable} that is \emph{bound} by the symbol in
+its application, making the symbol a \emph{binding operator}. Typical examples of
+binding operators are e.g. sums $\sum$, products $\prod$, integrals $\int$, quantifiers
+like $\forall$ and $\exists$, that $\lambda$-operator, etc.
+
+\begin{mmtbox}
+ Mode-|b| arguments behave exactly like mode-|i| arguments within \TeX, but applications
+ of binding operators, i.e. symbols with mode-|b| arguments, are translated to
+ |OMBIND|-terms in \omdoc/\mmt, rather than |OMA|.
+\end{mmtbox}
+
+For example, we can implement a summation operator binding an index variable and taking
+lower and upper index bounds and the expression to sum over like this:
+
+\stexexample{%
+\symdef{summation}[args=biii]
+ {\mathop{\comp{\sum}}_{#1\comp{=}#2}^{#3}#4}
+ $\summation{\svar{x}}{1}{\svar{n}}{\svar{x}}^2$
+}
+
+where the variable $\svar{x}$ is now \emph{bound} by the \stexcode"\summation"-symbol in
+the expression.
+\end{sfragment}
+
+\begin{sfragment}{Mode-\texttt a Arguments}
+ Mode-|a| arguments represent a \emph{flexary argument sequence}, i.e. a sequence of
+ arguments of arbitrary length. Formally, operators that take arbitrarily many arguments
+ don't ``exist'', but in informal mathematics, they are ubiquitous. Mode-|a| arguments
+ allow us to write e.g. \stexcode"\addition{a,b,c,d,e}" rather than having to write
+ something like \stexcode"\addition{a}{\addition{b}{\addition{c}{\addition{d}{e}}}}"!
+
+ \stexcode"\notation" (and consequently \stexcode"\symdef", too) take one additional
+ argument for each mode-|a| argument that indicates how to ``accumulate'' a
+ comma-separated sequence of arguments. This is best demonstrated on an example.
+
+ Let's say we want an operator representing quantification over an ascending chain of
+ elements in some set, i.e. \stexcode"\ascendingchain{S}{a,b,c,d,e}{t}" should yield
+ $\forall a{<_S}b{<_S}c{<_S}d{<_S}e.\,t$. The ``base''-notation for this operator is
+ simply\\ \stexcode"{\comp{\forall} #2\comp{.\,}#3}", where |#2| represents the full
+ notation fragment \emph{accumulated} from |{a,b,c,d,e}|.
+
+ The \emph{additional} argument to \stexcode"\notation" (or \stexcode"\symdef") takes the
+ same arguments as the base notation and two \emph{additional} arguments |##1| and |##2|
+ representing successive pairs in the mode-|a| argument, and accumulates them into |#2|,
+ i.e. to produce $a<_Sb<_Sc<_Sd<_Se$, we do \stexcode"{##1 \comp{<}_{#1} ##2}":
+
+ \stexexample{%
+\symdef{ascendingchain}[args=iai]
+ {\comp{\forall} #2\comp{.\,}#3}
+ {##1 \comp{<}_{#1} ##2}
+
+Tadaa: $\ascendingchain{S}{a,b,c,d,e}{t}$
+}
+
+If this seems overkill, keep in mind that you will rarely need the single-hash arguments
+|#1|,|#2| etc. in the |a|-notation-argument. For a much more representative and simpler
+example, we can introduce flexary addition via:
+\stexexample{%
+ \symdef{addition}[args=a]{#1}{##1 \comp{+} ##2}
+
+Tadaa: $\addition{a,b,c,d,e}$
+}
+
+\begin{sfragment}{The \texttt{assoc}-key}
+ We mentioned earlier that ``formally'', flexary arguments don't really
+ ``exist''. Indeed, formally, addition is usually defined as a binary operation,
+ quantifiers bind a single variable etc.
+
+ Consequently, we can tell \sTeX (or, rather, \mmt/\omdoc) how to ``resolve'' flexary
+ arguments by providing \stexcode"\symdecl" or \stexcode"\symdef" with an optional
+ |assoc|-argument, as in \stexcode"\symdecl{addition}[args=a,assoc=bin]". The possible
+ values for the |assoc|-key are:
+ \begin{itemize}
+ \item[|bin|:] A binary, associative argument, e.g. as in \stexcode"\addition"
+ \item[|binl|:] A binary, left-associative argument, e.g.
+ $a^{\scriptstyle b^{\scriptstyle c^d}}$, which stands for $((a^b)^c)^d$
+ \item[|binr|:] A binary, right-associative argument, e.g. as in $A\to B\to C\to D$,
+ which stands for $A \to (B \to (C \to D))$
+ \item[|pre|:] Successively prefixed, e.g. as in $\forall x,y,z.\,P$, which stands for
+ $\forall x.\, \forall y.\, \forall z.\,P$
+ \item[|conj|:] Conjunctive, e.g. as in $a=b=c=d$ or $a,b,c,d\in A$, which stand for
+ $a=d\wedge b=d\wedge c=d$ and $a\in A\wedge b\in A \wedge c\in A\wedge d\in A$,
+ respectively
+ \item[|pwconj|:] Pairwise conjunctive, e.g. as in $a\neq b\neq c\neq d$, which stands
+ for $a\neq b\wedge a\neq c\wedge a\neq d\wedge b\neq c\wedge b\neq d\wedge c\neq d$
+ \end{itemize}
+ As before, at the PDF level, this annotation is invisible (and without effect), but at
+ the level of the generated OMDoc/MMT this leads to more semantical expressions.
+\end{sfragment}
+\end{sfragment}
+
+\begin{sfragment}{Mode-\texttt B Arguments}
+ Finally, mode-|B| arguments simply combine the functionality of both |a| and |b| -
+ i.e. they represent an arbitrarily long sequence of variables to be bound, e.g. for
+ implementing quantifiers:
+
+ \stexexample{%
+\symdef{quantforall}[args=Bi]
+ {\comp{\forall}#1\comp{.}#2}
+ {##1\comp,##2}
+
+$\quantforall{\svar{x},\svar{y},\svar{z}}{P}$
+}
+\end{sfragment}
+\end{sfragment}
+
+\begin{sfragment}{Type and Definiens Components}
+ \stexcode"\symdecl" and \stexcode"\symdef" take two more optional arguments. \TeX\xspace
+ largely ignores them (except for special situations we will talk about later), but \mmt
+ can pick up on them for additional services. These are the |type| and |def| keys, which
+ expect expressions in math-mode (ideally using semantic macros, of course!)
+
+ \begin{mmtbox}
+ The |type| and |def| keys correspond to the |type| and |definiens| components of
+ \omdoc/\mmt constants.
+
+ Correspondingly, the name ``type'' should be taken with a grain of salt, since
+ \omdoc/\mmt -- being foundation-independent -- does not a priori implement a fixed
+ typing system.
+ \end{mmtbox}
+
+ \symdef{funtype}[args=ai]{#1 \comp\to #2}{##1 \comp\times ##2}
+ \symdef{fun}[args=bi]{#1 \comp\mapsto #2}
+ \symdef{set}{\comp{\texttt{Set}}}
+
+ The |type|-key allows us to provide additional information
+ (given the necessary \sTeX symbols), e.g. for
+ addition on natural numbers:
+
+ \stexexample{%
+\symdef{Nat}[type=\set]{\comp{\mathbb N}}
+\symdef{addition}[
+ type=\funtype{\Nat,\Nat}{\Nat},
+ op=+,
+ args=a
+]{#1}{##1 \comp+ ##2}
+
+\symname{addition} is an operation $\funtype{\Nat,\Nat}{\Nat}$
+}
+
+The |def|-key allows for declaring symbols as abbreviations:
+\stexexample{%
+\symdef{successor}[
+ type=\funtype{\Nat}{\Nat},
+ def=\fun{\svar{x}}{\addition{\svar{x},1}},
+ op=\mathtt{succ},
+ args=1
+]{\comp{\mathtt{succ(}#1\comp{)}}}
+
+The \symname{successor} operation $\funtype{\Nat}{\Nat}$
+is defined as $\fun{\svar{x}}{\addition{\svar{x},1}}$
+}
+\end{sfragment}
+
+\begin{sfragment}{Precedences and Automated Bracketing}
+ Having done \stexcode"\addition", the obvious next thing to implement is
+ \stexcode"\multiplication". This is straight-forward in theory:
+
+ \stexexample{%
+\symdef{multiplication}[
+ type=\funtype{\Nat,\Nat}{\Nat},
+ op=\cdot,
+ args=a
+]{#1}{##1 \comp\cdot ##2}
+
+\symname{multiplication} is an operation $\funtype{\Nat,\Nat}{\Nat}$
+}
+
+However, if we \emph{combine} \stexcode"\addition" and \stexcode"\multiplication", we
+notice a problem:
+
+\stexexample{%
+$\addition{a,\multiplication{b,\addition{c,\multiplication{d,e}}}}$
+}
+
+We all know that $\multiplication!$ binds stronger than $\addition!$, so the output
+$\addition{a,\multiplication{b,\addition{c,\multiplication{d,e}}}}$ does not actually
+reflect the term we wrote. We can of course insert parentheses manually
+
+\stexexample{%
+$\addition{a,\multiplication{b,(\addition{c,\multiplication{d,e}})}}$
+}
+but we can also do better by supplying \emph{precedences} and
+have \sTeX insert parentheses automatically.
+
+For that purpose, \stexcode"\notation" (and hence \stexcode"\symdef") take an optional
+argument |prec=<opprec>;<argprec1>x...x<argprec n>|.
+
+We will investigate the precise meaning of |<opprec>| and the |<argprec>|s shortly -- in
+the vast majority of cases, it is perfectly sufficient to think of |prec=| taking a single
+number and having that be \emph{the} precedence of the notation, where lower precedences
+(somewhat counterintuitively) bind stronger than higher precedences. So fixing our
+notations for \stexcode"\addition" and \stexcode"\multiplication", we get:
+
+\stexexample{%
+\notation{multiplication}[
+ op=\cdot,
+ prec=50
+]{#1}{##1 \comp\cdot ##2}
+\notation{addition}[
+ op=+,
+ prec=100
+]{#1}{##1 \comp+ ##2}
+
+$\addition{a,\multiplication{b,\addition{c,\multiplication{d,e}}}}$
+}
+
+Note that the precise numbers used for precedences are pretty arbitrary - what matters is
+which precedences are higher than which other precedences when used in conjunction.
+\begin{variable}{\infprec,\neginfprec}
+ It is occasionally useful to have ``infinitely'' high or low precedences to enforce or
+ forbid automated bracketing entirely -- for those purposes, \stexcode"\infprec" and
+ \stexcode"\neginfprec" exist (which are implemented as the maximal and minimal integer
+ values accordingly).
+\end{variable}
+
+\begin{dangerbox}
+ More precisely, each notation takes
+ \begin{enumerate}
+ \item One \emph{operator precedence} and
+ \item one \emph{argument precedence} for each argument.
+ \end{enumerate}
+ By default, all precedences are $0$, unless the symbol takes no argument, in which case
+ the operator precedence is \stexcode"\neginfprec" (negative infinity). If we only
+ provide a single number, this is taken as both the operator precedence and all argument
+ precedences.
+
+ \sTeX decides whether to insert parentheses by comparing operator precedences to a
+ \emph{downward precedence} $p_d$ with initial value \stexcode"\infprec". When
+ encountering a semantic macro, \sTeX takes the operator precedence $p_{op}$ of the
+ notation used and checks whether $p_{op}>p_d$. If so, \sTeX insert parentheses.
+
+ When \sTeX steps into an argument of a semantic macro, it sets $p_d$ to the respective
+ argument precedence of the notation used.
+
+ In the example above:
+ \begin{enumerate}
+ \item \sTeX starts out with $p_d=$\stexcode"\infprec".
+ \item \sTeX encounters \stexcode"\addition" with $p_{op}=100$. Since
+ $100\not>$\stexcode"\infprec", it inserts no parentheses.
+ \item Next, \sTeX encounters the two arguments for \stexcode"\addition". Both have no
+ specifically provided argument precedence, so \sTeX uses $p_d=p_{op}=100$ for both and
+ recurses.
+ \item Next, \sTeX encounters \stexcode"\multiplication{b,...}", whose notation has
+ $p_{op}=50$.
+ \item We compare to the current downward precedence $p_d$ set by \stexcode"\addition",
+ arriving at $p_{op}=50\not>100=p_d$, so \sTeX again inserts no parentheses.
+ \item Since the notation of \stexcode"\multiplication" has no explicitly set argument
+ precedences, \sTeX uses the operator precedence for all arguments of
+ \stexcode"\multiplication", hence sets $p_d=p_{op}=50$ and recurses.
+ \item Next, \sTeX encounters the inner \stexcode"\addition{c,...}" whose notation has
+ $p_{op}=100$.
+ \item We compare to the current downward precedence $p_d$ set by
+ \stexcode"\multiplication", arriving at $p_{op}=100>50=p_d$ -- which finally prompts
+ \sTeX to insert parentheses, and we proceed as before.
+ \end{enumerate}
+\end{dangerbox}
+\end{sfragment}
+
+\begin{sfragment}{Variables}
+ All symbol and notation declarations require a module with which they are associated,
+ hence the commands \stexcode"\symdecl", \stexcode"\notation", \stexcode"\symdef"
+ etc. are disabled outside of |smodule|-environments.
+
+ Variables are different -- variables are allowed everywhere, are not exported when the
+ current module (if one exists) is imported (via \stexcode"\importmodule" or
+ \stexcode"\usemodule") and (also unlike symbol declarations) ``disappear'' at the end of
+ the current \TeX\xspace group.
+
+ \begin{function}{\svar}
+ So far, we have always used variables using \stexcode"\svar{n}", which marks-up $n$ as
+ a variable with name |n|. More generally, \stexcode"\svar[foo]{<texcode>}" marks-up
+ the arbitrary |<texcode>| as representing a variable with name |foo|.
+ \end{function}
+
+ Of course, this makes it difficult to reuse variables, or introduce ``functional''
+ variables with arities $>0$, or provide them with a type or definiens.
+
+ \begin{function}{\vardef}
+ For that, we can use the \stexcode"\vardef" command. Its syntax is largely the same as
+ that of \stexcode"\symdef", but unlike symbols, variables have only one notation
+ (\textcolor{red}{TODO: so far?}), hence there is only \stexcode"\vardef" and no
+ \stexcode"\vardecl".
+ \end{function}
+
+\stexexample{%
+\vardef{varf}[
+ name=f,
+ type=\funtype{\Nat}{\Nat},
+ op=f,
+ args=1,
+ prec=0;\neginfprec
+]{\comp{f}#1}
+\vardef{varn}[name=n,type=\Nat]{\comp{n}}
+\vardef{varx}[name=x,type=\Nat]{\comp{x}}
+
+Given a function $\varf!:\funtype{\Nat}{\Nat}$,
+by $\addition{\varf!,\varn}$ we mean the function
+$\fun{\varx}{\varf{\addition{\varx,\varn}}}$
+}
+
+(of course, ``lifting'' addition in the way described in the previous example is an
+operation that deserves its own symbol rather than abusing \stexcode"\addition",
+but... well.)
+
+\textcolor{red}{TODO: bind=forall/exists}
+\end{sfragment}
+
+\begin{sfragment}{Variable Sequences}
+ Variable \emph{sequences} occur quite frequently in informal mathematics, hence they
+ deserve special support. Variable sequences behave like variables in that they disappear
+ at the end of the current \TeX\xspace group and are not exported from modules, but their
+ declaration is quite different.
+
+ \begin{function}{\varseq}
+ A variable sequence is introduced via the command \stexcode"\varseq", which takes the
+ usual optional arguments |name| and |type|. It then takes a starting index, an end
+ index and a \emph{notation} for the individual elements of the sequence parametric in
+ an index. Note that both the starting as well as the ending index may be variables.
+ \end{function}
+
+ This is best shown by example:
+ \stexexample{%
+\vardef{varn}[name=n,type=\Nat]{\comp{n}}
+\varseq{seqa}[name=a,type=\Nat]{1}{\varn}{\comp{a}_{#1}}
+
+The $i$th index of $\seqa!$ is $\seqa{i}$.
+}
+
+Note that the syntax |\seqa!| now automatically generates a presentation based on the
+starting and ending index.
+
+\textcolor{red}{TODO: more notations for invoking sequences}.
+
+\vardef{varn}[name=n,type=\Nat]{\comp{n}}
+\varseq{seqa}[name=a]{1}{\varn}{\comp{a}_{#1}}
+
+Notably, variable sequences are nicely compatible with |a|-type arguments, so we can do
+the following:
+
+\stexexample{%
+$\addition{\seqa}$
+}
+
+Sequences can be \emph{multidimensional} using the |args|-key, in which case the
+notation's arity increases and starting and ending indices have to be provided as a
+comma-separated list:
+
+\stexexample{%
+\vardef{varm}[name=m,type=\Nat]{\comp{m}}
+\varseq{seqa}[
+ name=a,
+ args=2,
+ type=\Nat,
+]{1,1}{\varn,\varm}{\comp{a}_{#1}^{#2}}
+
+$\seqa!$ and $\addition{\seqa}$
+}
+\vardef{varm}[name=m,type=\Nat]{\comp{m}}
+
+We can also explicitly provide a ``middle'' segment to be used, like such:
+
+\stexexample{%
+\varseq{seqa}[
+ name=a,
+ type=\Nat,
+ args=2,
+ mid={\comp{a}_{\varn}^1,\comp{a}_1^2,\ellipses,\comp{a}_{1}^{\varm}}
+]{1,1}{\varn,\varm}{\comp{a}_{#1}^{#2}}
+
+$\seqa!$ and $\addition{\seqa}$
+}
+\end{sfragment}
+\end{smodule}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: binarysymbol newbinarysymbol hl,args a,b,c,d,e ascendingchain assoc binl
+% LocalWords: a,assoc binr x,y,z conj a,b,c,d pwconj funtype succ prec opprec argprec1
+% LocalWords: argprec texcode varf varn n,type varx x,type varseq seqa a,type th m,type
diff --git a/macros/latex/contrib/stex/doc/packages/stex-terms.tex b/macros/latex/contrib/stex/doc/packages/stex-terms.tex
index cc67ce0c7f..759b3f5fdd 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-terms.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-terms.tex
@@ -1 +1,177 @@
-\textcolor{red}{TODO: terms documentation} \ No newline at end of file
+\begin{smodule}{SymbolsInText}
+ \symdef{set}{\comp{\texttt{Set}}}
+
+ Given a symbol declaration \stexcode"\symdecl{symbolname}",
+ we obtain a semantic macro \stexcode"\symbolname".
+ We can use this semantic macro in math mode to use its notation(s),
+ and we can use \stexcode"\symbolname!"
+ in math mode to use its operator notation(s).
+ What else can we do?
+
+\begin{sfragment}{\texttt{\textbackslash symref} and its variants}
+
+ \begin{function}{\symref,\symname}
+ We have already seen \stexcode"\symname" and
+ \stexcode"\symref", the latter being the more general.
+
+ \stexcode"\symref{<symbolname>}{<code>}" marks-up |<code>|
+ as referencing |<symbolname>|. Since quite often, the |<code>|
+ should be (a variant of) the name of the symbol anyway,
+ we also have \stexcode"\symname{<symbolname>}".
+ \end{function}
+
+ Note that \stexcode"\symname" uses the \emph{name}
+ of a symbol, not its macroname. More precisely,
+ \stexcode"\symname" will insert the name of the symbol
+ with ``|-|'' replaced by spaces.
+ If a symbol does not have
+ an explicit |name=| given, the two are equal -- but
+ for \stexcode"\symname" it often makes sense to make the
+ two explicitly distinct. For example:
+ \stexexample{%
+\symdef{Nat}[
+ name=natural-number,
+ type=\set
+]{\comp{\mathbb{N}}}
+
+A \symname{Nat} is...
+ }
+
+ \stexcode"\symname" takes two additional optional
+ arguments, |pre=| and |post=| that get prepended or appended
+ respectively to the symbol name.
+
+ \begin{function}{\Symname}
+ Additionally, \stexcode"\Symname" behaves exactly
+ like \stexcode"\symname", but will capitalize the first
+ letter of the name:
+ \end{function}
+ \stexexample{%
+\Symname[post=s]{Nat} are...
+ }
+
+ \begin{dangerbox}
+ This is as good a place as any other to explain how
+ \sTeX resolves a string |symbolname| to an actual symbol.
+
+ If \stexcode"\symbolname" is a semantic macro, then
+ \sTeX has no trouble resolving |symbolname| to the full
+ URI of the symbol that is being invoked.
+
+ However, especially in \stexcode"\symname" (or if a symbol
+ was introduced using \stexcode"\symdecl*" without
+ generating a semantic macro), we might
+ prefer to use the \emph{name} of a symbol directly for
+ readability -- e.g. we would want to write
+ \stexcode"A \symname{natural-number} is..." rather than
+ \stexcode"A \symname{Nat} is...". \sTeX attempts to handle
+ this case thusly:
+
+ If |string| does \emph{not} correspond to a semantic
+ macro \stexcode"\string" and does \emph{not}
+ contain a |?|, then \sTeX checks
+ all symbols currently in scope until it finds one,
+ whose name is |string|. If |string| is of the
+ form |pre?name|, \sTeX first looks through all modules
+ currently in scope, whose full URI ends with |pre|,
+ and then looks for a symbol with name |name| in those.
+ This allows
+ for disambiguating more precisely, e.g. by
+ saying \stexcode"\symname{Integers?addition}"
+ or \stexcode"\symname{RealNumbers?addition}" in the
+ case where several |addition|s are in scope.
+ \end{dangerbox}
+\end{sfragment}
+
+\symdef{addition}[op=+,prec=100,args=2]{#1 \comp+ #2}
+\symdef{multiplication}[op=\cdot,prec=50,args=a]{#1}{##1 \comp\cdot ##2}
+
+\begin{sfragment}{Marking Up Text and On-the-Fly Notations}
+ We can also use semantic macros outside of text mode though,
+ which allows us to annotate arbitrary text fragments.
+
+ Let us assume again, that we have
+ \stexcode"\symdef{addition}[args=2]{#1 \comp+ #2}". Then we
+ can do
+ \stexexample{%
+\addition{\comp{The sum of} \arg{$\svar{n}$} \comp{ and }\arg{$\svar{m}$}}
+is...
+ }
+ ...which marks up the text fragment as representing
+ an \emph{application} of the |addition|-symbol to two
+ argument $\svar{n}$ and $\svar{m}$.
+
+ \begin{mmtbox}
+ As expected, the above example is translated to \omdoc/\mmt
+ as an |OMA| with |<OMS name="...?addition"/>| as head and
+ |<OMV name="n"/>| and |<OMV name="m"/>| as arguments.
+ \end{mmtbox}
+
+ \begin{dangerbox}
+ Note the difference in treating ``arguments'' between math mode and text mode. In
+ math mode the (in this case two) tokens/groups following the \stexcode|\addition|
+ macro are treated as arguments to the addition function, whereas in text mode the
+ group following \stexcode|\addition| is taken to be the ad-hoc presentation. We
+ drill in on this now.
+ \end{dangerbox}
+
+ \begin{function}{\arg}
+ In text mode, every semantic macro takes exactly one
+ argument, namely the text-fragment to be annotated.
+ The \stexcode"\arg" command is only valid within the
+ argument to a semantic macro and marks up the
+ \emph{individual arguments} for the symbol.
+ \end{function}
+
+ We can also use semantic macros in text mode to invoke
+ an operator itself instead of its application, with the
+ usual syntax using |!|:
+ \stexexample{%
+\addition!{Addition} is...
+ }
+
+ Indeed, \stexcode"\symbolname!{<code>}" is exactly equivalent to
+ \stexcode"\symref{symbolname}{<code>}" (the latter is in fact implemented in terms of
+ the former).
+
+ \stexcode"\arg" also allows us to switch the order of arguments
+ around and ``hide'' arguments: For example, \stexcode"\arg[3]{<code>}"
+ signifies that |<code>| represents the \emph{third}
+ argument to the current operator, and \stexcode"\arg*[i]{<code>}"
+ signifies that |<code>| represents the $i$th argument, but it
+ should not produce any output (it is exported in the |xhtml|
+ however, so that \mmt and other systems can pick up on it).\ednote{MK: I do not
+ understand why we have to/want to give the second arg*; I think this must be
+ elaborated on.}
+ \stexexample{%
+\addition{\comp{adding}
+ \arg[2]{$\svar{k}$}
+ \arg*{$\addition{\svar{n}}{\svar{m}}$}} yields...
+ }
+ Note that since the second \stexcode"\arg" has no explicit argument
+ number, it automatically represents the first not-yet-given
+ argument -- i.e. in this case the first one.\ednote{MK: I do not understand this at
+ all. }
+
+ \paragraph{} The same syntax can be used in math mod as well. This allows us to
+ spontaneously introduce new notations on the fly. We can activate it using the starred
+ variants of semantic macros:
+
+ \stexexample{%
+Given $\addition{\svar{n}}{\svar{m}}$, then
+$\addition*{
+ \arg*{\addition{\svar{n}}{\svar{m}}}
+ \comp{+}
+ \arg{\svar{k}}
+}$ yields...
+ }
+
+\end{sfragment}
+\end{smodule}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
+
+% LocalWords: prec cdot,prec 50,args th
diff --git a/macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex b/macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex
index fb7d0c1e5b..ac321f129c 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-tikzinput.tex
@@ -1 +1,61 @@
-\textcolor{red}{TODO: tikzinput documentation} \ No newline at end of file
+\begin{function}{image}
+ The behavior of the \pkg{ikzinput} package is determined by whether the |image| option
+ is given. If it is not, then the \pkg{tikz} package is loaded, all other options are
+ passed on to it and |\tikzinput{|\meta{file}|}| inputs the TIKZ file \meta{file}|.tex|;
+ if not, only the \pkg{graphicx} package is loaded and |\tikzinput{|\meta{file}|}| loads
+ an image file \meta{file}|.|\meta{ext} generated from \meta{file}|.tex|.
+\end{function}
+
+The selective input functionality of the \pkg{tikzinput} package assumes that the TIKZ
+pictures are externalized into a standalone picture file, such as the following one
+
+\begin{latexcode}
+\documentclass{standalone}
+\usepackage{tikz}
+\usetikzpackage{...}
+\begin{document}
+ \begin{tikzpicture}
+ ...
+ \end{tikzpicture}
+\end{document}
+\end{latexcode}
+
+ The \pkg{standalone} class is a minimal {\LaTeX} class that when loaded in a document
+ that uses the \pkg{standalone} package: the preamble and the |documenat| environment
+ are disregarded during loading, so they do not pose any problems. In effect, an
+ |\input| of the file above only sees the |tikzpicture| environment, but the file itself
+ is standalone in the sense that we can run {\LaTeX} over it separately, e.g. for
+ generating an image file from it.
+
+\begin{function}{\tikzinput,\ctikzinput}
+ This is exactly where the \pkg{tikzinput} package comes in: it supplies the |\tikzinput|
+ macro, which -- depending on the |image| option -- either directly inputs the TIKZ
+ picture (source) or tries to load an image file generated from it.
+
+ Concretely, if the |image| option is not set for the \pkg{tikzinput} package, then
+ |\tikzinput[|\meta{opt}|]{|\meta{file}|}| disregards the optional argument \meta{opt}
+ and inputs \meta{file}|.tex| via |\input| and resizes it to as specified in the |width|
+ and |height| keys. If it is, |\tikzinput[|\meta{opt}|]{|\meta{file}|}| expands to
+ |\includegraphics[|\meta{opt}|]{|\meta{file}|}|.
+
+ |\ctizkinput| is a version of |\tikzinput| that is centered.
+\end{function}
+
+\begin{function}{\mhtikzinput,\cmhtikzinput}
+ |\mhtizkinput| is a variant of |\tikzinput| that treats its file path argument as a
+ relative path in a math archive in analogy to \stexcode|\inputref|. To give the archive
+ path, we use the |mhrepos=| key. Again, |\cmhtizkinput| is a version of |\mhtikzinput|
+ that is centered.
+\end{function}
+
+\begin{function}{\libusetikzlibrary}
+ Sometimes, we want to supply archive-specific TIKZ libraries in the |lib| folder of the
+ archive or the |meta-inf/lib| of the archive group. Then we need an analogon to
+ \stexcode|\libinput| for \stexcode|\usetikzlibrary|. The \pkg{stex-tikzinput} package
+ provides the \stexcode|libusetikzlibrary| for this purpose.
+\end{function}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/stex-abstract.tex b/macros/latex/contrib/stex/doc/stex-abstract.tex
index 445bbf064a..f342bbf907 100644
--- a/macros/latex/contrib/stex/doc/stex-abstract.tex
+++ b/macros/latex/contrib/stex/doc/stex-abstract.tex
@@ -1,10 +1,26 @@
\begin{abstract}
- \sTeX is a collection of {\LaTeX} package that allow to markup documents semantically without leaving the document format, essentially turning {\LaTeX} into a document format for mathematical knowledge management (MKM).
+ \sTeX is a collection of {\LaTeX} packages that allow to markup documents semantically
+ without leaving the document format.
+
+ Running `pdflatex` over sTeX-annotated documents formats them into normal-looking
+ PDF. But sTeX also comes with a conversion pipeline into semantically annotated HTML5,
+ which can host semantic added-value services that make the documents active
+ (i.e. interactive and user-adaptive) and essentially turning {\LaTeX} into a document
+ format for (mathematical) knowledge management (MKM).
\sTeX augments {\LaTeX} with
\begin{itemize}
- \item \emph{Semantic macros} that denote and distinguish between mathematical concepts, operators, etc. independent of their notational presentation,
- \item A powerful \emph{module system} that allows for authoring and importing individual fragments containing document text and/or semantic macros, independent of -- and without hard coding -- directory paths relative to the current document,
- \item A mechanism for exporting \sTeX documents to (modular) XHTML, preserving all the semantic information for semantically informed knowledge management services.
+ \item \emph{semantic macros} that denote and distinguish between mathematical concepts,
+ operators, etc. independent of their notational presentation,
+ \item a powerful \emph{module system} that allows for authoring and importing individual
+ fragments containing document text and/or semantic macros, independent of -- and
+ without hard coding -- directory paths relative to the current document, and
+ \item a mechanism for exporting \sTeX documents to (modular) XHTML, preserving all the
+ semantic information for semantically informed knowledge management services.
\end{itemize}
\end{abstract}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "stex-manual"
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/stex-doc.pdf b/macros/latex/contrib/stex/doc/stex-doc.pdf
index 7499111fa8..0d0a36720c 100644
--- a/macros/latex/contrib/stex/doc/stex-doc.pdf
+++ b/macros/latex/contrib/stex/doc/stex-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/stex/doc/stex-doc.tex b/macros/latex/contrib/stex/doc/stex-doc.tex
index d2e8239083..7a98ff49c2 100644
--- a/macros/latex/contrib/stex/doc/stex-doc.tex
+++ b/macros/latex/contrib/stex/doc/stex-doc.tex
@@ -1,4 +1,4 @@
-\def\bibfolder{../lib/bib}
+\def\bibfolder#1{../lib/bib/#1}
\input{stex-docheader}
\infulldoctrue
@@ -7,14 +7,13 @@
\clist_gput_right:Nn \g_docinput_clist
{ #1 }
}
-\bool_set_true:N \stex_dtx_tests_bool
\ExplSyntaxOff
\expandafter\newif\csname if@infulldoc\expandafter\endcsname\csname @infulldoctrue\endcsname
\begin{document}
\title{
- The {\stex{3}} Package
+ The {\stex{3}} Package Collection
\thanks{Version {\fileversion} (last revised {\filedate})}
}
\author{Michael Kohlhase, Dennis Müller\\
@@ -207,4 +206,12 @@
\DocInputAgain
+\begin{sfragment}{References}\ednote{we need an un-numbered version {sfragment*}}
+ \printbibliography[heading=none]
+\end{sfragment}
\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/latex/contrib/stex/doc/stex-docheader.tex b/macros/latex/contrib/stex/doc/stex-docheader.tex
index d0f13e90b3..d16b19703b 100644
--- a/macros/latex/contrib/stex/doc/stex-docheader.tex
+++ b/macros/latex/contrib/stex/doc/stex-docheader.tex
@@ -7,14 +7,15 @@
\RequirePackage{tikzinput}
\usetikzlibrary{fit}
-\usepackage[debug=all,lang=en, mathhub=./tests]{stex}
+% \usepackage[debug=all,lang=en, mathhub=./tests]{stex}
+\usepackage[lang=en, mathhub=./tests]{stex}
\usepackage{url,array,float,textcomp}
\usepackage[show]{ed}
\usepackage[hyperref=auto,style=alphabetic]{biblatex}
-\addbibresource{\bibfolder/kwarcpubs.bib}
-\addbibresource{\bibfolder/extpubs.bib}
-\addbibresource{\bibfolder/kwarccrossrefs.bib}
-\addbibresource{\bibfolder/extcrossrefs.bib}
+\addbibresource{\bibfolder{kwarcpubs.bib}}
+\addbibresource{\bibfolder{extpubs.bib}}
+\addbibresource{\bibfolder{kwarccrossrefs.bib}}
+\addbibresource{\bibfolder{extcrossrefs.bib}}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{xspace}
@@ -26,73 +27,121 @@
\floatname{exfig}{Example}
\usepackage{listings}
-
-\ExplSyntaxOn
-
-\keys_define:nn { stex-tests } {
- do .bool_set:N = \stex_dtx_tests_bool
-}
-
-\ProcessKeysOptions { stex-tests }
-
-\prg_new_conditional:Nnn \stex_indtx: { T } {
- \bool_if:NTF \stex_dtx_tests_bool
- \prg_return_true: \prg_return_false:
+\usepackage{lststex}
+
+\lstdefinelanguage{sTeX}{
+ sensitive=true,
+ numbers=left,
+ numbersep=3pt,
+ xleftmargin=3pt,
+ alsodigit={\$},
+ %gobble=4,
+ alsoletter={\\},
+ %moredelim = [s][\itshape]{$}{$},
+ %moredelim = [s][\itshape\bfseries]{\\[}{\\]},
+ classoffset=0,keywordstyle=\bfseries,morekeywords={
+ \\begin,\\end,\\ExplSyntaxOn,\\ExplSyntaxOff,\\documentclass,
+ \\usepackage,\\def,\\[,\\],\\else,\\fi,$\iffalse$\fi,
+ \\newcommand, \\renewcommand, \\let
+ },
+ classoffset=1,keywordstyle=\itshape\color{OliveGreen},morekeywords={
+ \\defeq,\\geometricSeries,\\infinitesum,\\realdivide,
+ \\realpower,
+ \\symbolname,\\binarysymbol,\\newbinarysymbol,\\addition,
+ \\summation,\\ascendingchain,\\quantforall,\\set,\\funtype,
+ \\Nat,\\successor,\\multiplication,\\Int,\\zero,\\uminus,
+ \\intmonoid
+ },
+ classoffset=2,keywordstyle=\color{blue},morekeywords={
+ \\symdecl,\\symdef,\\notation,\\vardef,\\varseq,\\instantiate,
+ \\varinstantiate, \\renamedecl, \\assign, \\setnotation,
+ \\STEXexport
+ },
+ classoffset=3,keywordstyle=\color{BurntOrange},morekeywords={
+ \\importmodule,\\usemodule,\\libinput,\\inputref,\\mhinput,
+ \\libusepackage,\\addmhbibresource,\\ifinputref
+ },
+ classoffset=4,keywordstyle=\color{Purple},morekeywords={
+ \\definiendum,\\definame,\\symref,\\symname,\\comp,
+ \\compemph,\\definiens,\\svar,\\infprec,\\neginfprec,\\ellipses,
+ \\Symname,\\arg
+ },
+ classoffset=5,keywordstyle=\color{magenta},morekeywords={
+ smodule,sdefinition,sassertion,sparagraph,sexample,
+ sproof,subproof,spfcases,spfcase,spfstep,spfcomment,
+ \\spfidea,\\spfsketch,\\spfcasesketch,\\sproofend,
+ \\spfjust,\\premise,\\justarg,
+ copymodule,interpretmodule,mathstructure,sexample
+ },
+ classoffset=6,keywordstyle=\color{cyan},morekeywords={
+ sfragment,blindfragment,\\skipfragment,
+ \\currentsectionlevel,\\Currentsectionlevel
+ \\prematurestop,\\afterprematurestop,
+ \\setSGvar,\\useSGvar,\\ifSGvar
+ },
+ classoffset=7,keywordstyle=\color{brown},morekeywords={
+ frame,note,\\ifnotes,\\setslidelogo,\\setsource,\\setlicensing
+ slides,notes,sectocframes,frameimages,fiboxed,
+ nparagraph, nparagraph, ndefinition, nexample, nsproof, nassertion,
+ \\frameimage,\\mhframeimage,\\textwarning,
+ \\activateexcursion,\\printexcursion,\\excursionref,\\excursiongroup
+ },
+ classoffset=8,keywordstyle=\color{red},morekeywords={
+ frame,note
+ }
}
-\ExplSyntaxOff
-
-\lstdefinestyle{mylatex}{
- keywordstyle=\color{BurntOrange}
-}
-\lstdefinelanguage{mylatex}{
- emphstyle=\underbar,
- alsodigit={:},
- %alsoletter={_},
- alsoletter={\\}
- sensitive=true,
- classoffset=0,keywordstyle=\bfseries,
- morekeywords={\\begin,\\end,\\ExplSyntaxOn,\\ExplSyntaxOff},
- classoffset=1,keywordstyle=\color{blue},
- morekeywords={
- \\symdecl,
- \\symdef,
- \\notation,
- \\abbrdef,
- \\importmodule,
- \\usemodule,
- \\STEXwithbrackets,
- \\symref
- },
- classoffset=2,keywordstyle=\color{Purple},
- morekeywords={
- \\stex_path_from_string:Nn,
- \\stex_path_to_string:NN,
- \\stex_path_to_string:N,
- \\stex_require_repository:n,
- \\stex_modules_current_namespace:,
- \\stex_debug:n,
- \\stex_set_current_repository:n,
- \\stex_file_in_smsmode:nn,
- \\stex_get_symbol:n,
- },
- classoffset=3,keywordstyle=\color{SkyBlue},
- morekeywords={
- \\l_stex_modules_ns_str,
- \\g_stex_currentfile_seq,
- \\l_stex_current_module_prop,
- \\l_stex_get_symbol_uri_str,
- }
- classoffset=0,
-%^^A morecomment=[l][\color{Gray}]{//},
-%^^A morecomment=[s][\color{Gray}]{/*}{*/},
- morecomment=[s][\color{Green}]{$}{$},,
- morecomment=[s][\color{OliveGreen}]{\\[}{\\]},
+%\lstdefinestyle{mylatex}{
+% keywordstyle=\color{BurntOrange}
+%}
+%\lstdefinelanguage{mylatex}{
+% emphstyle=\underbar,
+% alsodigit={:},
+% %alsoletter={_},
+% alsoletter={\\}
+% sensitive=true,
+% classoffset=0,keywordstyle=\bfseries,
+% morekeywords={\\begin,\\end,\\ExplSyntaxOn,\\ExplSyntaxOff},
+% classoffset=1,keywordstyle=\color{blue},
+% morekeywords={
+% \\symdecl,
+% \\symdef,
+% \\notation,
+% \\abbrdef,
+% \\importmodule,
+% \\usemodule,
+% \\STEXwithbrackets,
+% \\symref
+% },
+% classoffset=2,keywordstyle=\color{Purple},
+% morekeywords={
+% \\stex_path_from_string:Nn,
+% \\stex_path_to_string:NN,
+% \\stex_path_to_string:N,
+% \\stex_require_repository:n,
+% \\stex_modules_current_namespace:,
+% \\stex_debug:n,
+% \\stex_set_current_repository:n,
+% \\stex_file_in_smsmode:nn,
+% \\stex_get_symbol:n,
+% },
+% classoffset=3,keywordstyle=\color{SkyBlue},
+% morekeywords={
+% \\l_stex_module_ns_str,
+% \\g_stex_currentfile_seq,
+% \\l_stex_current_module_prop,
+% \\l_stex_get_symbol_uri_str,
+% }
+% classoffset=0,
+%%^^A morecomment=[l][\color{Gray}]{//},
+%%^^A morecomment=[s][\color{Gray}]{/*}{*/},
+% morecomment=[s][\color{Green}]{$}{$},,
+% morecomment=[s][\color{OliveGreen}]{\\[}{\\]},
%^^A morestring=[b][\color{Purple}]\$,
-}
-\lstnewenvironment{latexcode}[1][language=mylatex]{\lstset{language=mylatex,basicstyle=\tiny,inputencoding=utf8,#1,alsoletter={\\,*},alsoother={\$}}}{}
-
+%}
+\lstnewenvironment{latexcode}[1][]{\lstset{language=sTeX,#1}}{}
+\def\stexcode{\lstinline[language=sTeX]}
\usepackage{mdframed,realboxes}
\usepackage[most]{tcolorbox}
@@ -103,13 +152,13 @@
\newenvironment{stextest@output}
{
- \begin{mdframed}[linewidth=1pt,backgroundcolor=white]\tiny
+ \begin{mdframed}[linewidth=1pt,backgroundcolor=white]\small
}
{\end{mdframed}}
\newenvironment{stextest@input}
{
- \begin{mdframed}[linewidth=1pt,backgroundcolor=lightgray]\tiny
+ \begin{mdframed}[linewidth=1pt,backgroundcolor=white]\small
}
{\end{mdframed}}
@@ -118,47 +167,49 @@
\newcount\test@counter\test@counter=0
\newcount\example@counter\example@counter=0
-\newenvironment{stextest@border}
-{
- \global\advance\test@counter by 1
- \newtcolorbox{stextestborderbox}{
- empty,
- title={Test \the\test@counter},
- attach boxed title to top left,
- minipage boxed title,
- boxed title style={empty,size=minimal,toprule=0pt,top=4pt,left=3mm,overlay={}},
- coltitle=red,fonttitle=\bfseries,
- before=\par\medskip\noindent,parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
- before upper=\csname @totalleftmargin\endcsname0pt,
- overlay unbroken={\draw[red,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
- overlay first={\draw[red,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
- overlay middle={\draw[red,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
- overlay last={\draw[red,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
- }
-%^^A\refstepcounter{remark}
-\begin{stextestborderbox}\small
+\newtcolorbox{exampleborderbox}{
+ empty,
+ title={Example \the\example@counter},
+ attach boxed title to top left,
+ minipage boxed title,
+ boxed title style={empty,size=minimal,toprule=0pt,top=1pt,left=3mm,overlay={}},
+ coltitle=blue,fonttitle=\bfseries,
+ parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
+ before upper=\csname @totalleftmargin\endcsname0pt,
+ overlay unbroken={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay first={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay middle={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay last={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
+ outer arc=4pt
}
-{\end{stextestborderbox}}
+
+
+%\newtcolorbox{exampleborderbox}{
+% enhanced,
+% left=0pt,
+% title={Example \the\example@counter},
+% right=0pt,
+% top=8pt,
+% bottom=8pt,
+% colback=white,
+% colframe=blue,
+% width=\textwidth,
+% enlarge left by=0mm,
+% boxsep=5pt,
+% fontupper=\small,
+% arc=4pt,
+% outer arc=4pt,
+% leftupper=1.5cm,
+% fonttitle=\bfseries,
+% coltitle=blue,
+% boxed title style={empty,size=minimal,toprule=0pt,top=1pt,left=3mm,overlay={}},
+%}
\newenvironment{example@border}
{
\global\advance\example@counter by 1
- \newtcolorbox{exampleborderbox}{
- empty,
- title={Example \the\example@counter},
- attach boxed title to top left,
- minipage boxed title,
- boxed title style={empty,size=minimal,toprule=0pt,top=1pt,left=3mm,overlay={}},
- coltitle=blue,fonttitle=\bfseries,
- parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
- before upper=\csname @totalleftmargin\endcsname0pt,
- overlay unbroken={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
- overlay first={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
- overlay middle={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
- overlay last={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
- }
%^^A\refstepcounter{remark}
-\begin{exampleborderbox}\small
+\begin{exampleborderbox}
}
{\end{exampleborderbox}}
@@ -172,97 +223,134 @@
\ExplSyntaxOn
-\AddToHook{begindocument}{
- \stex_indtx:T {
- \newwrite\alltestsoutfile
- \immediate\openout\alltestsoutfile=alltests.tst
- }
-}
-
- \def\stextest{
- \begingroup
- \catcode`\\=12\relax
- \catcode`\#=12\relax
- \catcode`\&=12\relax
- \catcode`\$=12\relax
- \catcode`\^=12\relax
- \catcode`\_=12\relax
- \catcode`^^J=12\relax
- \endlinechar=`^^J
- \newlinechar=-1
+\def\stexexample{
+ \begingroup
+ \catcode`\\=12\relax
+ \catcode`\#=12\relax
+ \catcode`\&=12\relax
+ \catcode`\$=12\relax
+ \catcode`\^=12\relax
+ \catcode`\_=12\relax
+ \catcode`\ =12\relax
+ \catcode`^^J=12\relax
+ \endlinechar=`^^J
+ \newlinechar=-1
%^^A \everyeof{\noexpand}
- \test_a:n
- }
- \long\def \test_a:n #1 {
- \endgroup
- \stex_indtx:T {
- \immediate\write\alltestsoutfile{%
- ^^J\c_backslash_str stextest{\detokenize{^^J^^J#1^^J}}^^J
- }
+ \example_a:n
+}
+\long\def\example_a:n #1 {
+ \endgroup
+ \begin{example@border}
+ \immediate\openout\testoutfile=stextest.tex
+ \immediate\write\testoutfile{
+ \c_backslash_str begin{latexcode}
+ \detokenize{^^J}#1
+ \c_backslash_str end{latexcode}
}
- \begin{stextest@border}
- \immediate\openout\testoutfile=stextest.tst
- \immediate\write\testoutfile{
- \c_backslash_str begin{latexcode}
- \detokenize{^^J^^J#1^^J}
- \c_backslash_str end{latexcode}
- }
- \immediate\closeout\testoutfile
- \begin{stextest@input}
- \catcode`\#=12\relax
- \input{stextest.tst}
- \end{stextest@input}
- \immediate\openout\testoutfile=stextest.tst
- \immediate\write\testoutfile{\detokenize{#1}}
- \immediate\closeout\testoutfile
- \stex_indtx:T {
- \begin{stextest@output}
- \input{stextest.tst}
- \end{stextest@output}
- }
- \end{stextest@border}
- }
+ \immediate\closeout\testoutfile
+
+ Input:
+
+ \begin{stextest@input}
+ \catcode`\#=12\relax
+ \input{stextest.tex}
+ \end{stextest@input}
+ \immediate\openout\testoutfile=stextest.tex
+ \immediate\write\testoutfile{#1}
+ \immediate\closeout\testoutfile
+
+ Output:
+
+ \begin{stextest@output}
+ \input{stextest.tex}
+ \end{stextest@output}
+ \end{example@border}
+}
- \def\stexexample{
- \begingroup
- \catcode`\\=12\relax
- \catcode`\#=12\relax
- \catcode`\&=12\relax
- \catcode`\$=12\relax
- \catcode`\^=12\relax
- \catcode`\_=12\relax
- \catcode`^^J=12\relax
- \endlinechar=`^^J
- \newlinechar=-1
-%^^A \everyeof{\noexpand}
- \example_a:n
- }
- \long\def \example_a:n #1 {
- \endgroup
- \begin{example@border}
- \immediate\openout\testoutfile=stextest.tst
- \immediate\write\testoutfile{
- \c_backslash_str begin{latexcode}
- \detokenize{^^J}#1
- \c_backslash_str end{latexcode}
- }
- \immediate\closeout\testoutfile
- \begin{stextest@input}
- \catcode`\#=12\relax
- \input{stextest.tst}
- \end{stextest@input}
- \immediate\openout\testoutfile=stextest.tst
- \immediate\write\testoutfile{#1}
- \immediate\closeout\testoutfile
- \begin{stextest@output}
- \input{stextest.tst}
- \end{stextest@output}
- \end{example@border}
- }
+\ExplSyntaxOff
- \long\def\test#1{}
+\def\textwarning{\includegraphics[width=1.2em]{stex-dangerous-bend}\xspace}
+\newtcolorbox{dangerbox}{
+ breakable,
+ enhanced,
+ left=0pt,
+ right=0pt,
+ top=8pt,
+ bottom=8pt,
+ colback=white,
+ colframe=red,
+ width=\textwidth,
+ enlarge left by=0mm,
+ boxsep=5pt,
+ fontupper=\small,
+ arc=4pt,
+ outer arc=4pt,
+ leftupper=1.5cm,
+ overlay={
+ \node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
+ {\includegraphics[width=1cm,height=1cm]{stex-dangerous-bend}};}
+}
-\ExplSyntaxOff
+\usetikzlibrary{decorations.pathmorphing,shapes,arrows,calc}
+% Taken from pgflibrarytikzmmt.code.tex
+\newcommand{\mmtarrowtip}{angle 45}
+\newcommand{\mmtarrowtipmonoright}{right hook}
+
+\tikzstyle{include}=[\mmtarrowtipmonoright-\mmtarrowtip,thick]
+\tikzstyle{morph}=[-\mmtarrowtip,thick]
+\tikzstyle{preview}=[decorate, decoration={coil,aspect=0,amplitude=1pt,
+ segment length=6pt,
+ pre=lineto,pre length=3pt,
+ post=lineto,post length=5pt}, thick]
+\tikzstyle{view}=[preview,-\mmtarrowtip]
+
+% TIKZ RULES
+\def\mmtlogo{
+\begin{tikzpicture}
+
+ % White Background (Margins are eyeballed)
+ % This is necessary because we paste white over arrows later.
+ % If somebody want's to do the full song and dance with
+ % interrupted arrows to get transparent background, be my guest.
+
+ \fill[white!] (-0.01,0.15) rectangle (1.11,-0.95);
+
+ % Arrows
+ \draw [blue, include] (0,0) -- (1.1,0);
+ \draw [green, morph] (0,-0.4) -- (1.1,-0.4);
+ \draw [red, view] (-0,-0.8) -- (1.1,-0.8);
+
+ % Cutout for letters
+ \fill[white] (0.33,0.1) rectangle (0.66,-0.9);
+
+ % Letters
+ \node at (0.18,0) (nodeM1) {\large M};
+ \node at (0.18,-0.4) (nodeM2) {\large M};
+ \node at (0.21,-0.8) (nodeT) {\large T};
+
+\end{tikzpicture}
+}
+
+\newtcolorbox{mmtbox}{
+ breakable,
+ enhanced,
+ left=0pt,
+ right=0pt,
+ top=8pt,
+ bottom=8pt,
+ colback=white,
+ colframe=green,
+ width=\textwidth,
+ enlarge left by=0mm,
+ boxsep=5pt,
+ fontupper=\small,
+ arc=4pt,
+ outer arc=4pt,
+ leftupper=1.5cm,
+ overlay={
+ \node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
+ {\mmtlogo};}
+}
\MakeShortVerb{\|}
@@ -283,7 +371,7 @@
\def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}}
\def\cT{\mathcal{T}}\def\cD{\mathcal{D}}
-\def\fileversion{3.0}
+\def\fileversion{3.1}
\def\filedate{\today}
\RequirePackage{pdfcomment}
@@ -322,7 +410,7 @@
\newif\ifinfulldoc\infulldocfalse
\makeatother
-\def\basedocurl{https://github.com/slatex/sTeX/blob/latex3/doc}
+\def\basedocurl{https://github.com/slatex/sTeX/blob/main/doc}
\newcounter{module}
\NewDocumentEnvironment {module}{}{
@@ -331,25 +419,31 @@
}{
}
-\stexpatchmodule{\begin{module}}{\end{module}}
-
-\def\compemph#1{\textcolor{blue}{#1}}
-\def\symrefemph#1{\textcolor{green}{#1}}
-
-\RequirePackage{pdfcomment}
-\makeatletter
-\protected\def\compemph@uri#1#2{%
- \pdftooltip{%
- \srefsymuri{#2}{\compemph{#1}}%
- }{%
- URI: \detokenize{#2}%
- }%
+\stexpatchmodule[visible]{\begin{module}}{\end{module}}
+
+\usepackage{stexthm}
+
+
+\newtcolorbox{remarkbox}[1][]{
+ empty,
+ title={Remark \theremark: #1},
+ attach boxed title to top left,
+ minipage boxed title,
+ boxed title style={empty,size=minimal,toprule=0pt,top=4pt,left=3mm,overlay={}},
+ fonttitle=\bfseries,coltitle=black,
+ before=\par\medskip\noindent,parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
+ before upper=\csname @totalleftmargin\endcsname0pt,
+ overlay unbroken={\draw[black,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay first={\draw[black,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay middle={\draw[black,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
+ overlay last={\draw[black,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
}
-\protected\def\symrefemph@uri#1#2{%
- \pdftooltip{%
- \srefsymuri{#2}{\symrefemph{#1}}%
- }{%
- URI: \detokenize{#2}%
- }%
+
+\renewenvironment{remark}[1][]{
+ \refstepcounter{remark}\begin{remarkbox}[#1]
+ \begin{mdframed}[linewidth=1pt,backgroundcolor=lightgray!33!white]
+}{
+\end{mdframed}\end{remarkbox}\endlist
}
-\makeatother \ No newline at end of file
+
+\usepackage{rustex}
diff --git a/macros/latex/contrib/stex/doc/stex-manual.pdf b/macros/latex/contrib/stex/doc/stex-manual.pdf
index 80b4154b9a..32c1e047ca 100644
--- a/macros/latex/contrib/stex/doc/stex-manual.pdf
+++ b/macros/latex/contrib/stex/doc/stex-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/stex/doc/stex-manual.tex b/macros/latex/contrib/stex/doc/stex-manual.tex
index 92834af1c5..31b9c4eaeb 100644
--- a/macros/latex/contrib/stex/doc/stex-manual.tex
+++ b/macros/latex/contrib/stex/doc/stex-manual.tex
@@ -6,14 +6,12 @@
\csname if@infulldoc\endcsname\else
-\def\bibfolder{../lib/bib}
+\def\bibfolder#1{../lib/bib/#1}
\input{stex-docheader}
\infulldoctrue
-\csname bool_set_true:N\expandafter\endcsname\csname stex_dtx_tests_bool\endcsname
-
\begin{document}
\csname if@infulldoc\endcsname\else
\title{
@@ -33,7 +31,7 @@
associated software. It is primarily directed at end-users
who want to use \sTeX to author semantically
enriched documents. For the full documentation, see
- \href{\basedocurl/stex.pdf}{the \sTeX documentation}
+ \href{\basedocurl/stex-doc.pdf}{the \sTeX documentation}.
\makeatletter
\renewcommand\part{%
@@ -137,6 +135,19 @@
\long\def\ignore#1{}
+\begin{dangerbox}
+ Boxes like this one contain implementation details that are
+ mostly relevant for more advanced use cases, might be useful
+ to know when debugging, or might be good to know to better understand
+ how something works. They can easily be skipped on a first read.
+\end{dangerbox}
+
+\begin{mmtbox}
+ Boxes like this one explain how some \sTeX concept relates to the \mmt/\omdoc system,
+ philosophy or language; see \cite{uniformal:on,Kohlhase:OMDoc1.2} for introductions.
+\end{mmtbox}
+
+
\begin{sfragment}{What is \sTeX?}
Formal systems for mathematics (such as interactive theorem provers)
@@ -173,143 +184,98 @@ authoring workflows.
\paragraph{} The general \sTeX workflow combines functionalities
provided by several pieces of software:
\begin{itemize}
- \item The \sTeX package to use semantic annotations in
- {\LaTeX} documents,
- \item \RusTeX to convert |tex| sources to (semantically enriched)
- |xhtml|,
- \item The \mmt software, that extracts semantic information
- from the thus generated |xhtml| and provides semantically informed
- added value services.
+\item The \sTeX package collection to use semantic annotations in {\LaTeX} documents,
+\item \RusTeX \cite{RusTeX:on} to convert |tex| sources to (semantically enriched) |xhtml|,
+\item The \mmt system~\cite{uniformal:on}, that extracts semantic information from the
+ thus generated |xhtml| and provides semantically informed added value services.
+ Notably, \mmt integrates the \RusTeX system already.
\end{itemize}
-
-% ----------------------------
-
-\ignore{The objectives of this project will be achieved by developing a
-language and system
-that uses non-intrusive annotations
-to augment informal documents with semantic information
-(ranging from \textbf{fully formal} to \textbf{purely informal})
- without
-impacting linguistic presentation or document layout.
-That way, the system
-remains compatible with established publishing
-pipelines and practices, while additionally providing flexiformal
-information that
-enables formal knowledge management services, and hence produces
-\emph{rich active documents}, satisfying \textbf{R3}, \textbf{R4} and
-\textbf{R5}.
-In particular, it will avoid commitment to a fixed logical foundation.
-Instead, it will be designed as a modular pipeline of consecutive
-and compositional
-annotations, semantics extraction and translation steps, extensible
-via new structuring mechanisms (\textbf{R1}), library content
-(\textbf{R2}),
-NLP techniques, foundations, translation methods and
-end-user services.
-
-Naturally, the benefits of formal knowledge management services scale
-with the amount of mathematics involved. Consequently I will primarily
-focus on those
-STEM fields in which mathematical methods are most prominently
-used (e.g. mathematics, physics, computer science). Since in those fields
-\LaTeX~is the most commonly used scientific writing tool, I will also
-primarily focus on \LaTeX~as a development and evaluation target, but
-the system will be designed such that all components apart from
-the surface language will be integrable with other writing tools
-(e.g. WYSIWYG word processors).
-
-\paragraph{} The basic architecture of the proposed system is sketched in
-\autoref{fig:architecture}.
-\begin{figure}\centering
- \resizebox{0.95\textwidth}{!}{\tikzinput[]{diagram}}
- {\small (Note, that the syntax used
- in the box on the top right is prototypical and subject to change during the project.
- Details and open questions regarding the syntax are discussed here:
- \url{https://github.com/KWARC/FoMID/issues/1})}
- \caption{Basic Architecture of the Proposed System}\label{fig:architecture}
-\end{figure}
-A user can write their content using standard \LaTeX\ in an IDE;
-ideally using semantic annotations provided by \sTeX
-%and the library developed in \OBJref{smglom}
-(as in the upper right of
-\autoref{fig:architecture}), but not necessarily so.
-
-The document is converted to xhtml with \omdoc annotations
-using \LaTeX ML in the background,
-thus becoming actionable by the \mmt system. Both the source document
-as well as the generated xhtml/\omdoc are accessible to a natural language
-processing pripeline that can supply additional inferred semantic
-information or suggest annotations to the user, in the latter case
-augmenting the source document directly. This pipeline can use both
-classical NLP techniques using the GLIF system, as well as machine
-learning models such as \cite{own:fifom}.
-
-A semiformal fragment is converted
-into an appropriate syntax tree (possibly containing opaque
-informal nodes),
-thus becoming amenable
-to flexiformal knowledge management services. In a consecutive step
--- if sufficiently annotated --, these are
-additionally translated
-to a fully formal foundation, e.g. using the techniques from
-\cite{DMueller:phd:19,own:translations}, allowing
-more powerful services and conversion to established formal
-systems. All three representations
-are thus available from within the \mmt system for various
-knowledge management services, interfaces for which can be
-implemented in the IDE.
-
-Importantly, every non-trivial arrow in the figure is
-composable and extensible --
-translations to a foundation can be provided
-by supplying an appropriate formalization and alignment-based
-translations (or entirely new methods),
-services can be implemented generically using the \mmt API,
-NLP techniques can be implemented both inside and alongside of
-GLIF, and the concrete syntax within \sTeX can be extended
-by convenience macros in \LaTeX\ (enabling new
-structuring mechanisms as in \textbf{R1} via
-\mmt extensions, see
-\cite{MueRabRot:rslffml20}) as well as via additions to
-the library, which will be extensible both from within the IDE
-as well as on MathHub,
-remaining backwards compatible with existing content in a surface
-language. Additionally, sufficiently disambiguated
-statements can be translated to the syntax of
-external systems (such as interactive theorem prover systems
-or computer algebra systems),
-which can thus be integrated as additional services into the system.
-}
-
\end{sfragment}
\begin{sfragment}{Quickstart}
-
- \begin{sfragment}{Setup}
- \begin{sfragment}{The \sTeX IDE}
- TODO: VSCode Plugin
- \end{sfragment}
- \begin{sfragment}{Manual Setup}
- Foregoing on the \sTeX IDE, we will need several
- pieces of software; namely:
+
+ \begin{sfragment}{Setup}
+ There are two ways of using \sTeX: as a
+ \begin{enumerate}
+ \item way of writing {\LaTeX} more modularly (object-oriented Math) for creating PDF
+ documents or
+ \item foundation for authoring active documents in HTML5 instrumented with knowledge
+ management services.
+ \end{enumerate}
+ Both are legitimate and useful. The first requires a significantly smaller
+ tool-chain, so we describe it first. The second requires a much more substantial
+ (and experimental) toolchain of knowledge management systems. Both workflows profit
+ from an integrated development environment (IDE), which (also) automates setup as
+ far as possible (see \sref{sec.sTeX-IDE}).
+
+ \begin{sfragment}[id=sec.minimal-setup]{Minimal Setup for the PDF-only Workflow}
+ In the best of all worlds, there is no setup, as you already have a new version of
+ {\TeX}Live on your system as a {\LaTeX} enthusiast. If not now is the time to
+ install it; see \cite{TeXLive:on}. You can usually update {\TeX}Live via a package
+ manager or the {\TeX}Live manager \textbf{tlmgr}.
+
+ Alternatively, you can install \sTeX from CTAN, the Comprehensive {\TeX} Archive
+ Network; see \cite{stexCTAN:on} for details.
+ \end{sfragment}
+
+ \begin{sfragment}[id=sec.git-setup]{GIT-based Setup for the \sTeX Development Version}
+ If you want use the latest and greatest \sTeX packages
+ that have not even been released to CTAN,
+ then you can directly clone them from the \sTeX development
+ repository \cite{sTeX:github:on} by the following command-line instructions:
+\begin{lstlisting}[language=bash]
+ cd <stexdir>
+ git clone https://github.com/slatex/sTeX.git
+\end{lstlisting}
+ and keep it updated by pulling updates via \lstinline|git pull| in the cloned \sTeX
+ directory.
+ Then update your \lstinline|TEXINPUTS| environment variable, e.g. by placing the following line in your \lstinline|.bashrc|:
+\begin{lstlisting}[language=bash]
+export TEXINPUTS="$(TEXINPUTS):<sTeXDIR>//:"
+\end{lstlisting}
+ \end{sfragment}
+
+ \begin{sfragment}[id=sec.stex-archives]{\sTeX Archives (Manual Setup)}
+ Writing semantically annotated \sTeX becomes much easier, if we can use
+ well-designed libraries of already annotated content. \sTeX provides such
+ libraries as \sTeX archives -- i.e. GIT repositories at
+ \url{https://gl.mathhub.info} -- most prominently the SMGLoM libraries at
+ \url{https://gl.mathhub.info/smglom}.
+
+ To do so, we set up a \textbf{local MathHub} by creating a MathHub directory
+ \lstinline|<mhdir>|. Every \sTeX archive as an \textbf{archive path}
+ \lstinline|<apath>| and a name \lstinline|<archive>|. We can clone the \sTeX
+ archive by the following command-line instructions:
+\begin{lstlisting}[language=bash]
+ cd <mhdir>/<apath>
+ git clone https://gl.mathhub.info/smglom/<archive>.git
+\end{lstlisting}
+ Note that \sTeX archives often depend on other archives, thus you should be
+ prepared to clone these as well -- e.g. if \texttt{pdflatex} reports missing
+ files.
+ To make sure that \sTeX too knows where to find its archives, we need to set a global
+ system variable |MATHHUB|, that points to your local |MathHub|-directory (see
+ \sref{sec.stexarchives}).
+\begin{lstlisting}[language=bash]
+export MATHHUB="<mhdir>''
+\end{lstlisting}
+ \end{sfragment}
+
+ \begin{sfragment}[id=sec.sTeX-IDE]{The \sTeX IDE}
+ We are currently working on an \sTeX IDE as an \sTeX plugin for |VScode|;
+ see~\cite{sTeX-IDE:on}. It will feature a setup procedure that automates the setup
+ described above (and below). For additional functionality see the (now obsolete)
+ plugin for \sTeX1 \cite{stexls:on,stexls-vscode-plugin:on}.
+ \end{sfragment}
+
+ \begin{sfragment}{Manual Setup for Active Documents and Knowledge Management Services}
+ Foregoing on the \sTeX IDE, we will need several additional (on top of the minimal
+ setup above) pieces of software; namely:
\begin{itemize}
- \item \textbf{The \sTeX-Package} available
- \href{https://github.com/slatex/sTeX/blob/latex3/doc/stex.pdf}{here}%
- \ednote{For now, we require the \texttt{latex3}-branch}.
- Note, that the CTAN repository for \LaTeX{} packages
- may contain outdated versions of the \sTeX package, so
- make sure, that your |TEXMF| system variable is configured such
- that the packages available in the linked repository are prioritized
- over potential default packages that come with your \TeX{} distribution.
-
- %If you are only interested in using semantic macros in (ultimately)
- %|pdf|s generated by |pdflatex|, this is all you need.
-
\item \textbf{The \mmt System} available
- \href{https://github.com/uniformal/MMT/tree/sTeX}{here}%
- \ednote{For now, we require the \texttt{sTeX}-branch, requiring manually
- compiling the MMT sources}. We recommend following
+ \href{https://github.com/uniformal/MMT/tree/sTeX}{here}.
+ We recommend following
the setup routine documented
\href{https://uniformal.github.io//doc/setup/}{here}.
@@ -317,513 +283,305 @@ which can thus be integrated as additional services into the system.
a |MathHub|-directory on your local file system, where
the \mmt system will look for \sTeX/\mmt content archives.
- \item To make sure that \sTeX too knows where to find its
- archives, we need to set a global system variable |MATHHUB|,
- that points to your local |MathHub|-directory
- (see \sref{sec.stexarchives}).
- \item \textbf{\sTeX Archives} If we only care about {\LaTeX} and generating |pdf|s, we do not
- technically need \mmt at all; however, we still need the |MATHHUB|
- system variable to be set. Furthermore, \mmt can make downloading
- content archives we might want to use significantly easier, since
- it makes sure that all dependencies of (often highly interrelated)
- \sTeX archives are cloned as well.
-
- Once set up, we can run |mmt| in a shell and download an archive along with
- all of its dependencies like this: |lmh install <name-of-repository>|,
- or a whole \emph{group} of archives; for example,
- |lmh install smglom| will download all smglom archives.
- \item \textbf{\RusTeX} The \mmt system will also set up \RusTeX for you,
- which is used to generate (semantically annotated)
- |xhtml| from tex sources. In lieu of using \mmt, you
- can also download and use \RusTeX directly
+ \item \textbf{\sTeX Archives} If we only care about {\LaTeX} and generating
+ |pdf|s, we do not technically need \mmt at all; however, we still need the
+ |MATHHUB| system variable to be set. Furthermore, \mmt can make downloading
+ content archives we might want to use significantly easier, since it makes sure
+ that all dependencies of (often highly interrelated) \sTeX archives are cloned
+ as well.
+
+ Once set up, we can run |mmt| in a shell and download an archive along with all
+ of its dependencies like this: |lmh install <name-of-repository>|, or a whole
+ \emph{group} of archives; for example, |lmh install smglom| will download all
+ smglom archives.
+ \item \textbf{\RusTeX} The \mmt system will also set up \RusTeX for you, which is
+ used to generate (semantically annotated) |xhtml| from tex sources. In lieu of
+ using \mmt, you can also download and use \RusTeX directly
\href{https://github.com/slatex/RusTeX}{here}.
-
\end{itemize}
\end{sfragment}
- \end{sfragment}
- \begin{sfragment}{A First \sTeX Document}
- Having set everything up, we can write a first
- \sTeX document. As an example, we will use the
- |smglom/calculus| and |smglom/arithmetics| archives,
- which should be present in the designated |MathHub|-folder.
-
- The document we will consider is the following:
- \begin{framed}\begin{latexcode}
-\documentclass{article}
-\usepackage{stex}
-\usepackage{xcolor}
-\def\compemph#1{\textcolor{blue}{#1}}
+ \end{sfragment}
+
+ \input{stex-tutorial}
-\begin{document}
- \usemodule[smglom/calculus]{series}
- \usemodule[smglom/arithmetics]{realarith}
-
- The \symref{series}{series} $\infinitesum{n}{1}{
- \realdivide[frac]{1}{
- \realpower{2}{n}
- }
- }$ \symref{converges}{converges} towards $1$.
-
-\end{document}
- \end{latexcode}\end{framed}
-
- Compiling this document with |pdflatex| should yield
- the output
-
- \begin{framed}
- The \textbf{series}
- $\textcolor{blue}{\sum}_{n=1}^{\textcolor{blue}\infty} \frac{1}{2^n}$
- \textbf{converges} towards $1$.
- \end{framed}
-
- Note that the $\sum$ and $\infty$-symbols are highlighted in blue,
- and the words ``series'' and ``converges'' in bold.
- This signifies that these words and symbols
- reference \sTeX \emph{symbols}
- formally declared somewhere; associating their
- \emph{presentation} in the document with their (formal)
- definition - i.e. their semantics. The precise way
- in which they are highlighted (if at all) can of course
- be customized (see \ednote{somewhere later}).
-
- \begin{function}{\usemodule}
- The command |\usemodule[some/archive]{modulename}|
- finds some module in the appropriate archive -- in the first
- case (|\usemodule[smglom/calculus]{series}|), \sTeX
- looks for the archive |smglom/calculus| in our local
- MathHub-directory (see \sref{sec.stexarchives}), and
- in its source-folder for a file |series.tex|. Since no such
- file exists, and by default the document is assumed to be
- in \emph{english}, it picks the file |series.en.tex|, and
- indeed, in here we find a statement |\begin{smodule}{series}|.
- \iffalse\end{smodule}\fi
-
- \sTeX now reads this file and makes all semantic macros therein
- available to use, along with all its dependencies.
- This enables the usage of |\infinitesum| later on.
-
- Analogously, |\usemodule[smglom/arithmetics]{realarith}|
- opens the file |realarith.en.tex| in the |.../smglom/arithmetics/source|-folder
- and makes its contents available, e.g. |\realdivide| and |\realpower|.
- \end{function}
-
- \begin{function}{\symref,\symname}
- The command |\symref{symbolname}{text}| marks the |text|
- in the second argument as representing the |symbolname|
- in the first argument -- which is why the word ``series''
- is set in boldface. In the pdf, this is all that happens.
- In the |xhtml| (which we will investigate shortly) however,
- we will note that the word ``series'' is now annotated with the
- full URI of the symbol denoting the \emph{mathematical concept of
- a series}. In other words, the word is associated with an unambiguous
- semantics.
-
- Notably, in both cases above (\emph{series} and \emph{converges})
- the text that \emph{references} the symbol and the name of the symbol
- are identical. Since this occurs quite often, the shorthand
- |\symname{converges}| would have worked as well, where
- |\symname{foo-bar}| behaves exactly like |\symref{foo-bar}{foo bar}|
- - i.e. the text is simply the name of the symbol with ``|-|'' replaced by
- a space.
- \end{function}
-
- \begin{function}{\importmodule}
- If you investigated the contents of the imported modules
- (|realarith| and |series|) more closely, you'll note that
- none of them contain a symbol ``|converges|''. Yet, we
- can use |\symref| to refer to ``converges''. That is because
- the symbol |converges| is found in
- |smglom/calculus/source/sequenceConvergence.en.tex|, and
- |series.en.tex| contains the line
- |\importmodule{sequenceConvergence}|. The |\importmodule|-statement
- makes the module referenced available to all documents
- that include the current module. As such, a ``current module''
- has to exist for |\importmodule| to work, which is why the command
- is only allowed within a |module|-environment.
- \end{function}
-
- \textcolor{red}{TODO} explain |xhtml| conversion, MMT compilation
- (requires an archive...?).
-
- \end{sfragment}
\end{sfragment}
-\begin{sfragment}{Using \sTeX}
+\begin{sfragment}{Creating \sTeX Content}
+
\input{packages/stex-basics}
-
- \input{packages/stex-terms}
- \input{packages/stex-references}
-\end{sfragment}
+ \begin{sfragment}{How Knowledge is Organized in \sTeX}
+
+ \sTeX content is organized on multiple levels:
+ \begin{enumerate}
+ \item \sTeX \textbf{archives} (see \sref{sec.stexarchives})
+ contain individual |.tex|-files.
+ \item These may contain \sTeX \textbf{modules}, introduced via
+ \stexcode"\begin{smodule}{ModuleName}".\iffalse\end{smodule}\fi
+ \item Modules contain \sTeX \textbf{symbol declarations}, introduced via
+ \stexcode"\symdecl{symbolname}", \stexcode"\symdef{symbolname}" and some other
+ constructions. Most symbols have a \emph{notation} that can
+ be used via a \emph{semantic macro} \stexcode"\symbolname" generated
+ by symbol declarations.
+ \item \sTeX \textbf{expressions} finally are built up from
+ usages of semantic macros.
+ \end{enumerate}
+
+ \begin{mmtbox}
+ \begin{itemize}
+ \item \sTeX archives are simultaneously \mmt archives, and the same directory
+ structure is consequently used.
+ \item \sTeX modules correspond to \omdoc/\mmt \emph{theories}.
+ \stexcode"\importmodule"s (and similar constructions) induce \mmt |include|s and
+ other \emph{theory morphisms}, thus giving rise to a \emph{theory graph} in the
+ \omdoc sense~\cite{RabKoh:WSMSML13}.
+ \item Symbol declarations induce \omdoc/\mmt \emph{constants}, with optional
+ (formal) \emph{type} and \emph{definiens} components.
+ \item Finally, \sTeX expressions are converted to \omdoc/\mmt terms, which use the
+ abstract syntax (and XML encoding) of \openmath \cite{BusCapCar:2oms04}.
+ \end{itemize}
+ \end{mmtbox}
+ \end{sfragment}
-\begin{sfragment}[id=sec.stexarchives]{\sTeX Archives}
- \input{packages/stex-mathhub}
-\end{sfragment}
+ \begin{sfragment}[id=sec.stexarchives]{\sTeX Archives}
+ \input{packages/stex-mathhub}
+ \end{sfragment}
-\begin{sfragment}{Creating New Modules and Symbols}
- \textcolor{red}{TODO}
+ \begin{sfragment}[id=sec.decls]{Module, Symbol and Notation Declarations}
+ \input{packages/stex-modules}
+ \input{packages/stex-symbols}
+ \end{sfragment}
- \stexexample{
- \begin{smodule}{assoctest}
- \symdef{foo}[args=iia]{\comp{a:}#1\comp{;b:}#2\comp{;c:}#3}{\comp[#1\comp{;}##1\comp+##2\comp;#2\comp]}
- $\foo {w_1}{w_2}{x,y,z}$
- \end{smodule}
- }
-
- \input{packages/stex-modules}
+ \begin{sfragment}{Module Inheritance and Structures}
+ The \sTeX features for modular document management are inherited from the OMDoc/MMT
+ model that organizes knowledge into a graph, where the nodes are theories (called
+ modules in \sTeX) and the edges are truth-preserving mappings (called theory
+ morphismes in MMT). We have already seen modules/theories above.
+
+ Before we get into theory morphisms in \sTeX we will see a very simple application of
+ modules: managing multilinguality modularly.
+
+ \begin{sfragment}{Multilinguality and Translations}
+
+ If we load the \sTeX document class or package with the option |lang=<lang>|, \sTeX
+ will load the appropriate \pkg{babel} language for you -- e.g. |lang=de| will load
+ the babel language |ngerman|. Additionally, it makes \sTeX aware of the current
+ document being set in (in this example) \emph{german}. This matters for reasons
+ other than mere \pkg{babel}-purposes, though:
+
+ Every \emph{module} is assigned a language. If no \sTeX
+ package option is set that allows for inferring a language,
+ \sTeX will check whether the current file name ends in
+ e.g. |.en.tex| (or |.de.tex| or |.fr.tex|, or...) and
+ set the language accordingly. Alternatively, a language
+ can be explicitly assigned via
+ \stexcode"\begin{smodule}[lang=<language>]{Foo}".
+ \iffalse\end{smodule}\fi
- \input{packages/stex-symbols}
+ \begin{mmtbox}
+ Technically, each |smodule|-environment induces \emph{two}
+ \omdoc/\mmt theories:
+ \stexcode"\begin{smodule}[lang=<lang>]{Foo}"
+ \iffalse\end{smodule}\fi
+ generates a theory |some/namespace?Foo| that only contains
+ the ``formal'' part of the module -- i.e. exactly the
+ content that is exported when using \stexcode"\importmodule".
+
+ Additionally, \mmt generates a \emph{language theory}
+ |some/namespace/Foo?<lang>| that includes |some/namespace?Foo|
+ and contains all the other document content -- variable
+ declarations, includes for each \stexcode"\usemodule", etc.
+ \end{mmtbox}
+
+ Notably, the language suffix in a filename is ignored
+ for \stexcode"\usemodule", \stexcode"\importmodule"
+ and in generating/computing URIs for modules. This however
+ allows for providing \emph{translations} for modules
+ between languages without needing to duplicate content:
+
+ If a module |Foo| exists in e.g. english in a file |Foo.en.tex|,
+ we can provide a file |Foo.de.tex| right next to it, and write
+ \stexcode"\begin{smodule}[sig=en]{Foo}".
+ \iffalse\end{smodule}\fi
+ The |sig|-key then signifies, that the ``signature'' of the
+ module is contained in the \emph{english} version of the module,
+ which is immediately imported from there, just like
+ \stexcode"\importmodule" would.
+
+ Additionally to translating the informal content of a module
+ file to different languages, it also allows for customizing
+ notations between languages. For example,
+ the \emph{least common multiple} of two numbers is often
+ denoted as $\mathtt{lcm}(a,b)$ in english, but is
+ called \emph{kleinstes gemeinsames Vielfaches} in german
+ and consequently denoted as $\mathtt{kgV}(a,b)$ there.
+
+ We can therefore imagine a german version of an lcm-module
+ looking something like this:
+
+ \begin{latexcode}[gobble=8]
+ \begin{smodule}[sig=en]{lcm}
+ \notation*{lcm}[de]{\comp{\mathtt{kgV}}(#1,#2)}
+
+ Das \symref{lcm}{kleinste gemeinsame Vielfache}
+ $\lcm{a,b}$ von zwei Zahlen $a,b$ ist...
+ \end{smodule}
+ \end{latexcode}
+
+ If we now do \stexcode"\importmodule{lcm}"
+ (or \stexcode"\usemodule{lcm}") within a \emph{german} document,
+ it will also load the content of the german translation,
+ including the |de|-notation for \stexcode"\lcm".
- \input{packages/stex-inheritance}
+ \end{sfragment}
- \begin{sfragment}{Advanced Structuring Mechanisms}
+ \input{packages/stex-inheritance}
\input{packages/stex-features}
\end{sfragment}
+
\begin{sfragment}{Primitive Symbols (The \sTeX Metatheory)}
\input{packages/stex-metatheory}
\end{sfragment}
+
\end{sfragment}
-\begin{sfragment}{\sTeX Statements (Definitions, Theorems, Examples, ...)}
- \input{packages/stex-statements}
+\begin{sfragment}[id=sec.textsymbols]{Using \sTeX Symbols}
+ \input{packages/stex-terms}
+ \input{packages/stex-references}
+\end{sfragment}
+\begin{sfragment}{\sTeX Statements}
+ \input{packages/stex-statements}
\input{packages/stex-proofs}
\end{sfragment}
+\begin{sfragment}[id=sec.customhighlight]{Highlighting and Presentation Customizations}
+
+ The environments starting with |s| (i.e. \stexcode"smodule", \stexcode"sassertion",
+ \stexcode"sexample", \stexcode"sdefinition", \stexcode"sparagraph" and
+ \stexcode"sproof") by default produce no additional output whatsoever (except for the
+ environment content of course). Instead, the document that uses them (whether directly
+ or e.g. via \stexcode"\inputref") can decide how these environments are supposed to look
+ like.
+
+ The \pkg{stexthm} package defines some default customizations that can be used, but of
+ course many existing \LaTeX\xspace templates come with their own |definition|, |theorem|
+ and similar environments that authors are supposed (or even required) to use. Their
+ concrete syntax however is usually not compatible with all the additional arguments that
+ \sTeX allows for semantic information.
+
+ Therefore we introduced the separate environments \stexcode"sdefinition" etc. instead of
+ using \stexcode"definition" directly. We allow authors to specify how these environments
+ should be styled via the commands \stexcode"stexpatch*".
+
+ \begin{function}{\stexpatchmodule,\stexpatchdefinition,
+ \stexpatchassertion,\stexpatchexample,\stexpatchparagraph,
+ \stexpatchproof}
+ All of these commands take one optional and two proper arguments, i.e.\\
+ \stexcode"\stexpatch*[<type>]{<begin-code>}{<end-code>}".
+
+ After \stex reads and processes the optional arguments for these environments, (some
+ of) their values are stored in the macros \stexcode"\s*<field>"
+ (i.e. \stexcode"sexampleid", \stexcode"\sassertionname", etc.). It then checks for all
+ the values |<type>| in the |type=|-list, whether an \stexcode"\stexpatch*[<type>]" for
+ the current environment has been called. If it finds one, it uses the patches
+ |<begin-code>| and |<end-code>| to mark up the current environment. If no patch for
+ (any of) the type(s) is found, it checks whether and \stexcode"\stexpatch*" was called
+ without optional argument.
+ \end{function}
+
+ For example, if we want to use a predefined |theorem| environment for
+ \stexcode"sassertion"s with |type=theorem|, we can do
+\begin{latexcode}
+\stexpatchassertion[theorem]{\begin{theorem}}{\end{theorem}}
+\end{latexcode}
+ ...or, rather, since e.g. |theorem|-like environments defined using \pkg{amsthm} take an
+ optional title as argument, we can do:
+\begin{latexcode}
+\stexpatchassertion[theorem]
+ {\ifx\sassertiontitle\@empty
+ \begin{theorem}
+ \else
+ \begin{theorem}[\sassertiontitle]
+ \fi}
+ {\end{theorem}}
+\end{latexcode}
+
+ Or, if we want \emph{all kinds of} \stexcode"sdefinition"s to use a predefined
+ |definition|-environment irrespective of their |type=|, then we can issue the following
+ customization patch:
+\begin{latexcode}
+\stexpatchdefinition
+ {\ifx\sdefinitiontitle\@empty
+ \begin{definition}
+ \else
+ \begin{definition}[\sdefinitiontitle]
+ \fi}
+ {\end{definition}}
+\end{latexcode}
+
+ \begin{function}{\compemph,\varemph,\symrefemph,\defemph}
+ Apart from the environments, we can control how \sTeX highlights variables, notation
+ components, \stexcode"\symref"s and \stexcode"\definiendum"s, respectively.
+
+ To do so, we simply redefine these four macros. For example, to highlight notation
+ components (i.e. everything in a \stexcode"\comp") in blue, as in this document, we
+ can do \stexcode"\def\compemph#1{\textcolor{blue}{#1}}". By default, |\compemph| et
+ al do nothing.
+ \end{function}
+
+ \begin{function}{\compemph@uri,\varemph@uri,\symrefemph@uri,\defemph@uri}
+ For each of the four macros, there exists an additional macro that takes the full URI
+ of the relevant symbol currently being highlighted as a second argument. That allows
+ us to e.g. use pdf tooltips and links. For example, this document uses\Ednote{MK: why
+ |protected|, ... if we show that, then we should explain.}
+\begin{latexcode}
+\protected\def\symrefemph@uri#1#2{
+ \pdftooltip{
+ \srefsymuri{#2}{\symrefemph{#1}}
+ }{
+ URI:~\detokenize{#2}
+ }
+}
+\end{latexcode}
+ By default, |\compemph@uri| is simply defined as |\compemph{#1}| (analogously for the
+ other three commands).
+\end{function}
+\end{sfragment}
+
\begin{sfragment}{Additional Packages}
- \input{packages/stex-tikzinput}
+ \begin{sfragment}{Tikzinput: Treating TIKZ code as images}
+ \input{packages/stex-tikzinput}
+ \end{sfragment}
\begin{sfragment}{Modular Document Structuring}
\input{packages/stex-document-structure}
\end{sfragment}
\begin{sfragment}{Slides and Course Notes}
\input{packages/stex-slides}
\end{sfragment}
- \begin{sfragment}{Homework, Problems and Exams}
+ \begin{sfragment}{Representing Problems and Solutions}
\input{packages/stex-problem}
-
- \input{packages/stex-hwexam}
\end{sfragment}
-
+ \begin{sfragment}{Homeworks, Quizzes and Exams}
+ \input{packages/stex-hwexam}
+ \end{sfragment}
\end{sfragment}
-\chapter{Stuff}
-
-\section{Modules}
-
-
-\begin{function}{\sTeX , \stex}
- Both print this \stex logo.
-\end{function}
-
- \subsection{Semantic Macros and Notations}
-
- Semantic macros invoke a formally declared symbol.
-
- To declare a symbol (in a module), we use \cs{symdecl},
- which takes as argument the name of the corresponding
- semantic macro, e.g. |\symdecl{foo}| introduces the macro
- \cs{foo}. Additionally, \cs{symdecl} takes several options,
- the most important one being its arity. |foo| as declared above
- yields a \emph{constant} symbol. To introduce an \emph{operator}
- which takes arguments, we have to specify which arguments it takes.
-
- \begin{smodule}{SemanticMacrosExample}
- For example, to introduce binary multiplication,
- we can do |\symdecl{mult}[args=2]|. We can then supply
- the semantic macro with arbitrarily many notations, such as
- |\notation{mult}{#1 #2}|.
-
- \stexexample{
- \symdecl{mult}[args=2]
- \notation{mult}{#1 #2}
- $\mult{a}{b}$
-}
-
- Since usually, a freshly introduced symbol also comes with a
- notation from the start, the \cs{symdef} command combines
- \cs{symdecl} and \cs{notation}. So instead of the above,
- we could have also written
- \begin{center} |\symdef{mult}[args=2]{#1 #2}| \end{center}
-
- \symdecl{mult}[args=2]
- \notation{mult}{#1 #2}
-
- \notation{mult}[cdot]{#1 \comp{\cdot} #2}
- \notation{mult}[times]{#1 \comp{\times} #2}
- Adding more notations like
- |\notation{mult}[cdot]{#1 \comp{\cdot} #2}| or
- |\notation{mult}[times]{#1 \comp{\times} #2}|
- allows us to write |$\mult[cdot]{a}{b}$| and
- |$\mult[times]{a}{b}$|:
- \stexexample{
- \notation{mult}[cdot]{#1 \comp{\cdot} #2}
- \notation{mult}[times]{#1 \comp{\times} #2}
- $\mult[cdot]{a}{b}$ and $\mult[times]{a}{b}$
-}
- \notation{mult}[cdot]{#1 \comp{\cdot} #2}
- \notation{mult}[times]{#1 \comp{\times} #2}
-
- Not using an explicit option with a semantic macro yields
- the first declared notation, unless changed\ednote{TODO}.
-
- Outside of math mode, or by using the starred variant
- |\foo*|, allows to provide a custom notation, where
- notational (or textual) components can be given
- explicitly in square brackets.
- \stexexample{
- $\mult*{\arg{a}\comp{\ast}\arg{b}}$ is the
- \mult{\comp{product of} \arg{$a$} \comp{and} \arg{$b$}}
-}
-
- In custom mode, prefixing an argument with a star will not
- print that argument, but still export it to \omdoc:
- \stexexample{
- \mult{\comp{Multiplying} \arg*{$\mult{a}{b}$} again by \arg{$b$}} yields...
-}
- The syntax |*[|\meta{int}|]| allows switching
- the order of arguments. For example, given a 2-ary semantic
- macro |\forevery| with exemplary notation
- |\forall #1. #2|, we can write
- \stexexample{
- \symdecl{forevery}[args=2]
- \forevery{\arg[2]{The proposition $P$} \comp{holds for every} \arg[1]{$x\in A$}}
-}
-
- When using |*[|$n$|]|, after reading the provided ($n$th) argument,
- the ``argument counter'' automatically
- continues where we left off, so the |*[1]| in the above example
- can be omitted.
-
- For a macro with arity $>0$, we can refer to the operator
- \emph{itself} semantically by suffixing the semantic macro
- with an exclamation point |!| in either text or math mode.
- For that reason \cs{notation} (and thus \cs{symdef}) take an
- additional optional argument |op=|, which allows to assign
- a notation for the operator itself. e.g.
- \stexexample{
- \symdef{add}[args=2,op={+}]{#1 \comp+ #2}
- The operator $\add!$ adds two elements, as in $\add ab$.
- }
-
- |*| is composable with |!| for custom notations, as in:
-
- \stexexample{
- \mult!{\comp{Multiplication}} (denoted by $\mult!*{\comp\cdot}$) is defined by...
-}
-
- The macro \cs{comp} as used everywhere above is responsible
- for highlighting, linking, and tooltips, and should be wrapped
- around the notation (or text) components that should be treated
- accordingly. While it is attractive to just wrap a whole notation,
- this would also wrap around e.g. the arguments themselves, so
- instead, the user is tasked with marking the notation components
- themself.
-
- The precise behaviour of \cs{comp} is governed by
- the macro \cs{@comp}, which takes two arguments: The tex code
- of the text
- (unexpanded) to highlight, and the URI of the current symbol.
- \cs{@comp} can be safely redefined to customize the behaviour.
-
-
- The starred variant |\symdecl*{foo}| does not introduce a semantic
- macro, but still declares a corresponding symbol. |foo| (like
- any other symbol, for that matter) can
- then be accessed via \cs{STEXsymbol}|{foo}| or (if |foo| was declared
- in a module |Foo|) via \cs{STEXModule}|{Foo}?{foo}|.
-
- both \cs{STEXsymbol} and \cs{STEXModule} take any
- arbitrary ending segment of a full URI to determine
- which symbol or module is meant. e.g.
- \cs{STEXsymbol}|{Foo?foo}| is also valid, as are e.g.
- \cs{STEXModule}|{path?Foo}?{foo}| or
- \cs{STEXsymbol}|{path?Foo?foo}|
-
- There's also a convient shortcut \cs{symref}|{?foo}{some text}| for
- \cs{STEXsymbol}|{?foo}![some text]|.
-
- \end{smodule}
-
- \subsubsection{Other Argument Types}
-
- So far, we have stated the arity of a semantic macro directly.
- This works if we only have ``normal'' (or more precisely: |i|-type) arguments.
- To make use of other argument types, instead of providing the arity
- numerically, we can provide it as a sequence of characters representing
- the argument types -- e.g. instead of writing |args=2|, we
- can equivalently write |args=ii|, indicating that the macro
- takes two |i|-type arguments.
-
- Besides |i|-type arguments, \sTeX has two other types, which we will
- discuss now.
-
- The first are \emph{binding} (|b|-type) arguments, representing
- variables that are \emph{bound} by the operator. This is the
- case for example in the above \cs{forevery}-macro:
- The first argument is not actually an argument that the
- |forevery| ``function'' is ``applied'' to; rather, the first argument
- is a new variable (e.g. $x$) that is \emph{bound} in the subsequent
- argument. More accurately, the macro should therefore have been
- implemented thusly:
- \begin{center}|\symdef{forevery}[args=bi]{\forall #1.\; #2}|\end{center}
-
- \begin{smodule}{OtherArgs}
- |b|-type arguments are indistinguishable from |i|-type arguments
- within \sTeX, but are treated very differently in \omdoc and by \mmt.
- More interesting \emph{within} \sTeX are |a|-type arguments,
- which represent (associative) arguments of flexible arity, which are
- provided as comma-separated lists.
- This allows e.g. better representing the \cs{mult}-macro above:
-
- \stexexample{
- \symdef{mult}[args=a]{#1}{##1 \comp\cdot ##2}
- $\mult{a,b,c,{d^e},f}$
-}
- As the example above shows, notations get a little more complicated
- for associative arguments. For every |a|-type argument, the
- \cs{notation}-macro takes an additional argument that declares
- how individual entries in an |a|-type argument list are aggregated.
- The first notation argument then describes how the aggregated
- expression is combined into the full representation.
-
- For a more interesting example, consider a flexary operator
- for ordered sequences in ordered set, that taking
- arguments |{a,b,c}| and |\mathbb{R}| prints
- $a \leq b \leq c\in \mathbb R$. This operator takes
- two arguments (an |a|-type argument and an |i|-type argument),
- aggregates the individuals of the associative argument using |\leq|,
- and combines the result with |\in| and the second argument thusly:
-
- \stexexample{
- \symdef{numseq}[args=ai]{#1 \comp\in #2}{##1 \comp\leq ##2}
- $\numseq{a,b,c}{\mathbb R}$
-}
-
- Finally, |B|-type arguments combine the functionalities of |a|
- and |b|, i.e. they represent flexary binding operator arguments.
-
-\ednote{what about e.g. \detokenize{\int_x\int_y\int_z f dx dy dz}?}
-\ednote{``decompose'' a-type arguments into fixed-arity operators?}
-
- \end{smodule}
-
- \subsubsection{Precedences}
-
- Every notation has an (upwards) \emph{operator precedence} and
- for each argument a (downwards) \emph{argument precedence}
- used for automated bracketing. For example, a notation
- for a binary operator \cs{foo} could be declared like this:
- \begin{center} |\notation{foo}[prec=200;500x600]{#1 \comp{+} #2}| \end{center}
- assigning an operator precedence of 200, an argument precedence
- of 500 for the first argument, and an argument precedence of 600
- for the second argument.
-
- \sTeX insert brackets thusly: Upon encountering a semantic
- macro (such as \cs{foo}), its operator precedence (e.g. 200)
- is compared to the current downwards precedence (initially
- \cs{neginfprec}). If the operator precedence is \emph{larger}
- than the current downwards precedence, parentheses are inserted
- around the semantic macro.
-
- Notations for symbols of arity 0 have a default precedence of \cs{infprec},
- i.e. by default, parentheses are never inserted around constants.
- Notations for symbols with arity $>0$ have a default operator
- precedence of $0$.
- If no argument precedences are explicitly provided, then by
- default they are equal to the operator precedence.
-
- Consequently, if some operator $A$ should bind stronger than
- some operator $B$, then $A$s operator precedence should be
- smaller than $B$s argument precedences.
-
- For example:
- \begin{smodule}{NotationsEx}
- \symdecl{plus}[args=2]
- \symdecl{times}[args=2]
- \stexexample{
-\notation{plus}[prec=100]{#1 \comp{+} #2}
-\notation{times}[prec=50]{#1 \comp{\cdot} #2}
-$\plus{a}{\times{b}{c}}$ and $\times{a}{\plus{b}{c}}$
-}
-
-
- \end{smodule}
-
- \subsection{Archives and Imports}
-
- \subsubsection{Namespaces}
- Ideally, \sTeX would use arbitrary URIs for modules, with no
- forced relationships between the \emph{logical} namespace
- of a module and the \emph{physical} location of the file
- declaring the module -- like \mmt does things.
-
- Unfortunately, \TeX\ only provides very restricted access to
- the file system, so we are forced to generate namespaces
- systematically in such a way that they reflect the physical
- location of the associated files, so that \sTeX can resolve
- them accordingly. Largely, users need not concern themselves
- with namespaces at all, but for completenesses sake, we describe
- how they are constructed:
-
- \begin{itemize}
- \item If \cs{begin}|{module}{Foo}| occurs in a file
- |/path/to/file/Foo[.|\meta{lang}|].tex| which does not belong
- to an archive, the namespace is |file://path/to/file|.
- \item If the same statement occurs in a file
- |/path/to/file/bar[.|\meta{lang}|].tex|, the namespace is
- |file://path/to/file/bar|.
- \end{itemize}
-
- In other words: outside of archives, the namespace corresponds to
- the file URI with the filename dropped iff it is equal to the
- module name, and ignoring the (optional) language suffix^^A
- \footnote{which is internally attached to the module name instead,
- but a user need not worry about that.}.
-
- If the current file is in an archive, the procedure is the same
- except that the initial segment of the file path up to the archive's
- |source|-folder is replaced by the archive's namespace URI.
-
- \subsubsection{Paths in Import-Statements}
-
- Conversely, here is how namespaces/URIs and file paths are computed
- in import statements, examplary \cs{importmodule}:
-
- \begin{itemize}
- \item \cs{importmodule}|{Foo}| outside of an archive refers
- to module |Foo| in the current namespace. Consequently, |Foo|
- must have been declared earlier in the same document or, if not,
- in a file |Foo[.|\meta{lang}|].tex| in the same directory.
- \item The same statement \emph{within} an archive refers to either
- the module |Foo| declared earlier in the same document, or
- otherwise to the module |Foo| in the archive's top-level namespace.
- In the latter case, is has to be declared in a file |Foo[.|\meta{lang}|].tex|
- directly in the archive's |source|-folder.
- \item Similarly, in \cs{importmodule}|{some/path?Foo}| the path
- |some/path| refers to either the sub-directory and relative
- namespace path of the current directory and namespace outside of an archive,
- or relative to the current archive's top-level namespace and |source|-folder,
- respectively.
-
- The module |Foo| must either be declared in the file
- \meta{top-directory}|/some/path/Foo[.|\meta{lang}|].tex|, or in
- \meta{top-directory}|/some/path[.|\meta{lang}|].tex| (which are
- checked in that order).
- \item Similarly, \cs{importmodule}|[Some/Archive]{some/path?Foo}|
- is resolved like the previous cases, but relative to the archive
- |Some/Archive| in the mathhub-directory.
- \item Finally, \cs{importmodule}|{full://uri?Foo}| naturally refers to the
- module |Foo| in the namespace |full://uri|. Since the file this module
- is declared in can not be determined directly from the URI, the module
- must be in memory already, e.g. by being referenced earlier in the
- same document.
-
- Since this is less compatible with a modular development, using full
- URIs directly is discouraged.
-
- \end{itemize}
-
+\csname if@infulldoc\endcsname\else
+\newpage
+\printbibliography
+\end{document}
+\fi
-
-
-\csname if@infulldoc\endcsname\else\end{document}\fi
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
+% LocalWords: stex-docheader infulldoctrue l@subsubsection toclevel@part ExplSyntaxOff
+% LocalWords: l_document_structure_section_level_int dangerbox mmtbox omdoc OBJref lmh
+% LocalWords: own:fifom MueRabRot:rslffml20 sec.stexarchives stex-mathhub ngerman a,b
+% LocalWords: Metatheory sec.customhighlight sproof stexthm xspace stexpatchmodule
+% LocalWords: stexpatchexample stexpatchparagraph sexampleid amsthm sassertiontitle
+% LocalWords: sdefinitiontitle compemph varemph srefsymuri stex-hwexam TeXLive:on tlmgr
+% LocalWords: stexls:on,stexls-vscode-plugin:on
diff --git a/macros/latex/contrib/stex/doc/stex-tutorial.tex b/macros/latex/contrib/stex/doc/stex-tutorial.tex
new file mode 100644
index 0000000000..dcd4c442e0
--- /dev/null
+++ b/macros/latex/contrib/stex/doc/stex-tutorial.tex
@@ -0,0 +1,354 @@
+ \begin{sfragment}{A First \sTeX Document}
+ Having set everything up, we can write a first
+ \sTeX document. As an example, we will use the
+ |smglom/calculus| and |smglom/arithmetics| archives,
+ which should be present in the designated |MathHub|-folder,
+ and write a small fragment defining the \emph{geometric series}:
+
+ % \textcolor{red}{TODO: use some sTeX-archive instead of smglom,
+ % use a convergence-notion that includes the limit,
+ % mark-up the theorem properly}
+
+ \begin{framed}\begin{latexcode}[gobble=8]
+ \documentclass{article}
+ \usepackage{stex,xcolor,stexthm}
+
+ \begin{document}
+ \begin{smodule}{GeometricSeries}
+ \importmodule[smglom/calculus]{series}
+ \importmodule[smglom/arithmetics]{realarith}
+
+ \symdef{geometricSeries}[name=geometric-series]{\comp{S}}
+
+ \begin{sdefinition}[for=geometricSeries]
+ The \definame{geometricSeries} is the \symname{?series}
+ \[\defeq{\geometricSeries}{\definiens{
+ \infinitesum{\svar{n}}{1}{
+ \realdivide[frac]{1}{
+ \realpower{2}{\svar{n}}
+ }}
+ }}.\]
+ \end{sdefinition}
+
+ \begin{sassertion}[name=geometricSeriesConverges,type=theorem]
+ The \symname{geometricSeries} \symname{converges} towards $1$.
+ \end{sassertion}
+ \end{smodule}
+ \end{document}
+ \end{latexcode}\end{framed}
+
+ Compiling this document with |pdflatex| should yield
+ the output
+
+ \begin{mdframed}
+ \noindent\textbf{Definition 0.1. }\ The
+ \pdftooltip{\textcolor{blue}{\textbf{geometric series}}}{URI: file://your/file/name/here?GeometricSeries?geometric-series}
+ is the
+ \pdftooltip{\textcolor{blue}{series}}{URI: http://mathhub.info/smglom/calculus?series?series}
+ \[
+ \pdftooltip{\textcolor{blue}S}{URI: file://your/file/name/here?GeometricSeries?geometric-series}
+ \pdftooltip{\textcolor{blue}{:=}}{URI: http://mathhub.info/smglom/mv?defeq?definitional-equation}
+ \mathop{\pdftooltip{\textcolor{blue}{\sum}}{URI: http://mathhub.info/smglom/calculus?series?infinitesum}
+ }_{
+ \pdftooltip{\textcolor{gray}{n}}{Variable var://n}=1
+ }^{
+ \pdftooltip{\textcolor{blue}\infty}{URI: http://mathhub.info/smglom/calculus?series?infinitesum}
+ } \frac{1}{2^{\pdftooltip{\textcolor{gray}{n}}{Variable var://n}}}
+ .\]
+ \noindent\textbf{Theorem 0.2. }\ The
+ \pdftooltip{\textcolor{blue}{geometric series}}{URI: file://your/file/name/here?GeometricSeries?geometric-series}
+ \pdftooltip{\textcolor{blue}{converges}}{URI: http://mathhub.info/smglom/calculus?sequenceConvergence?converges} towards $1$.
+ \end{mdframed}
+
+ Move your cursor over the various highlighted parts of the document -- depending on
+ your pdf viewer, this should yield some interesting (but possibly for now cryptic)
+ information.
+
+ \begin{sparagraph}[type=remark]
+ Note that all of the highlighting, tooltips, coloring and the environment headers
+ come from \pkg{stexthm} -- by default, the amount of additional packages loaded
+ is kept to a minimum and all the presentations can be customized,
+ see \sref{sec.customhighlight}.
+ \end{sparagraph}
+
+ Let's investigate this document in detail to understand the respective parts of the
+ \sTeX markup infrastructure:\bigskip
+
+ \begin{environment}{smodule}
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=8]
+ \begin{smodule}{GeometricSeries}
+ ...
+ \end{smodule}
+ \end{latexcode}
+ First, we open a new \emph{module} called |GeometricSeries|. The main purpose of
+ the |smodule| environment is to group the contents and associate it with a
+ \emph{globally unique} identifier (URI), which is computed from the name
+ |GeometricSeries| and the document context.
+
+ (Depending on your pdf viewer), the URI should pop up in a tooltip if you hover over
+ the word \pdftooltip{\textcolor{blue}{\textbf{geometric series}}}{URI:
+ file://your/file/name/here?GeometricSeries?geometric-series}.
+ \end{environment}\bigskip
+
+ \begin{function}{\importmodule}
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=8]
+ \importmodule[smglom/calculus]{series}
+ \importmodule[smglom/arithmetics]{realarith}
+ \end{latexcode}
+ Next, we \emph{import} two modules -- |series| from the \sTeX archive
+ |smglom/calculus|, and |realarith| from the \sTeX archive |smglom/arithmetics|. If
+ we investigate these archives, we find the files |series.en.tex| and
+ |realarith.en.tex| (respectively) in their respective |source|-folders, which
+ contain the statements \stexcode"\begin{smodule}{series}" and
+ \stexcode"\begin{smodule}{realarith}" (respectively).
+ \iffalse\end{smodule}\end{smodule}\fi
+
+ The \stexcode"\importmodule"-statements make all \stex symbols and associated
+ semantic macros (e.g. \stexcode"\infinitesum", \stexcode"\realdivide",
+ \stexcode"\realpower") in the imported module available to the current module
+ |GeometricSeries|. The module |GeometricSeries| ``exports'' all of these symbols to
+ all modules imports it via an \stexcode"\importmodule{GeometricSeries}"
+ instruction. Additionally it exports the local symbol \stexcode"\geometricSeries".
+ \end{function}
+
+ \begin{function}{\usemodule}
+ If we only want to \emph{use} the content of some module |Foo|,
+ e.g. in remarks or examples, but none
+ of the symbols in our current module actually \emph{depend} on
+ the content of |Foo|, we can use \stexcode"\usemodule" instead -- like
+ \stexcode"\importmodule", this will make the module content available,
+ but will \emph{not} export it to other modules.
+ \end{function}\bigskip
+
+ \begin{function}{\symdef}
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=6]
+ \symdef{GeometricSeries}[name=geometric-series]{\comp{S}}
+ \end{latexcode}
+ Next, we introduce a new \emph{symbol} with name
+ |geometric-series| and assign it the semantic macro
+ \stexcode"\geometricSeries".
+ \stexcode"\symdef" also immediately assigns this symbol a \emph{notation},
+ namely $S$.
+ \end{function}
+
+ \begin{function}{\comp}
+ The macro \stexcode"\comp" marks the $S$ in the notation as a
+ \emph{notational component}, as opposed to e.g. arguments
+ to \stexcode"\geometricSeries".
+ It is the notational components that get highlighted
+ and associated with the corresponding symbol (i.e. in this
+ case |geometricSeries|). Since \stexcode"\geometricSeries" takes
+ no arguments, we can wrap the whole notation in a \stexcode"\comp".
+ \end{function}\bigskip
+
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=8]
+ \begin{sdefinition}[for=geometricSeries]
+ ...
+ \end{sdefinition}
+ \begin{sassertion}[name=geometricSeriesConverges,type=theorem]
+ ...
+ \end{sassertion}
+ \end{latexcode}
+ What follows are two \sTeX-\emph{statements} (e.g. definitions,
+ theorems, examples, proofs, ...). These are semantically marked-up
+ variants of the usual environments, which take additional optional
+ arguments (e.g. |for=|, |type=|, |name=|). Since many \LaTeX\xspace templates
+ predefine environments like |definition| or |theorem| with
+ different syntax, we use \stexcode"sdefinition",
+ \stexcode"sassertion", \stexcode"sexample"
+ etc. instead. You can customize these environments to e.g.
+ simply wrap around some predefined |theorem|-environment.
+ That way, we can still use \stexcode"sassertion" to provide semantic
+ information, while being fully compatible with (and using
+ the document presentation of) predefined environments.
+
+ In our case, the \pkg{stexthm}-package patches
+ e.g. \stexcode"\begin{sassertion}[type=theorem]" to use
+ a |theorem|-environment defined (as usual) using the \pkg{amsthm} package.
+ \bigskip \iffalse \end{sassertion}\fi
+
+ \begin{function}{\symname}
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=6]
+ ... is the \symname{?series}
+ \end{latexcode}
+ The \stexcode"\symname"-command prints the name of a symbol,
+ highlights it (based on customizable settings)
+ and associates the text printed with the corresponding
+ symbol.
+
+ Note that the argument of \stexcode"\symref" can be
+ an imported symbol
+ (here the |series| symbol is imported from the |series| module). \sTeX tries to
+ determine the full symbol URI from the argument. If there are name clashes in or
+ with the imported symbols, the name of the exporting module can be prepended to the
+ symbol name before the |?| character.
+
+ If you hover over the word
+ \pdftooltip{\textcolor{blue}{series}}{URI: http://mathhub.info/smglom/calculus?series?series}
+ in the pdf output, you should see a tooltip showing the full URI
+ of the symbol used.
+ \end{function}
+ \begin{function}{\symref}
+ The \stexcode"\symname"-command is a special case of the more general
+ \stexcode"\symref"-command, which allows customizing the precise text associated
+ with a symbol. \stexcode"\symref" takes two arguments: the first ist the symbol
+ name (or macro name), and the second a variant verbalization of the symbol, e.g. an inflection
+ variant, a different language or a synonym. In our example
+ \stexcode"\symname{?series}" abbreviates \stexcode|\symref{?series}{series}|.
+
+ \end{function}
+ \begin{function}{\definame,\definiendum}
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=6]
+ The \definame{geometricSeries} ...
+ \end{latexcode}
+ The \stexcode"sdefinition"-environment provides two additional
+ macros, \stexcode"\definame" and \stexcode"\definiendum" which behave
+ similarly to \stexcode"\symname" and \stexcode"\symref", but explicitly mark
+ the symbols as \emph{being defined} in this environment,
+ to allow for special highlighting.
+ \end{function}\bigskip
+
+ \begin{latexcode}[numbers=none,aboveskip=0pt,belowskip=0pt,gobble=8]
+ \[\defeq{\geometricSeries}{\definiens{
+ \infinitesum{\svar{n}}{1}{
+ \realdivide[frac]{1}{
+ \realpower{2}{\svar{n}}
+ }}
+ }}.\]
+ \end{latexcode}
+ The next snippet -- set in a math environment -- uses
+ several semantic macros imported from (or recursively via)
+ |series| and |realarithmetics|, such as \stexcode"\defeq",
+ \stexcode"\infinitesum",
+ etc. In math mode, using a semantic macro inserts its (default)
+ definition. A semantic macro can have several notations -- in
+ that case, we can explicitly choose a specific notation by
+ providing its identifier as an optional argument; e.g.
+ \stexcode"\realdivide[frac]{a}{b}" will use the explicit notation named |frac|
+ of the semantic macro \stexcode"\realdivide", which yields $\frac ab$
+ instead of $a/b$.
+ \begin{function}{\svar}
+ The \stexcode"\svar{n}" command marks up the |n| as a variable
+ with name |n| and notation |n|.
+ \end{function}
+ \begin{function}{\definiens}
+ The \stexcode"sdefinition"-environment additionally provides the
+ \stexcode"\definiens"-command, which allows for explicitly
+ marking up its argument as the \emph{definiens} of the
+ symbol currently being defined.
+ \end{function}
+
+ \begin{sfragment}{\omdoc/xhtml Conversion}
+ So, if we run |pdflatex| on our document, then \sTeX yields pretty colors and
+ tooltips\footnote{...and hyperlinks for symbols, and indices, and allows reusing
+ document fragments modularly, and...}. But \sTeX becomes a lot more powerful if
+ we additionally convert our document to |xhtml| while preserving all the \sTeX
+ markup in the result.
+
+ \textcolor{red}{TODO VSCode Plugin}
+
+ Using \rustex \cite{RusTeX:on}, we can convert the document to |xhtml|
+ using the command |rustex -i /path/to/file.tex -o /path/to/outfile.xhtml|.
+ Investigating the resulting file, we notice additional semantic
+ information resulting from our usage of semantic macros,
+ \stexcode"\symref" etc. Below is the (abbreviated) snippet inside
+ our \stexcode"\definiens" block:
+
+\begin{lstlisting}[escapechar=!,
+morekeywords={property,resource,stex:comp,stex:arg,stex:OMA,stex:OMV}]
+<mrow resource="" property="stex:definiens">
+ <mrow resource="...?series?infinitesum" property="stex:OMBIND">
+ <munderover displaystyle="true">
+ <mo resource="...?series?infinitesum" property="stex:comp">!$\Sigma$!</mo>
+ <mrow>
+ <mrow resource="1" property="stex:arg">
+ <mi resource="var://n" property="stex:OMV">n</mi>
+ </mrow>
+ <mo resource="...?series?infinitesum" property="stex:comp">=</mo>
+ <mi resource="2" property="stex:arg">1</mi>
+ </mrow>
+ <mi resource="...?series?infinitesum" property="stex:comp">!$\infty$!</mi>
+ </munderover>
+ <mrow resource="3" property="stex:arg">
+ <mfrac resource="...?realarith?division#frac#" property="stex:OMA">
+ <mi resource="1" property="stex:arg">1</mi>
+ <mrow resource="2" property="stex:arg">
+ <msup resource="...realarith?exponentiation" property="stex:OMA">
+ <mi resource="1" property="stex:arg">2</mi>
+ <mrow resource="2" property="stex:arg">
+ <mi resource="var://n" property="stex:OMV">n</mi>
+ </mrow>
+ </msup>
+ </mrow>
+ </mfrac>
+ </mrow>
+ </mrow>
+</mrow>
+ \end{lstlisting}
+ ...containing all the semantic information. The \mmt system
+ can extract from this the following \openmath snippet:
+
+ \begin{lstlisting}[escapechar=!]
+<OMBIND>
+ <OMID name="...?series?infinitesum"/>
+ <OMV name="n"/>
+ <OMLIT name="1"/>
+ <OMA>
+ <OMS name="...?realarith?division"/>
+ <OMLIT name="1"/>
+ <OMA>
+ <OMS name="...realarith?exponentiation"/>
+ <OMLIT name="2"/>
+ <OMV name="n"/>
+ </OMA>
+ </OMA>
+</OMBIND>
+ \end{lstlisting}
+ ...giving us the full semantics of the snippet, allowing for
+ a plurality of knowledge management services -- in particular
+ when serving the |xhtml|.
+
+ \begin{remark}
+ Note that the |html| when opened in a browser will
+ look slightly different than the |pdf| when it comes
+ to highlighting semantic content -- that is because
+ naturally |html| allows for much more powerful
+ features than |pdf| does. Consequently, the |html|
+ is intended to be served by a system like \mmt,
+ which can pick up on the semantic information and
+ offer much more powerful highlighting, linking
+ and similar features, and being customizable by
+ \emph{readers} rather than being prescribed by an author.
+
+ Additionally, not all browsers (most notably Chrome)
+ support \mathml natively, and might require
+ additional external JavaScript libraries such as
+ MathJax to render mathematical formulas properly.
+ \end{remark}
+ \end{sfragment}
+
+
+ \begin{sfragment}{\mmt/\omdoc Conversion}
+ Another way to convert our document to \emph{actual}
+ \mmt/\omdoc is to put it in an \sTeX \textbf{archive}
+ (see \sref{sec.stexarchives}) and have \mmt take care of
+ everything.
+
+ Assuming the above file is |source/demo.tex| in
+ an \sTeX archive |MyTest|, you can run \mmt and
+ do
+ |build MyTest stex-omdoc demo.tex| to convert the
+ document to both |xhtml| (which you will find in
+ |xhtml/demo.xhtml| in the archive) and formal
+ \mmt/\omdoc, which you can subsequently view in
+ the \mmt browser (see \url{https://uniformal.github.io//doc/applications/server.html#the-mmt-web-site}
+ for details).
+ \end{sfragment}
+\end{sfragment}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "stex-manual"
+%%% End:
+
+% LocalWords: coloring sec.customhighlight realarith infinitesum realarithmetics
diff --git a/macros/latex/contrib/stex/source/extensions/document-structure.dtx b/macros/latex/contrib/stex/source/extensions/document-structure.dtx
index 6db3bf4d7c..b05e4d464c 100644
--- a/macros/latex/contrib/stex/source/extensions/document-structure.dtx
+++ b/macros/latex/contrib/stex/source/extensions/document-structure.dtx
@@ -9,7 +9,7 @@
%
%
%<*driver>
-\def\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -17,7 +17,6 @@
\end{document}
%</driver>
% \fi
-% %^^A \changes{v0.1}{2006/1/17}{First Version}
%
% \title{document-structure: Semantic Markup for Open Mathematical Documents in {\LaTeX}
% \thanks{Version {\fileversion} (last revised {\filedate})}
@@ -30,354 +29,35 @@
%
% \maketitle
%
-%\ifinfulldoc\else
-% This is the documentation for the \pkg{document-structure} package.
-% For a more high-level introduction,
-% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \ifinfulldoc\else
+% \begin{abstract}
+% This is the documentation for the \pkg{document-structure} package from \sTeX
+% collection, a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents
+% semantically without leaving the document format, essentially turning {\TeX/\LaTeX}
+% into a document format for mathematical knowledge management (MKM).
%
+% For a more high-level introduction, see \href{\basedocurl/manual.pdf}{the \sTeX
+% Manual} or the \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \end{abstract}
+%
+% \tableofcontents
+%
% \input{../../doc/packages/stex-document-structure}
% \fi
%
%
% \begin{documentation}\label{pkg:documentstructure:doc}
%
-% The |document-structure| package is part of the \sTeX collection, a version of {\TeX/\LaTeX} that
-% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document
-% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical
-% knowledge management (MKM).
-%
-% This package supplies an infrastructure for writing {\omdoc} documents in {\LaTeX}.
-% This includes a simple structure sharing mechanism for \sTeX that allows to to move
-% from a copy-and-paste document development model to a copy-and-reference model, which
-% conserves space and simplifies document management. The augmented structure can be
-% used by MKM systems for added-value services, either directly from the \sTeX
-% sources, or after translation.
-% \begin{sfragment}[id=sec:STR]{Introduction}
-%
-% \sTeX is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents
-% semantically without leaving the document format, essentially turning {\TeX/\LaTeX}
-% into a document format for mathematical knowledge management (MKM). The package
-% supports direct translation to the {\omdoc} format~\cite{Kohlhase:OMDoc1.2}
-%
-% The |document-structure| package supplies macros and environments that allow to label document
-% fragments and to reference them later in the same document or in other documents. In
-% essence, this enhances the document-as-trees model to
-% documents-as-directed-acyclic-graphs (DAG) model. This structure can be used by MKM
-% systems for added-value services, either directly from the \sTeX sources, or after
-% translation. Currently, trans-document referencing provided by this package can only be
-% used in the \sTeX collection.
-%
-% DAG models of documents allow to replace the ``Copy and Paste'' in the source document
-% with a label-and-reference model where document are shared in the document source and
-% the formatter does the copying during document
-% formatting/presentation.\ednote{integrate with latexml's XMRef in the Math mode.}
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user]{The User Interface}
-%
-% The |document-structure| package generates two files: |document-structure.cls|, and |document-structure.sty|. The {\omdoc}
-% class is a minimally changed variant of the standard |article| class that includes the
-% functionality provided by |document-structure.sty|. The rest of the documentation pertains to the
-% functionality introduced by |document-structure.sty|.
-%
-% \begin{sfragment}[id=sec:user:options]{Package and Class Options}
-%
-% The |document-strcture| class accept the following options:
-% \begin{center}
-% \begin{tabular}{|l|p{10cm}|}\hline
-% \texttt{class=\meta{name}} & load \meta{name}|.cls| instead of |article.cls|\\\hline
-% \texttt{topsect=\meta{sect}} & The top-level sectioning level; the default for
-% \meta{sect} is \texttt{section}\\\hline
-% \texttt{showignores} & show the the contents of the |ignore| environment after all \\\hline
-% \texttt{showmeta} & show the metadata; see |metakeys.sty|\\\hline
-% \texttt{showmods} & show modules; see |modules.sty|\\\hline
-% \texttt{extrefs} & allow external references; see |sref.sty|\\\hline
-% \texttt{defindex} & index definienda; see |statements.sty|\\\hline
-% \texttt{minimal} & for testing; do not load any \sTeX packages\\\hline
-% \end{tabular}
-% \end{center}
-% The |document-structure| package accepts the same except the first two.
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user:struct]{Document Structure}
-%
-% The top-level \DescribeEnv{document}|document| environment can be given key/value
-% information by the \DescribeMacro{\documentkeys}|\documentkeys| macro in the
-% preamble\footnote{We cannot patch the document environment to accept an optional
-% argument, since other packages we load already do; pity.}. This can be used to give
-% metadata about the document. For the moment only the \DescribeMacro{id}|id| key is
-% used to give an identifier to the \texttt{omdoc} element resulting from the {\latexml}
-% transformation.
-%
-% The structure of the document is given by the \DescribeEnv{sfragment}|omgroup|
-% environment just like in {\omdoc}. In the {\LaTeX} route, the |omgroup| environment is
-% flexibly mapped to sectioning commands, inducing the proper sectioning level from the
-% nesting of |omgroup| environments. Correspondingly, the |omgroup| environment takes an
-% optional key/value argument for metadata followed by a regular argument for the
-% (section) title of the omgroup. The optional metadata argument has the keys
-% \DescribeMacro{id}|id| for an identifier, \DescribeMacro{creators}|creators| and
-% \DescribeMacro{contributors}|contributors| for the Dublin Core
-% metadata~\cite{DCMI:dmt03}; see~\cite{Kohlhase:dcm:git} for details of the format. The
-% \DescribeMacro{short}|short| allows to give a short title for the generated
-% section. If the title contains semantic macros, they need to be protected by
-% |\protect|, and we need to give the \DescribeMacro{loadmodules}|loadmodules| key it
-% needs no value. For instance we would have
-% \begin{verbatim}
-% \begin{smodule}{foo}
-% \symdef{bar}{B^a_r}
-% ...
-% \begin{sfragment}[id=sec.barderiv,loadmodules]{Introducing $\protect\bar$ Derivations}
-% \end{verbatim}
-%
-% \sTeX automatically computes the sectioning level, from the nesting of |omgroup|
-% environments. But sometimes, we want to skip levels (e.g. to use a subsection* as an
-% introduction for a chapter). Therefore the |document-structure| package provides a variant
-% \DescribeEnv{blindfragment}|blindomgroup| that does not produce markup, but increments
-% the sectioning level and logically groups document parts that belong together, but
-% where traditional document markup relies on convention rather than explicit
-% markup. The |blindomgroup| environment is useful e.g. for creating frontmatter at the
-% correct level. Example~\ref{fig:docstruct} shows a typical setup for the outer
-% document structure of a book with parts and chapters. We use two levels of
-% |blindomgroup|:
-% \begin{itemize}
-% \item The outer one groups the introductory parts of the book (which we assume to have
-% a sectioning hierarchy topping at the part level). This |blindomgroup| makes sure
-% that the introductory remarks become a ``chapter'' instead of a ``part''.
-% \item Th inner one groups the frontmatter\footnote{We shied away from redefining the
-% |frontmatter| to induce a blindomgroup, but this may be the ``right'' way to go in
-% the future.} and makes the preface of the book a section-level construct. Note that
-% here the |display=flow| on the |omgroup| environment prevents numbering as is
-% traditional for prefaces.
-% \end{itemize}
-% \begin{exfig}
-% \begin{verbatim}
-% \begin{document}
-% \begin{blindfragment}
-% \begin{blindfragment}
-% \begin{frontmatter}
-% \maketitle\newpage
-% \begin{sfragment}[display=flow]{Preface}
-% ... <<preface>> ...
-% \end{sfragment}
-% \clearpage\setcounter{tocdepth}{4}\tableofcontents\clearpage
-% \end{frontmatter}
-% \end{blindfragment}
-% ... <<introductory remarks>> ...
-% \end{blindfragment}
-% \begin{sfragment}{Introduction}
-% ... <<intro>> ...
-% \end{sfragment}
-% ... <<more chapters>> ...
-% \bibliographystyle{alpha}\bibliography{kwarc}
-% \end{document}
-% \end{verbatim}
-% \vspace*{-2em}
-% \caption{A typical Document Structure of a Book}\label{fig:docstruct}
-% \end{exfig}
-%
-% The \DescribeMacro{\skipomgroup}|\skipomgroup| ``skips an |omgroup|'', i.e. it just
-% steps the respective sectioning counter. This macro is useful, when we want to keep two
-% documents in sync structurally, so that section numbers match up: Any section that is
-% left out in one becomes a |\skipomgroup|.
-%
-% The \DescribeMacro{\currentsectionlevel}|\currentsectionlevel| macro supplies the name
-% of the current sectioning level, e.g. ``chapter'', or
-% ``subsection''. \DescribeMacro{\CurrentSectionLevel}|\CurrentSectionLevel| is the
-% capitalized variant. They are useful to write something like ``In this
-% |\currentsectionlevel|, we will\ldots'' in an |omgroup| environment, where we do not
-% know which sectioning level we will end up.
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user:ignore]{Ignoring Inputs}
-%
-% The \DescribeEnv{ignore}|ignore| environment can be used for hiding text parts from the
-% document structure. The body of the environment is not PDF or DVI output unless the
-% \DescribeMacro{showignores}|showignores| option is given to the |document-structure| class or
-% |package|. But in the generated {\omdoc} result, the body is marked up with a |ignore|
-% element. This is useful in two situations. For
-% \begin{description}
-% \item[editing] One may want to hide unfinished or obsolete parts of a document
-% \item[narrative/content markup] In {\stex} we mark up narrative-structured documents. In
-% the generated {\omdoc} documents we want to be able to cache content objects that are
-% not directly visible. For instance in the |statements|
-% package~\cite{Kohlhase:smms:git} we use the |\inlinedef| macro to mark up phrase-level
-% definitions, which verbalize more formal definitions. The latter can be hidden by an
-% ignore and referenced by the |verbalizes| key in |\inlinedef|.
-% \end{description}
-%
-% For prematurely stopping the formatting of a document, \sTeX provides the
-% \DescribeMacro{\prematurestop}|\prematurestop| macro. It can be used everywhere in a
-% document and ignores all input after that -- backing out of the omgroup environment as
-% needed. After that -- and before the implicit |\end{document}| it calls the internal
-% \DescribeMacro{\afterprematurestop}|\afterprematurestop|, which can be customized to do
-% additional cleanup or e.g. print the bibliography.
-%
-% |\prematurestop| is useful when one has a driver file, e.g. for a course taught multiple
-% years and wants to generate course notes up to the current point in the lecture. Instead
-% of commenting out the remaining parts, one can just move the |\prematurestop| macro.
-% This is especially useful, if we need the rest of the file for processing, e.g. to
-% generate a theory graph of the whole course with the already-covered parts marked up as
-% an overview over the progress; see |import_graph.py| from the |lmhtools|
-% utilities~\cite{lmhtools:github:on}.
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user:sharing]{Structure Sharing}
-%
-% The \DescribeMacro{\STRlabel}|\STRlabel| macro takes two arguments: a label and the
-% content and stores the the content for later use by
-% \DescribeMacro{\STRcopy}|\STRcopy[|\meta{URL}|]{|\meta{label}|}|, which expands to the
-% previously stored content. If the |\STRlabel| macro was in a different file, then we
-% can give a URL \meta{URL} that lets {\latexml} generate the correct reference.
-%
-% \DescribeMacro{\STRsemantics} The |\STRlabel| macro has a variant |\STRsemantics|,
-% where the label argument is optional, and which takes a third argument, which is
-% ignored in {\LaTeX}. This allows to specify the meaning of the content (whatever that
-% may mean) in cases, where the source document is not formatted for presentation, but
-% is transformed into some content markup format.\ednote{document LMID und LMXREf here
-% if we decide to keep them.}
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user:gvars]{Global Variables}
-%
-% Text fragments and modules can be made more re-usable by the use of global
-% variables. For instance, the admin section of a course can be made course-independent
-% (and therefore re-usable) by using variables (actually token registers)
-% |courseAcronym| and |courseTitle| instead of the text itself. The variables can then
-% be set in the \sTeX preamble of the course notes file.
-% \DescribeMacro{\setSGvar}|\setSGvar{|\meta{vname}|}{|\meta{text}|}| to set the global
-% variable \meta{vname} to \meta{text} and
-% \DescribeMacro{\useSGvar}|\useSGvar{|\meta{vname}|}| to reference it.
-%
-% With \DescribeMacro{\ifSGvar}|\ifSGvar| we can test for the contents of a global
-% variable: the macro call |\ifSGvar{|\meta{vname}|}{|\meta{val}|}{|\meta{ctext}|}|
-% tests the content of the global variable \meta{vname}, only if (after expansion) it is
-% equal to \meta{val}, the conditional text \meta{ctext} is formatted.
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:user:colors]{Colors}
-%
-% For convenience, the |document-structure| package defines a couple of color macros for the |color|
-% package: For instance \DescribeMacro{\blue}|\blue| abbreviates |\textcolor{blue}|, so
-% that |\blue{|\meta{something}|}| writes \meta{something} in blue. The macros
-% \DescribeMacro{\red}|\red| \DescribeMacro{...}|\green|, |\cyan|, |\magenta|, |\brown|,
-% |\yellow|, |\orange|, |\gray|, and finally \DescribeMacro{\black}|\black| are
-% analogous.
-% \end{sfragment}
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:limitations]{Limitations}
-%
-% In this section we document known limitations. If you want to help alleviate them,
-% please feel free to contact the package author. Some of them are currently discussed in
-% the \sTeX GitHub repository~\cite{sTeX:github:on}.
-% \begin{enumerate}
-% \item when option |book| which uses |\pagestyle{headings}| is given and semantic macros
-% are given in the |omgroup| titles, then they sometimes are not defined by the time the
-% heading is formatted. Need to look into how the headings are made.
-% \end{enumerate}
-% \end{sfragment}
-%
% \end{documentation}
%
% \begin{implementation}\label{pkg:documentstructure:impl}
%
% \begin{sfragment}{document-structure.sty Implementation}
%
-% \begin{sfragment}[id=sec:impl:cls]{The document-structure Class}
-%
-% The functionality is spread over the |document-structure| class and package. The class provides the
-% |document| environment and the |document-structure| element corresponds to it, whereas the
-% package provides the concrete functionality.
-%
-% \begin{macrocode}
-%<*cls>
-%<@@=document_structure>
-\ProvidesExplClass{document-structure}{2022/02/26}{3.0.1}{Modular Document Structure Class}
-\RequirePackage{l3keys2e}
-% \end{macrocode}
-%
-% \begin{sfragment}[id=sec:impl:cls:options]{Class Options}
-% To initialize the |document-structure| class, we declare and process the necessary options using
-% the |kvoptions| package for key/value options handling. For
-% |omdoc.cls| this is quite simple. We have options |report| and |book|, which set the
-% \DescribeMacro{\omdoc@cls@class}|\omdoc@cls@class| macro and pass on the macro to |omdoc.sty|
-% for further processing.
-%
-% \begin{macrocode}
-\keys_define:nn{ document-structure / pkg }{
- class .str_set_x:N = \c_document_structure_class_str,
- minimal .bool_set:N = \c_document_structure_minimal_bool,
- report .code:n = {
- \ClassWarning{document-structure}{the option 'report' is deprecated, use 'class=report', instead}
- \str_set:Nn \c_document_structure_class_str {report}
- },
- book .code:n = {
- \ClassWarning{document-structure}{the option 'book' is deprecated, use 'class=book', instead}
- \str_set:Nn \c_document_structure_class_str {book}
- },
- bookpart .code:n = {
- \ClassWarning{document-structure}{the option 'bookpart' is deprecated, use 'class=book,topsect=chapter', instead}
- \str_set:Nn \c_document_structure_class_str {book}
- \str_set:Nn \c_document_structure_topsect_str {chapter}
- },
- docopt .str_set_x:N = \c_document_structure_docopt_str,
- unknown .code:n = {
- \PassOptionsToPackage{ \CurrentOption }{ document-structure }
- }
-}
-\ProcessKeysOptions{ document-structure / pkg }
-\str_if_empty:NT \c_document_structure_class_str {
- \str_set:Nn \c_document_structure_class_str {article}
-}
-\exp_after:wN\LoadClass\exp_after:wN[\c_document_structure_docopt_str]
- {\c_document_structure_class_str}
-
-% \end{macrocode}
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:impl:cls:document]{Beefing up the \texttt{document} environment}
-%
-% Now, -- unless the option |minimal| is defined -- we include the |stex| package
-%
-% \begin{macrocode}
-\RequirePackage{document-structure}
-\bool_if:NF \c_document_structure_minimal_bool {
-% \end{macrocode}
-%
-% And define the environments we need. The top-level one is the |document| environment,
-% which we redefined so that we can provide keyval arguments.
-%
-% \begin{environment}{document}
-% For the moment we do not use them on the {\LaTeX} level, but the document identifier
-% is picked up by {\latexml}.\ednote{faking documentkeys for now. @HANG, please implement}
-% \begin{macrocode}
-\keys_define:nn { document-structure / document }{
- id .str_set_x:N = \c_document_structure_document_id_str
-}
-\let\_@@_orig_document=\document
-\renewcommand{\document}[1][]{
- \keys_set:nn{ document-structure / document }{ #1 }
- \stex_ref_new_doc_target:n { \c_document_structure_document_id_str }
- \_@@_orig_document
-}
-% \end{macrocode}
-% \end{environment}
-%
-% Finally, we end the test for the |minimal| option.
-%
-% \begin{macrocode}
-}
-%</cls>
-% \end{macrocode}
-% \end{sfragment}
-% \end{sfragment}
-%
-% \begin{sfragment}[id=sec:impl:sty]{Implementation: document-structure Package}
-%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{document-structure}{2022/02/26}{3.0.1}{Modular Document Structure}
+%<@@=document_structure>
+\ProvidesExplPackage{document-structure}{2022/05/24}{3.1.0}{Modular Document Structure}
\RequirePackage{l3keys2e}
% \end{macrocode}
%
@@ -390,12 +70,16 @@
%
% \begin{macrocode}
-\keys_define:nn{ document-structure / pkg }{
+\keys_define:nn{ document-structure }{
class .str_set_x:N = \c_document_structure_class_str,
- topsect .str_set_x:N = \c_document_structure_topsect_str,
+ topsect .str_set_x:N = \c_document_structure_topsect_str,,
+ unknown .code:n = {
+ \PassOptionsToClass{\CurrentOption}{stex}
+ \PassOptionsToClass{\CurrentOption}{tikzinput}
+ }
% showignores .bool_set:N = \c_document_structure_showignores_bool,
}
-\ProcessKeysOptions{ document-structure / pkg }
+\ProcessKeysOptions{ document-structure }
\str_if_empty:NT \c_document_structure_class_str {
\str_set:Nn \c_document_structure_class_str {article}
}
@@ -410,6 +94,7 @@
% \begin{macrocode}
\RequirePackage{xspace}
\RequirePackage{comment}
+\RequirePackage{stex}
\AddToHook{begindocument}{
\ltx@ifpackageloaded{babel}{
\clist_set:Nx \l_tmpa_clist {\bbl@loaded}
@@ -452,9 +137,8 @@
%
% \begin{sfragment}[id=sec:impl:struct]{Document Structure}
%
-% The structure of the document is given by the |omgroup| environment just like in
-% OMDoc. The hierarchy is adjusted automatically according to the {\LaTeX} class in
-% effect.
+% The structure of the document is given by the |sfragment| environment. The hierarchy
+% is adjusted automatically according to the {\LaTeX} class in effect.
% \begin{macro}{\currentsectionlevel}
% For the |\currentsectionlevel| and |\Currentsectionlevel| macros we use an internal
% macro |\current@section@level| that only contains the keyword (no markup). We
@@ -469,9 +153,9 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\skipomgroup}
+% \begin{macro}{\skipfragment}
% \begin{macrocode}
-\cs_new_protected:Npn \skipomgroup {
+\cs_new_protected:Npn \skipfragment {
\ifcase\l_document_structure_section_level_int
\or\stepcounter{part}
\or\stepcounter{chapter}
@@ -487,82 +171,84 @@
%
% \begin{environment}{blindfragment}
% \begin{macrocode}
-\newcommand\at@begin@blindomgroup[1]{}
+\newcommand\at@begin@blindsfragment[1]{}
\newenvironment{blindfragment}
{
\int_incr:N\l_document_structure_section_level_int
- \at@begin@blindomgroup\l_document_structure_section_level_int
+ \at@begin@blindsfragment\l_document_structure_section_level_int
}{}
% \end{macrocode}
% \end{environment}
%
-% \begin{macro}{\omgroup@nonum}
-% convenience macro: |\omgroup@nonum{|\meta{level}|}{|\meta{title}|}| makes an unnumbered
+% \begin{macro}{\sfragment@nonum}
+% convenience macro: |\sfragment@nonum{|\meta{level}|}{|\meta{title}|}| makes an unnumbered
% sectioning with title \meta{title} at level \meta{level}.
% \begin{macrocode}
-\newcommand\omgroup@nonum[2]{
+\newcommand\sfragment@nonum[2]{
\ifx\hyper@anchor\@undefined\else\phantomsection\fi
\addcontentsline{toc}{#1}{#2}\@nameuse{#1}*{#2}
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\omgroup@num}
-% convenience macro: |\omgroup@nonum{|\meta{level}|}{|\meta{title}|}| makes numbered
+% \begin{macro}{\sfragment@num}
+% convenience macro: |\sfragment@nonum{|\meta{level}|}{|\meta{title}|}| makes numbered
% sectioning with title \meta{title} at level \meta{level}. We have to check the |short|
-% key was given in the |omgroup| environment and -- if it is use it. But how to do that
+% key was given in the |sfragment| environment and -- if it is use it. But how to do that
% depends on whether the |rdfmeta| package has been loaded. In the end we call
% |\sref@label@id| to enable crossreferencing.
% \begin{macrocode}
-\newcommand\omgroup@num[2]{
- \tl_if_empty:NTF \l_@@_omgroup_short_tl {
+\newcommand\sfragment@num[2]{
+ \tl_if_empty:NTF \l_@@_sfragment_short_tl {
\@nameuse{#1}{#2}
}{
\cs_if_exist:NTF\rdfmeta@sectioning{
- \@nameuse{rdfmeta@#1@old}[\l_@@_omgroup_short_tl]{#2}
+ \@nameuse{rdfmeta@#1@old}[\l_@@_sfragment_short_tl]{#2}
}{
- \@nameuse{#1}[\l_@@_omgroup_short_tl]{#2}
+ \@nameuse{#1}[\l_@@_sfragment_short_tl]{#2}
}
}
-%\sref@label@id@arg{\omdoc@sect@name~\@nameuse{the#1}}\omgroup@id
+%\sref@label@id@arg{\omdoc@sect@name~\@nameuse{the#1}}\sfragment@id
}
% \end{macrocode}
% \end{macro}
%
% \begin{environment}{sfragment}
% \begin{macrocode}
-\keys_define:nn { document-structure / omgroup }{
- id .str_set_x:N = \l_@@_omgroup_id_str,
- date .str_set_x:N = \l_@@_omgroup_date_str,
- creators .clist_set:N = \l_@@_omgroup_creators_clist,
- contributors .clist_set:N = \l_@@_omgroup_contributors_clist,
- srccite .tl_set:N = \l_@@_omgroup_srccite_tl,
- type .tl_set:N = \l_@@_omgroup_type_tl,
- short .tl_set:N = \l_@@_omgroup_short_tl,
- display .tl_set:N = \l_@@_omgroup_display_tl,
- intro .tl_set:N = \l_@@_omgroup_intro_tl,
- loadmodules .bool_set:N = \l_@@_omgroup_loadmodules_bool
+\keys_define:nn { document-structure / sfragment }{
+ id .str_set_x:N = \l_@@_sfragment_id_str,
+ date .str_set_x:N = \l_@@_sfragment_date_str,
+ creators .clist_set:N = \l_@@_sfragment_creators_clist,
+ contributors .clist_set:N = \l_@@_sfragment_contributors_clist,
+ srccite .tl_set:N = \l_@@_sfragment_srccite_tl,
+ type .tl_set:N = \l_@@_sfragment_type_tl,
+ short .tl_set:N = \l_@@_sfragment_short_tl,
+ display .tl_set:N = \l_@@_sfragment_display_tl,
+ intro .tl_set:N = \l_@@_sfragment_intro_tl,
+ imports .tl_set:N = \l_@@_sfragment_imports_tl,
+ loadmodules .bool_set:N = \l_@@_sfragment_loadmodules_bool
}
-\cs_new_protected:Nn \_@@_omgroup_args:n {
- \str_clear:N \l_@@_omgroup_id_str
- \str_clear:N \l_@@_omgroup_date_str
- \clist_clear:N \l_@@_omgroup_creators_clist
- \clist_clear:N \l_@@_omgroup_contributors_clist
- \tl_clear:N \l_@@_omgroup_srccite_tl
- \tl_clear:N \l_@@_omgroup_type_tl
- \tl_clear:N \l_@@_omgroup_short_tl
- \tl_clear:N \l_@@_omgroup_display_tl
- \tl_clear:N \l_@@_omgroup_intro_tl
- \bool_set_false:N \l_@@_omgroup_loadmodules_bool
- \keys_set:nn { document-structure / omgroup } { #1 }
+\cs_new_protected:Nn \_@@_sfragment_args:n {
+ \str_clear:N \l_@@_sfragment_id_str
+ \str_clear:N \l_@@_sfragment_date_str
+ \clist_clear:N \l_@@_sfragment_creators_clist
+ \clist_clear:N \l_@@_sfragment_contributors_clist
+ \tl_clear:N \l_@@_sfragment_srccite_tl
+ \tl_clear:N \l_@@_sfragment_type_tl
+ \tl_clear:N \l_@@_sfragment_short_tl
+ \tl_clear:N \l_@@_sfragment_display_tl
+ \tl_clear:N \l_@@_sfragment_imports_tl
+ \tl_clear:N \l_@@_sfragment_intro_tl
+ \bool_set_false:N \l_@@_sfragment_loadmodules_bool
+ \keys_set:nn { document-structure / sfragment } { #1 }
}
% \end{macrocode}
% we define a switch for numbering lines and a hook for the beginning of groups: The
-% \DescribeMacro{\at@begin@omgroup}|\at@begin@omgroup| macro allows customization. It is
-% run at the beginning of the |omgroup|, i.e. after the section heading.
+% \DescribeMacro{\at@begin@sfragment}|\at@begin@sfragment| macro allows customization. It is
+% run at the beginning of the |sfragment|, i.e. after the section heading.
% \begin{macrocode}
\newif\if@mainmatter\@mainmattertrue
-\newcommand\at@begin@omgroup[3][]{}
+\newcommand\at@begin@sfragment[3][]{}
% \end{macrocode}
%
% Then we define a helper macro that takes care of the sectioning magic. It comes with its
@@ -590,20 +276,20 @@
\bool_if:NT \l_@@_sect_clear_bool { \cleardoublepage }
\if@mainmatter% numbering not overridden by frontmatter, etc.
\bool_if:NTF \l_@@_sect_num_bool {
- \omgroup@num{#2}{#3}
+ \sfragment@num{#2}{#3}
}{
- \omgroup@nonum{#2}{#3}
+ \sfragment@nonum{#2}{#3}
}
\def\current@section@level{\omdoc@sect@name}
\else
- \omgroup@nonum{#2}{#3}
+ \sfragment@nonum{#2}{#3}
\fi
}% if@mainmatter
% \end{macrocode}
% and another one, if redefines the |\addtocontentsline| macro of {\LaTeX} to import the
% respective macros. It takes as an argument a list of module names.
% \begin{macrocode}
-\newcommand\omgroup@redefine@addtocontents[1]{%
+\newcommand\sfragment@redefine@addtocontents[1]{%
%\edef\@@import{#1}%
%\@for\@I:=\@@import\do{%
%\edef\@path{\csname module@\@I @path\endcsname}%
@@ -618,21 +304,23 @@
%\fi
}% hypreref.sty loaded?
% \end{macrocode}
-% now the |omgroup| environment itself. This takes care of the table of contents via the
+% now the |sfragment| environment itself. This takes care of the table of contents via the
% helper macro above and then selects the appropriate sectioning command from
-% |article.cls|. It also registeres the current level of omgroups in the |\omgroup@level|
+% |article.cls|. It also registeres the current level of sfragments in the |\sfragment@level|
% counter.
% \begin{macrocode}
\newenvironment{sfragment}[2][]% keys, title
{
- \_@@_omgroup_args:n { #1 }%\sref@target%
+ \_@@_sfragment_args:n { #1 }%\sref@target%
% \end{macrocode}
% If the |loadmodules| key is set on |\begin{sfragment}|, we redefine the |\addcontetsline|
% macro that determines how the sectioning commands below construct the entries for the
% table of contents.
% \begin{macrocode}
- \bool_if:NT \l_@@_omgroup_loadmodules_bool {
- \omgroup@redefine@addtocontents{
+ \stex_csl_to_imports:No \usemodule \l_@@_sfragment_imports_tl
+
+ \bool_if:NT \l_@@_sfragment_loadmodules_bool {
+ \sfragment@redefine@addtocontents{
%\@ifundefined{module@id}\used@modules%
%{\@ifundefined{module@\module@id @path}{\used@modules}\module@id}
}
@@ -641,6 +329,9 @@
% now we only need to construct the right sectioning depending on the value of
% |\section@level|.
% \begin{macrocode}
+
+ \stex_document_title:n { #2 }
+
\int_incr:N\l_document_structure_section_level_int
\ifcase\l_document_structure_section_level_int
\or\omdoc@sectioning[name=\omdoc@part@kw,clear,num]{part}{#2}
@@ -651,9 +342,9 @@
\or\omdoc@sectioning[name=\omdoc@paragraph@kw,ref=this \omdoc@paragraph@kw]{paragraph}{#2}
\or\omdoc@sectioning[name=\omdoc@subparagraph@kw,ref=this \omdoc@subparagraph@kw]{paragraph}{#2}
\fi
- \at@begin@omgroup[#1]\l_document_structure_section_level_int{#2}
- \str_if_empty:NF \l_@@_omgroup_id_str {
- \stex_ref_new_doc_target:n\l_@@_omgroup_id_str
+ \at@begin@sfragment[#1]\l_document_structure_section_level_int{#2}
+ \str_if_empty:NF \l_@@_sfragment_id_str {
+ \stex_ref_new_doc_target:n\l_@@_sfragment_id_str
}
}% for customization
{}
@@ -757,73 +448,26 @@
%
% \begin{macro}{\prematurestop}
% We initialize |\afterprematurestop|, and provide
-% |\prematurestop@endomgroup| which looks up |\omgroup@level| and recursively ends
+% |\prematurestop@endsfragment| which looks up |\sfragment@level| and recursively ends
% enough |{sfragment}|s.
% \begin{macrocode}
\def \c_@@_document_str{document}
\newcommand\afterprematurestop{}
-\def\prematurestop@endomgroup{
+\def\prematurestop@endsfragment{
\unless\ifx\@currenvir\c_@@_document_str
\expandafter\expandafter\expandafter\end\expandafter\expandafter\expandafter{\expandafter\@currenvir\expandafter}
- \expandafter\prematurestop@endomgroup
+ \expandafter\prematurestop@endsfragment
\fi
}
\providecommand\prematurestop{
\message{Stopping~sTeX~processing~prematurely}
- \prematurestop@endomgroup
+ \prematurestop@endsfragment
\afterprematurestop
\end{document}
}
% \end{macrocode}
% \end{macro}
%
-% \iffalse
-% \begin{sfragment}[id=sec:impl:share]{Structure Sharing}
-% \ednote{The following is simply copied over from the |latexml| package, which we
-% eliminated, we should integrate better.}
-% \begin{macrocode}
-\iffalse
-\providecommand{\lxDocumentID}[1]{}%
-\def\LXMID#1#2{\expandafter\gdef\csname xmarg#1\endcsname{#2}\csname xmarg#1\endcsname}
-\def\LXMRef#1{\csname xmarg#1\endcsname}
-% \end{macrocode}
-%
-% \begin{macro}{\STRlabel}
-% The main macro, it it used to attach a label to some text expansion. Later on, using the
-% |\STRcopy| macro, the author can use this label to get the expansion originally assigned.
-% \begin{macrocode}
-\long\def\STRlabel#1#2{\STRlabeldef{#1}{#2}{#2}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\STRcopy}
-% The |\STRcopy| macro is used to call the expansion of a given label. In case the label
-% is not defined it will issue a warning.\ednote{MK: we need to do something about the
-% ref!}
-% \begin{macrocode}
-\newcommand\STRcopy[2][]{\expandafter\ifx\csname STR@#2\endcsname\relax
-\message{STR warning: reference #2 undefined!}
-\else\csname STR@#2\endcsname\fi}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\STRsemantics}
-% if we have a presentation form and a semantic form, then we can use
-% \begin{macrocode}
-\newcommand\STRsemantics[3][]{#2\def\@test{#1}\ifx\@test\@empty\STRlabeldef{#1}{#2}\fi}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\STRlabeldef}
-% This is the macro that does the actual labeling. Is it called inside |\STRlabel|
-% \begin{macrocode}
-\def\STRlabeldef#1{\expandafter\gdef\csname STR@#1\endcsname}
-\fi
-% \end{macrocode}
-% \end{macro}
-% \end{sfragment}
-%\fi
-%
% \begin{sfragment}[id=sec:impl:gvars]{Global Variables}
%
% \begin{macro}{\setSGvar}
@@ -860,63 +504,12 @@
%
% \end{sfragment}
% \end{sfragment}
-% \end{sfragment}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
\endinput
-% \iffalse
+
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End:
-% \fi
-% LocalWords: GPL structuresharing STR omdoc dtx stex CPERL LoadClass url dc filedate om
-% LocalWords: RequirePackage RegisterNamespace namespace xsl DocType ltxml dtd DAG hline
-% LocalWords: ltx DefEnvironment beforeDigest AssignValue inPreamble getGullet rangle
-% LocalWords: afterDigest keyval omgroup DefKeyVal Semiverbatim KeyVal srcf frontmatter
-% LocalWords: OptionalKeyVals DefParameterType IfBeginFollows skipSpaces CMP rangle xdef
-% LocalWords: ifNext DefMacro needwrapper unlist DefConstructor omtext bgroup showmods
-% LocalWords: useCMPItemizations RefStepItemCounter egroup beginItemize li di pathsuris
-% LocalWords: beforeDigestEnd dt autoclose ul ol dl env showignores srcref Cwd rdfmeta
-% LocalWords: afterOpen LastSeenCMP autoClose DefCMPEnvironment proto ToString st@flow
-% LocalWords: addAttribute nlex nlcex omdocColorMacro args tok MergeFont qw setion@level
-% LocalWords: TokenizeInternal toString isMath foreach maybeCloseElement id'd Backmatter
-% LocalWords: autoOpen minipage footnotesize scriptsize numberIt whatsit href endinput
-% LocalWords: getAttribute setAttribute OMDoc RelaxNGSchema noindex xml lec KeyVals
-% LocalWords: Subsubsection useDefaultItemizations refundefinedtrue sblockquote defindex
-% LocalWords: DefCMPConstructor sinlinequote idx idt ide idp emph extrefs sref Tokenize
-% LocalWords: flushleft flushright DeclareOption PassOptions undef cls iffalse noauxreq
-% LocalWords: ProcessOptions subparagraph ignoresfalse ignorestrue texttt ttin behavior
-% LocalWords: texttt latexml fileversion maketitle newpage tableofcontents cwd srccite
-% LocalWords: newpage ednote ctancite dmt03 smms inlinedef STRlabel STRcopy loadmodules
-% LocalWords: STRlabel STRsemantics STRsemantics textcolor printbibliography loadmodules
-% LocalWords: textsf langle textsf langle respetively orig renewcommand cdir capitalized
-% LocalWords: baseuri baseuri baselocal baselocal SOURCEFILE cooluri newif ifx tf@toc
-% LocalWords: SOURCEBASE chapterfalse partfalse newcount ifshow chaptertrue initialize
-% LocalWords: parttrue srefaddidkey newenvironment textbf compactenum showmeta tf@toc
-% LocalWords: noindent noindent ignorespaces ifnum thepart thechapter regexp color.sty
-% LocalWords: thesection thesubsection thesubsubsection needswrapper itshape xmarg xmarg
-% LocalWords: textgreater renewenvironment excludecomment STRlabeldef csname Section,num
-% LocalWords: expandafter endcsname xref newcommand gdef doctex metakeys Hacky arabic
-% LocalWords: metasetkeys addmetakey printindex providecommand jobname.ind importmodules
-% LocalWords: jobname.ind tocdepth hateq ensuremath xspace hatequiv equiv NeedsTeXFormat
-% LocalWords: textleadsto leadsto etoolbox blindomgroup blindomgroup docstruct setSGvar
-% LocalWords: compactitem exfig vspace currentsectionlevel currentsectionlevel setSGvar
-% LocalWords: ldots URLBASE ifclass bookfalse booktrue currentsetionlevel thedocument@ID
-% LocalWords: nonum phantomsection nameuse numtrue numfalse contentsline unnum vname
-% LocalWords: thepage hypreref.sty ifcase cleardoublepage frontmatterfalse customization
-% LocalWords: frontmattertrue pagenumbering setcounter hyperref.sty addcontetsline ctext
-% LocalWords: mfirstuc.sty internationalize documentkeys withusedmodules Part,clear,num
-% \endinput
-% Local Variables:
-% mode: doctex
-% TeX-master: t
-% End:
-% LocalWords: crossreferencing Chapter,clear,num Subsection,num Subsubsection,num cslet
-% LocalWords: Paragraph,ref Subparagraph,ref useSGvar useSGvar ifSGvar ifSGvar topsect
-% LocalWords: sTeX@Gvar kvoptions omdoc@cls,prefix book,topsect xappto omdoc@sty,prefix
-% LocalWords: ifdefstring ifcsdef cslet localization ngerman omdoc-ngerman.ldf omgroups
-% LocalWords: Kohlhase:smmtf endbackmatter prematurestop prematurestop clear,num
-% LocalWords: prematurestop@endomgroup textbackslash import_graph.py lmhtools bibfolder
-% LocalWords: stepcounter jobname.dtx clist_set:Nx l_tmpa_clist clist_if_in:NnT
-% LocalWords: ExplSyntaxOff stex_ref_new_doc_target:n
diff --git a/macros/latex/contrib/stex/source/extensions/hwexam.dtx b/macros/latex/contrib/stex/source/extensions/hwexam.dtx
index 2cc3a1bd5b..e166fd0397 100644
--- a/macros/latex/contrib/stex/source/extensions/hwexam.dtx
+++ b/macros/latex/contrib/stex/source/extensions/hwexam.dtx
@@ -10,7 +10,7 @@
% \iffalse
%
%<*driver>
-\def\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -18,10 +18,7 @@
\end{document}
%</driver>
% \fi
-%\iffalse\CheckSum{464}\fi
-%
-% ^^A\changes{v0.9}{2006/09/18}{First Version with Documentation}
-%
+%
% \GetFileInfo{hwexam.sty}
%
% \MakeShortVerb{\|}
@@ -36,177 +33,25 @@
% \maketitle
%
%\ifinfulldoc\else
-% This is the documentation for the \pkg{hwexam} package.
-% For a more high-level introduction,
-% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+%\begin{abstract}
+% The |hwexam| package and class allows individual course assignment sheets and compound
+% assignment documents using problem files marked up with the |problem| package.
+%
+% This is the documentation for the \pkg{hwexam} package. For a more high-level
+% introduction, see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
+% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \end{abstract}
%
+% \tableofcontents
+%
% \input{../../doc/packages/stex-hwexam}
% \fi
%
% \begin{documentation}
%
-% The |hwexam| package and class allows individual course assignment sheets and
-% compound assignment documents using problem files marked up with the |problem| package.
-% \setcounter{tocdepth}{2}\tableofcontents\newpage
-%
-%\section{Introduction}\label{sec:intro}
-%
-% The |hwexam| package and class supplies an infrastructure that allows to format
-% nice-looking assignment sheets by simply including problems from problem files marked up
-% with the |problem| package~\cite{Kohlhase:problem}. It is designed to be
-% compatible with |problems.sty|, and inherits some of the functionality.
-%
-% \section{The User Interface}
-%
-% \subsection{Package and Class Options}\label{sec:user:options}
-%
-% The |hwexam| package and class take the options |solutions|, |notes|, |hints|, |gnotes|,
-% |pts|, |min|, and |boxed| that are just passed on to the |problems| package (cf. its
-% documentation for a description of the intended behavior).
-%
-% If the \DescribeMacro{showmeta}|showmeta| option is set, then the metadata keys are
-% shown (see~\cite{Kohlhase:metakeys} for details and customization options).
-%
-% The |hwexam| class additionally accepts the options |report|, |book|, |chapter|, |part|,
-% and |showignores|, of the |omdoc| package~\cite{Kohlhase:smomdl} on which it is
-% based and passes them on to that. For the |extrefs| option
-% see~\cite{Kohlhase:sref}.
-%
-% \subsection{Assignments}
-%
-% This package supplies the \DescribeEnv{assignment}|assignment| environment that groups
-% problems into assignment sheets. It takes an optional KeyVal argument with the keys
-% \DescribeMacro{number}|number| (for the assignment number; if none is given, 1 is
-% assumed as the default or --- in multi-assignment documents --- the ordinal of the
-% |assignment| environment), \DescribeMacro{title}|title| (for the assignment title; this
-% is referenced in the title of the assignment sheet), \DescribeMacro{type}|type| (for the
-% assignment type; e.g. ``quiz'', or ``homework''), \DescribeMacro{given}|given| (for the
-% date the assignment was given), and \DescribeMacro{due}|due| (for the date the
-% assignment is due).
-%
-% \subsection{Typesetting Exams}
-%
-% Furthermore, the |hwexam| package takes the option
-% \DescribeMacro{multiple}|multiple| that allows to combine multiple assignment sheets into
-% a compound document (the assignment sheets are treated as section, there is a table of
-% contents, etc.).
-%
-% Finally, there is the option \DescribeMacro{test}|test| that modifies the behavior to
-% facilitate formatting tests. Only in |test| mode, the macros |\testspace|,
-% |\testnewpage|, and |\testemptypage| have an effect: they generate space for the
-% students to solve the given problems. Thus they can be left in the {\LaTeX} source.
-%
-% \DescribeMacro{\testspace}|\testspace| takes an argument that expands to a dimension,
-% and leaves vertical space accordingly. \DescribeMacro{\testnewpage}|\testnewpage| makes
-% a new page in |test| mode, and \DescribeMacro{\testemptypage}|\testemptypage| generates
-% an empty page with the cautionary message that this page was intentionally left empty.
-%
-% Finally, the \DescribeEnv{testheading}|\testheading| takes an optional keyword argument
-% where the keys \DescribeMacro{duration}|duration| specifies a string that specifies the
-% duration of the test, \DescribeMacro{min}|min| specifies the equivalent in number of
-% minutes, and \DescribeMacro{reqpts}|reqpts| the points that are required for a perfect
-% grade.
-% \begin{exfig}[ht]
-% \makeatletter
-% \@problem{1.1}{4}{10}
-% \@problem{2.1}{4}{8}
-% \@problem{2.2}{6}{10}
-% \@problem{2.3}{6}{10}
-% \@problem{3.1}{4}{8}
-% \@problem{3.2}{4}{8}
-% \@problem{3.3}{2}{4}
-% \makeatother
-% \begin{verbatim}
-% \title{320101 General Computer Science (Fall 2010)}
-% \begin{testheading}[duration=one hour,min=60,reqpts=27]
-% Good luck to all students!
-% \end{testheading}
-% \end{verbatim}
-% \vspace*{-3ex}\hrule\vspace*{.5ex} formats to\vspace*{1ex}
-% \hrule\par\noindent\vspace*{2ex}
-% \title{320101 General Computer Science (Fall 2010)}
-% \begin{testheading}[duration=one hour,min=60,reqpts=27]
-% good luck
-% \end{testheading}
-% \caption{A generated test heading.}\label{fig:testheading}
-% \end{exfig}
-%
-% \subsection{Including Assignments}
-%
-% The \DescribeMacro{\inputassignment}|\inputassignment| macro can be used to input
-% an assignment from another file. It takes an optional KeyVal argument and a second
-% argument which is a path to the file containing the problem (the macro assumes that
-% there is only one |assignment| environment in the included file). The keys
-% \DescribeMacro{number}|number|, \DescribeMacro{title}|title|,
-% \DescribeMacro{type}|type|, \DescribeMacro{given}|given|, and \DescribeMacro{due}|due|
-% are just as for the |assignment| environment and (if given) overwrite the ones specified
-% in the |assignment| environment in the included file.
-%
-% \section{Limitations}\label{sec:limitations}
-%
-% In this section we document known limitations. If you want to help alleviate them,
-% please feel free to contact the package author. Some of them are currently discussed in
-% the \sTeX GitHub repository~\cite{sTeX:github:on}.
-% \begin{enumerate}
-% \item none reported yet.
-% \end{enumerate}
-%
% \end{documentation}
%
%\begin{implementation}
-% \section{Implementation: The hwexam Class}\label{sec:impl:cls}
-%
-% The functionality is spread over the |hwexam| class and package. The class provides
-% the |document| environment and pre-loads some convenience packages, whereas the package
-% provides the concrete functionality.
-%
-% \subsection{Class Options}\label{sec:impl:cls:options}
-%
-% To initialize the |hwexam| class, we declare and process the necessary options by
-% passing them to the respective packages and classes they come from.
-%
-% \begin{macrocode}
-%<@@=hwexam>
-%<*cls>
-\ProvidesExplClass{hwexam}{2022/02/26}{3.0.1}{homework assignments and exams}
-\RequirePackage{l3keys2e}
-\DeclareOption*{
- \PassOptionsToClass{\CurrentOption}{document-structure}
- \PassOptionsToPackage{\CurrentOption}{stex}
- \PassOptionsToPackage{\CurrentOption}{hwexam}
- \PassOptionsToPackage{\CurrentOption}{tikzinput}
-}
-\ProcessOptions
-% \end{macrocode}
-%
-% We load |omdoc.cls|, and the desired packages. For the {\latexml} bindings, we make
-% sure the right packages are loaded.
-%
-% \begin{macrocode}
-\LoadClass{document-structure}
-\RequirePackage{stex}
-\RequirePackage{hwexam}
-\RequirePackage{tikzinput}
-\RequirePackage{graphicx}
-\RequirePackage{a4wide}
-\RequirePackage{amssymb}
-\RequirePackage{amstext}
-\RequirePackage{amsmath}
-% \end{macrocode}
-% Finally, we register another keyword for the |document| environment. We give a default
-% assignment type to prevent errors
-% \begin{macrocode}
-\newcommand\assig@default@type{\hwexam@assignment@kw}
-\def\document@hwexamtype{\assig@default@type}
-%<@@=document_structure>
-\keys_define:nn { document-structure / document }{
- id .str_set_x:N = \c_document_structure_document_id_str,
- hwexamtype .tl_set:N = \document@hwexamtype
-}
-%<@@=hwexam>
-%</cls>
-% \end{macrocode}
%
% \section{Implementation: The hwexam Package}
%
@@ -218,7 +63,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{hwexam}{2022/02/26}{3.0.1}{homework assignments and exams}
+\ProvidesExplPackage{hwexam}{2022/05/24}{3.1.0}{homework assignments and exams}
\RequirePackage{l3keys2e}
\newif\iftest\testfalse
@@ -283,8 +128,7 @@
% the assignment counter into account.
% \begin{macrocode}
\newcounter{assignment}
-\numberproblemsin{assignment}
-\renewcommand\prob@label[1]{\assignment@number.#1}
+%\numberproblemsin{assignment}
% \end{macrocode}
%
% We will prepare the keyval support for the |assignment| environment.
@@ -422,6 +266,7 @@
\global\setcounter{assignment}{\int_use:N\l_@@_assign_number_int}
}
\setcounter{problem}{0}
+ \renewcommand\prob@label[1]{\assignment@number.##1}
\def\current@section@level{\document@hwexamtype}
%\sref@label@id{\document@hwexamtype \thesection}
\begin{@assignment}
@@ -433,7 +278,7 @@
% sectioning.
% \begin{macrocode}
\def\ass@title{
- \protect\document@hwexamtype~\arabic{assignment}
+ {\protect\document@hwexamtype}~\arabic{assignment}
\assignment@title{}{\;(}{)\;} -- \given@due{}{}
}
\ifmultiple
@@ -652,6 +497,7 @@
% \newcommand\discussA{\bierglas}
% \end{verbatim}
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
\endinput
% \iffalse
diff --git a/macros/latex/contrib/stex/source/extensions/notesslides.dtx b/macros/latex/contrib/stex/source/extensions/notesslides.dtx
index d99109ee22..ff06827660 100644
--- a/macros/latex/contrib/stex/source/extensions/notesslides.dtx
+++ b/macros/latex/contrib/stex/source/extensions/notesslides.dtx
@@ -11,7 +11,7 @@
% \iffalse
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -19,7 +19,6 @@
\end{document}
%</driver>
% \fi
-% ^^A\changes{v0.1}{2005/12/06}{Initial Version}
%
% \GetFileInfo{notesslides.cls}
% \MakeShortVerb{\|}
@@ -59,227 +58,8 @@
% \fi
%
% \begin{documentation}\label{pkg:notesslides:doc}
+% \changes{3.1.0}{2022/02/28}{Added \detokenize{\libusetheme}}
%
-% We present a document class from which we can generate both course slides and course
-% notes in a transparent way.
-%
-%\section{Introduction}
-%
-% The |notesslides| document class is derived from |beamer.cls|~\cite{beamerclass:on}, it
-% adds a ``notes version'' for course notes derived from the |omdoc|
-% class~\cite{Kohlhase:smomdl} that is more suited to printing than the one supplied by
-% |beamer.cls|.
-%
-%
-%\section{The User Interface}\label{sec:user}
-%
-% The |notesslides| class takes the notion of a slide frame from Till Tantau's excellent
-% |beamer| class and adapts its notion of frames for use in the \sTeX and \omdoc. To
-% support semantic course notes, it extends the notion of mixing frames and explanatory
-% text, but rather than treating the frames as images (or integrating their contents into
-% the flowing text), the |notesslides| package displays the slides as such in the course
-% notes to give students a visual anchor into the slide presentation in the course (and to
-% distinguish the different writing styles in slides and course notes).
-%
-% In practice we want to generate two documents from the same source: the slides for
-% presentation in the lecture and the course notes as a narrative document for home
-% study. To achieve this, the |notesslides| class has two modes: \emph{slides mode} and
-% \emph{notes mode} which are determined by the package option.
-%
-% \subsection{Package Options}\label{sec:user:options}
-%
-% The |notesslides| class takes a variety of class options:\ednote{leaving out noproblems
-% for the moment until we decide what to do with it.}
-% \begin{itemize}
-% \item The options \DescribeMacro{slides}|slides| and \DescribeMacro{notes}|notes| switch
-% between slides mode and notes mode (see Section~\ref{sec:user:notesslides}).
-% \item If the option \DescribeMacro{sectocframes}|sectocframes| is given, then for the
-% |omgroup|s, special frames with the |omgroup| title (and number) are generated.
-% \item \DescribeMacro{showmeta}|showmeta|. If this is set, then the metadata keys are
-% shown (see~\cite{Kohlhase:metakeys:git} for details and customization options).
-% \item If the option \DescribeMacro{frameimages}|frameimages| is set, then slide mode
-% also shows the |\frameimage|-generated frames (see
-% section~\ref{sec:user:frameimage}). If also the \DescribeMacro{fiboxed}|fiboxed|
-% option is given, the slides are surrounded by a box.
-% \item \DescribeMacro{topsect}|topsect=|\meta{sect} can be used to specify the
-% top-level sectioning level; the default for \meta{sect} is |section|.
-% \end{itemize}
-%
-% \subsection{Notes and Slides}\label{sec:user:notesslides}
-%
-% Slides are represented with the \DescribeEnv{frame}|frame| just like in the |beamer|
-% class, see~\cite{Tantau:ugbc} for details. The |notesslides| class adds the
-% \DescribeEnv{note}|note| environment for encapsulating the course note
-% fragments.\footnote{MK: it would be very nice, if we did not need this environment, and
-% this should be possible in principle, but not without intensive LaTeX trickery. Hints to
-% the author are welcome.}
-%
-% \textwarning Note that it is essential to start and end the |notes| environment at the
-% start of the line -- in particular, there may not be leading blanks -- else {\LaTeX}
-% becomes confused and throws error messages that are difficult to decipher.
-%
-% \begin{exfig}
-% \begin{verbatim}
-% \ifnotes\maketitle\else
-% \frame[noframenumbering]\maketitle\fi
-%
-% \begin{note}
-% We start this course with ...
-% \end{note}
-%
-% \begin{frame}
-% \frametitle{The first slide}
-% ...
-% \end{frame}
-% \begin{note}
-% ... and more explanatory text
-% \end{note}
-%
-% \begin{frame}
-% \frametitle{The second slide}
-% ...
-% \end{frame}
-% ...
-% \end{verbatim}
-% \caption{A typical Course Notes File}\label{fig:notesfile}
-% \end{exfig}
-%
-% By interleaving the |frame| and |note| environments, we can build course notes as shown
-% in Figure~\ref{fig:notesfile}.
-%
-% Note the use of the \DescribeMacro{\ifnotes}|\ifnotes| conditional, which allows
-% different treatment between |notes| and |slides| mode -- manually setting |\notestrue|
-% or |\notesfalse| is strongly discouraged however.
-%
-% \textwarning: We need to give the title frame the |noframenumbering| option so that the
-% frame numbering is kept in sync between the slides and the course notes.
-%
-% \textwarning: The |beamer| class recommends not to use the |allowframebreaks| option on
-% frames (even though it is very convenient). This holds even more in the |notesslides|
-% case: At least in conjunction with |\newpage|, frame numbering behaves funnily (we have
-% tried to fix this, but who knows).
-%
-% If we want to transclude a the contents of a file as a note, we can use a new variant
-% \DescribeMacro{\inputref*}|\inputref*| of the |\inputref| macro from
-% \cite{KohAmb:smmssl:git}: |\inputref*{foo}| is equivalent to
-% |\begin{note}\inputref{foo}\end{note}|.
-%
-% There are some environments that tend to occur at the top-level of |note|
-% environments. We make convenience versions of these: e.g. the
-% \DescribeEnv{nparagraph}|nparagraph| environment is just an |sparagraph| inside a |note|
-% environment (but looks nicer in the source, since it avoids one level of source
-% indenting). Similarly, we have the \DescribeEnv{nfragment}|nomgroup|,
-% \DescribeEnv{ndefinition}|ndefinition|, \DescribeEnv{nexample}|nexample|,
-% \DescribeEnv{nsproof}|nsproof|, and \DescribeEnv{nassertion}|nassertion| environments.
-%
-% \subsection{Header and Footer Lines of the Slides}\label{sec:user:headfootlines}
-%
-% The default logo provided by the |notesslides| package is the {\sTeX} logo it can be
-% customized using \DescribeMacro{\setslidelogo}|\setslidelogo{|\meta{logo name}|}|.
-%
-% The default footer line of the |notesslides| package mentions copyright and licensing. In
-% the |beamer| class, |\source| stores the author's name as the copyright holder . By
-% default it is {\it Michael Kohlhase} in the |notesslides| package since he is the main
-% user and designer of this package. \DescribeMacro{\setsource}|\setsource{|\meta{name}|}|
-% can change the writer's name. For licensing, we use the Creative Commons
-% Attribuition-ShareAlike license by default to strengthen the public domain. If package
-% |hyperref| is loaded, then we can attach a hyperlink to the license
-% logo. \DescribeMacro{\setlicensing}|\setlicensing[|\meta{url}|]{|\meta{logo name}|}| is
-% used for customization, where \meta{url} is optional.
-%
-% \subsection{Frame Images}\label{sec:user:frameimage}
-%
-% Sometimes, we want to integrate slides as images after all -- e.g. because we already
-% have a PowerPoint presentation, to which we want to add \sTeX notes. In this case we can
-% use \DescribeMacro{\frameimage}|\frameimage[|\meta{opt}|]{|\meta{path}|}|, where
-% \meta{opt} are the options of |\includegraphics| from the |graphicx|
-% package~\cite{CarRah:tpp99} and \meta{path} is the file path (extension can be left off
-% like in |\includegraphics|). We have added the |label| key that allows to give a frame
-% label that can be referenced like a regular |beamer| frame.\ednote{MK: the hyperref link
-% does not seem to work yet. I wonder why but do not have the time to fix it.}
-%
-% The \DescribeMacro{\mhframeimage}|\mhframeimage| macro is a variant of |\frameimage|
-% with repository support. Instead of writing
-% \begin{verbatim}
-% \frameimage{\MathHub{fooMH/bar/source/baz/foobar}}
-% \end{verbatim}
-% we can simply write (assuming that |\MathHub| is defined as above)
-% \begin{verbatim}
-% \mhframeimage[fooMH/bar]{baz/foobar}
-% \end{verbatim}
-% Note that the |\mhframeimage| form is more semantic, which allows more advanced document
-% management features in \textsf{MathHub}.
-%
-% If |baz/foobar| is the ``current module'', i.e. if we are on the \textsf{MathHub} path
-% \ldots|MathHub/fooMH/bar|\ldots, then stating the repository in the first optional
-% argument is redundant, so we can just use
-% \begin{verbatim}
-% \mhframeimage{baz/foobar}
-% \end{verbatim}
-%
-% \subsection{Colors and Highlighting}\label{sec:user:highlighting}
-% The \DescribeMacro{\textwarning}|\textwarning| macro generates a warning
-% sign: \textwarning
-%
-% \subsection{Front Matter, Titles, etc.}\label{sec:user:matter}
-%
-% \subsection{Excursions}\label{sec:user:excursions}
-%
-% In course notes, we sometimes want to point to an ``excursion'' -- material that is
-% either presupposed or tangential to the course at the moment -- e.g. in an appendix. The
-% typical setup is the following:
-%
-% \begin{verbatim}
-% \excursion{founif}{../ex/founif}{We will cover first-order unification in}
-% ...
-% \begin{appendix}\printexcursions\end{appendix}
-% \end{verbatim}
-%
-% The \DescribeMacro{\excursion}|\excursion{|\meta{ref}|}{|\meta{path}|}{|\meta{text}|}| is
-% syntactic sugar for \DescribeMacro{\activateexcursion}
-%
-% \begin{verbatim}
-% \begin{nparagraph}[title=Excursion]
-% \activateexcursion{founif}{../ex/founif}
-% We will cover first-order unification in \sref{founif}.
-% \end{nparagraph}
-% \end{verbatim}
-%
-% where \DescribeMacro{\activateexcursion}|\activateexcursion{|\meta{path}|}| augments the
-% |\printexcursions| macro by a call |\inputref{|\meta{path}|}|. In this way, the3
-% \DescribeMacro{\printexcursions}|\printexcursions| macro (usually in the appendix) will
-% collect up all excursions that are specified in the main text.
-%
-% Sometimes, we want to reference -- in an excursion -- part of another. We can use
-% \DescribeMacro{\excursionref}|\excursionref{|\meta{label}|}| for that.
-%
-% Finally, we usually want to put the excursions into an |omgroup| environment and add an
-% introduction, therefore we provide the a variant of the |\printexcursions| macro:
-% \DescribeMacro{\excursiongroup}|\excursiongroup[id=|\meta{id}|,intro=|\meta{path}|]| is
-% equivalent to
-% \begin{verbatim}
-% \begin{note}
-% \begin{sfragment}[id=<id>]{Excursions}
-% \inputref{<path>}
-% \printexcursions
-% \end{sfragment}
-% \end{note}
-% \end{verbatim}
-%
-% \subsection{Miscellaneous}\label{sec:user:misc}
-%
-% \section{Limitations}\label{sec:limitations}
-%
-% In this section we document known limitations. If you want to help alleviate them,
-% please feel free to contact the package author. Some of them are currently discussed in
-% the \sTeX GitHub repository~\cite{sTeX:github:on}.
-% \begin{enumerate}
-% \item when option |book| which uses |\pagestyle{headings}| is given and semantic macros
-% are given in the |omgroup| titles, then they sometimes are not defined by the time the
-% heading is formatted. Need to look into how the headings are made. This is a problem
-% of the underlying |omdoc| package.
-% \end{enumerate}
-%
% \end{documentation}
%
% \begin{implementation}\label{pkg:notesslides:impl}
@@ -296,39 +76,52 @@
% \begin{macrocode}
%<*cls>
%<@@=notesslides>
-\ProvidesExplClass{notesslides}{2022/02/26}{3.0.1}{notesslides Class}
+\ProvidesExplClass{notesslides}{2022/05/24}{3.1.0}{notesslides Class}
\RequirePackage{l3keys2e}
\keys_define:nn{notesslides / cls}{
- class .code:n = {
- \PassOptionsToClass{\CurrentOption}{document-structure}
- \str_if_eq:nnT{#1}{book}{
- \PassOptionsToPackage{defaulttopsec=part}{notesslides}
- }
- \str_if_eq:nnT{#1}{report}{
- \PassOptionsToPackage{defaulttopsec=part}{notesslides}
- }
- },
+ class .str_set_x:N = \c_@@_class_str,
notes .bool_set:N = \c_@@_notes_bool ,
slides .code:n = { \bool_set_false:N \c_@@_notes_bool },
+ docopt .str_set_x:N = \c_@@_docopt_str,
unknown .code:n = {
- \PassOptionsToClass{\CurrentOption}{document-structure}
+ \PassOptionsToPackage{\CurrentOption}{document-structure}
\PassOptionsToClass{\CurrentOption}{beamer}
\PassOptionsToPackage{\CurrentOption}{notesslides}
+ \PassOptionsToPackage{\CurrentOption}{stex}
}
}
\ProcessKeysOptions{ notesslides / cls }
+
+\str_if_empty:NF \c_@@_class_str {
+ \PassOptionsToPackage{class=\c_@@_class_str}{document-structure}
+}
+
+\exp_args:No \str_if_eq:nnT\c_@@_class_str{book}{
+ \PassOptionsToPackage{defaulttopsect=part}{notesslides}
+}
+\exp_args:No \str_if_eq:nnT\c_@@_class_str{report}{
+ \PassOptionsToPackage{defaulttopsect=part}{notesslides}
+}
+
+\RequirePackage{stex}
+\stex_html_backend:T {
+ \bool_set_true:N\c_@@_notes_bool
+}
+
\bool_if:NTF \c_@@_notes_bool {
\PassOptionsToPackage{notes=true}{notesslides}
+ \message{notesslides.cls:~Formatting~course~materials~in~notes~mode}
}{
\PassOptionsToPackage{notes=false}{notesslides}
+ \message{notesslides.cls:~Formatting~course~materials~in~slides~mode}
}
%</cls>
% \end{macrocode}
% now we do the same for the |notesslides| package.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{notesslides}{2022/02/26}{3.0.1}{notesslides Package}
+\ProvidesExplPackage{notesslides}{2022/05/24}{3.1.0}{notesslides Package}
\RequirePackage{l3keys2e}
\keys_define:nn{notesslides / pkg}{
@@ -346,6 +139,12 @@
}
}
\ProcessKeysOptions{ notesslides / pkg }
+
+\RequirePackage{stex}
+\stex_html_backend:T {
+ \bool_set_true:N\c_@@_notes_bool
+}
+
\newif\ifnotes
\bool_if:NTF \c_@@_notes_bool {
\notestrue
@@ -362,6 +161,7 @@
}{
\str_set_eq:NN \@@topsect \c_@@_topsect_str
}
+\PassOptionsToPackage{topsect=\@@topsect}{document-structure}
%</package>
% \end{macrocode}
%
@@ -370,15 +170,19 @@
% \begin{macrocode}
%<*cls>
\bool_if:NTF \c_@@_notes_bool {
- \LoadClass{document-structure}
+ \str_if_empty:NT \c_@@_class_str {
+ \str_set:Nn \c_@@_class_str {article}
+ }
+ \exp_after:wN\LoadClass\exp_after:wN[\c_@@_docopt_str]
+ {\c_@@_class_str}
}{
\LoadClass[10pt,notheorems,xcolor={dvipsnames,svgnames}]{beamer}
\newcounter{Item}
\newcounter{paragraph}
\newcounter{subparagraph}
\newcounter{Hfootnote}
- \RequirePackage{document-structure}
}
+\RequirePackage{document-structure}
% \end{macrocode}
% now it only remains to load the |notesslides| package that does all the rest.
% \begin{macrocode}
@@ -425,6 +229,16 @@
\bool_if:NT \c_@@_notes_bool {
\renewcommand\usetheme[2][]{\usepackage[#1]{beamernotestheme#2}}
}
+
+
+\NewDocumentCommand \libusetheme {O{} m} {
+ \bool_if:NTF \c_@@_notes_bool {
+ \libusepackage[#1]{beamernotestheme#2}
+ }{
+ \libusepackage[#1]{beamertheme#2}
+ }
+}
+
% \end{macrocode}
% We define the sizes of slides in the notes. Somehow, we cannot get by with the same
% here.
@@ -488,6 +302,7 @@
t .code:n = {
\_@@_do_yes_param:Nn \l_@@_frame_t_bool { #1 }
},
+ unknown .code:n = {}
}
\cs_new_protected:Nn \_@@_frame_args:n {
\str_clear:N \l_@@_frame_label_str
@@ -517,7 +332,7 @@
\def\itemize@outer{outer}
\def\itemize@inner{inner}
\renewcommand\newpage{\addtocounter{framenumber}{1}}
- \newcommand\metakeys@show@keys[2]{\marginnote{{\scriptsize ##2}}}
+ %\newcommand\metakeys@show@keys[2]{\marginnote{{\scriptsize ##2}}}
\renewenvironment{itemize}{
\ifx\itemize@level\itemize@outer
\def\itemize@label{$\rhd$}
@@ -538,9 +353,16 @@
% \end{macrocode}
% We create the box with the |mdframed| environment from the equinymous package.
% \begin{macrocode}
- \begin{mdframed}[linewidth=\slideframewidth,skipabove=1ex,skipbelow=1ex,userdefinedwidth=\slidewidth,align=center]\sf
+ \stex_html_backend:TF {
+ \begin{stex_annotate_env}{frame}{}\vbox\bgroup
+ \mdf@patchamsthm
+ }{
+ \begin{mdframed}[linewidth=\slideframewidth,skipabove=1ex,skipbelow=1ex,userdefinedwidth=\slidewidth,align=center]\sf
+ }
}{
- \medskip\miko@slidelabel\end{mdframed}
+ \stex_html_backend:TF {
+ \miko@slidelabel\egroup\end{stex_annotate_env}
+ }{\medskip\miko@slidelabel\end{mdframed}}
}
% \end{macrocode}
% \end{environment}
@@ -548,7 +370,10 @@
% Now, we need to redefine the frametitle (we are still in course notes mode).
% \begin{macro}{\frametitle}
% \begin{macrocode}
- \renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}\medskip}
+ \renewcommand{\frametitle}[1]{
+ \stex_document_title:n { #1 }
+ {\Large\bf\sf\color{blue}{#1}}\medskip
+ }
}
% \end{macrocode}
% \end{macro}
@@ -652,15 +477,31 @@
% \begin{macrocode}
\newlength{\slidelogoheight}
+\RequirePackage{graphicx}
+
+\define@key{Gin}{mhrepos}{\def\Gin@mhrepos{#1}}
+\providecommand\mhgraphics[2][]{
+ \def\Gin@mhrepos{}\setkeys{Gin}{#1}
+ \includegraphics[#1]{\mhpath\Gin@mhrepos{#2}}
+}
+
+
+
\bool_if:NTF \c_@@_notes_bool {
\setlength{\slidelogoheight}{.4cm}
}{
- \setlength{\slidelogoheight}{1cm}
-}
-\newsavebox{\slidelogo}
-\sbox{\slidelogo}{\sTeX}
-\newrobustcmd{\setslidelogo}[1]{
- \sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{#1}}
+ \setlength{\slidelogoheight}{.25cm}
+}
+\ifcsname slidelogo\endcsname\else
+ \newsavebox{\slidelogo}
+ \sbox{\slidelogo}{\sTeX}
+\fi
+\newrobustcmd{\setslidelogo}[2][]{
+ \tl_if_empty:nTF{#1}{
+ \sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{#2}}
+ }{
+ \sbox{\slidelogo}{\mhgraphics[height=\slidelogoheight,mhrepos=#1]{#2}}
+ }
}
% \end{macrocode}
% \end{macro}
@@ -845,12 +686,14 @@
% counters for |part| and |chapter|, which |beamer.cls| does not have and we make the
% |section| counter which it does dependent on |chapter|.
% \begin{macrocode}
-\bool_if:NT \c_@@_sectocframes_bool {
- \str_if_eq:VnTF \@@topsect{part}{
- \newcounter{chapter}\counterwithin*{section}{chapter}
- }{
- \str_if_eq:VnT\@@topsect{chapter}{
+\stex_html_backend:F {
+ \bool_if:NT \c_@@_sectocframes_bool {
+ \str_if_eq:VnTF \@@topsect{part}{
\newcounter{chapter}\counterwithin*{section}{chapter}
+ }{
+ \str_if_eq:VnT\@@topsect{chapter}{
+ \newcounter{chapter}\counterwithin*{section}{chapter}
+ }
}
}
}
@@ -885,13 +728,13 @@
% \end{macrocode}
% \end{macro}
%
-% The new counters are used in the |omgroup| environment that choses the {\LaTeX}
+% The new counters are used in the |sfragment| environment that choses the {\LaTeX}
% sectioning macros according to |\section@level|.
%
% \begin{environment}{sfragment}
% \begin{macrocode}
\renewenvironment{sfragment}[2][]{
- \__document_structure_omgroup_args:n { #1 }
+ \__document_structure_sfragment_args:n { #1 }
\int_incr:N \l_document_structure_section_level_int
\bool_if:NT \c_@@_sectocframes_bool {
\stepcounter{slide}
@@ -900,11 +743,11 @@
\red{
\ifcase\l_document_structure_section_level_int\or
\stepcounter{part}
- \def\@@label{\omdoc@part@kw~\Roman{part}}
+ \def\@@label{{\omdoc@part@kw}~\Roman{part}}
\def\currentsectionlevel{\omdoc@part@kw}
\or
\stepcounter{chapter}
- \def\@@label{\omdoc@chapter@kw~\arabic{chapter}}
+ \def\@@label{{\omdoc@chapter@kw}~\arabic{chapter}}
\def\currentsectionlevel{\omdoc@chapter@kw}
\or
\stepcounter{section}
@@ -932,8 +775,8 @@
\vfill%
\end{frame}%
}
- \str_if_empty:NF \l__document_structure_omgroup_id_str {
- \stex_ref_new_doc_target:n\l__document_structure_omgroup_id_str
+ \str_if_empty:NF \l__document_structure_sfragment_id_str {
+ \stex_ref_new_doc_target:n\l__document_structure_sfragment_id_str
}
}{}
}
@@ -1048,6 +891,7 @@
% \end{macro}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
\endinput
% \endinput
% Local Variables:
@@ -1055,24 +899,3 @@
% TeX-master: t
% End:
-% LocalWords: bibfolder jobname.dtx omdoc.dtx mytwocolumns beamer.cls sectocframes rhd
-% LocalWords: frameimage twintoo atwin atwintoo scsys scshape ttfamily cnxlatex xspace
-% LocalWords: mathml omdoc beamerclass:on Kohlhase:smomdl noproblems frameimages exfig
-% LocalWords: frameimages fiboxed fiboxed topsect topsect Tantau:ugbc ifnotes ifnotes
-% LocalWords: noframenumbering allowframebreaks newpage inputref inputref inputref sref
-% LocalWords: setsource setsource setlicensing setlicensing CarRah:tpp99 mhframeimage
-% LocalWords: mhframeimage printexcursions excursionref excursionref excursiongroup
-% LocalWords: excursiongroup sec:impl nontheorem mks@cls,prefix mks@cls mks@sty,prefix
-% LocalWords: mks@sty 10pt,notheorems,xcolor dvipsnames,svgnames Hfootnote mdframed
-% LocalWords: beamerarticle noxcolor,noamsthm metakeys addmetakey usetheme beamertheme
-% LocalWords: bookmarks,bookmarksopen,bookmarksnumbered,breaklinks,hidelinks sproof
-% LocalWords: beamernotestheme slideframewidth allowdisplaybreaks framenumber sproof
-% LocalWords: miko@slidelabel inputref@preskip smallskip ninputref slidelogoheight
-% LocalWords: copyrightnotice cclogo cc_somerights ifcchref cchreffalse cchreftrue
-% LocalWords: Gin@ewidth mh@currentrepos mhrepos if@iswindows defemph notemph STpresent
-% LocalWords: smalltextwarning miko@dbend bigtextwarning counterwithin ifsectocframes
-% LocalWords: subsubsection mparagraph csname stex_ref_new_doc_target:n columnbox
-% LocalWords: inserttheorembodyfont defbeamertemplate inserttheoremheadfont mhexcursion
-% LocalWords: inserttheoremname inserttheoremnumber inserttheoremaddition srefaddidkey
-% LocalWords: inserttheoremaddition inserttheorempunctuation setbeamertemplate
-% LocalWords: mhexcursiongroup
diff --git a/macros/latex/contrib/stex/source/extensions/problem.dtx b/macros/latex/contrib/stex/source/extensions/problem.dtx
index ee7d116fcb..75a34eaf8e 100644
--- a/macros/latex/contrib/stex/source/extensions/problem.dtx
+++ b/macros/latex/contrib/stex/source/extensions/problem.dtx
@@ -10,7 +10,7 @@
% \iffalse
%
%<*driver>
-\def\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\RequirePackage[hints,solutions,notes]{problem}
@@ -20,10 +20,6 @@
%</driver>
% \fi
%
-% \iffalse\CheckSum{318}\fi
-%
-% ^^A\changes{v0.9}{2006/09/18}{First Version with Documentation}
-%
% \GetFileInfo{problem.sty}
%
% \MakeShortVerb{\|}
@@ -35,215 +31,24 @@
% \url{http://kwarc.info/kohlhase}}
% \maketitle
%
-%\ifinfulldoc\else
+% \ifinfulldoc\else
+% \begin{abstract}
% This is the documentation for the \pkg{problem} package.
% For a more high-level introduction,
% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+%
+% The |problem| package supplies an infrastructure that allows specify problems (for
+% homework assignments, exams, or quizzes) and to reuse them efficiently in multiple
+% environments.
+% \end{abstract}
+%
+% \tableofcontents
%
% \input{../../doc/packages/stex-problem}
% \fi
%
% \begin{documentation}
-% The |problem| package supplies an infrastructure that allows specify problems and to
-% reuse them efficiently in multiple environments.
-%
-%\section{Introduction}\label{sec:intro}
-%
-% The |problem| package supplies an infrastructure that allows specify problem. Problems
-% are text fragments that come with auxiliary functions: hints, notes, and
-% solutions\footnote{for the moment multiple choice problems are not supported, but may
-% well be in a future version}. Furthermore, we can specify how long the solution to a
-% given problem is estimated to take and how many points will be awarded for a perfect
-% solution.
-%
-% Finally, the |problem| package facilitates the management of problems in small files,
-% so that problems can be re-used in multiple environment.
-%
-% \section{The User Interface}\label{sec:ui}
-%
-% \subsection{Package Options}
-% The |problem| package takes the options \DescribeMacro{solutions}|solutions| (should
-% solutions be output?), \DescribeMacro{notes}|notes| (should the problem notes be
-% presented?), \DescribeMacro{hints}|hints| (do we give the hints?),
-% \DescribeMacro{gnotes}|gnotes| (do we show grading notes?), \DescribeMacro{pts}|pts| (do
-% we display the points awarded for solving the problem?), \DescribeMacro{min}|min| (do we
-% display the estimated minutes for problem soling). If theses are specified, then the
-% corresponding auxiliary parts of the problems are output, otherwise, they remain
-% invisible.
-%
-% The \DescribeMacro{boxed}|boxed| option specifies that problems should be formatted in
-% framed boxes so that they are more visible in the text. Finally, the
-% \DescribeMacro{test}|test| option signifies that we are in a test situation, so this
-% option does not show the solutions (of course), but leaves space for the students to
-% solve them.
-%
-% The \DescribeMacro{mh}|mh| option turns on MathHub support; see \cite{Kohlhase:mss}.
-%
-% Finally, if the \DescribeMacro{showmeta}|showmeta| is set, then the metadata keys are
-% shown (see~\cite{Kohlhase:metakeys} for details and customization options).
-%
-% \subsection{Problems and Solutions}\label{sec:user:probsols}
-%
-% \DescribeEnv{problem} The main environment provided by the |problem| package is
-% (surprise surprise) the |problem| environment. It is used to mark up problems and
-% exercises. The environment takes an optional KeyVal argument with the keys
-% \DescribeMacro{id}|id| as an identifier that can be reference later,
-% \DescribeMacro{pts}|pts| for the points to be gained from this exercise in homework or
-% quiz situations, \DescribeMacro{min}|min| for the estimated minutes needed to solve the
-% problem, and finally \DescribeMacro{title}|title| for an informative title of the
-% problem. For an example of a marked up problem see Figure~\ref{fig:problem} and the
-% resulting markup see Figure~\ref{fig:result}.
-%
-%\begin{exfig}
-% \begin{verbatim}
-% \usepackage[solutions,hints,pts,min]{problem}
-% \begin{document}
-% \begin{sproblem}[id=elefants,pts=10,min=2,title=Fitting Elefants]
-% How many Elefants can you fit into a Volkswagen beetle?
-% \begin{hint}
-% Think positively, this is simple!
-% \end{hint}
-% \begin{exnote}
-% Justify your answer
-% \end{exnote}
-% \begin{solution}[for=elefants,height=3cm]
-% Four, two in the front seats, and two in the back.
-% \begin{gnote}
-% if they do not give the justification deduct 5 pts
-% \end{gnote}
-% \end{solution}
-% \end{sproblem}
-% \end{document}
-% \end{verbatim}
-% \caption{A marked up Problem}\label{fig:problem}
-% \end{exfig}
-%
-% \DescribeEnv{solution} The |solution| environment can be to specify a solution to a
-% problem. If the \DescribeMacro{solutions}|solutions| option is set or |\solutionstrue|
-% is set in the text, then the solution will be presented in the output. The |solution|
-% environment takes an optional KeyVal argument with the keys \DescribeMacro{id}|id| for
-% an identifier that can be reference \DescribeMacro{for}|for| to specify which problem
-% this is a solution for, and \DescribeMacro{height}|height| that allows to specify the
-% amount of space to be left in test situations (i.e. if the \DescribeMacro{test}|test|
-% option is set in the |\usepackage| statement).
-%
-%\begin{exfig}
-% \begin{minipage}{.9\linewidth}
-% \begin{sproblem}[id=elefants.prob,title=Fitting Elefants]
-% How many Elefants can you fit into a Volkswagen beetle?
-% \begin{hint}
-% Think positively, this is simple!
-% \end{hint}
-% \begin{exnote}
-% Justify your answer
-% \end{exnote}
-% \smallskip\noindent\hrule\textbf{Solution:}
-% Four, two in the front seats, and two in the back.
-% \hrule
-% \end{sproblem}
-% \end{minipage}
-% \caption{The Formatted Problem from Figure~\ref{fig:problem}}\label{fig:result}
-% \end{exfig}
-%
-% \DescribeEnv{hint}\DescribeEnv{exnote} The |hint| and |exnote| environments can be used
-% in a |problem| environment to give hints and to make notes that elaborate certain
-% aspects of the problem.
-%
-% \DescribeEnv{gnote} The |gnote| (grading notes) environment can be used to document
-% situtations that may arise in grading.
-%
-% Sometimes we would like to locally override the |solutions| option we have given to the
-% package. To turn on solutions we use the
-% \DescribeMacro{\startsolutions}|\startsolutions|, to turn them off,
-% \DescribeMacro{\stopsolutions}|\stopsolutions|. These two can be used at any point in
-% the documents.
-%
-% Also, sometimes, we want content (e.g. in an exam with master solutions) conditional on
-% whether solutions are shown. This can be done with the
-% \DescribeMacro{\ifsolutions}|\ifsolutions| conditional.
-%
-% \subsection{Multiple Choice Blocks}\label{sec:user:mcq}
-%
-% Multiple choice blocks can be formatted using the \DescribeMacro{mcb}|mcb| environment,
-% in which single choices are marked up with
-% \DescribeMacro{\mcc}|\mcc[|\meta{keyvals}|]{|\meta{text}|}| macro, which takes an
-% optional key/value argument \meta{keyvals} for choice metadata and a required argument
-% \meta{text} for the proposed answer text. The following keys are supported
-% \begin{itemize}
-% \item \DescribeMacro{T}|T| for true answers, \DescribeMacro{F}|F| for false ones,
-% \item \DescribeMacro{Ttext}|Ttext| the verdict for true answers,
-% \DescribeMacro{Ftext}|Ftext| for false ones, and
-% \item \DescribeMacro{feedback}|feedback| for a short feedback text given to the student.
-% \end{itemize}
-% See Figure~\ref{fig: mcq} for an example
-%\begin{exfig}
-% \begin{verbatim}
-% \begin{sproblem}[title=Functions]
-% What is the keyword to introduce a function definition in python?
-% \begin{mcb}
-% \mcc[T]{def}
-% \mcc[F,feedback=that is for C and C++]{function}
-% \mcc[F,feedback=that is for Standard ML]{fun}
-% \mcc[F,Ftext=Nooooooooo,feedback=that is for Java]{public static void}
-% \end{mcb}
-% \end{sproblem}
-% \end{verbatim}
-% \solutionsfalse\hrule
-% \begin{sproblem}[title=Functions]
-% What is the keyword to introduce a function definition in python?
-% \begin{mcb}
-% \mcc[T]{def}
-% \mcc[F,feedback=that is for C and C++]{function}
-% \mcc[F,feedback=that is for Standard ML]{fun}
-% \mcc[F,Ftext=Nooooooooo,feedback=that is for Java]{public static void}
-% \end{mcb}
-% \end{sproblem}
-% \solutionstrue\hrule
-% \begin{sproblem}[title=Functions]
-% What is the keyword to introduce a function definition in python?
-% \begin{mcb}
-% \mcc[T]{def}
-% \mcc[F,feedback=that is for C and C++]{function}
-% \mcc[F,feedback=that is for Standard ML]{fun}
-% \mcc[F,Ftext=Nooooooooo,feedback=that is for Java]{public static void}
-% \end{mcb}
-% \end{sproblem}
-% \caption{A Problem with a multiple choice block}\label{fig:mcq}
-% \end{exfig}
-%
-% \subsection{Including Problems}\label{sec:user:includeproblem}
-%
-% The \DescribeMacro{\includeproblem}|\includeproblem| macro can be used to include a
-% problem from another file. It takes an optional KeyVal argument and a second argument
-% which is a path to the file containing the problem (the macro assumes that there is only
-% one problem in the include file). The keys \DescribeMacro{title}|title|,
-% \DescribeMacro{min}|min|, and \DescribeMacro{pts}|pts| specify the problem title, the
-% estimated minutes for solving the problem and the points to be gained, and their values
-% (if given) overwrite the ones specified in the |problem| environment in the included
-% file.
-%
-% \subsection{Reporting Metadata}\label{sec:user:reporting}
-%
-% The sum of the points and estimated minutes (that we specified in the |pts| and |min|
-% keys to the |problem| environment or the |\includeproblem| macro) to the log file and
-% the screen after each run. This is useful in preparing exams, where we want to make sure
-% that the students can indeed solve the problems in an allotted time period.
-%
-% The |\min| and |\pts| macros allow to specify (i.e. to print to the margin) the
-% distribution of time and reward to parts of a problem, if the |pts| and |pts| package
-% options are set. This allows to give students hints about the estimated time and the
-% points to be awarded.
-%
-% \section{Limitations}\label{sec:limitations}
-%
-% In this section we document known limitations. If you want to help alleviate them,
-% please feel free to contact the package author. Some of them are currently discussed in
-% the \sTeX GitHub repository~\cite{sTeX:github:on}.
-% \begin{enumerate}
-% \item none reported yet
-% \end{enumerate}
-%
% \end{documentation}
% \begin{implementation}
%
@@ -258,7 +63,7 @@
% \begin{macrocode}
%<*package>
%<@@=problems>
-\ProvidesExplPackage{problem}{2022/02/26}{3.0.1}{Semantic Markup for Problems}
+\ProvidesExplPackage{problem}{2022/05/24}{3.1.0}{Semantic Markup for Problems}
\RequirePackage{l3keys2e,stex}
\keys_define:nn { problem / pkg }{
@@ -350,14 +155,18 @@
min .tl_set:N = \l_@@_prob_min_tl,
title .tl_set:N = \l_@@_prob_title_tl,
type .tl_set:N = \l_@@_prob_type_tl,
+ imports .tl_set:N = \l_@@_prob_imports_tl,
+ name .str_set_x:N = \l_@@_prob_name_str,
refnum .int_set:N = \l_@@_prob_refnum_int
}
\cs_new_protected:Nn \_@@_prob_args:n {
\str_clear:N \l_@@_prob_id_str
+ \str_clear:N \l_@@_prob_name_str
\tl_clear:N \l_@@_prob_pts_tl
\tl_clear:N \l_@@_prob_min_tl
\tl_clear:N \l_@@_prob_title_tl
\tl_clear:N \l_@@_prob_type_tl
+ \tl_clear:N \l_@@_prob_imports_tl
\int_zero_new:N \l_@@_prob_refnum_int
\keys_set:nn { problem / problem }{ #1 }
\int_compare:nNnT \l_@@_prob_refnum_int = 0 {
@@ -369,7 +178,7 @@
% Then we set up a counter for problems.
% \begin{macro}{\numberproblemsin}
% \begin{macrocode}
-\newcounter{problem}
+\newcounter{problem}[section]
\newcommand\numberproblemsin[1]{\@addtoreset{problem}{#1}}
% \end{macrocode}
% \end{macro}
@@ -377,7 +186,7 @@
% \begin{macro}{\prob@label}
% We provide the macro |\prob@label| to redefine later to get context involved.
% \begin{macrocode}
-\newcommand\prob@label[1]{#1}
+\newcommand\prob@label[1]{\thesection.#1}
% \end{macrocode}
% \end{macro}
%
@@ -441,6 +250,44 @@
\@in@omtexttrue% we are in a statement (for inline definitions)
\stepcounter{problem}\record@problem
\def\current@section@level{\prob@problem@kw}
+
+ \str_if_empty:NT \l_@@_prob_name_str {
+ \seq_get_right:NN \g_stex_currentfile_seq \l_tmpa_str
+ \seq_set_split:NnV \l_tmpa_seq . \l_tmpa_str
+ \seq_get_left:NN \l_tmpa_seq \l_@@_prob_name_str
+ }
+
+ \stex_if_do_html:T{
+ \tl_if_empty:NF \l_@@_prob_title_tl {
+ \exp_args:No \stex_document_title:n \l_@@_prob_title_tl
+ }
+ }
+
+ \exp_args:Nno\stex_module_setup:nn{type=problem}\l_@@_prob_name_str
+
+ \stex_reactivate_macro:N \STEXexport
+ \stex_reactivate_macro:N \importmodule
+ \stex_reactivate_macro:N \symdecl
+ \stex_reactivate_macro:N \notation
+ \stex_reactivate_macro:N \symdef
+
+ \stex_if_do_html:T{
+ \begin{stex_annotate_env} {problem} {
+ \l_stex_module_ns_str ? \l_stex_module_name_str
+ }
+
+ \stex_annotate_invisible:nnn{header}{} {
+ \stex_annotate:nnn{language}{ \l_stex_module_lang_str }{}
+ \stex_annotate:nnn{signature}{ \l_stex_module_sig_str }{}
+ \str_if_eq:VnF \l_stex_module_meta_str {NONE} {
+ \stex_annotate:nnn{metatheory}{ \l_stex_module_meta_str }{}
+ }
+ }
+ }
+
+ \stex_csl_to_imports:No \importmodule \l_@@_prob_imports_tl
+
+
\tl_if_exist:NTF \l_@@_inclprob_type_tl {
\tl_set_eq:NN \sproblemtype \l_@@_inclprob_type_tl
}{
@@ -453,37 +300,48 @@
}
- \clist_set:No \l_tmpa_clist \sproblemtype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {_@@_sproblem_##1_start:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{_@@_sproblem_##1_start:}}
+ \stex_if_smsmode:F {
+ \clist_set:No \l_tmpa_clist \sproblemtype
+ \tl_clear:N \l_tmpa_tl
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \tl_if_exist:cT {_@@_sproblem_##1_start:}{
+ \tl_set:Nn \l_tmpa_tl {\use:c{_@@_sproblem_##1_start:}}
+ }
+ }
+ \tl_if_empty:NTF \l_tmpa_tl {
+ \_@@_sproblem_start:
+ }{
+ \l_tmpa_tl
}
- }
- \tl_if_empty:NTF \l_tmpa_tl {
- \_@@_sproblem_start:
- }{
- \l_tmpa_tl
}
\stex_ref_new_doc_target:n \sproblemid
+ \stex_smsmode_do:
}{
- \clist_set:No \l_tmpa_clist \sproblemtype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {_@@_sproblem_##1_end:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{_@@_sproblem_##1_end:}}
+ \__stex_modules_end_module:
+ \stex_if_smsmode:F{
+ \clist_set:No \l_tmpa_clist \sproblemtype
+ \tl_clear:N \l_tmpa_tl
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \tl_if_exist:cT {_@@_sproblem_##1_end:}{
+ \tl_set:Nn \l_tmpa_tl {\use:c{_@@_sproblem_##1_end:}}
+ }
+ }
+ \tl_if_empty:NTF \l_tmpa_tl {
+ \_@@_sproblem_end:
+ }{
+ \l_tmpa_tl
}
}
- \tl_if_empty:NTF \l_tmpa_tl {
- \_@@_sproblem_end:
- }{
- \l_tmpa_tl
+ \stex_if_do_html:T{
+ \end{stex_annotate_env}
}
-
\smallskip
}
+\seq_put_right:Nx\g_stex_smsmode_allowedenvs_seq{\tl_to_str:n{sproblem}}
+
+
\cs_new_protected:Nn \_@@_sproblem_start: {
\par\noindent\textbf\prob@heading\show@pts\show@min\\\ignorespacesandpars
@@ -585,23 +443,49 @@
% package. Note that we use the |\@startsolution| macro in the start codes, that parses
% the optional argument.
% \begin{macrocode}
-\newcommand\startsolutions{
- \specialcomment{solution}{\@startsolution}{
- \bool_if:NF \c_@@_boxed_bool {
- \hrule\medskip
+\box_new:N \l_@@_solution_box
+\newenvironment{solution}[1][]{
+ \stex_html_backend:TF{
+ \stex_if_do_html:T{
+ \begin{stex_annotate_env}{solution}{}
}
- \end{small}%
+ }{
+ \setbox\l_@@_solution_box\vbox\bgroup
+ \par\smallskip\hrule\smallskip
+ \noindent\textbf{Solution:}~
}
- \bool_if:NT \c_@@_boxed_bool {
- \surroundwithmdframed{solution}
+}{
+ \stex_html_backend:TF{
+ \stex_if_do_html:T{
+ \end{stex_annotate_env}
+ }
+ }{
+ \smallskip\hrule
+ \egroup
+ \bool_if:NT \c_@@_solutions_bool {
+ \box\l_@@_solution_box
+ }
}
}
+
+\newcommand\startsolutions{
+ \bool_set_true:N \c_@@_solutions_bool
+% \specialcomment{solution}{\@startsolution}{
+% \bool_if:NF \c_@@_boxed_bool {
+% \hrule\medskip
+% }
+% \end{small}%
+% }
+% \bool_if:NT \c_@@_boxed_bool {
+% \surroundwithmdframed{solution}
+% }
+}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\stopsolutions}
% \begin{macrocode}
-\newcommand\stopsolutions{\excludecomment{solution}}
+\newcommand\stopsolutions{\bool_set_false:N \c_@@_solutions_bool}%\excludecomment{solution}}
% \end{macrocode}
% \end{macro}
%
@@ -620,7 +504,7 @@
\bool_if:NTF \c_@@_notes_bool {
\newenvironment{exnote}[1][]{
\par\smallskip\hrule\smallskip
- \noindent\textbf{\prob@note@kw : }\small
+ \noindent\textbf{\prob@note@kw :~ }\small
}{
\smallskip\hrule
}
@@ -657,7 +541,7 @@
\bool_if:NTF \c_@@_notes_bool {
\newenvironment{gnote}[1][]{
\par\smallskip\hrule\smallskip
- \noindent\textbf{\prob@gnote@kw : }\small
+ \noindent\textbf{\prob@gnote@kw :~ }\small
}{
\smallskip\hrule
}
@@ -691,47 +575,42 @@
\keys_define:nn { problem / mcc }{
id .str_set_x:N = \l_@@_mcc_id_str ,
feedback .tl_set:N = \l_@@_mcc_feedback_tl ,
- T .default:n = { true } ,
+ T .default:n = { false } ,
T .bool_set:N = \l_@@_mcc_t_bool ,
- F .default:n = { true } ,
+ F .default:n = { false } ,
F .bool_set:N = \l_@@_mcc_f_bool ,
- Ttext .code:n = {
- \_@@_do_yes_param:Nn \l_@@_mcc_Ttext_bool { #1 }
- } ,
- Ftext .code:n = {
- \_@@_do_yes_param:Nn \l_@@_mcc_Ftext_bool { #1 }
- }
+ Ttext .tl_set:N = \l_@@_mcc_Ttext_str ,
+ Ftext .tl_set:N = \l_@@_mcc_Ftext_str
}
\cs_new_protected:Nn \l_@@_mcc_args:n {
\str_clear:N \l_@@_mcc_id_str
\tl_clear:N \l_@@_mcc_feedback_tl
- \bool_set_true:N \l_@@_mcc_t_bool
- \bool_set_true:N \l_@@_mcc_f_bool
- \bool_set_true:N \l_@@_mcc_Ttext_bool
- \bool_set_false:N \l_@@_mcc_Ftext_bool
+ \bool_set_false:N \l_@@_mcc_t_bool
+ \bool_set_false:N \l_@@_mcc_f_bool
+ \tl_clear:N \l_@@_mcc_Ttext_tl
+ \tl_clear:N \l_@@_mcc_Ftext_tl
+ \str_clear:N \l_@@_mcc_id_str
\keys_set:nn { problem / mcc }{ #1 }
}
% \end{macrocode}
%
% \begin{macro}{\mcc}
% \begin{macrocode}
+\def\mccTrueText{\textbf{(true)~}}
+\def\mccFalseText{\textbf{(false)~}}
\newcommand\mcc[2][]{
\l_@@_mcc_args:n{ #1 }
- \item #2
+ \item[$\Box$] #2
\ifsolutions
\\
\bool_if:NT \l_@@_mcc_t_bool {
- % TODO!
- % \ifcsstring{mcc@T}{T}{}{\mcc@Ttext}%
+ \tl_if_empty:NTF\l_@@_mcc_Ttext_tl\mccTrueText\l_@@_mcc_Ttext_tl
}
\bool_if:NT \l_@@_mcc_f_bool {
- % TODO!
- % \ifcsstring{mcc@F}{F}{}{\mcc@Ftext}%
+ \tl_if_empty:NTF\l_@@_mcc_Ttext_tl\mccFalseText\l_@@_mcc_Ftext_tl
}
- \tl_if_empty:NTF \l_@@_mcc_feedback_tl {
- !
- }{
- \l_@@_mcc_feedback_tl
+ \tl_if_empty:NF \l_@@_mcc_feedback_tl {
+ \emph{(\l_@@_mcc_feedback_tl)}
}
\fi
} %solutions
@@ -794,11 +673,24 @@
\newcommand\includeproblem[2][]{
\_@@_inclprob_args:n{ #1 }
- \str_if_empty:NTF \l_@@_inclprob_mhrepos_str {
- \input{#2}
- }{
- \stex_in_repository:nn{\l_@@_inclprob_mhrepos_str}{
- \input{\mhpath{\l_@@_inclprob_mhrepos_str}{#2}}
+ \exp_args:No \stex_in_repository:nn\l_@@_inclprob_mhrepos_str{
+ \stex_html_backend:TF {
+ \str_clear:N \l_tmpa_str
+ \prop_get:NnNF \l_stex_current_repository_prop { narr } \l_tmpa_str {
+ \prop_get:NnNF \l_stex_current_repository_prop { ns } \l_tmpa_str {}
+ }
+ \stex_annotate_invisible:nnn{includeproblem}{
+ \l_tmpa_str / #2
+ }{}
+ }{
+ \begingroup
+ \inputreftrue
+ \tl_if_empty:nTF{ ##1 }{
+ \input{#2}
+ }{
+ \input{ \c_stex_mathhub_str / ##1 / source / #2 }
+ }
+ \endgroup
}
}
\_@@_inclprob_clear:
@@ -852,6 +744,9 @@
}{
\tl_if_exist:NT \l_@@_prob_pts_tl {
\bool_if:NT \c_@@_pts_bool {
+ \tl_if_empty:NT\l_@@_prob_pts_tl{
+ \tl_set:Nn \l_@@_prob_pts_tl {0}
+ }
\marginpar{\l_@@_prob_pts_tl\ \prob@pt@kw\smallskip}
\addtocounter{pts}{\l_@@_prob_pts_tl}
}
@@ -873,6 +768,9 @@
}{
\tl_if_exist:NT \l_@@_prob_min_tl {
\bool_if:NT \c_@@_min_bool {
+ \tl_if_empty:NT\l_@@_prob_min_tl{
+ \tl_set:Nn \l_@@_prob_min_tl {0}
+ }
\marginpar{\l_@@_prob_min_tl\ min}
\addtocounter{min}{\l_@@_prob_min_tl}
}
@@ -883,6 +781,7 @@
% \end{macrocode}
% \end{macro}
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
\endinput
% LocalWords: GPL structuresharing STR dtx pts keyval xcomment CPERL DefKeyVal iffalse
%%% Local Variables:
diff --git a/macros/latex/contrib/stex/source/extensions/stex-extensions.ins b/macros/latex/contrib/stex/source/extensions/stex-extensions.ins
index e3594e88cf..e6fe5099f0 100644
--- a/macros/latex/contrib/stex/source/extensions/stex-extensions.ins
+++ b/macros/latex/contrib/stex/source/extensions/stex-extensions.ins
@@ -18,7 +18,6 @@
\askforoverwritefalse
\generate{
- \file{document-structure.cls}{\from{document-structure.dtx}{cls}}
\file{document-structure.sty}{\from{document-structure.dtx}{package}}
\file{notesslides.cls}{\from{notesslides.dtx}{cls}}
\file{notesslides.sty}{\from{notesslides.dtx}{package}}
@@ -26,7 +25,6 @@
\file{stex-tikzinput.sty}{\from{tikzinput.dtx}{stex}}
\file{problem.sty}{\from{problem.dtx}{package}}
\file{hwexam.sty}{\from{hwexam.dtx}{package}}
- \file{hwexam.cls}{\from{hwexam.dtx}{cls}}
}
\Msg{*}
diff --git a/macros/latex/contrib/stex/source/extensions/tikzinput.dtx b/macros/latex/contrib/stex/source/extensions/tikzinput.dtx
index f183a6e4fa..fb7bbf76c9 100644
--- a/macros/latex/contrib/stex/source/extensions/tikzinput.dtx
+++ b/macros/latex/contrib/stex/source/extensions/tikzinput.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -19,7 +19,7 @@
%</driver>
% \fi
%
-% \title{Tikzinput
+% \title{Tikzinput: Treating TIKZ code as images
% \thanks{Version {\fileversion} (last revised {\filedate})}
% }
%
@@ -30,12 +30,20 @@
%
% \maketitle
%
-%\ifinfulldoc\else
-% This is the documentation for the \pkg{tikzinput} package.
-% For a more high-level introduction,
-% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \ifinfulldoc\else
+% \begin{abstract}
+% This is the documentation for the \pkg{tikzinput} package. For a more high-level
+% introduction, see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
+% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+%
+% In some situations it is more efficient externalize the TIKZ pictures into separate
+% (standalone) files, to let {\LaTeX} handle the TIKZ pictures to generate an image, and
+% just load it via the usual {\LaTeX} graphics packages. The |tikzinput| package
+% supports this workflow, and allows to switch back to native TIKZ via a package option.
+% \end{abstract}
%
+% \tableofcontents
+%
% \input{../../doc/packages/stex-tikzinput}
% \fi
%
@@ -51,6 +59,7 @@
% \section{Tikzinput Implementation}
%
% \begin{macrocode}
+%<@@=tikzinput>
%<*package>
%%%%%%%%%%%%% tikzinput.dtx %%%%%%%%%%%%%
@@ -58,7 +67,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{tikzinput}{2022/02/26}{3.0.1}{tikzinput package}
+\ProvidesExplPackage{tikzinput}{2022/05/24}{3.1.0}{tikzinput package}
\RequirePackage{l3keys2e}
\keys_define:nn { tikzinput } {
@@ -121,7 +130,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{stex-tikzinput}{2022/02/26}{3.0.1}{stex-tikzinput}
+\ProvidesExplPackage{stex-tikzinput}{2022/05/24}{3.1.0}{stex-tikzinput}
\RequirePackage{stex}
\RequirePackage{tikzinput}
@@ -132,6 +141,61 @@
}
}
\newcommand\cmhtikzinput[2][]{\begin{center}\mhtikzinput[#1]{#2}\end{center}}
+
+\cs_new_protected:Nn \_@@_usetikzlibrary:nn {
+ \pgfkeys@spdef\pgf@temp{#1}
+ \expandafter\ifx\csname tikz@library@\pgf@temp @loaded\endcsname\relax%
+ \expandafter\global\expandafter\let\csname tikz@library@\pgf@temp @loaded\endcsname=\pgfutil@empty%
+ \expandafter\edef\csname tikz@library@#1@atcode\endcsname{\the\catcode`\@}
+ \expandafter\edef\csname tikz@library@#1@barcode\endcsname{\the\catcode`\|}
+ \expandafter\edef\csname tikz@library@#1@dollarcode\endcsname{\the\catcode`\$}
+ \catcode`\@=11
+ \catcode`\|=12
+ \catcode`\$=3
+ \pgfutil@InputIfFileExists{#2}{}{}
+ \catcode`\@=\csname tikz@library@#1@atcode\endcsname
+ \catcode`\|=\csname tikz@library@#1@barcode\endcsname
+ \catcode`\$=\csname tikz@library@#1@dollarcode\endcsname
+}
+
+
+\newcommand\libusetikzlibrary[1]{
+ \prop_if_exist:NF \l_stex_current_repository_prop {
+ \msg_error:nnn{stex}{error/notinarchive}\libusetikzlibrary
+ }
+ \prop_get:NnNF \l_stex_current_repository_prop {id} \l_tmpa_str {
+ \msg_error:nnn{stex}{error/notinarchive}\libusetikzlibrary
+ }
+ \seq_clear:N \l_@@_libinput_files_seq
+ \seq_set_eq:NN \l_tmpa_seq \c_stex_mathhub_seq
+ \seq_set_split:NnV \l_tmpb_seq / \l_tmpa_str
+
+ \bool_while_do:nn { ! \seq_if_empty_p:N \l_tmpb_seq }{
+ \str_set:Nx \l_tmpa_str {\stex_path_to_string:N \l_tmpa_seq / meta-inf / lib / tikzlibrary #1 .code.tex}
+ \IfFileExists{ \l_tmpa_str }{
+ \seq_put_right:No \l_@@_libinput_files_seq \l_tmpa_str
+ }{}
+ \seq_pop_left:NN \l_tmpb_seq \l_tmpa_str
+ \seq_put_right:No \l_tmpa_seq \l_tmpa_str
+ }
+
+ \str_set:Nx \l_tmpa_str {\stex_path_to_string:N \l_tmpa_seq / lib / tikzlibrary #1 .code.tex}
+ \IfFileExists{ \l_tmpa_str }{
+ \seq_put_right:No \l_@@_libinput_files_seq \l_tmpa_str
+ }{}
+
+ \seq_if_empty:NTF \l_@@_libinput_files_seq {
+ \msg_error:nnxx{stex}{error/nofile}{\exp_not:N\libusetikzlibrary}{tikzlibrary #1 .code.tex}
+ }{
+ \int_compare:nNnTF {\seq_count:N \l_@@_libinput_files_seq} = 1 {
+ \seq_map_inline:Nn \l_@@_libinput_files_seq {
+ \_@@_usetikzlibrary:nn{#1}{ ##1 }
+ }
+ }{
+ \msg_error:nnxx{stex}{error/twofiles}{\exp_not:N\libusetikzlibrary}{tikzlibrary #1 .code.tex}
+ }
+ }
+}
% \end{macrocode}
%
% \begin{macrocode}
@@ -139,6 +203,7 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-basics.dtx b/macros/latex/contrib/stex/source/stex/stex-basics.dtx
index 37c55822d8..d58f56a49c 100644
--- a/macros/latex/contrib/stex/source/stex/stex-basics.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-basics.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -150,14 +150,43 @@
%%%%%%%%%%%%% basics.dtx %%%%%%%%%%%%%
\RequirePackage{expl3,l3keys2e}
-\ProvidesExplClass{stex}{2022/02/26}{3.0.1}{sTeX document class}
-\LoadClass[border=1px,varwidth]{standalone}
-\setlength\textwidth{15cm}
+\ProvidesExplClass{stex}{2022/05/24}{3.1.0}{sTeX document class}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{stex}}
\ProcessOptions
+\bool_set_true:N \c_stex_document_class_bool
+
\RequirePackage{stex}
+
+\stex_html_backend:TF {
+ \LoadClass{article}
+}{
+ \LoadClass[border=1px,varwidth,crop=false]{standalone}
+ \setlength\textwidth{15cm}
+}
+\RequirePackage{standalone}
+
+
+\clist_if_empty:NT \c_stex_languages_clist {
+ \seq_get_right:NN \g_stex_currentfile_seq \l_tmpa_str
+ \seq_set_split:NnV \l_tmpa_seq . \l_tmpa_str
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str % .tex
+ \exp_args:No \str_if_eq:nnF \l_tmpa_str {tex} {
+ \exp_args:No \str_if_eq:nnF \l_tmpa_str {dtx} {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq \l_tmpa_str
+ }
+ }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_str % <filename>
+ \seq_if_empty:NF \l_tmpa_seq { %remaining element should be [<something>.]language
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ \prop_if_in:NoT \c_stex_languages_prop \l_tmpa_str {
+ \stex_debug:nn{language} {Language~\l_tmpa_str~
+ inferred~from~file~name}
+ \exp_args:NNo \stex_set_language:Nn \l_tmpa_str \l_tmpa_str
+ }
+ }
+}
%</cls>
% \end{macrocode}
%
@@ -169,7 +198,14 @@
%%%%%%%%%%%%% basics.dtx %%%%%%%%%%%%%
\RequirePackage{expl3,l3keys2e,ltxcmds}
-\ProvidesExplPackage{stex}{2022/02/26}{3.0.1}{sTeX package}
+\ProvidesExplPackage{stex}{2022/05/24}{3.1.0}{sTeX package}
+
+\bool_if_exist:NF \c_stex_document_class_bool {
+ \bool_set_false:N \c_stex_document_class_bool
+ \RequirePackage{standalone}
+}
+
+\message{^^J*~This~is~sTeX~version~3.1.0~*^^J}
%\RequirePackage{morewrites}
%\RequirePackage{amsmath}
@@ -183,7 +219,8 @@
debug .clist_set:N = \c_stex_debug_clist ,
lang .clist_set:N = \c_stex_languages_clist ,
mathhub .tl_set_x:N = \mathhub ,
- sms .bool_set:N = \c_stex_persist_mode_bool ,
+ usesms .bool_set:N = \c_stex_persist_mode_bool ,
+ writesms .bool_set:N = \c_stex_persist_write_mode_bool ,
image .bool_set:N = \c_tikzinput_image_bool,
unknown .code:n = {}
}
@@ -194,13 +231,7 @@
% The \sTeX logo:
%
% \begin{macrocode}
-\protected\def\stex{%
- \@ifundefined{texorpdfstring}%
- {\let\texorpdfstring\@firstoftwo}%
- {}%
- \texorpdfstring{\raisebox{-.5ex}S\kern-.5ex\TeX}{sTeX}\xspace%
-}
-\def\sTeX{\stex}
+\RequirePackage{stex-logo} % externalized for backwards-compatibility reasons
% \end{macrocode}
% \end{macro}
%
@@ -233,13 +264,13 @@
% \begin{macrocode}
\cs_new_protected:Nn \stex_debug:nn {
\clist_if_in:NnTF \c_stex_debug_clist { all } {
- \exp_args:Nnnx\msg_set:nnn{stex}{debug / #1}{
+ \msg_set:nnn{stex}{debug / #1}{
\\Debug~#1:~#2\\
}
\msg_none:nn{stex}{debug / #1}
}{
\clist_if_in:NnT \c_stex_debug_clist { #1 } {
- \exp_args:Nnnx\msg_set:nnn{stex}{debug / #1}{
+ \msg_set:nnn{stex}{debug / #1}{
\\Debug~#1:~#2\\
}
\msg_none:nn{stex}{debug / #1}
@@ -267,58 +298,27 @@
% \subsection{HTML Annotations}
% \begin{macrocode}
%<@@=stex_annotate>
-\RequirePackage{rustex}
% \end{macrocode}
%
-% We add the namespace abbreviation |ns:stex="http://kwarc.info/ns/sTeX"| to \rustex:
-%
% \begin{macrocode}
-\rustex_add_Namespace:nn{stex}{http://kwarc.info/ns/sTeX}
% \end{macrocode}
%
-% Conditionals for \latexml:
-%
-% \begin{macro}{\if@latexml}
-% \begin{macrocode}
-\ifcsname if@latexml\endcsname\else
- \expandafter\newif\csname if@latexml\endcsname\@latexmlfalse
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\latexml_if:}
-% \begin{macrocode}
-\prg_new_conditional:Nnn \latexml_if: {p, T, F, TF} {
- \if@latexml
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_arg_tl, \c_@@_emptyarg_tl}
+% \begin{variable}{\l_stex_html_arg_tl, \c_stex_html_emptyarg_tl}
%
% Used by annotation macros to ensure that the HTML output to annotate
% is not empty.
%
% \begin{macrocode}
-\tl_new:N \l_@@_arg_tl
-\tl_const:Nx \c_@@_emptyarg_tl {
- \rustex_if:TF {
- \rustex_direct_HTML:n { \c_ampersand_str lrm; }
- }{~}
-}
+\tl_new:N \l_stex_html_arg_tl
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\_@@_checkempty:n}
+% \begin{macro}{\_stex_html_checkempty:n}
% \begin{macrocode}
-\cs_new_protected:Nn \_@@_checkempty:n {
- \tl_set:Nn \l_@@_arg_tl { #1 }
- \tl_if_empty:NT \l_@@_arg_tl {
- \tl_set_eq:NN \l_@@_arg_tl \c_@@_emptyarg_tl
+\cs_new_protected:Nn \_stex_html_checkempty:n {
+ \tl_set:Nn \l_stex_html_arg_tl { #1 }
+ \tl_if_empty:NT \l_stex_html_arg_tl {
+ \tl_set_eq:NN \l_stex_html_arg_tl \c_stex_html_emptyarg_tl
}
}
% \end{macrocode}
@@ -367,101 +367,22 @@
% the \latexml-implementations resort to perl bindings.
%
% \begin{macrocode}
-\rustex_if:TF{
- \cs_new_protected:Nn \stex_annotate:nnn {
- \_@@_checkempty:n { #3 }
- \rustex_annotate_HTML:nn {
- property="stex:#1" ~
- resource="#2"
- } {
- \mode_if_vertical:TF{
- \tl_use:N \l_@@_arg_tl\par
- }{
- \tl_use:N \l_@@_arg_tl
- }
- }
- }
- \cs_new_protected:Nn \stex_annotate_invisible:n {
- \_@@_checkempty:n { #1 }
- \rustex_annotate_HTML:nn {
- stex:visible="false" ~
- style:display="none"
- } {
- \mode_if_vertical:TF{
- \tl_use:N \l_@@_arg_tl\par
- }{
- \tl_use:N \l_@@_arg_tl
- }
- }
- }
- \cs_new_protected:Nn \stex_annotate_invisible:nnn {
- \_@@_checkempty:n { #3 }
- \rustex_annotate_HTML:nn {
- property="stex:#1" ~
- resource="#2" ~
- stex:visible="false" ~
- style:display="none"
- } {
- \mode_if_vertical:TF{
- \tl_use:N \l_@@_arg_tl\par
- }{
- \tl_use:N \l_@@_arg_tl
- }
- }
- }
- \NewDocumentEnvironment{stex_annotate_env} { m m } {
- \par
- \rustex_annotate_HTML_begin:n {
- property="stex:#1" ~
- resource="#2"
- }
- }{
- \par\rustex_annotate_HTML_end:
- }
-}{
- \latexml_if:TF {
- \cs_new_protected:Nn \stex_annotate:nnn {
- \_@@_checkempty:n { #3 }
- \mode_if_math:TF {
- \cs:w latexml@annotate@math\cs_end:{#1}{#2}{
- \tl_use:N \l_@@_arg_tl
- }
- }{
- \cs:w latexml@annotate@text\cs_end:{#1}{#2}{
- \tl_use:N \l_@@_arg_tl
- }
- }
- }
- \cs_new_protected:Nn \stex_annotate_invisible:n {
- \_@@_checkempty:n { #1 }
- \mode_if_math:TF {
- \cs:w latexml@invisible@math\cs_end:{
- \tl_use:N \l_@@_arg_tl
- }
- } {
- \cs:w latexml@invisible@text\cs_end:{
- \tl_use:N \l_@@_arg_tl
- }
- }
- }
- \cs_new_protected:Nn \stex_annotate_invisible:nnn {
- \_@@_checkempty:n { #3 }
- \cs:w latexml@annotate@invisible\cs_end:{#1}{#2}{
- \tl_use:N \l_@@_arg_tl
- }
- }
- \NewDocumentEnvironment{stex_annotate_env} { m m } {
- \par\begin{latexml@annotateenv}{#1}{#2}
- }{
- \par\end{latexml@annotateenv}
- }
- }{
- \cs_new_protected:Nn \stex_annotate:nnn {#3}
- \cs_new_protected:Nn \stex_annotate_invisible:n {}
- \cs_new_protected:Nn \stex_annotate_invisible:nnn {}
- \NewDocumentEnvironment{stex_annotate_env} { m m } {}{}
- }
+\tl_if_exist:NF\stex@backend{
+ \ifcsname if@rustex\endcsname
+ \def\stex@backend{rustex}
+ \else
+ \ifcsname if@latexml\endcsname
+ \def\stex@backend{latexml}
+ \else
+ \def\stex@backend{pdflatex}
+ \fi
+ \fi
}
+\input{stex-backend-\stex@backend.cfg}
+
+\newif\ifstexhtml
+\stex_html_backend:TF\stexhtmltrue\stexhtmlfalse
+
% \end{macrocode}
% \end{macro}
% \end{environment}
@@ -476,7 +397,7 @@
% We store language abbreviations in two (mutually inverse)
% property lists:
% \begin{macrocode}
-\prop_const_from_keyval:Nn \c_stex_languages_prop {
+\exp_args:NNx \prop_const_from_keyval:Nn \c_stex_languages_prop { \tl_to_str:n {
en = english ,
de = ngerman ,
ar = arabic ,
@@ -486,9 +407,9 @@
ro = romanian ,
tr = turkish ,
fr = french
-}
+}}
-\prop_const_from_keyval:Nn \c_stex_language_abbrevs_prop {
+\exp_args:NNx \prop_const_from_keyval:Nn \c_stex_language_abbrevs_prop { \tl_to_str:n {
english = en ,
ngerman = de ,
arabic = ar ,
@@ -498,7 +419,7 @@
romanian = ro ,
turkish = tr ,
french = fr
-}
+}}
% todo: chinese simplified (zhs)
% chinese traditional (zht)
% \end{macrocode}
@@ -508,17 +429,86 @@
% babel languages:
%
% \begin{macrocode}
+\cs_new_protected:Nn \stex_set_language:Nn {
+ \str_set:Nx \l_tmpa_str {#2}
+ \prop_get:NoNT \c_stex_languages_prop \l_tmpa_str #1 {
+ \ifx\@onlypreamble\@notprerr
+ \ltx@ifpackageloaded{babel}{
+ \exp_args:No \selectlanguage #1
+ }{}
+ \else
+ \exp_args:No \str_if_eq:nnTF #1 {turkish} {
+ \RequirePackage[#1,shorthands=:!]{babel}
+ }{
+ \RequirePackage[#1]{babel}
+ }
+ \fi
+ }
+}
+
\clist_if_empty:NF \c_stex_languages_clist {
+ \bool_set_false:N \l_tmpa_bool
\clist_clear:N \l_tmpa_clist
\clist_map_inline:Nn \c_stex_languages_clist {
- \prop_get:NnNTF \c_stex_languages_prop { #1 } \l_tmpa_str {
+ \str_set:Nx \l_tmpa_str {#1}
+ \str_if_eq:nnT {#1}{tr}{
+ \bool_set_true:N \l_tmpa_bool
+ }
+ \prop_get:NoNTF \c_stex_languages_prop \l_tmpa_str \l_tmpa_str {
\clist_put_right:No \l_tmpa_clist \l_tmpa_str
} {
\msg_error:nnx{stex}{error/unknownlanguage}{\l_tmpa_str}
}
}
\stex_debug:nn{lang} {Languages:~\clist_use:Nn \l_tmpa_clist {,~} }
- \RequirePackage[\clist_use:Nn \l_tmpa_clist,]{babel}
+ \bool_if:NTF \l_tmpa_bool {
+ \RequirePackage[\clist_use:Nn \l_tmpa_clist,,shorthands=:!]{babel}
+ }{
+ \RequirePackage[\clist_use:Nn \l_tmpa_clist,]{babel}
+ }
+}
+
+\AtBeginDocument{
+ \stex_html_backend:T {
+ \seq_get_right:NN \g_stex_currentfile_seq \l_tmpa_str
+ \seq_set_split:NnV \l_tmpa_seq . \l_tmpa_str
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str % .tex
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_str % <filename>
+ \seq_if_empty:NF \l_tmpa_seq { %remaining element should be language
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ \stex_debug:nn{basics} {Language~\l_tmpa_str~
+ inferred~from~file~name}
+ \stex_annotate_invisible:nnn{language}{ \l_tmpa_str }{}
+ }
+ }
+}
+% \end{macrocode}
+%
+% \subsection{Persistence}
+%
+% \begin{macrocode}
+%<@@=stex_persist>
+\bool_if:NTF \c_stex_persist_mode_bool {
+ \def \stex_persist:n #1 {}
+ \def \stex_persist:x #1 {}
+}{
+ \bool_if:NTF \c_stex_persist_write_mode_bool {
+ \iow_new:N \c_@@_iow
+ \iow_open:Nn \c_@@_iow{\jobname.sms}
+ \AtEndDocument{
+ \iow_close:N \c_@@_iow
+ }
+ \cs_new_protected:Nn \stex_persist:n {
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \regex_replace_all:nnN { \cP\# } { \cO\# } \l_tmpa_tl
+ \regex_replace_all:nnN { \ } { \~ } \l_tmpa_tl
+ \exp_args:NNo \iow_now:Nn \c_@@_iow \l_tmpa_tl
+ }
+ \cs_generate_variant:Nn \stex_persist:n {x}
+ }{
+ \def \stex_persist:n #1 {}
+ \def \stex_persist:x #1 {}
+ }
}
% \end{macrocode}
%
@@ -529,7 +519,7 @@
\cs_new_protected:Nn \stex_deactivate_macro:Nn {
\exp_after:wN\let\csname \detokenize{#1} - orig\endcsname#1
\def#1{
- \msg_error:nnnn{stex}{error/deactivated-macro}{#1}{#2}
+ \msg_error:nnnn{stex}{error/deactivated-macro}{\detokenize{#1}}{#2}
}
}
% \end{macrocode}
@@ -553,10 +543,128 @@
\endgroup
}
}
+
+\cs_new_protected:Nn \stex_copy_control_sequence:NNN {
+ \tl_set:Nx \_tmp_args_tl {\cs_argument_spec:N #2}
+ \exp_args:NNo \tl_remove_all:Nn \_tmp_args_tl \c_hash_str
+ \int_set:Nn \l_tmpa_int {\tl_count:N \_tmp_args_tl}
+
+ \tl_clear:N \_tmp_args_tl
+ \int_step_inline:nn \l_tmpa_int {
+ \tl_put_right:Nx \_tmp_args_tl {{\exp_not:n{####}\exp_not:n{##1}}}
+ }
+
+ \tl_set:Nn #3 {\cs_generate_from_arg_count:NNnn #1 \cs_set:Npn}
+ \tl_put_right:Nx #3 { {\int_use:N \l_tmpa_int}{
+ \exp_after:wN\exp_after:wN\exp_after:wN \exp_not:n
+ \exp_after:wN\exp_after:wN\exp_after:wN {
+ \exp_after:wN #2 \_tmp_args_tl
+ }
+ }}
+}
+\cs_generate_variant:Nn \stex_copy_control_sequence:NNN {cNN}
+\cs_generate_variant:Nn \stex_copy_control_sequence:NNN {NcN}
+\cs_generate_variant:Nn \stex_copy_control_sequence:NNN {ccN}
+
+\cs_new_protected:Nn \stex_copy_control_sequence_ii:NNN {
+ \tl_set:Nx \_tmp_args_tl {\cs_argument_spec:N #2}
+ \exp_args:NNo \tl_remove_all:Nn \_tmp_args_tl \c_hash_str
+ \int_set:Nn \l_tmpa_int {\tl_count:N \_tmp_args_tl}
+
+ \tl_clear:N \_tmp_args_tl
+ \int_step_inline:nn \l_tmpa_int {
+ \tl_put_right:Nx \_tmp_args_tl {{\exp_not:n{########}\exp_not:n{##1}}}
+ }
+
+ \edef \_tmp_args_tl {
+ \exp_after:wN\exp_after:wN\exp_after:wN \exp_not:n
+ \exp_after:wN\exp_after:wN\exp_after:wN {
+ \exp_after:wN #2 \_tmp_args_tl
+ }
+ }
+
+ \exp_after:wN \def \exp_after:wN \_tmp_args_tl
+ \exp_after:wN ##\exp_after:wN 1 \exp_after:wN ##\exp_after:wN 2
+ \exp_after:wN { \_tmp_args_tl }
+
+ \edef \_tmp_args_tl {
+ \exp_after:wN \exp_not:n \exp_after:wN {
+ \_tmp_args_tl {####1}{####2}
+ }
+ }
+
+ \tl_set:Nn #3 {\cs_generate_from_arg_count:NNnn #1 \cs_set:Npn}
+ \tl_put_right:Nx #3 { {\int_use:N \l_tmpa_int}{
+ \exp_after:wN\exp_not:n\exp_after:wN{\_tmp_args_tl}
+ }}
+}
+
+\cs_generate_variant:Nn \stex_copy_control_sequence_ii:NNN {cNN}
+\cs_generate_variant:Nn \stex_copy_control_sequence_ii:NNN {NcN}
+\cs_generate_variant:Nn \stex_copy_control_sequence_ii:NNN {ccN}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MMTrule}
+% \begin{macrocode}
+\NewDocumentCommand \MMTrule {m m}{
+ \seq_set_split:Nnn \l_tmpa_seq , {#2}
+ \int_zero:N \l_tmpa_int
+ \stex_annotate_invisible:nnn{mmtrule}{scala://#1}{
+ \seq_if_empty:NF \l_tmpa_seq {
+ $\seq_map_inline:Nn \l_tmpa_seq {
+ \int_incr:N \l_tmpa_int
+ \stex_annotate:nnn{arg}{i\int_use:N \l_tmpa_int}{##1}
+ }$
+ }
+ }
+}
+
+\NewDocumentCommand \MMTinclude {m}{
+ \stex_annotate_invisible:nnn{import}{#1}{}
+}
+
+\tl_new:N \g_stex_document_title
+\cs_new_protected:Npn \STEXtitle #1 {
+ \tl_if_empty:NT \g_stex_document_title {
+ \tl_gset:Nn \g_stex_document_title { #1 }
+ }
+}
+\cs_new_protected:Nn \stex_document_title:n {
+ \tl_if_empty:NT \g_stex_document_title {
+ \tl_gset:Nn \g_stex_document_title { #1 }
+ \stex_annotate_invisible:n{\noindent
+ \stex_annotate:nnn{doctitle}{}{ #1 }
+ \par}
+ }
+}
+\AtBeginDocument {
+ \let \STEXtitle \stex_document_title:n
+ \tl_if_empty:NF \g_stex_document_title {
+ \stex_annotate_invisible:n{\noindent
+ \stex_annotate:nnn{doctitle}{}{ \g_stex_document_title }
+ \par}
+ }
+ \let\_stex_maketitle:\maketitle
+ \def\maketitle{
+ \tl_if_empty:NF \@title {
+ \exp_args:No \stex_document_title:n \@title
+ }
+ \_stex_maketitle:
+ }
+}
+
+\cs_new_protected:Nn \stex_par: {
+ \mode_if_vertical:F{
+ \if@minipage\else\if@nobreak\else\par\fi\fi
+ }
+}
+
%</package>
% \end{macrocode}
% \end{macro}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-features.dtx b/macros/latex/contrib/stex/source/stex/stex-features.dtx
index 27d8f88f95..3a5c8064b7 100644
--- a/macros/latex/contrib/stex/source/stex/stex-features.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-features.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -40,6 +40,7 @@
% \fi
%
% \begin{documentation}\label{pkg:features:doc}
+% \changes{3.1.0}{2022/03/03}{Implemented mathstructures and instantiations}
%
% Code related to structural features
%
@@ -62,7 +63,6 @@
%%%%%%%%%%%%% features.dtx %%%%%%%%%%%%%
-%<@@=stex_features>
% \end{macrocode}
%
% Warnings and error messages
@@ -75,14 +75,34 @@
Symbol~#1~not~assigned~in~interpretmodule~#2
}
+\msg_new:nnn{stex}{error/unknownstructure}{
+ No~structure~#1~found!
+}
+
+\msg_new:nnn{stex}{error/unknownfield}{
+ No~field~#1~in~instance~#2~found!\\#3
+}
+
+\msg_new:nnn{stex}{error/keyval}{
+ Invalid~key=value~pair:#1
+}
+\msg_new:nnn{stex}{error/instantiate/missing}{
+ Assignments~missing~in~instantiate:~#1
+}
+\msg_new:nnn{stex}{error/incompatible}{
+ Incompatible~signature:~#1~(#2)~and~#3~(#4)
+}
+
% \end{macrocode}
%
% \subsection{Imports with modification}
%
% \begin{macrocode}
-\cs_new_protected:Nn \stex_get_symbol_in_copymodule:n {
+%<@@=stex_copymodule>
+\cs_new_protected:Nn \stex_get_symbol_in_seq:nn {
\tl_if_head_eq_catcode:nNTF { #1 } \relax {
- \_@@_get_symbol_from_cs:n { #1 }
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \_@@_get_symbol_from_cs:
}{
% argument is a string
% is it a command name?
@@ -93,34 +113,31 @@
\exp_args:Nx \cs_if_eq:NNTF {
\tl_head:N \l_tmpa_tl
} \stex_invoke_symbol:n {
- \exp_args:No \_@@_get_symbol_from_cs:n { \use:c { #1 } }
+ \_@@_get_symbol_from_cs:n{ #2 }
}{
- \_@@_get_symbol_from_string:n { #1 }
+ \_@@_get_symbol_from_string:nn { #1 }{ #2 }
}
} {
- \_@@_get_symbol_from_string:n { #1 }
+ \_@@_get_symbol_from_string:nn { #1 }{ #2 }
}
}{
% argument is not a command name
- \_@@_get_symbol_from_string:n { #1 }
+ \_@@_get_symbol_from_string:nn { #1 }{ #2 }
% \l_stex_all_symbols_seq
}
}
}
-\cs_new_protected:Nn \_@@_get_symbol_from_string:n {
+\cs_new_protected:Nn \_@@_get_symbol_from_string:nn {
\str_set:Nn \l_tmpa_str { #1 }
\bool_set_false:N \l_tmpa_bool
\bool_if:NF \l_tmpa_bool {
\tl_set:Nn \l_tmpa_tl {
- \msg_set:nnn{stex}{error/unknownsymbol}{
- No~symbol~#1~found!
- }
- \msg_error:nn{stex}{error/unknownsymbol}
+ \msg_error:nnn{stex}{error/unknownsymbol}{#1}
}
\str_set:Nn \l_tmpa_str { #1 }
\int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str }
- \seq_map_inline:Nn \l_@@_copymodule_fields_seq {
+ \seq_map_inline:Nn #2 {
\str_set:Nn \l_tmpb_str { ##1 }
\str_if_eq:eeT { \l_tmpa_str } {
\str_range:Nnn \l_tmpb_str { -\l_tmpa_int } { -1 }
@@ -130,7 +147,6 @@
\str_set:Nn \l_stex_get_symbol_uri_str {
##1
}
- \_@@_get_symbol_check:
}
}
}
@@ -146,7 +162,7 @@
\exp_args:No \tl_if_head_is_group:nTF \l_tmpa_tl {
\exp_after:wN \str_set:Nn \exp_after:wN
\l_stex_get_symbol_uri_str \l_tmpa_tl
- \_@@_get_symbol_check:
+ \_@@_get_symbol_check:n { #1 }
}{
% TODO
% tail is not a single group
@@ -157,31 +173,26 @@
}
}
-\cs_new_protected:Nn \_@@_get_symbol_check: {
- \exp_args:NNno \seq_set_split:Nnn \l_tmpa_seq {?} \l_stex_get_symbol_uri_str
- \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} = 3 {
- \seq_pop_right:NN \l_tmpa_seq \l_tmpb_str
- \str_set:Nx \l_tmpa_str {\seq_use:Nn \l_tmpa_seq ?}
- \seq_if_in:NoF \l_@@_copymodule_modules_seq \l_tmpa_str {
- \msg_error:nnxx{stex}{error/copymodule/notallowed}{\l_stex_get_symbol_uri_str}{
- \l_stex_current_copymodule_name_str\\Allowed:~\seq_use:Nn \l_@@_copymodule_modules_seq {,~}
- }
- }
- }{
+\cs_new_protected:Nn \_@@_get_symbol_check:n {
+ \exp_args:NNx \seq_if_in:NnF #1 \l_stex_get_symbol_uri_str {
\msg_error:nnxx{stex}{error/copymodule/notallowed}{\l_stex_get_symbol_uri_str}{
- \l_stex_current_copymodule_name_str~(inexplicably)
+ :~\seq_use:Nn #1 {,~}
}
}
}
\cs_new_protected:Nn \stex_copymodule_start:nnnn {
+ % import module
\stex_import_module_uri:nn { #1 } { #2 }
\str_set:Nx \l_stex_current_copymodule_name_str {#3}
\stex_import_require_module:nnnn
{ \l_stex_import_ns_str } { \l_stex_import_archive_str }
{ \l_stex_import_path_str } { \l_stex_import_name_str }
+
\stex_collect_imports:n {\l_stex_import_ns_str ?\l_stex_import_name_str }
\seq_set_eq:NN \l_@@_copymodule_modules_seq \l_stex_collect_imports_seq
+
+ % fields
\seq_clear:N \l_@@_copymodule_fields_seq
\seq_map_inline:Nn \l_@@_copymodule_modules_seq {
\seq_map_inline:cn {c_stex_module_##1_constants}{
@@ -190,133 +201,136 @@
}
}
}
+
+ % setup prop
\seq_clear:N \l_tmpa_seq
\exp_args:NNx \prop_set_from_keyval:Nn \l_stex_current_copymodule_prop {
name = \l_stex_current_copymodule_name_str ,
module = \l_stex_current_module_str ,
from = \l_stex_import_ns_str ?\l_stex_import_name_str ,
- includes = \l_tmpa_seq ,
- fields = \l_tmpa_seq
+ includes = \l_tmpa_seq %,
+ % fields = \l_tmpa_seq
}
\stex_debug:nn{copymodule}{#4~for~module~{\l_stex_import_ns_str ?\l_stex_import_name_str}
as~\l_stex_current_module_str?\l_stex_current_copymodule_name_str}
\stex_debug:nn{copymodule}{modules:\seq_use:Nn \l_@@_copymodule_modules_seq {,~}}
\stex_debug:nn{copymodule}{fields:\seq_use:Nn \l_@@_copymodule_fields_seq {,~}}
- \stex_if_smsmode:F {
+
+ \stex_if_do_html:T {
\begin{stex_annotate_env} {#4} {
\l_stex_current_module_str?\l_stex_current_copymodule_name_str
}
- \stex_annotate_invisible:nnn{from}{\l_stex_import_ns_str ?\l_stex_import_name_str}{}
+ \stex_annotate_invisible:nnn{domain}{\l_stex_import_ns_str ?\l_stex_import_name_str}{}
}
- \bool_set_eq:NN \l_@@_oldhtml_bool \_stex_html_do_output_bool
- \bool_set_false:N \_stex_html_do_output_bool
}
+
\cs_new_protected:Nn \stex_copymodule_end:n {
+ % apply to every field
\def \l_tmpa_cs ##1 ##2 {#1}
- \bool_set_eq:NN \_stex_html_do_output_bool \l_@@_oldhtml_bool
- \tl_clear:N \l_tmpa_tl
- \tl_clear:N \l_tmpb_tl
- \prop_get:NnN \l_stex_current_copymodule_prop {fields} \l_tmpa_seq
+
+ \tl_clear:N \_@@_module_tl
+ \tl_clear:N \_@@_exec_tl
+
+ %\prop_get:NnN \l_stex_current_copymodule_prop {fields} \l_tmpa_seq
+ \seq_clear:N \_@@_fields_seq
+
\seq_map_inline:Nn \l_@@_copymodule_modules_seq {
\seq_map_inline:cn {c_stex_module_##1_constants}{
- \tl_clear:N \l_tmpc_tl
+
+ \tl_clear:N \_@@_curr_symbol_tl % <- wrap in current symbol html
\l_tmpa_cs{##1}{####1}
+
\str_if_exist:cTF {l_@@_copymodule_##1?####1_name_str} {
- \tl_put_right:Nx \l_tmpa_tl {
- \prop_set_from_keyval:cn {
- l_stex_symdecl_\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}_prop
- }{
- \exp_after:wN \prop_to_keyval:N \csname
- l_stex_symdecl_\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}_prop
- \endcsname
- }
- \seq_clear:c {
- l_stex_symdecl_
- \l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}
- _notations
- }
- }
- \tl_put_right:Nx \l_tmpc_tl {
- \stex_copy_notations:nn {\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}}{##1?####1}
- \stex_annotate_invisible:nnn{alias}{\use:c{l_@@_copymodule_##1?####1_name_str}}{}
- }
- \seq_put_right:Nx \l_tmpa_seq {\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}}
- \str_if_exist:cT {l_@@_copymodule_##1?####1_macroname_str} {
- \tl_put_right:Nx \l_tmpc_tl {
- \stex_annotate_invisible:nnn{macroname}{\use:c{l_@@_copymodule_##1?####1_macroname_str}}{}
- }
- \tl_put_right:Nx \l_tmpa_tl {
- \tl_set:cx {\use:c{l_@@_copymodule_##1?####1_macroname_str}}{
- \stex_invoke_symbol:n {
- \l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}
- }
- }
+ \str_set_eq:Nc \_@@_curr_name_str {l_@@_copymodule_##1?####1_name_str}
+ \stex_if_do_html:T {
+ \tl_put_right:Nx \_@@_curr_symbol_tl {
+ \stex_annotate_invisible:nnn{alias}{\use:c{l_@@_copymodule_##1?####1_name_str}}{}
}
}
}{
- \tl_put_right:Nx \l_tmpc_tl {
- \stex_copy_notations:nn {\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 }{##1?####1}
- }
- \prop_set_eq:Nc \l_tmpa_prop {l_stex_symdecl_ ##1?####1 _prop}
- \prop_put:Nnx \l_tmpa_prop { name }{ \l_stex_current_copymodule_name_str / ####1 }
- \prop_put:Nnx \l_tmpa_prop { module }{ \l_stex_current_module_str }
- \tl_put_right:Nx \l_tmpa_tl {
- \prop_set_from_keyval:cn {
- l_stex_symdecl_\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1_prop
- }{
- \prop_to_keyval:N \l_tmpa_prop
- }
- \seq_clear:c {
- l_stex_symdecl_
- \l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1
- _notations
+ \str_set:Nx \_@@_curr_name_str { \l_stex_current_copymodule_name_str / ####1 }
+ }
+
+ \prop_set_eq:Nc \l_tmpa_prop {l_stex_symdecl_ ##1?####1 _prop}
+ \prop_put:Nnx \l_tmpa_prop { name } \_@@_curr_name_str
+ \prop_put:Nnx \l_tmpa_prop { module } \l_stex_current_module_str
+
+ \tl_if_exist:cT {l_@@_copymodule_##1?####1_def_tl}{
+ \stex_if_do_html:T {
+ \tl_put_right:Nx \_@@_curr_symbol_tl {
+ $\stex_annotate_invisible:nnn{definiens}{}{\exp_after:wN \exp_not:N\csname l_@@_copymodule_##1?####1_def_tl\endcsname}$
}
}
- \seq_put_right:Nx \l_tmpa_seq {\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 }
- \str_if_exist:cT {l_@@_copymodule_##1?####1_macroname_str} {
- \tl_put_right:Nx \l_tmpc_tl {
+ \prop_put:Nnn \l_tmpa_prop { defined } { true }
+ }
+
+ \stex_add_constant_to_current_module:n \_@@_curr_name_str
+ \tl_put_right:Nx \_@@_module_tl {
+ \seq_clear:c {l_stex_symdecl_ \l_stex_current_module_str ? \_@@_curr_name_str _notations}
+ \prop_set_from_keyval:cn {
+ l_stex_symdecl_\l_stex_current_module_str ? \_@@_curr_name_str _prop
+ }{
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ }
+
+ \str_if_exist:cT {l_@@_copymodule_##1?####1_macroname_str} {
+ \stex_if_do_html:T {
+ \tl_put_right:Nx \_@@_curr_symbol_tl {
\stex_annotate_invisible:nnn{macroname}{\use:c{l_@@_copymodule_##1?####1_macroname_str}}{}
}
- \tl_put_right:Nx \l_tmpa_tl {
- \tl_set:cx {\use:c{l_@@_copymodule_##1?####1_macroname_str}}{
- \stex_invoke_symbol:n {
- \l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1
- }
+ }
+ \tl_put_right:Nx \_@@_module_tl {
+ \tl_set:cx {\use:c{l_@@_copymodule_##1?####1_macroname_str}}{
+ \stex_invoke_symbol:n {
+ \l_stex_current_module_str ? \_@@_curr_name_str
}
}
}
}
- \tl_if_exist:cT {l_@@_copymodule_##1?####1_def_tl}{
- \tl_put_right:Nx \l_tmpc_tl {
- \stex_annotate_invisible:nnn{definiens}{}{$\use:c{l_@@_copymodule_##1?####1_def_tl}$}
- }
+
+ \seq_put_right:Nx \_@@_fields_seq {\l_stex_current_module_str ? \_@@_curr_name_str }
+
+ \tl_put_right:Nx \_@@_exec_tl {
+ \stex_copy_notations:nn {\l_stex_current_module_str ? \_@@_curr_name_str} { ##1 ? ####1 }
}
- \tl_put_right:Nx \l_tmpb_tl {
- \stex_annotate:nnn{assignment} {##1?####1} { \l_tmpc_tl }
+
+ \tl_put_right:Nx \_@@_exec_tl {
+ \stex_if_do_html:TF{
+ \stex_annotate_invisible:nnn{assignment} {##1?####1} { \exp_after:wN \exp_not:n \exp_after:wN {\_@@_curr_symbol_tl} }
+ }{
+ \exp_after:wN \exp_not:n \exp_after:wN {\_@@_curr_symbol_tl}
+ }
}
}
}
- \prop_put:Nno \l_stex_current_copymodule_prop {fields} \l_tmpa_seq
- \tl_put_left:Nx \l_tmpa_tl {
+
+
+ \prop_put:Nno \l_stex_current_copymodule_prop {fields} \_@@_fields_seq
+ \tl_put_left:Nx \_@@_module_tl {
\prop_set_from_keyval:cn {
l_stex_copymodule_ \l_stex_current_module_str?\l_stex_current_copymodule_name_str _prop
}{
\prop_to_keyval:N \l_stex_current_copymodule_prop
}
}
- \exp_args:No \stex_add_to_current_module:n \l_tmpa_tl
- \stex_debug:nn{copymodule}{result:\meaning \l_tmpa_tl}
- \exp_args:Nx \stex_do_up_to_module:n {
- \exp_args:No \exp_not:n \l_tmpa_tl
+
+ \seq_gput_right:cx{c_stex_module_\l_stex_current_module_str _copymodules}{
+ \l_stex_current_module_str?\l_stex_current_copymodule_name_str
}
- \l_tmpb_tl
- \stex_if_smsmode:F {
+
+ \exp_args:No \stex_execute_in_module:n \_@@_module_tl
+ \stex_debug:nn{copymodule}{result:\meaning \_@@_module_tl}
+ \stex_debug:nn{copymodule}{output:\meaning \_@@_exec_tl}
+
+ \_@@_exec_tl
+ \stex_if_do_html:T {
\end{stex_annotate_env}
}
}
\NewDocumentEnvironment {copymodule} { O{} m m}{
- \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ structure }
+ \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ copymodule }
\stex_deactivate_macro:Nn \symdecl {module~environments}
\stex_deactivate_macro:Nn \symdef {module~environments}
\stex_deactivate_macro:Nn \notation {module~environments}
@@ -329,7 +343,7 @@
}
\NewDocumentEnvironment {interpretmodule} { O{} m m}{
- \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ realization }
+ \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ interpretmodule }
\stex_deactivate_macro:Nn \symdecl {module~environments}
\stex_deactivate_macro:Nn \symdef {module~environments}
\stex_deactivate_macro:Nn \notation {module~environments}
@@ -342,39 +356,130 @@
\tl_if_exist:cF {
l_@@_copymodule_##1?##2_def_tl
}{
- \msg_error:nnxx{stex}{error/interpretmodule/nodefiniens}{
- ##1?##2
- }{\l_stex_current_copymodule_name_str}
+ \str_if_eq:eeF {
+ \prop_item:cn{
+ l_stex_symdecl_ ##1 ? ##2 _prop }{ defined }
+ }{ true }{
+ \msg_error:nnxx{stex}{error/interpretmodule/nodefiniens}{
+ ##1?##2
+ }{\l_stex_current_copymodule_name_str}
+ }
}
}
}
-\NewDocumentCommand \donotcopy { O{} m}{
+\iffalse \begin{stex_annotate_env} \fi
+\NewDocumentEnvironment {realization} { O{} m}{
+ \stex_copymodule_start:nnnn { #1 }{ #2 }{ #2 }{ realize }
+ \stex_deactivate_macro:Nn \symdecl {module~environments}
+ \stex_deactivate_macro:Nn \symdef {module~environments}
+ \stex_deactivate_macro:Nn \notation {module~environments}
+ \stex_reactivate_macro:N \donotcopy
+ \stex_reactivate_macro:N \assign
+ \stex_smsmode_do:
+}{
\stex_import_module_uri:nn { #1 } { #2 }
- \stex_collect_imports:n {\l_stex_import_ns_str ?\l_stex_import_name_str }
- \seq_map_inline:Nn \l_stex_collect_imports_seq {
- \seq_remove_all:Nn \l_@@_copymodule_modules_seq { ##1 }
+ \tl_clear:N \_@@_exec_tl
+ \tl_set:Nx \_@@_module_tl {
+ \stex_import_require_module:nnnn
+ { \l_stex_import_ns_str } { \l_stex_import_archive_str }
+ { \l_stex_import_path_str } { \l_stex_import_name_str }
+ }
+
+ \seq_map_inline:Nn \l_@@_copymodule_modules_seq {
\seq_map_inline:cn {c_stex_module_##1_constants}{
- \seq_remove_all:Nn \l_@@_copymodule_fields_seq { ##1 ? ####1 }
- \bool_lazy_any_p:nT {
- { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_name_str}}
- { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_macroname_str}}
- { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_def_tl}}
- }{
- % TODO throw error
+ \str_set:Nx \_@@_curr_name_str { \l_stex_current_copymodule_name_str / ####1 }
+ \tl_if_exist:cT {l_@@_copymodule_##1?####1_def_tl}{
+ \stex_if_do_html:T {
+ \tl_put_right:Nx \_@@_exec_tl {
+ \stex_annotate_invisible:nnn{assignment} {##1?####1} {
+ $\stex_annotate_invisible:nnn{definiens}{}{\exp_after:wN \exp_not:N\csname l_@@_copymodule_##1?####1_def_tl\endcsname}$
+ }
+ }
+ }
+ \tl_put_right:Nx \_@@_module_tl {
+ \prop_put:cnn {l_stex_symdecl_##1?####1_prop}{ defined }{ true }
+ }
+ }
+ }}
+
+ \exp_args:No \stex_execute_in_module:n \_@@_module_tl
+
+ \_@@_exec_tl
+ \stex_if_do_html:T {\end{stex_annotate_env}}
+}
+
+\NewDocumentCommand \donotcopy { m }{
+ \str_clear:N \l_stex_import_name_str
+ \str_set:Nn \l_tmpa_str { #1 }
+ \int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str }
+ \seq_map_inline:Nn \l_stex_all_modules_seq {
+ \str_set:Nn \l_tmpb_str { ##1 }
+ \str_if_eq:eeT { \l_tmpa_str } {
+ \str_range:Nnn \l_tmpb_str { -\l_tmpa_int } { -1 }
+ } {
+ \seq_map_break:n {
+ \stex_if_do_html:T {
+ \stex_if_smsmode:F {
+ \stex_annotate_invisible:nnn{donotcopy}{##1}{
+ \stex_annotate:nnn{domain}{##1}{}
+ }
+ }
+ }
+ \str_set_eq:NN \l_stex_import_name_str \l_tmpb_str
+ }
+ }
+ \seq_map_inline:cn {c_stex_module_##1_copymodules}{
+ \str_set:Nn \l_tmpb_str { ####1 }
+ \str_if_eq:eeT { \l_tmpa_str } {
+ \str_range:Nnn \l_tmpb_str { -\l_tmpa_int } { -1 }
+ } {
+ \seq_map_break:n {\seq_map_break:n {
+ \stex_if_do_html:T {
+ \stex_if_smsmode:F {
+ \stex_annotate_invisible:nnn{donotcopy}{####1}{
+ \stex_annotate:nnn{domain}{
+ \prop_item:cn {l_stex_copymodule_ ####1 _prop}{module}
+ }{}
+ }
+ }
+ }
+ \str_set:Nx \l_stex_import_name_str {
+ \prop_item:cn {l_stex_copymodule_ ####1 _prop}{module}
+ }
+ }}
}
}
}
-
- \prop_get:NnN \l_stex_current_copymodule_prop { includes } \l_tmpa_seq
- \seq_put_right:Nx \l_tmpa_seq {\l_stex_import_ns_str ?\l_stex_import_name_str }
- \prop_put:Nnx \l_stex_current_copymodule_prop {includes} \l_tmpa_seq
+ \str_if_empty:NTF \l_stex_import_name_str {
+ % TODO throw error
+ }{
+ \stex_collect_imports:n {\l_stex_import_name_str }
+ \seq_map_inline:Nn \l_stex_collect_imports_seq {
+ \seq_remove_all:Nn \l_@@_copymodule_modules_seq { ##1 }
+ \seq_map_inline:cn {c_stex_module_##1_constants}{
+ \seq_remove_all:Nn \l_@@_copymodule_fields_seq { ##1 ? ####1 }
+ \bool_lazy_any:nT {
+ { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_name_str}}
+ { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_macroname_str}}
+ { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_def_tl}}
+ }{
+ % TODO throw error
+ }
+ }
+ }
+ \prop_get:NnN \l_stex_current_copymodule_prop { includes } \l_tmpa_seq
+ \seq_put_right:Nx \l_tmpa_seq {\l_stex_import_name_str }
+ \prop_put:Nno \l_stex_current_copymodule_prop {includes} \l_tmpa_seq
+ }
+ \stex_smsmode_do:
}
\NewDocumentCommand \assign { m m }{
- \stex_get_symbol_in_copymodule:n {#1}
+ \stex_get_symbol_in_seq:nn {#1} \l_@@_copymodule_fields_seq
\stex_debug:nn{assign}{defining~{\l_stex_get_symbol_uri_str}~as~\detokenize{#2}}
\tl_set:cn {l_@@_copymodule_\l_stex_get_symbol_uri_str _def_tl}{#2}
+ \stex_smsmode_do:
}
\keys_define:nn { stex / renamedecl } {
@@ -382,13 +487,12 @@
}
\cs_new_protected:Nn \_@@_renamedecl_args:n {
\str_clear:N \l_stex_renamedecl_name_str
-
\keys_set:nn { stex / renamedecl } { #1 }
}
\NewDocumentCommand \renamedecl { O{} m m}{
\_@@_renamedecl_args:n { #1 }
- \stex_get_symbol_in_copymodule:n {#2}
+ \stex_get_symbol_in_seq:nn {#2} \l_@@_copymodule_fields_seq
\stex_debug:nn{renamedecl}{renaming~{\l_stex_get_symbol_uri_str}~to~#3}
\str_set:cx {l_@@_copymodule_\l_stex_get_symbol_uri_str _macroname_str}{#3}
\str_if_empty:NTF \l_stex_renamedecl_name_str {
@@ -421,6 +525,7 @@
\l_stex_current_module_str ? \l_stex_renamedecl_name_str
} }
}
+ \stex_smsmode_do:
}
\stex_deactivate_macro:Nn \assign {copymodules}
@@ -431,41 +536,13 @@
% \end{macrocode}
%
%
-%
-% \begin{macrocode}
-\seq_new:N \l_stex_implicit_morphisms_seq
-\NewDocumentCommand \implicitmorphism { O{} m m}{
- \stex_import_module_uri:nn { #1 } { #2 }
- \stex_debug:nn{implicits}{
- Implicit~morphism:~
- \l_stex_module_ns_str ? \l_@@_name_str
- }
- \exp_args:NNx \seq_if_in:NnT \l_stex_all_modules_seq {
- \l_stex_module_ns_str ? \l_@@_name_str
- }{
- \msg_error:nnn{stex}{error/conflictingmodules}{
- \l_stex_module_ns_str ? \l_@@_name_str
- }
- }
-
- % TODO
-
-
-
- \seq_put_right:Nx \l_stex_implicit_morphisms_seq {
- \l_stex_module_ns_str ? \l_@@_name_str
- }
-}
-
-% \end{macrocode}
-%
-%
% \subsection{The feature environment}
%
% \begin{environment}{structural@feature}
% \begin{macrocode}
+%<@@=stex_features>
-\NewDocumentEnvironment{structural@feature}{ m m m }{
+\NewDocumentEnvironment{structural_feature_module}{ m m m }{
\stex_if_in_module:F {
\msg_set:nnn{stex}{error/nomodule}{
Structural~Feature~has~to~occur~in~a~module:\\
@@ -475,119 +552,162 @@
\msg_error:nn{stex}{error/nomodule}
}
- \str_set:Nx \l_stex_module_name_str {
- \prop_item:Nn \l_stex_current_module_prop
- { name } / #2 - feature
- }
-
- \str_set:Nx \l_stex_module_ns_str {
- \prop_item:Nn \l_stex_current_module_prop
- { ns }
- }
+ \str_set_eq:NN \l_stex_feature_parent_str \l_stex_current_module_str
-
- \str_clear:N \l_tmpa_str
- \seq_clear:N \l_tmpa_seq
- \tl_clear:N \l_tmpa_tl
- \exp_args:NNx \prop_set_from_keyval:Nn \l_stex_current_module_prop {
- origname = #2,
- name = \l_stex_module_name_str ,
- ns = \l_stex_module_ns_str ,
- imports = \exp_not:o { \l_tmpa_seq } ,
- constants = \exp_not:o { \l_tmpa_seq } ,
- content = \exp_not:o { \l_tmpa_tl } ,
- file = \exp_not:o { \g_stex_currentfile_seq } ,
- lang = \l_stex_module_lang_str ,
- sig = \l_tmpa_str ,
- meta = \l_tmpa_str ,
- feature = #1 ,
- }
-
- \stex_if_smsmode:F {
- \begin{stex_annotate_env}{ feature:#1 }{}
+ \stex_module_setup:nn{meta=NONE}{#2 - #1}
+
+ \stex_if_do_html:T {
+ \begin{stex_annotate_env}{ feature:#1 }{\l_stex_feature_parent_str ? #2 - #1}
\stex_annotate_invisible:nnn{header}{}{ #3 }
}
-}{
- \str_set:Nx \l_tmpa_str {
- c_stex_feature_
- \prop_item:Nn \l_stex_current_module_prop { ns } ?
- \prop_item:Nn \l_stex_current_module_prop { name }
- _prop
- }
- \prop_gset_eq:cN { \l_tmpa_str } \l_stex_current_module_prop
- \prop_gset_eq:NN \g_stex_last_feature_prop \l_stex_current_module_prop
- \stex_if_smsmode:F {
+}{
+ \str_gset_eq:NN \l_stex_last_feature_str \l_stex_current_module_str
+ \prop_gput:cnn {c_stex_module_ \l_stex_current_module_str _prop}{feature}{#1}
+ \stex_debug:nn{features}{
+ Feature: \l_stex_last_feature_str
+ }
+ \stex_if_do_html:T {
\end{stex_annotate_env}
}
}
-
% \end{macrocode}
% \end{environment}
%
-%
-% \subsection{Features}
+% \subsection{Structure}
%
% \begin{environment}{structure}
% \begin{macrocode}
-
-\prop_new:N \l_stex_all_structures_prop
+%<@@=stex_structures>
+\cs_new_protected:Nn \stex_add_structure_to_current_module:nn {
+ \prop_if_exist:cF {c_stex_module_\l_stex_current_module_str _structures}{
+ \prop_new:c {c_stex_module_\l_stex_current_module_str _structures}
+ }
+ \prop_gput:cxx{c_stex_module_\l_stex_current_module_str _structures}
+ {#1}{#2}
+}
\keys_define:nn { stex / features / structure } {
- name .str_set_x:N = \l_@@_structure_name_str ,
+ name .str_set_x:N = \l_@@_name_str ,
}
\cs_new_protected:Nn \_@@_structure_args:n {
- \str_clear:N \l_@@_structure_name_str
+ \str_clear:N \l_@@_name_str
\keys_set:nn { stex / features / structure } { #1 }
}
-\NewDocumentEnvironment{mathstructure}{ O{} m }{
- \_@@_structure_args:n { #1 }
- \str_if_empty:NT \l_@@_structure_name_str {
- \str_set:Nx \l_@@_structure_name_str { #2 }
+\NewDocumentEnvironment{mathstructure}{m O{}}{
+ \_@@_structure_args:n { #2 }
+ \str_if_empty:NT \l_@@_name_str {
+ \str_set:Nx \l_@@_name_str { #1 }
+ }
+ \stex_suppress_html:n {
+ \bool_set_true:N \l_stex_symdecl_make_macro_bool
+ \exp_args:Nx \stex_symdecl_do:nn {
+ name = \l_@@_name_str ,
+ def = {\STEXsymbol{module-type}{
+ \STEXInternalTermMathOMSiiii {
+ \prop_item:cn {c_stex_module_\l_stex_current_module_str _prop}
+ { ns } ?
+ \prop_item:cn {c_stex_module_\l_stex_current_module_str _prop}
+ { name } / \l_@@_name_str - structure
+ }{}{0}{}
+ }}
+ }{ #1 }
}
\exp_args:Nnnx
- \begin{structural@feature}{ structure }
- { \l_@@_structure_name_str }{}
- \seq_clear:N \l_tmpa_seq
- \prop_put:Nno \l_stex_current_module_prop { fields } \l_tmpa_seq
- \stex_smsmode_do:
+ \begin{structural_feature_module}{ structure }
+ { \l_@@_name_str }{}
+ \stex_smsmode_do:
}{
- \prop_get:NnN \l_stex_current_module_prop { constants } \l_tmpa_seq
- \prop_get:NnN \l_stex_current_module_prop { fields } \l_tmpb_seq
- \str_set:Nx \l_tmpa_str {
- \prop_item:Nn \l_stex_current_module_prop { ns } ?
- \prop_item:Nn \l_stex_current_module_prop { name }
+ \end{structural_feature_module}
+ \_stex_reset_up_to_module:n \l_stex_last_feature_str
+ \exp_args:No \stex_collect_imports:n \l_stex_last_feature_str
+ \seq_clear:N \l_tmpa_seq
+ \seq_map_inline:Nn \l_stex_collect_imports_seq {
+ \seq_map_inline:cn{c_stex_module_##1_constants}{
+ \seq_put_right:Nn \l_tmpa_seq { ##1 ? ####1 }
}
- \seq_map_inline:Nn \l_tmpa_seq {
- \exp_args:NNx \seq_put_right:Nn \l_tmpb_seq { \l_tmpa_str ? ##1 }
- }
- \prop_put:Nno \l_stex_current_module_prop { fields } { \l_tmpb_seq }
- \exp_args:Nnx
- \AddToHookNext { env / mathstructure / after }{
- \symdecl{ #2 }[type = \exp_not:N\collection,def={\STEXsymbol{module-type}{
- \_stex_term_math_oms:nnnn { \l_tmpa_str }{}{0}{}
- }}, name = \prop_item:Nn \l_stex_current_module_prop { origname }]
- \STEXexport {
- \prop_put:Nno \exp_not:N \l_stex_all_structures_prop
- {\prop_item:Nn \l_stex_current_module_prop { origname }}
- {\l_tmpa_str}
- \prop_put:Nno \exp_not:N \l_stex_all_structures_prop
- {#2}{\l_tmpa_str}
-% \seq_put_right:Nn \exp_not:N \l_stex_all_structures_seq {
-% \prop_item:Nn \l_stex_current_module_prop { origname },
-% \l_tmpa_str
-% }
-% \seq_put_right:Nn \exp_not:N \l_stex_all_structures_seq {
-% #2,\l_tmpa_str
-% }
-% \tl_set:cx { #2 } {
-% \stex_invoke_structure:n { \l_tmpa_str }
+ }
+ \exp_args:Nnno
+ \prop_gput:cnn {c_stex_module_ \l_stex_last_feature_str _prop}{fields}\l_tmpa_seq
+ \stex_debug:nn{structure}{Fields:~\seq_use:Nn \l_tmpa_seq ,}
+ \stex_add_structure_to_current_module:nn
+ \l_@@_name_str
+ \l_stex_last_feature_str
+
+ \stex_execute_in_module:x {
+ \tl_set:cn { #1 }{
+ \exp_not:N \stex_invoke_structure:nn {\l_stex_current_module_str }{ \l_@@_name_str}
+ }
+ }
+}
+
+\cs_new:Nn \stex_invoke_structure:nn {
+ \stex_invoke_symbol:n { #1?#2 }
+}
+
+\cs_new_protected:Nn \stex_get_structure:n {
+ \tl_if_head_eq_catcode:nNTF { #1 } \relax {
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \_@@_get_from_cs:
+ }{
+ \cs_if_exist:cTF { #1 }{
+ \cs_set_eq:Nc \l_tmpa_cs { #1 }
+ \str_set:Nx \l_tmpa_str {\cs_argument_spec:N \l_tmpa_cs }
+ \str_if_empty:NTF \l_tmpa_str {
+ \cs_if_eq:NNTF { \tl_head:N \l_tmpa_cs} \stex_invoke_structure:nn {
+ \_@@_get_from_cs:
+ }{
+ \_@@_get_from_string:n { #1 }
+ }
+ }{
+ \_@@_get_from_string:n { #1 }
}
+ }{
+ \_@@_get_from_string:n { #1 }
}
-
- \end{structural@feature}
- % \g_stex_last_feature_prop
+ }
+}
+
+\cs_new_protected:Nn \_@@_get_from_cs: {
+ \exp_args:NNx \tl_set:Nn \l_tmpa_tl
+ { \tl_tail:N \l_tmpa_tl }
+ \str_set:Nx \l_tmpa_str {
+ \exp_after:wN \use_i:nn \l_tmpa_tl
+ }
+ \str_set:Nx \l_tmpb_str {
+ \exp_after:wN \use_ii:nn \l_tmpa_tl
+ }
+ \str_set:Nx \l_stex_get_structure_str {
+ \l_tmpa_str ? \l_tmpb_str
+ }
+ \str_set:Nx \l_stex_get_structure_module_str {
+ \exp_args:Nno \prop_item:cn {c_stex_module_\l_tmpa_str _structures}{\l_tmpb_str}
+ }
+}
+
+\cs_new_protected:Nn \_@@_get_from_string:n {
+ \tl_set:Nn \l_tmpa_tl {
+ \msg_error:nnn{stex}{error/unknownstructure}{#1}
+ }
+ \str_set:Nn \l_tmpa_str { #1 }
+ \int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str }
+
+ \seq_map_inline:Nn \l_stex_all_modules_seq {
+ \prop_if_exist:cT {c_stex_module_##1_structures} {
+ \prop_map_inline:cn {c_stex_module_##1_structures} {
+ \str_if_eq:eeT { \l_tmpa_str }{ \str_range:nnn {##1?####1}{-\l_tmpa_int}{-1}}{
+ \prop_map_break:n{\seq_map_break:n{
+ \tl_set:Nn \l_tmpa_tl {
+ \str_set:Nn \l_stex_get_structure_str {##1?####1}
+ \str_set:Nn \l_stex_get_structure_module_str {####2}
+ }
+ }}
+ }
+ }
+ }
+ }
+ \l_tmpa_tl
}
% \end{macrocode}
% \end{environment}
@@ -595,147 +715,344 @@
%
% \begin{macro}{\instantiate}
% \begin{macrocode}
-\seq_new:N \l_@@_structure_field_seq
-\str_new:N \l_@@_structure_field_str
-\str_new:N \l_@@_structure_def_tl
-\prop_new:N \l_@@_structure_prop
-\NewDocumentCommand \instantiate { m O{} m }{
- \prop_get:NnN \l_stex_all_structures_prop {#1} \l_tmpa_str
- \prop_set_eq:Nc \l_@@_structure_prop {
- c_stex_feature_\l_tmpa_str _prop
- }
- \seq_set_from_clist:Nn \l_@@_structure_field_seq { #2 }
- \seq_map_inline:Nn \l_@@_structure_field_seq {
- \seq_set_split:Nnn \l_tmpa_seq{=}{ ##1 }
- \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > 1 {
- \seq_get_left:NN \l_tmpa_seq \l_tmpa_tl
- \exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq
- {!} \l_tmpa_tl
- \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} > 1 {
- \str_set:Nx \l_@@_structure_field_str {\seq_item:Nn \l_tmpb_seq 1}
- \seq_get_right:NN \l_tmpb_seq \l_tmpb_tl
- \seq_get_right:NN \l_tmpa_seq \l_tmpa_tl
- }{
- \str_set:Nx \l_@@_structure_field_str \l_tmpa_tl
- \seq_get_right:NN \l_tmpa_seq \l_tmpa_tl
- \exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq{!}
- \l_tmpa_tl
- \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} > 1 {
- \seq_get_left:NN \l_tmpb_seq \l_tmpa_tl
- \seq_get_right:NN \l_tmpb_seq \l_tmpb_tl
- }{
- \tl_clear:N \l_tmpb_tl
- }
- }
- }{
- \seq_set_split:Nnn \l_tmpa_seq{!}{ ##1 }
- \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > 1 {
- \str_set:Nx \l_@@_structure_field_str {\seq_item:Nn \l_tmpa_seq 1}
- \seq_get_right:NN \l_tmpa_seq \l_tmpb_tl
- \tl_clear:N \l_tmpa_tl
- }{
- % TODO throw error
- }
+
+\keys_define:nn { stex / instantiate } {
+ name .str_set_x:N = \l_@@_name_str
+}
+\cs_new_protected:Nn \_@@_instantiate_args:n {
+ \str_clear:N \l_@@_name_str
+ \keys_set:nn { stex / instantiate } { #1 }
+}
+
+\NewDocumentCommand \instantiate {m O{} m m O{}}{
+ \begingroup
+ \stex_get_structure:n {#3}
+ \_@@_instantiate_args:n { #2 }
+ \str_if_empty:NT \l_@@_name_str {
+ \str_set:Nn \l_@@_name_str { #1 }
}
- % \l_tmpa_str: name
- % \l_tmpa_tl: definiens
- % \l_tmpb_tl: notation
- \tl_if_empty:NT \l_@@_structure_field_str {
- % TODO throw error
+ \exp_args:No \stex_activate_module:n \l_stex_get_structure_module_str
+ \seq_clear:N \l_@@_fields_seq
+ \exp_args:Nx \stex_collect_imports:n \l_stex_get_structure_module_str
+ \seq_map_inline:Nn \l_stex_collect_imports_seq {
+ \seq_map_inline:cn {c_stex_module_##1_constants}{
+ \seq_put_right:Nx \l_@@_fields_seq { ##1 ? ####1 }
+ }
}
- \str_clear:N \l_tmpb_str
-
- \prop_get:NnN \l_@@_structure_prop { fields } \l_tmpa_seq
- \seq_map_inline:Nn \l_tmpa_seq {
- \seq_set_split:Nnn \l_tmpb_seq ? { ####1 }
- \seq_get_right:NN \l_tmpb_seq \l_tmpb_str
- \str_if_eq:NNT \l_@@_structure_field_str \l_tmpb_str {
- \seq_map_break:n {
- \str_set:Nn \l_tmpb_str { ####1 }
+
+ \tl_if_empty:nF{#5}{
+ \seq_set_split:Nnn \l_tmpa_seq , {#5}
+ \prop_clear:N \l_tmpa_prop
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \seq_set_split:Nnn \l_tmpb_seq = { ##1 }
+ \int_compare:nNnF { \seq_count:N \l_tmpb_seq } = 2 {
+ \msg_error:nnn{stex}{error/keyval}{##1}
}
+ \exp_args:Nx \stex_get_symbol_in_seq:nn {\seq_item:Nn \l_tmpb_seq 1} \l_@@_fields_seq
+ \str_set_eq:NN \l_@@_dom_str \l_stex_get_symbol_uri_str
+ \exp_args:NNx \seq_remove_all:Nn \l_@@_fields_seq \l_stex_get_symbol_uri_str
+ \exp_args:Nx \stex_get_symbol:n {\seq_item:Nn \l_tmpb_seq 2}
+ \exp_args:Nxx \str_if_eq:nnF
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\prop_item:cn{l_stex_symdecl_\l_stex_get_symbol_uri_str _prop}{args}}{
+ \msg_error:nnxxxx{stex}{error/incompatible}
+ {\l_@@_dom_str}
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\l_stex_get_symbol_uri_str}
+ {\prop_item:cn{l_stex_symdecl_\l_stex_get_symbol_uri_str _prop}{args}}
+ }
+ \prop_put:Nxx \l_tmpa_prop {\seq_item:Nn \l_tmpb_seq 1} \l_stex_get_symbol_uri_str
}
}
- \prop_get:cnN { l_stex_symdecl_ \l_tmpb_str _prop } {args}
- \l_tmpb_str
- \tl_if_empty:NTF \l_tmpb_tl {
- \tl_if_empty:NF \l_tmpa_tl {
- \exp_args:Nx \use:n {
- \symdecl{#3/\l_@@_structure_field_str}[args=\l_tmpb_str,def={\exp_args:No\exp_not:n{\l_tmpa_tl}}]
+ \seq_map_inline:Nn \l_@@_fields_seq {
+ \str_set:Nx \l_tmpa_str {field:\l_@@_name_str . \prop_item:cn {l_stex_symdecl_##1_prop}{name} }
+ \stex_debug:nn{instantiate}{Field~\l_tmpa_str :~##1}
+
+ \stex_add_constant_to_current_module:n {\l_tmpa_str}
+ \stex_execute_in_module:x {
+ \prop_set_from_keyval:cn { l_stex_symdecl_ \l_stex_current_module_str?\l_tmpa_str _prop}{
+ name = \l_tmpa_str ,
+ args = \prop_item:cn {l_stex_symdecl_##1_prop}{args} ,
+ arity = \prop_item:cn {l_stex_symdecl_##1_prop}{arity} ,
+ assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs}
}
+ \seq_clear:c {l_stex_symdecl_\l_stex_current_module_str?\l_tmpa_str _notations}
}
- }{
- \tl_if_empty:NTF \l_tmpa_tl {
- \exp_args:Nx \use:n {
- \symdef{#3/\l_@@_structure_field_str}[args=\l_tmpb_str]\exp_after:wN\exp_not:n\exp_after:wN{\l_tmpb_tl}
+
+ \seq_if_empty:cF{l_stex_symdecl_##1_notations}{
+ \stex_find_notation:nn{##1}{}
+ \stex_execute_in_module:x {
+ \seq_put_right:cn {l_stex_symdecl_\l_stex_current_module_str?\l_tmpa_str _notations}{\l_stex_notation_variant_str}
}
- }{
- \exp_args:Nx \use:n {
- \symdef{#3/\l_@@_structure_field_str}[args=\l_tmpb_str,def={\exp_args:No\exp_not:n{\l_tmpa_tl}}]
- \exp_after:wN\exp_not:n\exp_after:wN{\l_tmpb_tl}
+ \stex_copy_control_sequence_ii:ccN
+ {stex_notation_\l_stex_current_module_str?\l_tmpa_str\c_hash_str \l_stex_notation_variant_str _cs}
+ {stex_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}
+ \l_tmpa_tl
+ \exp_args:No \stex_execute_in_module:n \l_tmpa_tl
+
+
+ \cs_if_exist:cT{stex_op_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}{
+ \tl_set_eq:Nc \l_tmpa_cs {stex_op_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}
+ \stex_execute_in_module:x {
+ \tl_set:cn
+ {stex_op_notation_\l_stex_current_module_str?\l_tmpa_str\c_hash_str \l_stex_notation_variant_str _cs}
+ { \exp_args:No \exp_not:n \l_tmpa_cs}
+ }
}
+
}
+
+ \prop_put:Nxx \l_tmpa_prop {\prop_item:cn {l_stex_symdecl_##1_prop}{name}}{\l_stex_current_module_str?\l_tmpa_str}
}
-% \par \prop_item:Nn \l_stex_current_module_prop {ns} ?
-% \prop_item:Nn \l_stex_current_module_prop {name} ?
-% #3/\l_@@_structure_field_str
-% \par
-% \expandafter\present\csname
-% l_stex_symdecl_
-% \prop_item:Nn \l_stex_current_module_prop {ns} ?
-% \prop_item:Nn \l_stex_current_module_prop {name} ?
-% #3/\l_@@_structure_field_str
-% _prop
-% \endcsname
+
+ \stex_execute_in_module:x {
+ \prop_set_from_keyval:cn {l_stex_instance_\l_stex_current_module_str?\l_@@_name_str _prop}{
+ domain = \l_stex_get_structure_module_str ,
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ \tl_set:cn{ #1 }{\stex_invoke_instance:n{ \l_stex_current_module_str?\l_@@_name_str} }
+ }
+ \stex_debug:nn{instantiate}{
+ Instance~\l_stex_current_module_str?\l_@@_name_str \\
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ \exp_args:Nxx \stex_symdecl_do:nn {
+ type={\STEXsymbol{module-type}{
+ \STEXInternalTermMathOMSiiii {
+ \l_stex_get_structure_module_str
+ }{}{0}{}
+ }}
+ }{\l_@@_name_str}
+% {
+ \str_set:Nx \l_stex_get_symbol_uri_str {\l_stex_current_module_str?\l_@@_name_str}
+ \tl_set:Nn \l_stex_notation_after_do_tl {\__stex_notation_final:}
+ \stex_notation_do:nnnnn{}{0}{}{}{\comp{#4}}
+ % }
+ %\exp_args:Nx \notation{\l_@@_name_str}{\comp{#5}}
+ \endgroup
+ \stex_smsmode_do:\ignorespacesandpars
+}
+
+\cs_new_protected:Nn \stex_symbol_or_var:n {
+ \cs_if_exist:cTF{#1}{
+ \cs_set_eq:Nc \l_tmpa_tl { #1 }
+ \str_set:Nx \l_tmpa_str { \cs_argument_spec:N \l_tmpa_tl }
+ \str_if_empty:NTF \l_tmpa_str {
+ \exp_args:Nx \cs_if_eq:NNTF { \tl_head:N \l_tmpa_tl }
+ \stex_invoke_variable:n {
+ \bool_set_true:N \l_stex_symbol_or_var_bool
+ \bool_set_false:N \l_stex_instance_or_symbol_bool
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\exp_after:wN \use:n \l_tmpa_tl}
+ \str_set:Nx \l_stex_get_symbol_uri_str {
+ \exp_after:wN \use:n \l_tmpa_tl
+ }
+ }{ % TODO \stex_invoke_varinstance:n
+ \exp_args:Nx \cs_if_eq:NNTF { \tl_head:N \l_tmpa_tl } \stex_invoke_varinstance:n {
+ \bool_set_true:N \l_stex_symbol_or_var_bool
+ \bool_set_true:N \l_stex_instance_or_symbol_bool
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\exp_after:wN \use:n \l_tmpa_tl}
+ \str_set:Nx \l_stex_get_symbol_uri_str {
+ \exp_after:wN \use:n \l_tmpa_tl
+ }
+ }{
+ \bool_set_false:N \l_stex_symbol_or_var_bool
+ \stex_get_symbol:n{#1}
+ }
+ }
+ }{
+ \_@@_symbolorvar_from_string:n{ #1 }
+ }
+ }{
+ \_@@_symbolorvar_from_string:n{ #1 }
}
+}
- \tl_clear:N \l_@@_structure_def_tl
+\cs_new_protected:Nn \_@@_symbolorvar_from_string:n {
+ \prop_if_exist:cTF {l_stex_variable_#1 _prop}{
+ \bool_set_true:N \l_stex_symbol_or_var_bool
+ \str_set:Nn \l_stex_get_symbol_uri_str { #1 }
+ }{
+ \bool_set_false:N \l_stex_symbol_or_var_bool
+ \stex_get_symbol:n{#1}
+ }
+}
- \prop_get:NnN \l_@@_structure_prop { fields } \l_tmpa_seq
- \seq_map_inline:Nn \l_tmpa_seq {
- \seq_set_split:Nnn \l_tmpb_seq ? { ##1 }
- \seq_get_right:NN \l_tmpb_seq \l_tmpa_str
- \exp_args:Nx \use:n {
- \tl_put_right:Nn \exp_not:N \l_@@_structure_def_tl {
+\keys_define:nn { stex / varinstantiate } {
+ name .str_set_x:N = \l_@@_name_str,
+ bind .choices:nn =
+ {forall,exists}
+ {\str_set:Nx \l_@@_bind_str {\l_keys_choice_tl}}
- }
+}
+\cs_new_protected:Nn \_@@_varinstantiate_args:n {
+ \str_clear:N \l_@@_name_str
+ \str_clear:N \l_@@_bind_str
+ \keys_set:nn { stex / varinstantiate } { #1 }
+}
+
+\NewDocumentCommand \varinstantiate {m O{} m m O{}}{
+ \begingroup
+ \stex_get_structure:n {#3}
+ \_@@_varinstantiate_args:n { #2 }
+ \str_if_empty:NT \l_@@_name_str {
+ \str_set:Nn \l_@@_name_str { #1 }
}
+ \stex_if_do_html:TF{
+ \stex_annotate:nnn{varinstance}{\l_@@_name_str}
+ }{\use:n}
+ {
+ \stex_if_do_html:T{
+ \stex_annotate_invisible:nnn{domain}{\l_stex_get_structure_module_str}{}
+ }
+ \seq_clear:N \l_@@_fields_seq
+ \exp_args:Nx \stex_collect_imports:n \l_stex_get_structure_module_str
+ \seq_map_inline:Nn \l_stex_collect_imports_seq {
+ \seq_map_inline:cn {c_stex_module_##1_constants}{
+ \seq_put_right:Nx \l_@@_fields_seq { ##1 ? ####1 }
+ }
+ }
+ \exp_args:No \stex_activate_module:n \l_stex_get_structure_module_str
+ \prop_clear:N \l_tmpa_prop
+ \tl_if_empty:nF {#5} {
+ \seq_set_split:Nnn \l_tmpa_seq , {#5}
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \seq_set_split:Nnn \l_tmpb_seq = { ##1 }
+ \int_compare:nNnF { \seq_count:N \l_tmpb_seq } = 2 {
+ \msg_error:nnn{stex}{error/keyval}{##1}
+ }
+ \exp_args:Nx \stex_get_symbol_in_seq:nn {\seq_item:Nn \l_tmpb_seq 1} \l_@@_fields_seq
+ \str_set_eq:NN \l_@@_dom_str \l_stex_get_symbol_uri_str
+ \exp_args:NNx \seq_remove_all:Nn \l_@@_fields_seq \l_stex_get_symbol_uri_str
+ \exp_args:Nx \stex_symbol_or_var:n {\seq_item:Nn \l_tmpb_seq 2}
+ \stex_if_do_html:T{
+ \stex_annotate:nnn{assign}{\l_@@_dom_str,
+ \bool_if:NTF\l_stex_symbol_or_var_bool{var://}{}\l_stex_get_symbol_uri_str}{}
+ }
+ \bool_if:NTF \l_stex_symbol_or_var_bool {
+ \exp_args:Nxx \str_if_eq:nnF
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\prop_item:cn{l_stex_variable_\l_stex_get_symbol_uri_str _prop}{args}}{
+ \msg_error:nnxxxx{stex}{error/incompatible}
+ {\l_@@_dom_str}
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\l_stex_get_symbol_uri_str}
+ {\prop_item:cn{l_stex_variable_\l_stex_get_symbol_uri_str _prop}{args}}
+ }
+ \prop_put:Nxx \l_tmpa_prop {\seq_item:Nn \l_tmpb_seq 1} {\stex_invoke_variable:n {\l_stex_get_symbol_uri_str}}
+ }{
+ \exp_args:Nxx \str_if_eq:nnF
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\prop_item:cn{l_stex_symdecl_\l_stex_get_symbol_uri_str _prop}{args}}{
+ \msg_error:nnxxxx{stex}{error/incompatible}
+ {\l_@@_dom_str}
+ {\prop_item:cn{l_stex_symdecl_\l_@@_dom_str _prop}{args}}
+ {\l_stex_get_symbol_uri_str}
+ {\prop_item:cn{l_stex_symdecl_\l_stex_get_symbol_uri_str _prop}{args}}
+ }
+ \prop_put:Nxx \l_tmpa_prop {\seq_item:Nn \l_tmpb_seq 1} {\stex_invoke_symbol:n {\l_stex_get_symbol_uri_str}}
+ }
+ }
+ }
+ \tl_gclear:N \g_@@_aftergroup_tl
+ \seq_map_inline:Nn \l_@@_fields_seq {
+ \str_set:Nx \l_tmpa_str {\l_@@_name_str . \prop_item:cn {l_stex_symdecl_##1_prop}{name} }
+ \stex_debug:nn{varinstantiate}{Field~\l_tmpa_str :~##1}
+ \seq_if_empty:cF{l_stex_symdecl_##1_notations}{
+ \stex_find_notation:nn{##1}{}
+ \cs_gset_eq:cc{g_@@_tmpa_\l_tmpa_str _cs}
+ {stex_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}
+ \stex_debug:nn{varinstantiate}{Notation:~\cs_meaning:c{g_@@_tmpa_\l_tmpa_str _cs}}
+ \cs_if_exist:cT{stex_op_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}{
+ \cs_gset_eq:cc {g_@@_tmpa_op_\l_tmpa_str _cs}
+ {stex_op_notation_##1\c_hash_str \l_stex_notation_variant_str _cs}
+ \stex_debug:nn{varinstantiate}{Operator~Notation:~\cs_meaning:c{g_@@_tmpa_op_\l_tmpa_str _cs}}
+ }
+ }
- \prop_if_exist:cF {
- l_stex_symdecl_
- \prop_item:Nn \l_stex_current_module_prop {ns} ?
- \prop_item:Nn \l_stex_current_module_prop {name} ?
- #3/\l_tmpa_str
- _prop
- }{
- \prop_get:cnN { l_stex_symdecl_ ##1 _prop } {args}
- \l_tmpb_str
- \exp_args:Nx \use:n {
- \symdecl{#3/\l_tmpa_str}[args=\l_tmpb_str]
+ \exp_args:NNx \tl_gput_right:Nn \g_@@_aftergroup_tl {
+ \prop_set_from_keyval:cn { l_stex_variable_ \l_tmpa_str _prop}{
+ name = \l_tmpa_str ,
+ args = \prop_item:cn {l_stex_symdecl_##1_prop}{args} ,
+ arity = \prop_item:cn {l_stex_symdecl_##1_prop}{arity} ,
+ assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs}
+ }
+ \cs_set_eq:cc {stex_var_notation_\l_tmpa_str _cs}
+ {g_@@_tmpa_\l_tmpa_str _cs}
+ \cs_set_eq:cc {stex_var_op_notation_\l_tmpa_str _cs}
+ {g_@@_tmpa_op_\l_tmpa_str _cs}
+ }
+ \prop_put:Nxx \l_tmpa_prop {\prop_item:cn {l_stex_symdecl_##1_prop}{name}}{\stex_invoke_variable:n {\l_tmpa_str}}
+ }
+ \exp_args:NNx \tl_gput_right:Nn \g_@@_aftergroup_tl {
+ \prop_set_from_keyval:cn {l_stex_varinstance_\l_@@_name_str _prop }{
+ domain = \l_stex_get_structure_module_str ,
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ \tl_set:cn { #1 }{\stex_invoke_varinstance:n {\l_@@_name_str}}
+ \tl_set:cn {l_stex_varinstance_\l_@@_name_str _op_tl}{
+ \exp_args:Nnx \exp_not:N \use:nn {
+ \str_set:Nn \exp_not:N \STEXInternalCurrentSymbolStr {var://\l_@@_name_str}
+ \_stex_term_omv:nn {var://\l_@@_name_str}{
+ \exp_not:n{
+ \_varcomp{#4}
+ }
+ }
+ }{
+ \exp_not:n{\_stex_reset:N \STEXInternalCurrentSymbolStr}
+ }
+ }
}
}
+ \stex_debug:nn{varinstantiate}{\expandafter\detokenize\expandafter{\g_@@_aftergroup_tl}}
+ \aftergroup\g_@@_aftergroup_tl
+ \endgroup
+ \stex_smsmode_do:\ignorespacesandpars
+}
+
+\cs_new_protected:Nn \stex_invoke_instance:n {
+ \peek_charcode_remove:NTF ! {
+ \stex_invoke_symbol:n{#1}
+ }{
+ \_stex_invoke_instance:nn {#1}
}
+}
- \symdecl*{#3}[type={\STEXsymbol{module-type}{
- \_stex_term_math_oms:nnnn {
- \prop_item:Nn \l_@@_structure_prop {ns} ?
- \prop_item:Nn \l_@@_structure_prop {name}
- }{}{0}{}
- }}]
-
- % TODO: -> sms file
- \tl_set:cx{ #3 }{
- \stex_invoke_structure:nnn {
- \prop_item:Nn \l_stex_current_module_prop {ns} ?
- \prop_item:Nn \l_stex_current_module_prop {name} ? #3
- } {
- \prop_item:Nn \l_@@_structure_prop {ns} ?
- \prop_item:Nn \l_@@_structure_prop {name}
+\cs_new_protected:Nn \stex_invoke_varinstance:n {
+ \peek_charcode_remove:NTF ! {
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \use:c{l_stex_varinstance_#1_op_tl}
+ }{
+ \_stex_reset:N \comp
}
+ }{
+ \_stex_invoke_varinstance:nn {#1}
+ }
+}
+
+\cs_new_protected:Nn \_stex_invoke_instance:nn {
+ \prop_if_in:cnTF {l_stex_instance_ #1 _prop}{#2}{
+ \exp_args:Nx \stex_invoke_symbol:n {\prop_item:cn{l_stex_instance_ #1 _prop}{#2}}
+ }{
+ \prop_set_eq:Nc \l_tmpa_prop{l_stex_instance_ #1 _prop}
+ \msg_error:nnxxx{stex}{error/unknownfield}{#2}{#1}{
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ }
+}
+
+\cs_new_protected:Nn \_stex_invoke_varinstance:nn {
+ \prop_if_in:cnTF {l_stex_varinstance_ #1 _prop}{#2}{
+ \prop_get:cnN{l_stex_varinstance_ #1 _prop}{#2}\l_tmpa_tl
+ \l_tmpa_tl
+ }{
+ \msg_error:nnnnn{stex}{error/unknownfield}{#2}{#1}{}
}
- \stex_smsmode_do:
}
% \end{macrocode}
% \end{macro}
@@ -780,5 +1097,6 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-inheritance.dtx b/macros/latex/contrib/stex/source/stex/stex-inheritance.dtx
index 33c536c3a5..cde0cfa5c3 100644
--- a/macros/latex/contrib/stex/source/stex/stex-inheritance.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-inheritance.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -38,6 +38,7 @@
% \fi
%
% \begin{documentation}\label{pkg:inheritance:doc}
+% \changes{3.1.0}{2022/03/10}{SMS mode now loads recursive dependencies \emph{first}}
%
% Code related to Module Inheritance, in particular \emph{sms mode}.
%
@@ -222,6 +223,11 @@
\endinput
\setnotation
\copynotation
+ \assign
+ \renamedecl
+ \donotcopy
+ \instantiate
+ \textsymdecl
}
\exp_args:NNx \seq_set_from_clist:Nn \g_stex_smsmode_allowedenvs_seq {
@@ -229,10 +235,12 @@
smodule,
copymodule,
interpretmodule,
+ realization,
sdefinition,
sexample,
sassertion,
- sparagraph
+ sparagraph,
+ mathstructure
}
}
% \end{macrocode}
@@ -250,7 +258,7 @@
%
% \begin{macro}{\_@@_in_smsmode:nn}
% \begin{macrocode}
-\cs_new_protected:Nn \_@@_in_smsmode:nn {
+\cs_new_protected:Nn \_@@_in_smsmode:nn { \stex_suppress_html:n {
\vbox_set:Nn \l_tmpa_box {
\bool_set_eq:cN { l_@@_#1_bool } \g_@@_bool
\bool_gset_true:N \g_@@_bool
@@ -258,7 +266,7 @@
\bool_gset_eq:Nc \g_@@_bool { l_@@_#1_bool }
}
\box_clear:N \l_tmpa_box
-}
+} }
% \end{macrocode}
% \end{macro}
%
@@ -266,10 +274,104 @@
% \begin{macrocode}
\quark_new:N \q_@@_break
+\NewDocumentCommand \_@@_importmodule: { O{} m} {
+ \seq_gput_right:Nn \l_@@_importmodules_seq {{#1}{#2}}
+ \stex_smsmode_do:
+}
+
+\cs_new_protected:Nn \_@@_module:nn {
+ \__stex_modules_args:n{#1}
+ \stex_if_in_module:F {
+ \str_if_empty:NF \l_stex_module_sig_str {
+ \stex_modules_current_namespace:
+ \str_set:Nx \l_stex_module_name_str { #2 }
+ \stex_if_module_exists:nF{\l_stex_module_ns_str?\l_stex_module_name_str}{
+ \seq_set_eq:NN \l_tmpa_seq \g_stex_currentfile_seq
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ \seq_set_split:NnV \l_tmpb_seq . \l_tmpa_str
+ \seq_pop_right:NN \l_tmpb_seq \l_tmpa_str % .tex
+ \seq_pop_left:NN \l_tmpb_seq \l_tmpa_str % <filename>
+ \str_set:Nx \l_tmpa_str {
+ \stex_path_to_string:N \l_tmpa_seq /
+ \l_tmpa_str . \l_stex_module_sig_str .tex
+ }
+ \IfFileExists \l_tmpa_str {
+ \exp_args:NNx \seq_gput_right:Nn \l_@@_sigmodules_seq \l_tmpa_str
+ }{
+ \msg_error:nnx{stex}{error/unknownmodule}{for~signature~\l_tmpa_str}
+ }
+ }
+ }
+ }
+}
+
+\prg_new_conditional:Nnn \_@@_check_import_pair:nn {T,F,TF} {
+ %\stex_debug:nn{import-pair}{\detokenize{{#1}~{#2}}}
+ \tl_if_empty:nTF{#1}{
+ \prop_if_exist:NTF \l_stex_current_repository_prop
+ {
+ %\stex_debug:nn{import-pair}{in repository \prop_item:Nn \l_stex_current_repository_prop {id}}
+ \prg_return_true:
+ } {
+ \seq_set_split:Nnn \l_tmpa_seq ? {#2}
+ \seq_get_left:NN \l_tmpa_seq \l_tmpa_tl
+ \tl_if_empty:NT \l_tmpa_tl {
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ }
+ %\stex_debug:nn{import-pair}{\seq_use:Nn \l_tmpa_seq,~of~length~\seq_count:N \l_tmpa_seq}
+ \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > 1
+ \prg_return_true: \prg_return_false:
+ }
+ }\prg_return_true:
+}
+
\cs_new_protected:Nn \stex_file_in_smsmode:nn {
\stex_filestack_push:n{#1}
+ \seq_gclear:N \l_@@_importmodules_seq
+ \seq_gclear:N \l_@@_sigmodules_seq
+ % ----- new -----------------------------
+ \_@@_in_smsmode:nn{#1}{
+ \let\importmodule\_@@_importmodule:
+ \let\stex_module_setup:nn\_@@_module:nn
+ \let\__stex_modules_begin_module:\relax
+ \let\__stex_modules_end_module:\relax
+ \seq_clear:N \g_stex_smsmode_allowedenvs_seq
+ \exp_args:NNx \seq_put_right:Nn \g_stex_smsmode_allowedenvs_seq {\tl_to_str:n{smodule}}
+ \tl_clear:N \g_stex_smsmode_allowedmacros_tl
+ \tl_clear:N \g_stex_smsmode_allowedmacros_escape_tl
+ \tl_put_right:Nn \g_stex_smsmode_allowedmacros_escape_tl {\importmodule}
+ \everyeof{\q_@@_break\noexpand}
+ \expandafter\expandafter\expandafter
+ \stex_smsmode_do:
+ \csname @ @ input\endcsname "#1"\relax
+
+ \seq_map_inline:Nn \l_@@_sigmodules_seq {
+ \stex_filestack_push:n{##1}
+ \expandafter\expandafter\expandafter
+ \stex_smsmode_do:
+ \csname @ @ input\endcsname "##1"\relax
+ \stex_filestack_pop:
+ }
+ }
+ % ----- new -----------------------------
\_@@_in_smsmode:nn{#1} {
#2
+ % ----- new -----------------------------
+ \begingroup
+ %\stex_debug:nn{smsmode}{Here:~\seq_use:Nn\l_@@_importmodules_seq, }
+ \seq_map_inline:Nn \l_@@_importmodules_seq {
+ \_@@_check_import_pair:nnT ##1 { \begingroup
+ \stex_import_module_uri:nn ##1
+ \stex_import_require_module:nnnn
+ \l_stex_import_ns_str
+ \l_stex_import_archive_str
+ \l_stex_import_path_str
+ \l_stex_import_name_str \endgroup
+ }
+ }
+ \endgroup
+ \stex_debug:nn{smsmode}{Actually~loading~file~#1}
+ % ----- new -----------------------------
\everyeof{\q_@@_break\noexpand}
\expandafter\expandafter\expandafter
\stex_smsmode_do:
@@ -360,7 +462,7 @@
{\str_if_empty_p:N \l_stex_import_path_str}
{\stex_if_module_exists_p:n { \l_stex_module_ns_str ? \l_stex_import_name_str } }
}{
- \str_set_eq:NN \l_stex_import_path_str \l_stex_modules_subpath_str
+ \str_set_eq:NN \l_stex_import_path_str \l_stex_module_subpath_str
\str_set_eq:NN \l_stex_import_ns_str \l_stex_module_ns_str
}{
\str_if_empty:NT \l_stex_import_archive_str {
@@ -370,9 +472,11 @@
}
\str_if_empty:NTF \l_stex_import_archive_str {
\str_if_empty:NF \l_stex_import_path_str {
- \str_set:Nx \l_stex_import_ns_str {
- \l_stex_module_ns_str / \l_stex_import_path_str
+ \stex_path_from_string:Nn \l_tmpb_seq {
+ \l_stex_module_ns_str / .. / \l_stex_import_path_str
}
+ \str_set:Nx \l_stex_import_ns_str {\stex_path_to_string:N \l_tmpb_seq}
+ \str_replace_once:Nnn \l_stex_import_ns_str {file:/} {file://}
}
}{
\stex_require_repository:n \l_stex_import_archive_str
@@ -407,10 +511,18 @@
\cs_new_protected:Nn \stex_import_require_module:nnnn {
\exp_args:Nx \stex_if_module_exists:nF { #1 ? #4 } {
+ \stex_debug:nn{requiremodule}{Here:\\~~1:~#1\\~~2:~#2\\~~3:~#3\\~~4:~#4}
+
+ \exp_args:NNxx \seq_set_split:Nnn \l_tmpa_seq {\tl_to_str:n{/}} {#4}
+ \seq_get_left:NN \l_tmpa_seq \l_tmpc_str
+
+ %\stex_debug:nn{requiremodule}{Top~module:\l_tmpc_str}
+
% archive
\str_set:Nx \l_tmpa_str { #2 }
\str_if_empty:NTF \l_tmpa_str {
\seq_set_eq:NN \l_tmpa_seq \g_stex_currentfile_seq
+ \seq_put_right:Nn \l_tmpa_seq {..}
} {
\stex_path_from_string:Nn \l_tmpb_seq { \l_tmpa_str }
\seq_concat:NNN \l_tmpa_seq \c_stex_mathhub_seq \l_tmpb_seq
@@ -420,7 +532,7 @@
% path
\str_set:Nx \l_tmpb_str { #3 }
\str_if_empty:NTF \l_tmpb_str {
- \str_set:Nx \l_tmpa_str { \stex_path_to_string:N \l_tmpa_seq / #4 }
+ \str_set:Nx \l_tmpa_str { \stex_path_to_string:N \l_tmpa_seq / \l_tmpc_str }
\ltx@ifpackageloaded{babel} {
\exp_args:NNx \prop_get:NnNF \c_stex_language_abbrevs_prop
@@ -431,16 +543,16 @@
\str_clear:N \l_tmpb_str
}
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.\l_tmpb_str.tex}
+ \stex_debug:nn{modules}{Checking~a1~\l_tmpa_str.\l_tmpb_str.tex}
\IfFileExists{ \l_tmpa_str.\l_tmpb_str.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.\l_tmpb_str.tex }
}{
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.tex}
+ \stex_debug:nn{modules}{Checking~a2~\l_tmpa_str.tex}
\IfFileExists{ \l_tmpa_str.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.tex }
}{
% try english as default
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.en.tex}
+ \stex_debug:nn{modules}{Checking~a3~\l_tmpa_str.en.tex}
\IfFileExists{ \l_tmpa_str.en.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.en.tex }
}{
@@ -451,7 +563,7 @@
} {
\seq_set_split:NnV \l_tmpb_seq / \l_tmpb_str
- \seq_concat:NNN \l_tmpa_seq \l_tmpa_seq \l_tmpb_seq
+ \seq_concat:NNN \l_tmpb_seq \l_tmpa_seq \l_tmpb_seq
\ltx@ifpackageloaded{babel} {
\exp_args:NNx \prop_get:NnNF \c_stex_language_abbrevs_prop
@@ -462,31 +574,32 @@
\str_clear:N \l_tmpb_str
}
- \stex_path_to_string:NN \l_tmpa_seq \l_tmpa_str
+ \stex_path_canonicalize:N \l_tmpb_seq
+ \stex_path_to_string:NN \l_tmpb_seq \l_tmpa_str
- \stex_debug:nn{modules}{Checking~\l_tmpa_str/#4.\l_tmpb_str.tex}
- \IfFileExists{ \l_tmpa_str/#4.\l_tmpb_str.tex }{
- \str_gset:Nx \g_@@_file_str { \l_tmpa_str/#4.\l_tmpb_str.tex }
+ \stex_debug:nn{modules}{Checking~b1~\l_tmpa_str/\l_tmpc_str.\l_tmpb_str.tex}
+ \IfFileExists{ \l_tmpa_str/\l_tmpc_str.\l_tmpb_str.tex }{
+ \str_gset:Nx \g_@@_file_str { \l_tmpa_str/\l_tmpc_str.\l_tmpb_str.tex }
}{
- \stex_debug:nn{modules}{Checking~\l_tmpa_str/#4.tex}
- \IfFileExists{ \l_tmpa_str/#4.tex }{
- \str_gset:Nx \g_@@_file_str { \l_tmpa_str/#4.tex }
+ \stex_debug:nn{modules}{Checking~b2~\l_tmpa_str/\l_tmpc_str.tex}
+ \IfFileExists{ \l_tmpa_str/\l_tmpc_str.tex }{
+ \str_gset:Nx \g_@@_file_str { \l_tmpa_str/\l_tmpc_str.tex }
}{
% try english as default
- \stex_debug:nn{modules}{Checking~\l_tmpa_str/#4.en.tex}
- \IfFileExists{ \l_tmpa_str/#4.en.tex }{
- \str_gset:Nx \g_@@_file_str { \l_tmpa_str/#4.en.tex }
+ \stex_debug:nn{modules}{Checking~b3~\l_tmpa_str/\l_tmpc_str.en.tex}
+ \IfFileExists{ \l_tmpa_str/\l_tmpc_str.en.tex }{
+ \str_gset:Nx \g_@@_file_str { \l_tmpa_str/\l_tmpc_str.en.tex }
}{
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.\l_tmpb_str.tex}
+ \stex_debug:nn{modules}{Checking~b4~\l_tmpa_str.\l_tmpb_str.tex}
\IfFileExists{ \l_tmpa_str.\l_tmpb_str.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.\l_tmpb_str.tex }
}{
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.tex}
+ \stex_debug:nn{modules}{Checking~b4~\l_tmpa_str.tex}
\IfFileExists{ \l_tmpa_str.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.tex }
}{
% try english as default
- \stex_debug:nn{modules}{Checking~\l_tmpa_str.en.tex}
+ \stex_debug:nn{modules}{Checking~b5~\l_tmpa_str.en.tex}
\IfFileExists{ \l_tmpa_str.en.tex }{
\str_gset:Nx \g_@@_file_str { \l_tmpa_str.en.tex }
}{
@@ -499,21 +612,24 @@
}
}
- \exp_args:No \stex_file_in_smsmode:nn { \g_@@_file_str } {
- \seq_clear:N \l_stex_all_modules_seq
- \str_clear:N \l_stex_current_module_str
- \str_set:Nx \l_tmpb_str { #2 }
- \str_if_empty:NF \l_tmpb_str {
- \stex_set_current_repository:n { #2 }
+ \str_if_eq:eeF{\g_@@_file_str}{\seq_use:Nn \g_stex_currentfile_seq /}{
+ \exp_args:No \stex_file_in_smsmode:nn { \g_@@_file_str } {
+ \seq_clear:N \l_stex_all_modules_seq
+ \str_clear:N \l_stex_current_module_str
+ \str_set:Nx \l_tmpb_str { #2 }
+ \str_if_empty:NF \l_tmpb_str {
+ \stex_set_current_repository:n { #2 }
+ }
+ \stex_debug:nn{modules}{Loading~\g_@@_file_str}
}
- \stex_debug:nn{modules}{Loading~\g_@@_file_str}
- }
-
- \stex_if_module_exists:nF { #1 ? #4 } {
- \msg_error:nnx{stex}{error/unknownmodule}{
- #1?#4~(in~file~\g_@@_file_str)
+
+ \stex_if_module_exists:nF { #1 ? #4 } {
+ \msg_error:nnx{stex}{error/unknownmodule}{
+ #1?#4~(in~file~\g_@@_file_str)
+ }
}
}
+
}
\stex_activate_module:n { #1 ? #4 }
}
@@ -527,10 +643,10 @@
\stex_debug:nn{modules}{Importing~module:~
\l_stex_import_ns_str ? \l_stex_import_name_str
}
+ \stex_import_require_module:nnnn
+ { \l_stex_import_ns_str } { \l_stex_import_archive_str }
+ { \l_stex_import_path_str } { \l_stex_import_name_str }
\stex_if_smsmode:F {
- \stex_import_require_module:nnnn
- { \l_stex_import_ns_str } { \l_stex_import_archive_str }
- { \l_stex_import_path_str } { \l_stex_import_name_str }
\stex_annotate_invisible:nnn
{import} {\l_stex_import_ns_str ? \l_stex_import_name_str} {}
}
@@ -567,9 +683,25 @@
% \end{macro}
%
% \begin{macrocode}
+\cs_new_protected:Nn \stex_csl_to_imports:Nn {
+ \tl_if_empty:nF{#2}{
+ \clist_set:Nn \l_tmpa_clist {#2}
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \tl_if_head_eq_charcode:nNTF {##1}[{
+ #1 ##1
+ }{
+ #1{##1}
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn \stex_csl_to_imports:Nn {No}
+
+
%</package>
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-mathhub.dtx b/macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
index 20288212e3..89da6af2fb 100644
--- a/macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-mathhub.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -39,6 +39,7 @@
%
%
% \begin{documentation}\label{pkg:mathhub:doc}
+% \changes{3.1.0}{2022/03/09}{Fixed a bug with \textbackslash inputref outside of archives}
%
% This sub package provides code for handling \sTeX archives,
% files, file paths and related methods.
@@ -100,14 +101,15 @@
%
% \begin{variable}{\mathhub, \c_stex_mathhub_seq, \c_stex_mathhub_str}
% We determine the path to the local MathHub folder via one of
-% three means, in order of precedence:
+% four means, in order of precedence:
% \begin{enumerate}
% \item The |mathhub| package option, or
% \item the |\mathhub|-macro, if it has been defined before
% the |\usepackage{stex}|-statement, or
-% \item the |MATHHUB| system variable.
+% \item the |MATHHUB| system variable, or
+% \item a path specified in |~/.stex/mathhub.path|.
% \end{enumerate}
-% In all three cases, \cs{c_stex_mathhub_seq} and
+% In all four cases, \cs{c_stex_mathhub_seq} and
% \cs{c_stex_mathhub_str} are set accordingly.
% \end{variable}
%
@@ -359,8 +361,11 @@
% \begin{macro}{\stex_kpsewhich:n}
% \begin{macrocode}
\str_new:N\l_stex_kpsewhich_return_str
-\cs_new_protected:Nn \stex_kpsewhich:n {
+\cs_new_protected:Nn \stex_kpsewhich:n {\begingroup
+ \catcode`\ =12
\sys_get_shell:nnN { kpsewhich ~ #1 } { } \l_tmpa_tl
+ \tl_gset_eq:NN \l_tmpa_tl \l_tmpa_tl
+ \endgroup
\exp_args:NNo\str_set:Nn\l_stex_kpsewhich_return_str{\l_tmpa_tl}
\tl_trim_spaces:N \l_stex_kpsewhich_return_str
}
@@ -483,7 +488,27 @@
\stex_kpsewhich:n{-var-value~MATHHUB}
}
\str_set_eq:NN\c_stex_mathhub_str\l_stex_kpsewhich_return_str
-
+
+ \str_if_empty:NT \c_stex_mathhub_str {
+ \sys_if_platform_windows:TF{
+ \begingroup\escapechar=-1\catcode`\\=12
+ \exp_args:Nx\stex_kpsewhich:n{-var-value~HOME}
+ \exp_args:NNx\str_replace_all:Nnn\l_stex_kpsewhich_return_str{\c_backslash_str}/
+ \exp_args:Nnx\use:nn{\endgroup}{\str_set:Nn\exp_not:N\l_stex_kpsewhich_return_str{\l_stex_kpsewhich_return_str}}
+ }{
+ \stex_kpsewhich:n{-var-value~HOME}
+ }
+ \ior_open:NnT \l_tmpa_ior{\l_stex_kpsewhich_return_str / .stex / mathhub.path}{
+ \begingroup\escapechar=-1\catcode`\\=12
+ \ior_str_get:NN \l_tmpa_ior \l_tmpa_str
+ \sys_if_platform_windows:T{
+ \exp_args:NNx\str_replace_all:Nnn\l_tmpa_str{\c_backslash_str}/
+ }
+ \str_gset_eq:NN \c_stex_mathhub_str\l_tmpa_str
+ \endgroup
+ \ior_close:N \l_tmpa_ior
+ }
+ }
\str_if_empty:NTF\c_stex_mathhub_str{
\msg_warning:nn{stex}{warning/nomathhub}
}{
@@ -518,6 +543,7 @@
\msg_error:nnxx{stex}{error/norepository}{#1}{
\stex_path_to_string:N \c_stex_mathhub_str
}
+ \input{Fatal~Error!}
} {
\exp_args:No \_@@_parse_manifest:n { \l_tmpa_str }
}
@@ -631,6 +657,11 @@
}{}
}
\ior_close:N \c_@@_manifest_ior
+ \stex_persist:x {
+ \prop_set_from_keyval:cn{ c_stex_mathhub_#1_manifest_prop }{
+ \exp_after:wN \prop_to_keyval:N \csname c_stex_mathhub_#1_manifest_prop\endcsname
+ }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -664,19 +695,20 @@
%
% \begin{macrocode}
%\prop_new:N \l_stex_current_repository_prop
-
-\_@@_find_manifest:N \c_stex_pwd_seq
-\seq_if_empty:NTF \l_@@_manifest_file_seq {
- \stex_debug:nn{mathhub}{Not~currently~in~a~MathHub~repository}
-} {
- \_@@_parse_manifest:n { main }
- \prop_get:NnN \c_stex_mathhub_main_manifest_prop {id}
- \l_tmpa_str
- \prop_set_eq:cN { c_stex_mathhub_\l_tmpa_str _manifest_prop }
- \c_stex_mathhub_main_manifest_prop
- \exp_args:Nx \stex_set_current_repository:n { \l_tmpa_str }
- \stex_debug:nn{mathhub}{Current~repository:~
- \prop_item:Nn \l_stex_current_repository_prop {id}
+\bool_if:NF \c_stex_persist_mode_bool {
+ \_@@_find_manifest:N \c_stex_pwd_seq
+ \seq_if_empty:NTF \l_@@_manifest_file_seq {
+ \stex_debug:nn{mathhub}{Not~currently~in~a~MathHub~repository}
+ } {
+ \_@@_parse_manifest:n { main }
+ \prop_get:NnN \c_stex_mathhub_main_manifest_prop {id}
+ \l_tmpa_str
+ \prop_set_eq:cN { c_stex_mathhub_\l_tmpa_str _manifest_prop }
+ \c_stex_mathhub_main_manifest_prop
+ \exp_args:Nx \stex_set_current_repository:n { \l_tmpa_str }
+ \stex_debug:nn{mathhub}{Current~repository:~
+ \prop_item:Nn \l_stex_current_repository_prop {id}
+ }
}
}
% \end{macrocode}
@@ -759,26 +791,43 @@
}
}
\NewDocumentCommand \mhinput { O{} m}{
- \stex_mhinput:nn{ #1 }{ #2 }
+ \_@@_mhinput:nn{ #1 }{ #2 }
}
\cs_new_protected:Nn \_@@_inputref:nn {
\stex_in_repository:nn {#1} {
- \bool_lazy_any:nTF {
- {\rustex_if_p:}
- {\latexml_if_p:}
- } {
+ \stex_html_backend:TF {
\str_clear:N \l_tmpa_str
\prop_get:NnNF \l_stex_current_repository_prop { narr } \l_tmpa_str {
\prop_get:NnNF \l_stex_current_repository_prop { ns } \l_tmpa_str {}
}
- \stex_annotate_invisible:nnn{inputref}{
- \l_tmpa_str / #2
- }{}
+
+ \tl_if_empty:nTF{ ##1 }{
+ \IfFileExists{#2}{
+ \stex_annotate_invisible:nnn{inputref}{
+ \l_tmpa_str / #2
+ }{}
+ }{
+ \input{#2}
+ }
+ }{
+ \IfFileExists{ \c_stex_mathhub_str / ##1 / source / #2 }{
+ \stex_annotate_invisible:nnn{inputref}{
+ \l_tmpa_str / #2
+ }{}
+ }{
+ \input{ \c_stex_mathhub_str / ##1 / source / #2 }
+ }
+ }
+
}{
\begingroup
\inputreftrue
- \input{ \c_stex_mathhub_str / ##1 / source / #2 }
+ \tl_if_empty:nTF{ ##1 }{
+ \input{#2}
+ }{
+ \input{ \c_stex_mathhub_str / ##1 / source / #2 }
+ }
\endgroup
}
}
@@ -888,10 +937,10 @@
\AddToHook{begindocument}{
\ltx@ifpackageloaded{graphicx}{
\define@key{Gin}{mhrepos}{\def\Gin@mhrepos{#1}}
- \newcommand\mhgraphics[2][]{%
+ \providecommand\mhgraphics[2][]{%
\def\Gin@mhrepos{}\setkeys{Gin}{#1}%
\includegraphics[#1]{\mhpath\Gin@mhrepos{#2}}}
- \newcommand\cmhgraphics[2][]{\begin{center}\mhgraphics[#1]{#2}\end{center}}
+ \providecommand\cmhgraphics[2][]{\begin{center}\mhgraphics[#1]{#2}\end{center}}
}{}
% \end{macrocode}
% \end{macro}
@@ -912,5 +961,6 @@
% \end{macro}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-metatheory.dtx b/macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
index b7e32c23e9..8570531d17 100644
--- a/macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-metatheory.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -41,20 +41,6 @@
%
% \begin{documentation}\label{pkg:metatheory:doc}
%
-% The default meta theory for an \sTeX module. Contains
-% symbols so ubiquitous, that it is virtually impossible
-% to describe any flexiformal content without them, or
-% that are required to annotate even the most primitive symbols
-% with meaningful (foundation-independent) ``type''-annotations,
-% or required for basic structuring principles (theorems, definitions).
-%
-% Foundations should ideally instantiate these symbols
-% with their formal counterparts, e.g. |isa| corresponds
-% to a typing operation in typed setting, or the $\in$-operator
-% in set-theoretic contexts; |bind| corresponds to a universal
-% quantifier in ($n$th-order) logic, or a $\Pi$ in dependent type
-% theories.
-%
% \section{Symbols}\label{pkg:metatheory:symbols}
%
% \end{documentation}
@@ -69,7 +55,7 @@
%%%%%%%%%%%%% metatheory.dtx %%%%%%%%%%%%%
-\str_const:Nn \c_stex_metatheory_ns_str {http://mathhub.info/sTeX}
+\str_const:Nn \c_stex_metatheory_ns_str {http://mathhub.info/sTeX/meta}
\begingroup
\stex_module_setup:nn{
ns=\c_stex_metatheory_ns_str,
@@ -82,15 +68,21 @@
\csname stex_suppress_html:n\endcsname{
% is-a (a:A, a \in A, a is an A, etc.)
\symdecl{isa}[args=ai]
- \notation{isa}[typed]{#1 \comp{:} #2}{##1 \comp, ##2}
+ \notation{isa}[typed,op=:]{#1 \comp{:} #2}{##1 \comp, ##2}
\notation{isa}[in]{#1 \comp\in #2}{##1 \comp, ##2}
\notation{isa}[pred]{#2\comp(#1 \comp)}{##1 \comp, ##2}
% bind (\forall, \Pi, \lambda etc.)
- \symdecl{bind}[args=Bi]
+ \symdecl{bind}[args=Bi,assoc=pre]
+ \notation{bind}[depfun,prec=nobrackets,op={(\cdot)\;\to\;\cdot}]{\comp( #1 \comp{)\;\to\;} #2}{##1 \comp, ##2}
\notation{bind}[forall]{\comp\forall #1.\;#2}{##1 \comp, ##2}
\notation{bind}[Pi]{\comp\prod_{#1}#2}{##1 \comp, ##2}
- \notation{bind}[depfun]{\comp( #1 \comp{)\;\to\;} #2}{##1 \comp, ##2}
+
+ % implicit bind
+ \symdecl{implicitbind}[args=Bi,assoc=pre]
+ \notation{implicitbind}[braces,prec=nobrackets,op={\{\cdot\}_I\;\cdot}]{\comp\{ #1 \comp{\}_I\;} #2}{##1 \comp, ##2}
+ \notation{implicitbind}[depfun,prec=nobrackets]{\comp( #1 \comp{)\;\to_I\;} #2}{##1 \comp, ##2}
+ \notation{implicitbind}[Pi]{\comp\prod^I_{#1}#2}{##1\comp,##2}
% dummy variable
\symdecl{dummyvar}
@@ -111,23 +103,34 @@
% function/operator application
\symdecl{apply}[args=ia]
- \notation{apply}[prec=0;0x\infprec,parens]{#1 \comp( #2 \comp)}{##1 \comp, ##2}
+ \notation{apply}[prec=0;0x\infprec,parens,op=\cdot(\cdot)]{#1 \comp( #2 \comp)}{##1 \comp, ##2}
\notation{apply}[prec=0;0x\infprec,lambda]{#1 \; #2 }{##1 \; ##2}
- % ``type'' of all collections (sets,classes,types,kinds)
- \symdecl{collection}
- \notation{collection}[U]{\comp{\mathcal{U}}}
- \notation{collection}[set]{\comp{\textsf{Set}}}
-
% collection of propositions/booleans/truth values
\symdecl{prop}[name=proposition]
\notation{prop}[prop]{\comp{{\rm prop}}}
\notation{prop}[BOOL]{\comp{{\rm BOOL}}}
+ \symdecl{judgmentholds}[args=1]
+ \notation{judgmentholds}[vdash,op=\vdash]{\comp\vdash\; #1}
+
% sequences
\symdecl{seqtype}[args=1]
\notation{seqtype}[kleene]{#1^{\comp\ast}}
+ \symdecl{seqexpr}[args=a]
+ \notation{seqexpr}[angle,prec=nobrackets]{\comp\langle #1\comp\rangle}{##1\comp,##2}
+
+ \symdef{seqmap}[args=abi,setlike]{\comp\{#3 \comp| #2\comp\in \dobrackets{#1} \comp\}}{##1 \comp, ##2}
+ \symdef{seqprepend}[args=ia]{#1 \comp{::} #2}{##1 \comp, ##2}
+ \symdef{seqappend}[args=ai]{#1 \comp{::} #2}{##1 \comp, ##2}
+ \symdef{seqfoldleft}[args=iabbi]{ \comp{foldl}\dobrackets{#1,#2}\dobrackets{#3\comp,#4\comp\mapsto#5}}{##1 \comp, ##2}
+ \symdef{seqfoldright}[args=iabbi,op=foldr]{ \comp{foldr}\dobrackets{#1,#2}\dobrackets{#3\comp,#4\comp\mapsto#5}}{##1 \comp, ##2}
+ \symdef{seqhead}[args=a]{\comp{head}\dobrackets{#1}}{##1 \comp, ##2}
+ \symdef{seqtail}[args=a]{\comp{tail}\dobrackets{#1}}{##1 \comp, ##2}
+ \symdef{seqlast}[args=a]{\comp{last}\dobrackets{#1}}{##1 \comp, ##2}
+ \symdef{seqinit}[args=a]{\comp{tail}\dobrackets{#1}}{##1 \comp, ##2}
+
\symdef{sequence-index}[args=2,li,prec=nobrackets]{{#1}_{#2}}
\notation{sequence-index}[ui,prec=nobrackets]{{#1}^{#2}}
@@ -135,6 +138,9 @@
\symdef{aseqfromto}[args=ai,prec=nobrackets]{#1\comp{,\ellipses,}#2}{##1\comp,##2}
\symdef{aseqfromtovia}[args=aii,prec=nobrackets]{#1\comp{,\ellipses,}#2\comp{,\ellipses,}#3}{##1\comp,##2}
+ % nat literals
+ \symdef{natliteral}{\comp{\mathtt{Ord}}}
+
% letin (``let'', local definitions, variable substitution)
\symdecl{letin}[args=bii]
\notation{letin}[let]{\comp{{\rm let}}\;#1\comp{=}#2\;\comp{{\rm in}}\;#3}
@@ -143,21 +149,27 @@
% structures
\symdecl*{module-type}[args=1]
- \notation{module-type}{\mathtt{MOD} #1}
+ \notation{module-type}{\comp{\mathtt{MOD}} #1}
\symdecl{mathstruct}[name=mathematical-structure,args=a] % TODO
\notation{mathstruct}[angle,prec=nobrackets]{\comp\langle #1 \comp\rangle}{##1 \comp, ##2}
+ % objects
+ \symdecl{object}
+ \notation{object}{\comp{\mathtt{OBJECT}}}
+
}
+
+% The following are abbreviations in the sTeX corpus that are left over from earlier
+% developments. They will eventually be phased out.
+
\ExplSyntaxOn
\stex_add_to_current_module:n{
- \let\nappa\apply
\def\nappli#1#2#3#4{\apply{#1}{\naseqli{#2}{#3}{#4}}}
\def\nappui#1#2#3#4{\apply{#1}{\nasequi{#2}{#3}{#4}}}
\def\livar{\csname sequence-index\endcsname[li]}
\def\uivar{\csname sequence-index\endcsname[ui]}
\def\naseqli#1#2#3{\aseqfromto{\livar{#1}{#2}}{\livar{#1}{#3}}}
\def\nasequi#1#2#3{\aseqfromto{\uivar{#1}{#2}}{\uivar{#1}{#3}}}
- \def\nappe#1#2#3{\apply{#1}{\aseqfromto{#2}{#3}}}
}
\_@@_end_module:
\endgroup
@@ -171,7 +183,7 @@
% \end{implementation}
%
% \PrintIndex
-
+% \ifinfulldoc\else\printbibliography\fi
% \endinput
% Local Variables:
% mode: doctex
diff --git a/macros/latex/contrib/stex/source/stex/stex-modules.dtx b/macros/latex/contrib/stex/source/stex/stex-modules.dtx
index d5c10964de..5430bd153a 100644
--- a/macros/latex/contrib/stex/source/stex/stex-modules.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-modules.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -140,8 +140,8 @@
% is |http://some.namespace/foo/sub/file|. Otherwise, the namespace
% is the absolute file path of the current file (i.e. starting with |file:///|).
%
-% The result is stored in |\l_stex_modules_ns_str|. Additionally, the sub path
-% relative to the current repository is stored in |\l_stex_modules_subpath_str|.
+% The result is stored in |\l_stex_module_ns_str|. Additionally, the sub path
+% relative to the current repository is stored in |\l_stex_module_subpath_str|.
% \end{function}
%
% \subsection{The \texttt{smodule} environment}
@@ -280,21 +280,26 @@
% Only allowed within modules:
%
% \begin{macrocode}
+\cs_new_protected:Nn \stex_execute_in_module:n { \stex_if_in_module:T {
+ \stex_add_to_current_module:n { #1 }
+ \stex_do_up_to_module:n { #1 }
+}}
+\cs_generate_variant:Nn \stex_execute_in_module:n {x}
+
\cs_new_protected:Nn \stex_add_to_current_module:n {
\tl_gput_right:cn {c_stex_module_\l_stex_current_module_str _code} { #1 }
}
+\cs_generate_variant:Nn \stex_add_to_current_module:n {x}
\cs_new_protected:Npn \STEXexport {
- \begingroup
- \newlinechar=-1\relax
- \endlinechar=-1\relax
- %\catcode`\ = 9\relax
- \expandafter\endgroup\_@@_export:n
+ \ExplSyntaxOn
+ \_@@_export:n
}
\cs_new_protected:Nn \_@@_export:n {
- \ignorespaces #1
- \stex_add_to_current_module:n { \ignorespaces #1 }
+ \ignorespacesandpars#1\ExplSyntaxOff
+ \stex_add_to_current_module:n { \ignorespacesandpars#1}
\stex_smsmode_do:
}
+\let \stex_module_export_helper:n \use:n
\stex_deactivate_macro:Nn \STEXexport {module~environments}
% \end{macrocode}
% \end{macro}
@@ -342,25 +347,35 @@
% \begin{macro}{\stex_do_up_to_module:n}
% \begin{macrocode}
\int_new:N \l_@@_group_depth_int
-\tl_new:N \l_@@_aftergroup_tl
\cs_new_protected:Nn \stex_do_up_to_module:n {
\int_compare:nNnTF \l_@@_group_depth_int = \currentgrouplevel {
#1
}{
#1
- \expandafter \tl_gset:Nn \expandafter \l_@@_aftergroup_tl \expandafter { \l_@@_aftergroup_tl #1 }
+ \expandafter \tl_gset:Nn
+ \csname l_@@_aftergroup_\l_stex_current_module_str _tl
+ \expandafter\expandafter\expandafter\endcsname
+ \expandafter\expandafter\expandafter { \csname
+ l_@@_aftergroup_\l_stex_current_module_str _tl\endcsname #1 }
\aftergroup\_@@_aftergroup_do:
}
}
+\cs_generate_variant:Nn \stex_do_up_to_module:n {x}
\cs_new_protected:Nn \_@@_aftergroup_do: {
+ \stex_debug:nn{aftergroup}{\cs_meaning:c{
+ l_@@_aftergroup_\l_stex_current_module_str _tl
+ }}
\int_compare:nNnTF \l_@@_group_depth_int = \currentgrouplevel {
- \l_@@_aftergroup_tl
- \tl_clear:N \l_@@_aftergroup_tl
+ \use:c{l_@@_aftergroup_\l_stex_current_module_str _tl}
+ \tl_gclear:c{l_@@_aftergroup_\l_stex_current_module_str _tl}
}{
- \l_@@_aftergroup_tl
+ \use:c{l_@@_aftergroup_\l_stex_current_module_str _tl}
\aftergroup\_@@_aftergroup_do:
}
}
+\cs_new_protected:Nn \_stex_reset_up_to_module:n {
+ \expandafter\let\csname l_@@_aftergroup_#1_tl\endcsname\undefined
+}
% \end{macrocode}
% \end{macro}
%
@@ -381,16 +396,15 @@
% MathHub repository (if existent) and the current file.
%
% \begin{macrocode}
-\str_new:N \l_stex_modules_ns_str
-\str_new:N \l_stex_modules_subpath_str
+\str_new:N \l_stex_module_ns_str
+\str_new:N \l_stex_module_subpath_str
\cs_new_protected:Nn \_@@_compute_namespace:nN {
- \str_set:Nx \l_tmpa_str { #1 }
\seq_set_eq:NN \l_tmpa_seq #2
% split off file extension
- \seq_pop_right:NN \l_tmpa_seq \l_tmpb_str
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpb_str % <- filename
\exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq . \l_tmpb_str
- \seq_get_left:NN \l_tmpb_seq \l_tmpb_str
- \seq_put_right:No \l_tmpa_seq \l_tmpb_str
+ \seq_get_left:NN \l_tmpb_seq \l_tmpb_str % <- filename without suffixes
+ \seq_put_right:No \l_tmpa_seq \l_tmpb_str % <- file path including name without suffixes
\bool_set_true:N \l_tmpa_bool
\bool_while_do:Nn \l_tmpa_bool {
@@ -404,18 +418,19 @@
}
}
- \stex_path_to_string:NN \l_tmpa_seq \l_stex_modules_subpath_str
- \str_if_empty:NTF \l_stex_modules_subpath_str {
- \str_set_eq:NN \l_stex_modules_ns_str \l_tmpa_str
+ \stex_path_to_string:NN \l_tmpa_seq \l_stex_module_subpath_str
+ % \l_tmpa_seq <- sub-path relative to archive
+ \str_if_empty:NTF \l_stex_module_subpath_str {
+ \str_set:Nx \l_stex_module_ns_str {#1}
}{
- \str_set:Nx \l_stex_modules_ns_str {
- \l_tmpa_str/\l_stex_modules_subpath_str
+ \str_set:Nx \l_stex_module_ns_str {
+ #1/\l_stex_module_subpath_str
}
}
}
\cs_new_protected:Nn \stex_modules_current_namespace: {
- \str_clear:N \l_stex_modules_subpath_str
+ \str_clear:N \l_stex_module_subpath_str
\prop_if_exist:NTF \l_stex_current_repository_prop {
\prop_get:NnN \l_stex_current_repository_prop { ns } \l_tmpa_str
\_@@_compute_namespace:nN \l_tmpa_str \g_stex_currentfile_seq
@@ -426,7 +441,7 @@
\exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq . \l_tmpb_str
\seq_get_left:NN \l_tmpb_seq \l_tmpb_str
\seq_put_right:No \l_tmpa_seq \l_tmpb_str
- \str_set:Nx \l_stex_modules_ns_str {
+ \str_set:Nx \l_stex_module_ns_str {
file:/\stex_path_to_string:N \l_tmpa_seq
}
}
@@ -476,6 +491,7 @@
% Sets up a new module property list:
% \begin{macrocode}
\cs_new_protected:Nn \stex_module_setup:nn {
+ \int_set:Nn \l_@@_group_depth_int {\currentgrouplevel}
\str_set:Nx \l_stex_module_name_str { #2 }
\_@@_args:n { #1 }
% \end{macrocode}
@@ -493,11 +509,16 @@
\prop_item:cn {c_stex_module_\l_stex_current_module_str _prop}
{ name } / \l_stex_module_name_str
}
+ \str_if_empty:NT \l_stex_module_lang_str {
+ \str_set:Nx \l_stex_module_lang_str {
+ \prop_item:cn {c_stex_module_\l_stex_current_module_str _prop}
+ { lang }
+ }
+ }
}{
% not nested:
\str_if_empty:NT \l_stex_module_ns_str {
\stex_modules_current_namespace:
- \str_set_eq:NN \l_stex_module_ns_str \l_stex_modules_ns_str
\exp_args:NNNo \seq_set_split:Nnn \l_tmpa_seq
/ {\l_stex_module_ns_str}
\seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
@@ -517,23 +538,21 @@
\seq_get_right:NN \g_stex_currentfile_seq \l_tmpa_str
\seq_set_split:NnV \l_tmpa_seq . \l_tmpa_str
\seq_pop_right:NN \l_tmpa_seq \l_tmpa_str % .tex
+ \exp_args:No \str_if_eq:nnF \l_tmpa_str {tex} {
+ \exp_args:No \str_if_eq:nnF \l_tmpa_str {dtx} {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq \l_tmpa_str
+ }
+ }
\seq_pop_left:NN \l_tmpa_seq \l_tmpa_str % <filename>
- \seq_if_empty:NF \l_tmpa_seq { %remaining element should be language
+ \seq_if_empty:NF \l_tmpa_seq { %remaining element should be [<something>.]language
+ \seq_pop_right:NN \l_tmpa_seq \l_stex_module_lang_str
\stex_debug:nn{modules} {Language~\l_stex_module_lang_str~
inferred~from~file~name}
- \seq_pop_left:NN \l_tmpa_seq \l_stex_module_lang_str
}
}
\stex_if_smsmode:F { \str_if_empty:NF \l_stex_module_lang_str {
- \prop_get:NVNTF \c_stex_languages_prop \l_stex_module_lang_str
- \l_tmpa_str {
- \ltx@ifpackageloaded{babel}{
- \exp_args:Nx \selectlanguage { \l_tmpa_str }
- }{}
- } {
- \msg_error:nnx{stex}{error/unknownlanguage}{\l_tmpa_str}
- }
+ \exp_args:NNo \stex_set_language:Nn \l_tmpa_str \l_stex_module_lang_str
}}
% \end{macrocode}
%
@@ -555,6 +574,7 @@
}
\seq_clear:c {c_stex_module_\l_stex_module_ns_str?\l_stex_module_name_str _imports}
\seq_clear:c {c_stex_module_\l_stex_module_ns_str?\l_stex_module_name_str _constants}
+ \seq_clear:c {c_stex_module_\l_stex_module_ns_str?\l_stex_module_name_str _copymodules}
\tl_clear:c {c_stex_module_\l_stex_module_ns_str?\l_stex_module_name_str _code}
\str_set:Nx\l_stex_current_module_str{\l_stex_module_ns_str?\l_stex_module_name_str}
% \end{macrocode}
@@ -583,24 +603,29 @@
\l_stex_module_ns_str?\l_stex_module_name_str
}{\l_stex_module_sig_str}
}
-
- \seq_set_eq:NN \l_tmpa_seq \g_stex_currentfile_seq
- \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
- \seq_set_split:NnV \l_tmpb_seq . \l_tmpa_str
- \seq_pop_right:NN \l_tmpb_seq \l_tmpa_str % .tex
- \seq_pop_left:NN \l_tmpb_seq \l_tmpa_str % <filename>
- \str_set:Nx \l_tmpa_str {
- \stex_path_to_string:N \l_tmpa_seq /
- \l_tmpa_str . \l_stex_module_sig_str .tex
- }
- \IfFileExists \l_tmpa_str {
- \exp_args:No \stex_file_in_smsmode:nn { \l_tmpa_str } {
- \str_clear:N \l_stex_current_module_str
- \seq_clear:N \l_stex_all_modules_seq
- \stex_debug:nn{modules}{Loading~signature~\l_tmpa_str}
- }
+ \stex_debug:nn{modules}{Signature~\l_stex_module_sig_str~for~\l_stex_module_ns_str?\l_stex_module_name_str}
+ \stex_if_module_exists:nTF{\l_stex_module_ns_str?\l_stex_module_name_str}{
+ \stex_debug:nn{modules}{(already exists)}
}{
- \msg_error:nnx{stex}{error/unknownmodule}{for~signature~\l_tmpa_str}
+ \stex_debug:nn{modules}{(needs loading)}
+ \seq_set_eq:NN \l_tmpa_seq \g_stex_currentfile_seq
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ \seq_set_split:NnV \l_tmpb_seq . \l_tmpa_str
+ \seq_pop_right:NN \l_tmpb_seq \l_tmpa_str % .tex
+ \seq_pop_left:NN \l_tmpb_seq \l_tmpa_str % <filename>
+ \str_set:Nx \l_tmpa_str {
+ \stex_path_to_string:N \l_tmpa_seq /
+ \l_tmpa_str . \l_stex_module_sig_str .tex
+ }
+ \IfFileExists \l_tmpa_str {
+ \exp_args:No \stex_file_in_smsmode:nn { \l_tmpa_str } {
+ \str_clear:N \l_stex_current_module_str
+ \seq_clear:N \l_stex_all_modules_seq
+ \stex_debug:nn{modules}{Loading~signature}
+ }
+ }{
+ \msg_error:nnx{stex}{error/unknownmodule}{for~signature~\l_tmpa_str}
+ }
}
\stex_if_smsmode:F {
\stex_activate_module:n {
@@ -619,6 +644,7 @@
\seq_put_right:Nx \l_stex_all_modules_seq {
\l_stex_module_ns_str ? \l_stex_module_name_str
}
+ \tl_clear:c{l_@@_aftergroup_\l_stex_module_ns_str ? \l_stex_module_name_str _tl}
}
% \end{macrocode}
% \end{macro}
@@ -649,7 +675,7 @@
File:~\stex_path_to_string:N \g_stex_currentfile_seq
}
- \stex_if_smsmode:F{
+ \stex_if_do_html:T{
\begin{stex_annotate_env} {theory} {
\l_stex_module_ns_str ? \l_stex_module_name_str
}
@@ -665,7 +691,6 @@
}
}
}
- \int_set:Nn \l_@@_group_depth_int {\currentgrouplevel}
% TODO: Inherit metatheory for nested modules?
}
\iffalse \end{stex_annotate_env} \fi %^^A make syntax highlighting work again
@@ -679,6 +704,23 @@
% \begin{macrocode}
\cs_new_protected:Nn \_@@_end_module: {
\stex_debug:nn{modules}{Closing~module~\prop_item:cn {c_stex_module_\l_stex_current_module_str _prop} { name }}
+ \_stex_reset_up_to_module:n \l_stex_current_module_str
+ \stex_if_smsmode:T {
+ \stex_persist:x {
+ \prop_set_from_keyval:cn{c_stex_module_\l_stex_current_module_str _prop}{
+ \exp_after:wN \prop_to_keyval:N \csname c_stex_module_\l_stex_current_module_str _prop\endcsname
+ }
+ \seq_set_from_clist:cn{c_stex_module_\l_stex_current_module_str _constants}{
+ \seq_use:cn{c_stex_module_\l_stex_current_module_str _constants},
+ }
+ \seq_set_from_clist:cn{c_stex_module_\l_stex_current_module_str _imports}{
+ \seq_use:cn{c_stex_module_\l_stex_current_module_str _imports},
+ }
+ \tl_set:cn {c_stex_module_\l_stex_current_module_str _code}
+ }
+ \exp_after:wN \let \exp_after:wN \l_tmpa_tl \csname c_stex_module_\l_stex_current_module_str _code\endcsname
+ \exp_after:wN \stex_persist:n \exp_after:wN { \exp_after:wN { \l_tmpa_tl } }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -689,8 +731,11 @@
\iffalse \begin{stex_annotate_env} \fi %^^A make syntax highlighting work again
\NewDocumentEnvironment { smodule } { O{} m } {
\stex_module_setup:nn{#1}{#2}
- \par
+ %\par
\stex_if_smsmode:F{
+ \tl_if_empty:NF \smoduletitle {
+ \exp_args:No \stex_document_title:n \smoduletitle
+ }
\tl_clear:N \l_tmpa_tl
\clist_map_inline:Nn \smoduletype {
\tl_if_exist:cT {_@@_smodule_##1_start:}{
@@ -804,9 +849,6 @@
\bool_set_false:N \l_stex_in_meta_bool
\cs_new_protected:Nn \stex_activate_module:n {
\stex_debug:nn{modules}{Activating~module~#1}
- \seq_if_in:NnT \l_stex_implicit_morphisms_seq { #1 }{
- \msg_error:nnn{stex}{error/conflictingmodules}{ #1 }
- }
\exp_args:NNx \seq_if_in:NnF \l_stex_all_modules_seq { #1 } {
\seq_put_right:Nx \l_stex_all_modules_seq { #1 }
\use:c{ c_stex_module_#1_code }
@@ -820,5 +862,6 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-others.dtx b/macros/latex/contrib/stex/source/stex/stex-others.dtx
index 96d79939af..e22aa88590 100644
--- a/macros/latex/contrib/stex/source/stex/stex-others.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-others.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -73,6 +73,30 @@
\@ifpackageloaded{tikzinput}{
\RequirePackage{stex-tikzinput}
}{}
+
+\bool_if:NT \c_stex_persist_mode_bool {
+ \let\__stex_notation_restore_notation_old:nnnnn
+ \__stex_notation_restore_notation:nnnnn
+ \def\__stex_notation_restore_notation_new:nnnnn#1#2#3#4#5{
+ \__stex_notation_restore_notation_old:nnnnn{#1}{#2}{#3}{#4}{#5}
+ \ExplSyntaxOn
+ }
+ \def\__stex_notation_restore_notation:nnnnn{
+ \ExplSyntaxOff
+ \catcode`~10
+ \__stex_notation_restore_notation_new:nnnnn
+ }
+ \input{\jobname.sms}
+ \let\__stex_notation_restore_notation:nnnnn
+ \__stex_notation_restore_notation_old:nnnnn
+ \prop_if_exist:NT\c_stex_mathhub_main_manifest_prop{
+ \prop_get:NnN \c_stex_mathhub_main_manifest_prop {id}
+ \l_tmpa_str
+ \prop_set_eq:cN { c_stex_mathhub_\l_tmpa_str _manifest_prop }
+ \c_stex_mathhub_main_manifest_prop
+ \exp_args:Nx \stex_set_current_repository:n { \l_tmpa_str }
+ }
+}
% \end{macrocode}
%
%
@@ -82,5 +106,6 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-proofs.dtx b/macros/latex/contrib/stex/source/stex/stex-proofs.dtx
index c4bf4e48fb..c2cdb3b54e 100644
--- a/macros/latex/contrib/stex/source/stex/stex-proofs.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-proofs.dtx
@@ -1,16 +1,16 @@
% \iffalse meta-comment
% An Infrastructure for Structural Markup for Proofs
% Copyright (c) 2019 Michael Kohlhase, all rights reserved
-% this file is released under the
-% LaTeX Project Public License (LPPL)
-%
+% this file is released under the
+% LaTeX Project Public License (LPPL)
+%
% The original of this file is in the public repository at
% http://github.com/sLaTeX/sTeX/
-% \fi
-%
-% \iffalse
+%
+% TODO update copyright
+%
%<*driver>
-\def\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -18,305 +18,46 @@
\end{document}
%</driver>
% \fi
-%
-% \iffalse\CheckSum{341}\fi
%
-% ^^A \changes{v0.9}{2005/06/14}{First Version with Documentation}
-%
% \GetFileInfo{sproof.sty}
%
-% \title{\sTeX-Proofs: Structural Markup for Proofs\thanks{Version {\fileversion} (last revised
-% {\filedate})}}
-% \author{Michael Kohlhase, Dennis Müller\\
-% FAU Erlangen-N\"urnberg\\
-% \url{http://kwarc.info/kohlhase}}
+% \title{\sTeX-Proofs: Structural Markup for Proofs\thanks{Version {\fileversion} (last revised {\filedate})}
+% }
+%
+% \author{Michael Kohlhase, Dennis Müller\\
+% FAU Erlangen-Nürnberg\\
+% \url{http://kwarc.info/}
+%c }
+%
% \maketitle
%
%\ifinfulldoc\else
-% This is the documentation for the \pkg{stex-proofs} package.
-% For a more high-level introduction,
-% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \begin{abstract}
+% This is the documentation for the \pkg{stex-proofs} package.
+%
+% The |sproof| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} that
+% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document
+% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical
+% knowledge management (MKM).
+%
+% The \pkg{stex-proofs} package supplies macros and environment that allow to annotate the
+% structure of mathematical proofs in {\stex} files. This structure can be used by MKM
+% systems for added-value services, either directly from the \sTeX sources, or after
+% translation.
+%
+% For a more high-level introduction, see \href{\basedocurl/manual.pdf}{the \sTeX Manual}
+% or the \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \end{abstract}
+%
+% \tableofcontents
%
% \input{../../doc/packages/stex-proofs}
% \fi
%
% \begin{documentation}
-%
-% The |sproof| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} that
-% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document
-% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical
-% knowledge management (MKM).
-%
-% This package supplies macros and environment that allow to annotate the structure of
-% mathematical proofs in {\stex} files. This structure can be used by MKM systems for
-% added-value services, either directly from the \sTeX sources, or after translation.
-%
-% \newpage\tableofcontents\newpage
-%
-%\section{Introduction}\label{sec:sproof}
-%
-% The |sproof| ({\twintoo{semantic}{proofs}}) package supplies macros and environment that
-% allow to annotate the structure of mathematical proofs in {\stex} files. This structure
-% can be used by MKM systems for added-value services, either directly from the \sTeX
-% sources, or after translation. Even though it is part of the {\stex} collection, it can
-% be used independently, like it's sister package |statements|.
-%
-% {\stex} is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents
-% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} into
-% a document format for mathematical knowledge management (MKM).
-%
-% \begin{exfig}\scriptsize
-% \begin{verbatim}
-% \begin{sproof}[id=simple-proof]
-% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$}
-% \begin{spfcases}{For the induction we have to consider the following cases:}
-% \begin{spfcase}{$n=1$}
-% \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep}
-% \end{spfcase}
-% \begin{spfcase}{$n=2$}
-% \begin{sproofcomment}[type=inline]
-% This case is not really necessary, but we do it for the
-% fun of it (and to get more intuition).
-% \end{sproofcomment}
-% \begin{spfstep}[type=inline] We compute $1+3=2^{2}=4$.\end{spfstep}
-% \end{spfcase}
-% \begin{spfcase}{$n>1$}
-% \begin{spfstep}[type=assumption,id=ind-hyp]
-% Now, we assume that the assertion is true for a certain $k\geq 1$,
-% i.e. $\sum_{i=1}^k{(2i-1)}=k^{2}$.
-% \end{spfstep}
-% \begin{sproofcomment}
-% We have to show that we can derive the assertion for $n=k+1$ from
-% this assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$.
-% \end{sproofcomment}
-% \begin{spfstep}
-% We obtain $\sum_{i=1}^{k+1}{2i-1}=\sum_{i=1}^k{2i-1}+2(k+1)-1$
-% \begin{justification}[method=arith:split-sum]
-% by splitting the sum.
-% \end{justification}
-% \end{spfstep}
-% \begin{spfstep}
-% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$
-% \begin{justification}[method=fertilize]
-% by inductive hypothesis.
-% \end{justification}
-% \end{spfstep}
-% \begin{spfstep}[type=conclusion]
-% We can \begin{justification}[method=simplify]simplify\end{justification}
-% the right-hand side to ${k+1}^2$, which proves the assertion.
-% \end{spfstep}
-% \end{spfcase}
-% \begin{spfstep}[type=conclusion]
-% We have considered all the cases, so we have proven the assertion.
-% \end{spfstep}
-% \end{spfcases}
-% \end{sproof}
-% \end{verbatim}
-% \vspace*{-.5cm}
-% \caption{A very explicit proof, marked up semantically}\label{fig:proof:src}
-% \end{exfig}
-%
-% We will go over the general intuition by way of our running example (see
-% Figure~\ref{fig:proof:src} for the source and Figure~\ref{fig:proof:result} for the
-% formatted result).\ednote{talk a bit more about proofs and their structure,... maybe
-% copy from OMDoc spec. }
-%
-% \section{The User Interface}
-%
-% \subsection{Package Options}\label{sec:user:options}
-%
-% The |sproof| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If
-% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys} for details
-% and customization options).
-%
-% \subsection{Proofs and Proof steps}
-%
-% \DescribeEnv{sproof} The |proof| environment is the main container for proofs. It takes
-% an optional |KeyVal| argument that allows to specify the |id| (identifier) and |for|
-% (for which assertion is this a proof) keys. The regular argument of the |proof|
-% environment contains an introductory comment, that may be used to announce the proof
-% style. The |proof| environment contains a sequence of |\step|, |proofcomment|, and
-% |pfcases| environments that are used to markup the proof steps. The |proof| environment
-% has a variant |Proof|, which does not use the proof end marker. This is convenient, if a
-% proof ends in a case distinction, which brings it's own proof end marker with it.
-% \DescribeEnv{sProof} The |Proof| environment is a variant of |proof| that does not mark
-% the end of a proof with a little box; presumably, since one of the subproofs already has
-% one and then a box supplied by the outer proof would generate an otherwise empty line.
-% \DescribeMacro{\spfidea} The |\spfidea| macro allows to give a one-paragraph
-% description of the proof idea.
-%
-% For one-line proof sketches, we use the \DescribeMacro{spfsketch}|\spfsketch| macro,
-% which takes the |KeyVal| argument as |sproof| and another one: a natural language text
-% that sketches the proof.
-%
-% \DescribeEnv{spfstep} Regular proof steps are marked up with the |step| environment, which
-% takes an optional |KeyVal| argument for annotations. A proof step usually contains a
-% local assertion (the text of the step) together with some kind of evidence that this can
-% be derived from already established assertions.
-%
-% Note that both |\premise| and |\justarg| can be used with an empty second argument to
-% mark up premises and arguments that are not explicitly mentioned in the text.
-%
-% \begin{exfig}
-% \begin{sproof}[id=simple-proof]
-% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$}
-% \begin{spfcases}{For the induction we have to consider the following cases:}
-% \begin{spfcase}{$n=1$}
-% \begin{spfstep}[type=inline] then we compute $1=1^2$\end{spfstep}
-% \end{spfcase}
-% \begin{spfcase}{$n=2$}
-% \begin{sproofcomment}[type=inline]
-% This case is not really necessary, but we do it for the fun
-% of it (and to get more intuition).
-% \end{sproofcomment}
-% \begin{spfstep}[type=inline]
-% We compute $1+3=2^{2}=4$
-% \end{spfstep}
-% \end{spfcase}
-% \begin{spfcase}{$n>1$}
-% \begin{spfstep}[type=hypothesis,id=ind-hyp]
-% Now, we assume that the assertion is true for a certain $k\geq 1$, i.e.
-% $\sum_{i=1}^k{(2i-1)}=k^{2}$.
-% \end{spfstep}
-% \begin{sproofcomment}
-% We have to show that we can derive the assertion for $n=k+1$ from this
-% assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$.
-% \end{sproofcomment}
-% \begin{spfstep}[id=splitit]
-% We obtain $\sum_{i=1}^{k+1}{(2i-1)}=\sum_{i=1}^k{(2i-1)}+2(k+1)-1$
-% \begin{justification}[method=arith:split-sum]
-% by splitting the sum
-% \end{justification}
-% \end{spfstep}
-% \begin{spfstep}[id=byindhyp]
-% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$
-% \begin{justification}[method=fertilize]
-% by \premise[ind-hyp]{inductive hypothesis}.
-% \end{justification}
-% \end{spfstep}
-% \begin{spfstep}[type=conclusion]
-% We can \begin{justification}[method=simplify-eq]
-% simplify the {\justarg[rhs]{right-hand side}}
-% \end{justification} to $(k+1)^2$, which proves the assertion.
-% \end{spfstep}
-% \end{spfcase}
-% \begin{spfstep}[type=conclusion]
-% We have considered all the cases, so we have proven the assertion.
-% \end{spfstep}
-% \end{spfcases}
-% \end{sproof}
-% \caption{The formatted result of the proof in Figure~\ref{fig:proof:src}}\label{fig:proof:result}
-% \end{exfig}
-%
-% \subsection{Justifications}
+% \changes{v0.9}{2022/02/14}{Moved over from the \pkg{sproofs} package}
%
-% \DescribeEnv{justification} This evidence is marked up with the |justification|
-% environment in the |sproof| package. This environment totally invisible to the formatted
-% result; it wraps the text in the proof step that corresponds to the evidence. The
-% environment takes an optional |KeyVal| argument, which can have the |method| key, whose
-% value is the name of a proof method (this will only need to mean something to the
-% application that consumes the semantic annotations). Furthermore, the justification can
-% contain ``premises'' (specifications to assertions that were used justify the step) and
-% ``arguments'' (other information taken into account by the proof method).
-%
-% \DescribeMacro{\premise} The |\premise| macro allows to mark up part of the text as
-% reference to an assertion that is used in the argumentation. In the example in
-% Figure~\ref{fig:proof:src} we have used the |\premise| macro to identify the inductive
-% hypothesis.
%
-% \DescribeMacro{\justarg} The |\justarg| macro is very similar to |\premise| with the
-% difference that it is used to mark up arguments to the proof method. Therefore the
-% content of the first argument is interpreted as a mathematical object rather than as an
-% identifier as in the case of |\premise|. In our example, we specified that the
-% simplification should take place on the right hand side of the equation. Other examples
-% include proof methods that instantiate. Here we would indicate the substituted object in
-% a |\justarg| macro.
-%
-% \subsection{Proof Structure}
-%
-% \DescribeEnv{subproof} The |pfcases| environment is used to mark up a subproof. This
-% environment takes an optional |KeyVal| argument for semantic annotations and a second
-% argument that allows to specify an introductory comment (just like in the |proof|
-% environment). The \DescribeMacro{method}|method| key can be used to give the name of the
-% proof method executed to make this subproof.
-%
-% \DescribeEnv{spfcases} The |pfcases| environment is used to mark up a proof by
-% cases. Technically it is a variant of the |subproof| where the |method| is
-% |by-cases|. Its contents are |spfcase| environments that mark up the cases one by one.
-%
-% \DescribeEnv{spfcase} The content of a |pfcases| environment are a sequence of case
-% proofs marked up in the |pfcase| environment, which takes an optional |KeyVal| argument
-% for semantic annotations. The second argument is used to specify the the description of
-% the case under consideration. The content of a |pfcase| environment is the same as that
-% of a |proof|, i.e. |step|s, |proofcomment|s, and |pfcases|
-% environments. \DescribeMacro{\spfcasesketch}|\spfcasesketch| is a variant of the |spfcase|
-% environment that takes the same arguments, but instead of the |spfstep|s in the body
-% uses a third argument for a proof sketch.
-%
-% \DescribeEnv{sproofcomment} The |proofcomment| environment is much like a |step|, only
-% that it does not have an object-level assertion of its own. Rather than asserting some
-% fact that is relevant for the proof, it is used to explain where the proof is going,
-% what we are attempting to to, or what we have achieved so far. As such, it cannot be the
-% target of a |\premise|.
-%
-% \subsection{Proof End Markers}
-%
-% Traditionally, the end of a mathematical proof is marked with a little box at the end of
-% the last line of the proof (if there is space and on the end of the next line if there
-% isn't), like so:\sproofend
-%
-% The |sproof| package provides the \DescribeMacro{\sproofend}|\sproofend| macro for
-% this. If a different symbol for the proof end is to be used (e.g. {\sl{q.e.d}}), then
-% this can be obtained by specifying it using the
-% \DescribeMacro{\sProofEndSymbol}|\sProofEndSymbol| configuration macro (e.g. by specifying
-% |\sProofEndSymbol{q.e.d}|).
-%
-% Some of the proof structuring macros above will insert proof end symbols for sub-proofs,
-% in most cases, this is desirable to make the proof structure explicit, but sometimes
-% this wastes space (especially, if a proof ends in a case analysis which will supply its
-% own proof end marker). To suppress it locally, just set |proofend={}| in them or use use
-% |\sProofEndSymbol{}|.
-%
-% \subsection{Configuration of the Presentation}\label{sec:user:conf}
-%
-% Finally, we provide configuration hooks in Figure~\ref{fig:hooks} for the keywords in
-% proofs. These are mainly intended for package authors building on |statements|, e.g. for
-% multi-language support.\ednote{we might want to develop an extension
-% \texttt{sproof-babel} in the future.}.
-%\begin{figure}[ht]\centering
-% \begin{tabular}{|lll|}\hline
-% Environment & configuration macro & value\\\hline\hline
-% \texttt{sproof} & \texttt{\textbackslash spf@proof@kw} & \makeatletter\spf@proof@kw\\\hline
-% \texttt{sketchproof} & \texttt{\textbackslash spf@sketchproof@kw} & \makeatletter\spf@proofsketch@kw\\\hline
-% \end{tabular}
-% \caption{Configuration Hooks for Semantic Proof Markup}\label{fig:hooks}
-% \end{figure}
-% The proof step labels can be customized via the
-% \DescribeMacro{\pstlabelstyle}|\pstlabelstyle| macro: |\pstlabelstyle{|\meta{style}|}|
-% sets the style; see Figure~\ref{fig:pstlabel} for an overview of styles. Package writers
-% can add additional styles by adding a macro |\pst@make@label@|\meta{style} that takes
-% two arguments: a comma-separated list of ordinals that make up the prefix and the current
-% ordinal. Note that comma-separated lists can be conveniently iterated over by the
-% {\LaTeX} |\@for|\ldots|:=|\ldots|\do{|\ldots|}| macro; see Figure~\ref{fig:pstlabel} for
-% examples.
-%
-% \section{Limitations}\label{sec:limitations}
-%
-% In this section we document known limitations. If you want to help alleviate them,
-% please feel free to contact the package author. Some of them are currently discussed in
-% the \sTeX issue tracker at \cite{sTeX:github:on}.
-% \begin{enumerate}
-% \item The numbering scheme of proofs cannot be changed. It is more geared for teaching
-% proof structures (the author's main use case) and not for writing papers.\lec{reported
-% by Tobias Pfeiffer (fixed)}
-% \item currently proof steps are formatted by the {\LaTeX} |description| environment. We
-% would like to configure this, e.g. to use the |inparaenum| environment for more
-% condensed proofs. I am just not sure what the best user interface would be I can
-% imagine redefining an internal environment |spf@proofstep@list| or adding a key
-% |prooflistenv| to the |proof| environment that allows to specify the environment
-% directly. Maybe we should do both.
-% \end{enumerate}
%
% \end{documentation}
%
@@ -324,12 +65,6 @@
%
% \section{The Implementation}
%
-% \subsection{Package Options}\label{sec:impl:options}
-%
-% We declare some switches which will modify the behavior according to the package
-% options. Generally, an option |xxx| will just set the appropriate switches to true
-% (otherwise they stay false).\ednote{need an implementation for {\latexml}}
-%
% \begin{macrocode}
%<*package>
%<@@=stex_sproof>
@@ -385,15 +120,6 @@
% not do automatic numbering, and we have to add keyword arguments all over the place, to
% accomodate semantic information.
%
-% \begin{environment}{pst@with@label}
-% This environment manages\footnote{This gets the labeling right but only works 8 levels
-% deep} the path labeling of the proof steps in the description environment of the
-% outermost |proof| environment. The argument is the label prefix up to now; which we
-% cache in |\pst@label| (we need evaluate it first, since are in the right place
-% now!). Then we increment the proof depth which is stored in |\count10| (lower counters
-% are used by {\TeX} for page numbering) and initialize the next level counter
-% |\count\count10| with 1. In the end call for this environment, we just decrease the
-% proof depth counter by 1 again.
% \begin{macrocode}
\intarray_new:Nn\l_@@_counter_intarray{50}
\cs_new_protected:Npn \sproofnumber {
@@ -449,8 +175,6 @@
\intarray_gset:Nnn \l_@@_counter_intarray \l_tmpa_int { 0 }
}
% \end{macrocode}
-% \end{environment}
-%
%
%\begin{macro}{\sproofend}
% This macro places a little box at the end of the line if there is space, or at the
@@ -725,7 +449,7 @@
}
\cs_new_protected:Nn \_@@_sproof_end: {\sproofend}
-\newcommand\stexpatchsproof[3][] {
+\newcommand\stexpatchproof[3][] {
\str_set:Nx \l_tmpa_str{ #1 }
\str_if_empty:NTF \l_tmpa_str {
\tl_set:Nn \_@@_sproof_start: { #2 }
@@ -767,6 +491,17 @@
}
}{
\@in@omtexttrue
+ \clist_set:No \l_tmpa_clist \spftype
+ \tl_set:Nn \l_tmpa_tl {
+ \item[\sproofnumber]
+ \bool_set_true:N \l_@@_inc_counter_bool
+ }
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \exp_args:No \str_if_eq:nnT \c_@@_flow_str {##1} {
+ \tl_clear:N \l_tmpa_tl
+ }
+ }
+ \l_tmpa_tl
\seq_clear:N \l_tmpa_seq
\clist_map_inline:Nn \l_@@_spf_for_clist {
\tl_if_empty:nF{ ##1 }{
@@ -781,17 +516,6 @@
\str_if_empty:NF \spftype {
\stex_annotate_invisible:nnn{type}{\spftype}{}
}
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl {
- \item[\sproofnumber]
- \bool_set_true:N \l_@@_inc_counter_bool
- }
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c_@@_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
- }
- }
- \l_tmpa_tl
\tl_if_empty:NF \spftitle {
{(\titleemph{\spftitle})\enspace}
}
@@ -812,9 +536,9 @@
% \end{macrocode}
% \end{environment}
%
-% \begin{environment}{sproofcomment}
+% \begin{environment}{spfcomment}
% \begin{macrocode}
-\newenvironment{sproofcomment}[1][]{
+\newenvironment{spfcomment}[1][]{
\_@@_spf_args:n{#1}
\clist_set:No \l_tmpa_clist \spftype
\tl_set:Nn \l_tmpa_tl {
@@ -1001,11 +725,11 @@
% arguments for now and only display the content.\ednote{need to do something about the
% premise in draft mode.}
%
-% \begin{environment}{justification}
+% \begin{macro}{\spfjust}
% \begin{macrocode}
-\newenvironment{justification}[1][]{}{}
+\newcommand\spfjust[1][]{}
% \end{macrocode}
-% \end{environment}
+% \end{macro}
%
% \begin{macro}{\premise}
% \begin{macrocode}
@@ -1023,31 +747,10 @@
% \end{macro}
% \end{implementation}
% \Finale
+% \ifinfulldoc\else\printbibliography\fi
\endinput
+
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End:
-% LocalWords: GPL structuresharing STR sproof dtx CPERL keyval methodfalse env
-% LocalWords: methodtrue envtrue medhodtrue DefKeyVal Semiverbatim omdoc args
-% LocalWords: DefEnvironment OptionalKeyVals KeyVal omtext DefConstructor str
-% LocalWords: proofidea KeyVal pfstep DefCMPEnvironment KeyVal proofcomment eq
-% LocalWords: KeyVal pfcases KeyVal pfcase KeyVal extractBodyText unlist elsif
-% LocalWords: foreach getBody toString str str str LookupValue LastSeenCMP Thu
-% LocalWords: appendText getValue undef openElement closeElement DefMacro omd
-% LocalWords: afterClose nodeType childNodes firstCMP localname hasChildNodes
-% LocalWords: firstChild textContent removeChild iffalse kohlhase sref scsys
-% LocalWords: sproofs.sty sc sc mathml openmath latexml cmathml activemath geq
-% LocalWords: twintoo atwin atwintoo texttt fileversion maketitle stex newpage
-% LocalWords: tableofcontents newpage exfig scriptsize vspace ednote spfidea
-% LocalWords: spfidea spfsketch spfsketch spfstep justarg spfcases spfcase rhs
-% LocalWords: sproofcomment ind-hyp splitit arith byindhyp sproofend proofend
-% LocalWords: printbibliography textsf langle textsf langle ltxml ctancite spf
-% LocalWords: srefaddidkey pf.sty newenvironment hbox vrule vbox ifx showmeta
-% LocalWords: hrule vskip hrule vrule hfil nobreak hfill smallskip newcommand
-% LocalWords: stDMemph newcount endsproof xref doctex showmeta hline lec ldots
-% LocalWords: textbackslash makeatletter sketchproof compactenum tracissue
-% LocalWords: metakeys addmetakey metasetkeys stylable pstlabelstyle pstlabel
-% LocalWords: pstlabelstyle pstlabelstyle ldots ldots ensuremath inparaenum
-% LocalWords: nameuse prooflistenv spfcasesketch spfcasesketch spfeq rcll
-% LocalWords: displaymath noindent ignorespaces
diff --git a/macros/latex/contrib/stex/source/stex/stex-references.dtx b/macros/latex/contrib/stex/source/stex/stex-references.dtx
index ad94bbedb3..96506e71f1 100644
--- a/macros/latex/contrib/stex/source/stex/stex-references.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-references.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -100,7 +100,7 @@
% \begin{function}{\sref}
% \begin{syntax} \cs{sref}|[|\meta{opt-args}|]|\Arg{id} \end{syntax}
% References the label with if \meta{id}.
-% Optional arguments: TODO
+% Optional arguments: \textcolor{red}{TODO}
% \end{function}
%
% \begin{function}{\srefsym}
@@ -148,10 +148,10 @@
%
% \begin{macrocode}
%\iow_new:N \c_@@_refs_iow
-\AddToHook{begindocument}{
+\AtBeginDocument{
% \iow_open:Nn \c_@@_refs_iow {\jobname.sref}
}
-\AddToHook{enddocument}{
+\AtEndDocument{
% \iow_close:N \c_@@_refs_iow
}
% \end{macrocode}
@@ -356,7 +356,7 @@
\str_if_empty:NF \l_@@_curr_label_str {
\str_gset_eq:cN {sref_sym_#1_label_str}\l_@@_curr_label_str
\immediate\write\@auxout{
- \exp_not:N\expandafter\def\exp_not:N\csname sref_sym_#1_label_str\exp_not:N\endcsname{
+ \exp_not:N\expandafter\def\exp_not:N\csname \exp_not:N\detokenize{sref_sym_#1_label_str}\exp_not:N\endcsname{
\l_@@_curr_label_str
}
}
@@ -521,5 +521,6 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-statements.dtx b/macros/latex/contrib/stex/source/stex/stex-statements.dtx
index 83e2fbf92b..6a66eb80e7 100644
--- a/macros/latex/contrib/stex/source/stex/stex-statements.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-statements.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -40,6 +40,8 @@
% \fi
%
% \begin{documentation}\label{pkg:statements:doc}
+% \changes{3.1.0}{2022/02/28}{Added \detokenize{\definiendum} and related macros to \detokenize{sparagraph},
+% if \detokenize{type=symdoc}}
%
% Code related to statements, e.g. definitions, theorems
%
@@ -110,7 +112,7 @@
}
% TODO root
- \rustex_if:TF {
+ \stex_html_backend:TF {
\stex_annotate:nnn { definiendum } { \l_stex_get_symbol_uri_str } { \l_tmpa_tl }
} {
\exp_args:Nnx \defemph@uri { \l_tmpa_tl } { \l_stex_get_symbol_uri_str }
@@ -131,13 +133,15 @@
\str_set:Nx \l_tmpa_str {
\prop_item:cn { l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop } { name }
}
- \exp_args:NNno \str_replace_all:Nnn \l_tmpa_str {-} {~}
- \rustex_if:TF {
- \stex_annotate:nnn { definiendum } { \l_stex_get_symbol_uri_str } {
- \l_tmpa_str\l_@@_definiendum_post_tl
+ \str_replace_all:Nnn \l_tmpa_str {-} {~}
+ \stex_html_backend:TF {
+ \stex_if_do_html:T {
+ \stex_annotate:nnn { definiendum } { \l_stex_get_symbol_uri_str } {
+ \l_tmpa_str\l_@@_definiendum_post_tl
}
+ }
} {
- \defemph@uri {
+ \exp_args:Nnx \defemph@uri {
\l_tmpa_str\l_@@_definiendum_post_tl
} { \l_stex_get_symbol_uri_str }
}
@@ -152,12 +156,14 @@
}
\exp_args:NNno \str_replace_all:Nnn \l_tmpa_str {-} {~}
\stex_ref_new_sym_target:n \l_stex_get_symbol_uri_str
- \rustex_if:TF {
- \stex_annotate:nnn { definiendum } { \l_stex_get_symbol_uri_str } {
- \l_tmpa_str\l__stex_statements_definiendum_post_tl
- }
+ \stex_html_backend:TF {
+ \stex_if_do_html:T {
+ \stex_annotate:nnn { definiendum } { \l_stex_get_symbol_uri_str } {
+ \exp_after:wN \stex_capitalize:n \l_tmpa_str\l__stex_statements_definiendum_post_tl
+ }
+ }
} {
- \defemph@uri {
+ \exp_args:Nnx \defemph@uri {
\exp_after:wN \stex_capitalize:n \l_tmpa_str\l__stex_statements_definiendum_post_tl
} { \l_stex_get_symbol_uri_str }
}
@@ -165,18 +171,51 @@
\stex_deactivate_macro:Nn \Definame {definition~environments}
\NewDocumentCommand \premise { m }{
- \stex_annotate:nnn{ premise }{}{ #1 }
+ \noindent\stex_annotate:nnn{ premise }{}{\ignorespaces #1 }
}
\NewDocumentCommand \conclusion { m }{
- \stex_annotate:nnn{ conclusion }{}{ #1 }
+ \noindent\stex_annotate:nnn{ conclusion }{}{\ignorespaces #1 }
}
-\NewDocumentCommand \definiens { m }{
- \stex_annotate:nnn{ definiens }{}{ #1 }
+\NewDocumentCommand \definiens { O{} m }{
+ \str_clear:N \l_stex_get_symbol_uri_str
+ \tl_if_empty:nF {#1} {
+ \stex_get_symbol:n { #1 }
+ }
+ \str_if_empty:NT \l_stex_get_symbol_uri_str {
+ \int_compare:nNnTF {\clist_count:N \l_@@_sdefinition_for_clist} = 1 {
+ \str_set:Nx \l_stex_get_symbol_uri_str {\clist_item:Nn \l_@@_sdefinition_for_clist 1}
+ }{
+ % TODO throw error
+ }
+ }
+ \str_if_eq:eeT {\prop_item:cn {l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop}{module}}
+ {\l_stex_current_module_str}{
+ \str_if_eq:eeF {\prop_item:cn {l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop}{defined}}
+ {true}{
+ \prop_put:cnn{l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop}{defined}{true}
+ \exp_args:Nx \stex_add_to_current_module:n {
+ \prop_put:cnn{l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop}{defined}{true}
+ }
+ }
+ }
+ \stex_annotate:nnn{ definiens }{\l_stex_get_symbol_uri_str}{ #2 }
+}
+
+\NewDocumentCommand \varbindforall {m}{
+ \stex_symbol_or_var:n {#1}
+ \bool_if:NTF\l_stex_symbol_or_var_bool{
+ \stex_if_do_html:T {
+ \stex_annotate_invisible:nnn {bindtype}{forall,\l_stex_get_symbol_uri_str}{}
+ }
+ }{
+ % todo throw error
+ }
}
\stex_deactivate_macro:Nn \premise {definition,~example~or~assertion~environments}
\stex_deactivate_macro:Nn \conclusion {example~or~assertion~environments}
\stex_deactivate_macro:Nn \definiens {definition~environments}
+\stex_deactivate_macro:Nn \varbindforall {definition~or~assertion~environments}
% \end{macrocode}
% \end{macro}
@@ -207,20 +246,25 @@
\stex_reactivate_macro:N \Definame
\stex_reactivate_macro:N \premise
\stex_reactivate_macro:N \definiens
+ \stex_reactivate_macro:N \varbindforall
\stex_if_smsmode:F{
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sdefinition_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
+ \clist_set_from_seq:NN \l_@@_sdefinition_for_clist \l_tmpb_seq
\exp_args:Nnnx
- \begin{stex_annotate_env}{definition}{\seq_use:Nn \l_tmpa_seq {,}}
+ \begin{stex_annotate_env}{definition}{\seq_use:Nn \l_tmpb_seq {,}}
\str_if_empty:NF \sdefinitiontype {
- \stex_annotate_invisible:nnn{type}{\sdefinitiontype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sdefinitiontype}{}
+ }
+ \str_if_empty:NF \sdefinitionname {
+ \stex_annotate_invisible:nnn{statementname}{\sdefinitionname}{}
}
\clist_set:No \l_tmpa_clist \sdefinitiontype
\tl_clear:N \l_tmpa_tl
@@ -238,7 +282,9 @@
\stex_ref_new_doc_target:n \sdefinitionid
\stex_smsmode_do:
}{
- \str_if_empty:NF \sdefinitionname { \stex_symdecl_do:nn{}{\sdefinitionname} }
+ \stex_suppress_html:n {
+ \str_if_empty:NF \sdefinitionname { \stex_symdecl_do:nn{}{\sdefinitionname} }
+ }
\stex_if_smsmode:F {
\clist_set:No \l_tmpa_clist \sdefinitiontype
\tl_clear:N \l_tmpa_tl
@@ -261,11 +307,11 @@
% \begin{macro}{\stexpatchdefinition}
% \begin{macrocode}
\cs_new_protected:Nn \_@@_sdefinition_start: {
- \par\noindent\titleemph{Definition\tl_if_empty:NF \sdefinitiontitle {
+ \stex_par:\noindent\titleemph{Definition\tl_if_empty:NF \sdefinitiontitle {
~(\sdefinitiontitle)
}~}
}
-\cs_new_protected:Nn \_@@_sdefinition_end: {\par\medskip}
+\cs_new_protected:Nn \_@@_sdefinition_end: {\stex_par:\medskip}
\newcommand\stexpatchdefinition[3][] {
\str_set:Nx \l_tmpa_str{ #1 }
@@ -304,26 +350,31 @@
\stex_reactivate_macro:N \Definame
\stex_reactivate_macro:N \premise
\stex_reactivate_macro:N \definiens
+ \stex_reactivate_macro:N \varbindforall
\stex_ref_new_doc_target:n \sdefinitionid
- \stex_if_smsmode:TF{
+ \stex_if_smsmode:TF{\stex_suppress_html:n {
\str_if_empty:NF \sdefinitionname { \stex_symdecl_do:nn{}{\sdefinitionname} }
- }{
- \seq_clear:N \l_tmpa_seq
+ }}{
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sdefinition_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
+ \clist_set_from_seq:NN \l_@@_sdefinition_for_clist \l_tmpb_seq
\exp_args:Nnx
- \stex_annotate:nnn{definition}{\seq_use:Nn \l_tmpa_seq {,}}{
+ \stex_annotate:nnn{definition}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sdefinitiontype {
- \stex_annotate_invisible:nnn{type}{\sdefinitiontype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sdefinitiontype}{}
}
#2
- \str_if_empty:NF \sdefinitionname { \stex_symdecl_do:nn{}{\sdefinitionname} }
+ \str_if_empty:NF \sdefinitionname {
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sdefinitionname}}
+ \stex_annotate_invisible:nnn{statementname}{\sdefinitionname}{}
+ }
}
}
\endgroup
@@ -359,21 +410,25 @@
\_@@_sassertion_args:n{ #1 }
\stex_reactivate_macro:N \premise
\stex_reactivate_macro:N \conclusion
+ \stex_reactivate_macro:N \varbindforall
\stex_if_smsmode:F {
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sassertion_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnnx
- \begin{stex_annotate_env}{assertion}{\seq_use:Nn \l_tmpa_seq {,}}
+ \begin{stex_annotate_env}{assertion}{\seq_use:Nn \l_tmpb_seq {,}}
\str_if_empty:NF \sassertiontype {
\stex_annotate_invisible:nnn{type}{\sassertiontype}{}
}
+ \str_if_empty:NF \sassertionname {
+ \stex_annotate_invisible:nnn{statementname}{\sassertionname}{}
+ }
\clist_set:No \l_tmpa_clist \sassertiontype
\tl_clear:N \l_tmpa_tl
\clist_map_inline:Nn \l_tmpa_clist {
@@ -397,7 +452,7 @@
\stex_smsmode_do:
}{
\str_if_empty:NF \sassertionname {
- \stex_symdecl_do:nn{}{\sassertionname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sassertionname}}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sassertionname}
}
\stex_if_smsmode:F {
@@ -423,11 +478,11 @@
% \begin{macrocode}
\cs_new_protected:Nn \_@@_sassertion_start: {
- \par\noindent\titleemph{Assertion~\tl_if_empty:NF \sassertiontitle {
+ \stex_par:\noindent\titleemph{Assertion~\tl_if_empty:NF \sassertiontitle {
(\sassertiontitle)
}~}
}
-\cs_new_protected:Nn \_@@_sassertion_end: {\par\medskip}
+\cs_new_protected:Nn \_@@_sassertion_end: {\stex_par:\medskip}
\newcommand\stexpatchassertion[3][] {
\str_set:Nx \l_tmpa_str{ #1 }
@@ -462,6 +517,7 @@
\begingroup
\stex_reactivate_macro:N \premise
\stex_reactivate_macro:N \conclusion
+ \stex_reactivate_macro:N \varbindforall
\_@@_inlineass_args:n{ #1 }
\str_if_empty:NTF \sassertionid {
\str_if_empty:NF \sassertionname {
@@ -473,28 +529,29 @@
\stex_if_smsmode:TF{
\str_if_empty:NF \sassertionname {
- \stex_symdecl_do:nn{}{\sassertionname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sassertionname}}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sassertionname}
}
}{
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sassertion_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnx
- \stex_annotate:nnn{assertion}{\seq_use:Nn \l_tmpa_seq {,}}{
+ \stex_annotate:nnn{assertion}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sassertiontype {
- \stex_annotate_invisible:nnn{type}{\sassertiontype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sassertiontype}{}
}
#2
\str_if_empty:NF \sassertionname {
- \stex_symdecl_do:nn{}{\sassertionname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sassertionname}}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sassertionname}
+ \stex_annotate_invisible:nnn{statementname}{\sassertionname}{}
}
}
}
@@ -513,11 +570,13 @@
type .str_set_x:N = \exampletype,
id .str_set_x:N = \sexampleid,
title .tl_set:N = \sexampletitle,
+ name .str_set_x:N = \sexamplename ,
for .clist_set:N = \l_@@_sexample_for_clist,
}
\cs_new_protected:Nn \_@@_sexample_args:n {
\str_clear:N \sexampletype
\str_clear:N \sexampleid
+ \str_clear:N \sexamplename
\tl_clear:N \sexampletitle
\clist_clear:N \l_@@_sexample_for_clist
\keys_set:nn { stex / sexample }{ #1 }
@@ -528,19 +587,22 @@
\stex_reactivate_macro:N \premise
\stex_reactivate_macro:N \conclusion
\stex_if_smsmode:F {
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sexample_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnnx
- \begin{stex_annotate_env}{example}{\seq_use:Nn \l_tmpa_seq {,}}
+ \begin{stex_annotate_env}{example}{\seq_use:Nn \l_tmpb_seq {,}}
\str_if_empty:NF \sexampletype {
- \stex_annotate_invisible:nnn{type}{\sexampletype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sexampletype}{}
+ }
+ \str_if_empty:NF \sexamplename {
+ \stex_annotate_invisible:nnn{statementname}{\sexamplename}{}
}
\clist_set:No \l_tmpa_clist \sexampletype
\tl_clear:N \l_tmpa_tl
@@ -560,7 +622,9 @@
}
\stex_smsmode_do:
}{
- \str_if_empty:NF \sexamplename { \stex_symdecl_do:nn{}{\sexamplename} }
+ \str_if_empty:NF \sexamplename {
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sexamplename}}
+ }
\stex_if_smsmode:F {
\clist_set:No \l_tmpa_clist \sexampletype
\tl_clear:N \l_tmpa_tl
@@ -584,11 +648,11 @@
% \begin{macrocode}
\cs_new_protected:Nn \_@@_sexample_start: {
- \par\noindent\titleemph{Example~\tl_if_empty:NF \sexampletitle {
+ \stex_par:\noindent\titleemph{Example~\tl_if_empty:NF \sexampletitle {
(\sexampletitle)
}~}
}
-\cs_new_protected:Nn \_@@_sexample_end: {\par\medskip}
+\cs_new_protected:Nn \_@@_sexample_end: {\stex_par:\medskip}
\newcommand\stexpatchexample[3][] {
\str_set:Nx \l_tmpa_str{ #1 }
@@ -628,24 +692,29 @@
\stex_ref_new_doc_target:n \sexampleid
}
\stex_if_smsmode:TF{
- \str_if_empty:NF \sexamplename { \stex_symdecl_do:nn{}{\examplename} }
+ \str_if_empty:NF \sexamplename {
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\examplename}}
+ }
}{
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sexample_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnx
- \stex_annotate:nnn{example}{\seq_use:Nn \l_tmpa_seq {,}}{
+ \stex_annotate:nnn{example}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sexampletype {
- \stex_annotate_invisible:nnn{type}{\sexampletype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sexampletype}{}
}
#2
- \str_if_empty:NF \sexamplename { \stex_symdecl_do:nn{}{\sexamplename} }
+ \str_if_empty:NF \sexamplename {
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sexamplename}}
+ \stex_annotate_invisible:nnn{statementname}{\sexamplename}{}
+ }
}
}
\endgroup
@@ -666,7 +735,8 @@
from .tl_set:N = \sparagraphfrom ,
to .tl_set:N = \sparagraphto ,
start .tl_set:N = \l_stex_sparagraph_start_tl ,
- name .str_set:N = \sparagraphname
+ name .str_set:N = \sparagraphname ,
+ imports .tl_set:N = \l_@@_sparagraph_imports_tl
}
\cs_new_protected:Nn \stex_sparagraph_args:n {
@@ -674,6 +744,7 @@
\tl_clear:N \sparagraphfrom
\tl_clear:N \sparagraphto
\tl_clear:N \l_stex_sparagraph_start_tl
+ \tl_clear:N \l_@@_sparagraph_imports_tl
\str_clear:N \sparagraphid
\str_clear:N \sparagraphtype
\clist_clear:N \l_@@_sparagraph_for_clist
@@ -691,19 +762,19 @@
}
\@in@omtexttrue
\stex_if_smsmode:F {
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sparagraph_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnnx
- \begin{stex_annotate_env}{paragraph}{\seq_use:Nn \l_tmpa_seq {,}}
+ \begin{stex_annotate_env}{paragraph}{\seq_use:Nn \l_tmpb_seq {,}}
\str_if_empty:NF \sparagraphtype {
- \stex_annotate_invisible:nnn{type}{\sparagraphtype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sparagraphtype}{}
}
\str_if_empty:NF \sparagraphfrom {
\stex_annotate_invisible:nnn{from}{\sparagraphfrom}{}
@@ -711,6 +782,9 @@
\str_if_empty:NF \sparagraphto {
\stex_annotate_invisible:nnn{to}{\sparagraphto}{}
}
+ \str_if_empty:NF \sparagraphname {
+ \stex_annotate_invisible:nnn{statementname}{\sparagraphname}{}
+ }
\clist_set:No \l_tmpa_clist \sparagraphtype
\tl_clear:N \l_tmpa_tl
\clist_map_inline:Nn \sparagraphtype {
@@ -718,6 +792,7 @@
\tl_set:Nn \l_tmpa_tl {\use:c{_@@_sparagraph_##1_start:}}
}
}
+ \stex_csl_to_imports:No \usemodule \l_@@_sparagraph_imports_tl
\tl_if_empty:NTF \l_tmpa_tl {
\_@@_sparagraph_start:
}{
@@ -725,6 +800,14 @@
}
}
\clist_set:No \l_tmpa_clist \sparagraphtype
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\tl_to_str:n{symdoc}}
+ {
+ \stex_reactivate_macro:N \definiendum
+ \stex_reactivate_macro:N \definame
+ \stex_reactivate_macro:N \Definame
+ \stex_reactivate_macro:N \premise
+ \stex_reactivate_macro:N \definiens
+ }
\str_if_empty:NTF \sparagraphid {
\str_if_empty:NTF \sparagraphname {
\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\tl_to_str:n{symdoc}}{
@@ -749,7 +832,7 @@
\ignorespacesandpars
}{
\str_if_empty:NF \sparagraphname {
- \stex_symdecl_do:nn{}{\sparagraphname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sparagraphname}}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sparagraphname}
}
\stex_if_smsmode:F {
@@ -775,7 +858,7 @@
% \begin{macrocode}
\cs_new_protected:Nn \_@@_sparagraph_start: {
- \par\noindent\tl_if_empty:NTF \l_stex_sparagraph_start_tl {
+ \stex_par:\noindent\tl_if_empty:NTF \l_stex_sparagraph_start_tl {
\tl_if_empty:NF \l_stex_sparagraph_title_tl {
\titleemph{\l_stex_sparagraph_title_tl}:~
}
@@ -783,7 +866,7 @@
\titleemph{\l_stex_sparagraph_start_tl}~
}
}
-\cs_new_protected:Nn \_@@_sparagraph_end: {\par\medskip}
+\cs_new_protected:Nn \_@@_sparagraph_end: {\stex_par:\medskip}
\newcommand\stexpatchparagraph[3][] {
\str_set:Nx \l_tmpa_str{ #1 }
@@ -830,23 +913,23 @@
}
\stex_if_smsmode:TF{
\str_if_empty:NF \sparagraphname {
- \stex_symdecl_do:nn{}{\sparagraphname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sparagraphname}}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sparagraphname}
}
}{
- \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\clist_map_inline:Nn \l_@@_sparagraph_for_clist {
\tl_if_empty:nF{ ##1 }{
\stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \exp_args:NNo \seq_put_right:Nn \l_tmpb_seq {
\l_stex_get_symbol_uri_str
}
}
}
\exp_args:Nnx
- \stex_annotate:nnn{paragraph}{\seq_use:Nn \l_tmpa_seq {,}}{
+ \stex_annotate:nnn{paragraph}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sparagraphtype {
- \stex_annotate_invisible:nnn{type}{\sparagraphtype}{}
+ \stex_annotate_invisible:nnn{typestrings}{\sparagraphtype}{}
}
\str_if_empty:NF \sparagraphfrom {
\stex_annotate_invisible:nnn{from}{\sparagraphfrom}{}
@@ -855,11 +938,12 @@
\stex_annotate_invisible:nnn{to}{\sparagraphto}{}
}
\str_if_empty:NF \sparagraphname {
- \stex_symdecl_do:nn{}{\sparagraphname}
+ \stex_suppress_html:n{\stex_symdecl_do:nn{}{\sparagraphname}}
+ \stex_annotate_invisible:nnn{statementname}{\sparagraphname}{}
\stex_ref_new_sym_target:n {\l_stex_current_module_str ? \sparagraphname}
}
\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\tl_to_str:n{symdoc}}{
- \clist_map_inline:Nn \l_tmpa_seq {
+ \clist_map_inline:Nn \l_tmpb_seq {
\stex_ref_new_sym_target:n {##1}
}
}
@@ -898,6 +982,7 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-symbols.dtx b/macros/latex/contrib/stex/source/stex/stex-symbols.dtx
index a8b88cfe72..ba9fa5f097 100644
--- a/macros/latex/contrib/stex/source/stex/stex-symbols.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-symbols.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -34,12 +34,17 @@
% This is the documentation for the \pkg{stex-symbols} package.
% For a more high-level introduction,
% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the
-% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+% \href{\basedocurl/stex.pdf}{full \sTeX documentation}.
+%
+% \tableofcontents
%
% \input{../../doc/packages/stex-symbols}
% \fi
%
% \begin{documentation}\label{pkg:symbols:doc}
+% \changes{3.1.0}{2022/03/03}{Introduced sequence variables}
+% \changes{3.1.0}{2022/03/01}{Fixed bug with precedences in variables}
+% \changes{3.1.0}{2022/03/01}{Introduced \detokenize{\varemph, \varemph@uri}}
%
% Code related to symbol declarations and notations
%
@@ -51,7 +56,9 @@
% arguments are:
% \begin{itemize}
% \item |name|: An (\omdoc) name. By default equal to \meta{macroname}.
-% \item |type|: An (ideally semantic) term. Not used by \sTeX, but
+% \item |type|: An (ideally semantic) term, representing a \emph{type}. Not used by \sTeX, but
+% passed on to \mmt for semantic services.
+% \item |def|: An (ideally semantic) term, representing a \emph{definiens}. Not used by \sTeX, but
% passed on to \mmt for semantic services.
% \item |local|: A boolean (by default false). If set, this declaration
% will not be added to the module content, i.e. importing
@@ -152,6 +159,15 @@
args~value~in~symbol~declaration~for~#1~
needs~to~be~i,~a,~b~or~B,~but~#2~given
}
+\msg_new:nnn{stex}{error/unknownsymbol}{
+ No~symbol~#1~found!
+}
+\msg_new:nnn{stex}{error/seqlength}{
+ Expected~#1~arguments;~got~#2!
+}
+\msg_new:nnn{stex}{error/unknownnotation}{
+ Unknown~notation~#1~for~#2!
+}
% \end{macrocode}
%
% \subsection{Symbol Declarations}
@@ -196,6 +212,7 @@
gfc .str_set:N = \l_stex_symdecl_gfc_str , % TODO(?)
specializes .str_set:N = \l_stex_symdecl_specializes_str , % TODO(?)
def .tl_set:N = \l_stex_symdecl_definiens_tl ,
+ reorder .str_set_x:N = \l_stex_symdecl_reorder_str ,
assoc .choices:nn =
{bin,binl,binr,pre,conj,pwconj}
{\str_set:Nx \l_stex_symdecl_assoctype_str {\l_keys_choice_tl}}
@@ -207,6 +224,7 @@
\str_clear:N \l_stex_symdecl_name_str
\str_clear:N \l_stex_symdecl_args_str
\str_clear:N \l_stex_symdecl_deprecate_str
+ \str_clear:N \l_stex_symdecl_reorder_str
\str_clear:N \l_stex_symdecl_assoctype_str
\bool_set_false:N \l_stex_symdecl_local_bool
\tl_clear:N \l_stex_symdecl_type_tl
@@ -327,6 +345,11 @@
}
\prop_put:Nnx \l_tmpa_prop { assocs } { \int_use:N \l_tmpb_int }
+ \tl_if_empty:NTF \l_stex_symdecl_definiens_tl {
+ \prop_put:Nnx \l_tmpa_prop { defined }{ false }
+ }{
+ \prop_put:Nnx \l_tmpa_prop { defined }{ true }
+ }
% semantic macro
@@ -336,90 +359,116 @@
\l_stex_current_module_str ? \l_stex_symdecl_name_str
}}
}
-
- \bool_if:NF \l_stex_symdecl_local_bool {
- \exp_args:Nx \stex_add_to_current_module:n {
- \tl_set:cn { #1 } { \stex_invoke_symbol:n {
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- } }
- }
- }
}
\stex_debug:nn{symbols}{New~symbol:~
\l_stex_current_module_str ? \l_stex_symdecl_name_str^^J
Type:~\exp_not:o { \l_stex_symdecl_type_tl }^^J
- Args:~\prop_item:Nn \l_tmpa_prop { args }
+ Args:~\prop_item:Nn \l_tmpa_prop { args }^^J
+ Definiens:~\exp_not:o {\l_stex_symdecl_definiens_tl}
}
% circular dependencies require this:
-
+ \stex_if_do_html:T {
+ \stex_annotate_invisible:nnn {symdecl} {
+ \l_stex_current_module_str ? \l_stex_symdecl_name_str
+ } {
+ \tl_if_empty:NF \l_stex_symdecl_type_tl {
+ \stex_annotate_invisible:nnn{type}{}{$\l_stex_symdecl_type_tl$}
+ }
+ \stex_annotate_invisible:nnn{args}{\prop_item:Nn \l_tmpa_prop { args }}{}
+ \stex_annotate_invisible:nnn{macroname}{#1}{}
+ \tl_if_empty:NF \l_stex_symdecl_definiens_tl {
+ \stex_annotate_invisible:nnn{definiens}{}
+ {$\l_stex_symdecl_definiens_tl$}
+ }
+ \str_if_empty:NF \l_stex_symdecl_assoctype_str {
+ \stex_annotate_invisible:nnn{assoctype}{\l_stex_symdecl_assoctype_str}{}
+ }
+ \str_if_empty:NF \l_stex_symdecl_reorder_str {
+ \stex_annotate_invisible:nnn{reorderargs}{\l_stex_symdecl_reorder_str}{}
+ }
+ }
+ }
\prop_if_exist:cF {
l_stex_symdecl_
\l_stex_current_module_str ? \l_stex_symdecl_name_str
_prop
} {
- \prop_set_eq:cN {
- l_stex_symdecl_
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- _prop
- } \l_tmpa_prop
+ \bool_if:NTF \l_stex_symdecl_local_bool \stex_do_up_to_module:x \stex_execute_in_module:x {
+ \_@@_restore_symbol:nnnnnnn
+ {\l_stex_symdecl_name_str}
+ { \prop_item:Nn \l_tmpa_prop {args} }
+ { \prop_item:Nn \l_tmpa_prop {arity} }
+ { \prop_item:Nn \l_tmpa_prop {assocs} }
+ { \prop_item:Nn \l_tmpa_prop {defined} }
+ {\bool_if:NT \l_stex_symdecl_make_macro_bool {#1} }
+ {\l_stex_current_module_str}
+ }
}
-
- \seq_clear:c {
- l_stex_symdecl_
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- _notations
+}
+\cs_new_protected:Nn \_@@_restore_symbol:nnnnnnn {
+ \prop_clear:N \l_tmpa_prop
+ \prop_put:Nnn \l_tmpa_prop { module } { #7 }
+ \prop_put:Nnn \l_tmpa_prop { name } { #1}
+ \prop_put:Nnn \l_tmpa_prop { args } {#2}
+ \prop_put:Nnn \l_tmpa_prop { arity } { #3 }
+ \prop_put:Nnn \l_tmpa_prop { assocs } { #4 }
+ \prop_put:Nnn \l_tmpa_prop { defined } { #5 }
+ \tl_if_empty:nF{#6}{
+ \tl_set:cx{#6}{\stex_invoke_symbol:n{\detokenize{#7 ? #1}}}
}
+ \prop_set_eq:cN{l_stex_symdecl_ \detokenize{#7 ? #1} _prop}\l_tmpa_prop
+ \seq_clear:c{l_stex_symdecl_ \detokenize{#7 ? #1} _notations}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textsymdecl}
+% \begin{macrocode}
- \bool_if:NF \l_stex_symdecl_local_bool {
- \exp_args:Nx
- \stex_add_to_current_module:n {
- \seq_clear:c {
- l_stex_symdecl_
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- _notations
- }
- \prop_set_from_keyval:cn {
- l_stex_symdecl_
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- _prop
- } {
- name = \prop_item:Nn \l_tmpa_prop { name } ,
- module = \prop_item:Nn \l_tmpa_prop { module } ,
- type = \prop_item:Nn \l_tmpa_prop { type } ,
- args = \prop_item:Nn \l_tmpa_prop { args } ,
- arity = \prop_item:Nn \l_tmpa_prop { arity } ,
- assocs = \prop_item:Nn \l_tmpa_prop { assocs }
- }
- }
- }
+\keys_define:nn { stex / textsymdecl } {
+ name .str_set_x:N = \l_@@_name_str ,
+ type .tl_set:N = \l_@@_type_tl
+}
- \stex_if_smsmode:F {
-% \exp_args:Nx \stex_do_up_to_module:n {
-% \seq_put_right:Nn \exp_not:N \l_stex_all_symbols_seq {
-% \l_stex_current_module_str ? \l_stex_symdecl_name_str
-% }
-% }
- \stex_if_do_html:T {
- \stex_annotate_invisible:nnn {symdecl} {
- \l_stex_current_module_str ? \l_stex_symdecl_name_str
- } {
- \tl_if_empty:NF \l_stex_symdecl_type_tl {\stex_annotate_invisible:nnn{type}{}{$\l_stex_symdecl_type_tl$}}
- \stex_annotate_invisible:nnn{args}{}{
- \prop_item:Nn \l_tmpa_prop { args }
- }
- \stex_annotate_invisible:nnn{macroname}{#1}{}
- \tl_if_empty:NF \l_stex_symdecl_definiens_tl {
- \stex_annotate_invisible:nnn{definiens}{}
- {$\l_stex_symdecl_definiens_tl$}
- }
- \str_if_empty:NF \l_stex_symdecl_assoctype_str {
- \stex_annotate_invisible:nnn{assoctype}{\l_stex_symdecl_assoctype_str}{}
- }
- }
+\cs_new_protected:Nn \_stex_textsymdecl_args:n {
+ \str_clear:N \l_@@_name_str
+ \tl_clear:N \l_@@_type_tl
+ \keys_set:nn { stex / textsymdecl } { #1 }
+}
+
+\NewDocumentCommand \textsymdecl {m O{} m} {
+ \_stex_textsymdecl_args:n { #2 }
+ \str_if_empty:NTF \l_@@_name_str {
+ \_@@_args:n{name=#1,#2}
+ }{
+ \_@@_args:n{#2}
+ }
+ \bool_set_true:N \l_stex_symdecl_make_macro_bool
+ \stex_symdecl_do:n{#1-sym}
+ \stex_execute_in_module:n{
+ \cs_set_nopar:cpn{#1name}{
+ \ifvmode\hbox_unpack:N\c_empty_box\fi
+ \hbox{#3}\xspace
+ }
+ \cs_set_nopar:cpn{#1}{
+ \ifmmode\csname#1-sym\expandafter\endcsname\else
+ \ifvmode\hbox_unpack:N\c_empty_box\fi
+ \symref{#1-sym}{\hbox{#3}}\expandafter\xspace
+ \fi
}
}
+ \stex_execute_in_module:x{
+ \__stex_notation_restore_notation:nnnnn
+ {\l_stex_current_module_str?\tl_if_empty:NTF\l_@@_name_str{#1}\l_@@_name_str}
+ {}{0}
+ {\exp_not:n{\STEXInternalTermMathOMSiiii{\STEXInternalCurrentSymbolStr}{}{\neginfprec}{
+ \comp{\hbox{#3}}\STEXInternalSymbolAfterInvokationTL
+ }}}
+ {}
+ }
+ \stex_smsmode_do:
}
% \end{macrocode}
% \end{macro}
@@ -431,7 +480,8 @@
\cs_new_protected:Nn \stex_get_symbol:n {
\tl_if_head_eq_catcode:nNTF { #1 } \relax {
- \_@@_get_symbol_from_cs:n { #1 }
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \_@@_get_symbol_from_cs:
}{
% argument is a string
% is it a command name?
@@ -442,7 +492,7 @@
\exp_args:Nx \cs_if_eq:NNTF {
\tl_head:N \l_tmpa_tl
} \stex_invoke_symbol:n {
- \exp_args:No \_@@_get_symbol_from_cs:n { \use:c { #1 } }
+ \_@@_get_symbol_from_cs:
}{
\_@@_get_symbol_from_string:n { #1 }
}
@@ -470,28 +520,52 @@
\cs_new_protected:Nn \_@@_get_symbol_from_string:n {
\tl_set:Nn \l_tmpa_tl {
- \msg_set:nnn{stex}{error/unknownsymbol}{
- No~symbol~#1~found!
- }
- \msg_error:nn{stex}{error/unknownsymbol}
+ \msg_error:nnn{stex}{error/unknownsymbol}{#1}
}
\str_set:Nn \l_tmpa_str { #1 }
- \int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str }
- \stex_all_symbols:n {
- \str_if_eq:eeT { \l_tmpa_str }{ \str_range:nnn {##1}{-\l_tmpa_int}{-1}}{
- \seq_map_break:n{\seq_map_break:n{
- \tl_set:Nn \l_tmpa_tl {
- \str_set:Nn \l_stex_get_symbol_uri_str { ##1 }
+ %\int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str }
+
+ \str_if_in:NnTF \l_tmpa_str ? {
+ \exp_args:NNno \seq_set_split:Nnn \l_tmpa_seq ? \l_tmpa_str
+ \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ \str_set:Nx \l_tmpb_str {\seq_use:Nn \l_tmpa_seq ?}
+ }{
+ \str_clear:N \l_tmpb_str
+ }
+ \str_if_empty:NTF \l_tmpb_str {
+ \seq_map_inline:Nn \l_stex_all_modules_seq {
+ \seq_map_inline:cn{c_stex_module_##1_constants}{
+ \exp_args:Nno \str_if_eq:nnT{####1} \l_tmpa_str {
+ \seq_map_break:n{\seq_map_break:n{
+ \tl_set:Nn \l_tmpa_tl {
+ \str_set:Nn \l_stex_get_symbol_uri_str { ##1 ? ####1 }
+ }
+ }}
}
- }}
+ }
+ }
+ }{
+ \int_set:Nn \l_tmpa_int { \str_count:N \l_tmpb_str }
+ \seq_map_inline:Nn \l_stex_all_modules_seq {
+ \str_if_eq:eeT{ \l_tmpb_str }{ \str_range:nnn {##1}{-\l_tmpa_int}{-1}}{
+ \seq_map_inline:cn{c_stex_module_##1_constants}{
+ \exp_args:Nno \str_if_eq:nnT{####1} \l_tmpa_str {
+ \seq_map_break:n{\seq_map_break:n{
+ \tl_set:Nn \l_tmpa_tl {
+ \str_set:Nn \l_stex_get_symbol_uri_str { ##1 ? ####1 }
+ }
+ }}
+ }
+ }
+ }
}
}
\l_tmpa_tl
}
-\cs_new_protected:Nn \_@@_get_symbol_from_cs:n {
+\cs_new_protected:Nn \_@@_get_symbol_from_cs: {
\exp_args:NNx \tl_set:Nn \l_tmpa_tl
{ \tl_tail:N \l_tmpa_tl }
\tl_if_single:NTF \l_tmpa_tl {
@@ -519,7 +593,7 @@
%
% \begin{macrocode}
\keys_define:nn { stex / notation } {
- lang .tl_set_x:N = \l_@@_lang_str ,
+% lang .tl_set_x:N = \l_@@_lang_str ,
variant .tl_set_x:N = \l_@@_variant_str ,
prec .str_set_x:N = \l_@@_prec_str ,
op .tl_set:N = \l_@@_op_tl ,
@@ -530,7 +604,7 @@
}
\cs_new_protected:Nn \_stex_notation_args:n {
- \str_clear:N \l_@@_lang_str
+% \str_clear:N \l_@@_lang_str
\str_clear:N \l_@@_variant_str
\str_clear:N \l_@@_prec_str
\tl_clear:N \l_@@_op_tl
@@ -553,31 +627,33 @@
\IfBooleanTF#1{
\stex_setnotation:n {\l_stex_get_symbol_uri_str}
}{}
- \stex_smsmode_do:
+ \stex_smsmode_do:\ignorespacesandpars
}
- \stex_notation_do:nnnn
+ \stex_notation_do:nnnnn
{ \prop_item:cn {l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { args } }
{ \prop_item:cn { l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { arity } }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
+ { \l_@@_variant_str }
+ { \l_@@_prec_str}
}
\stex_deactivate_macro:Nn \notation {module~environments}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\stex_notation_do:nnnn}
+% \begin{macro}{\stex_notation_do:nnnnn}
% \begin{macrocode}
\seq_new:N \l_@@_precedences_seq
\tl_new:N \l_@@_opprec_tl
\int_new:N \l_@@_currarg_int
-\tl_new:N \stex_symbol_after_invocation_tl
+\tl_new:N \STEXInternalSymbolAfterInvokationTL
-\cs_new_protected:Nn \stex_notation_do:nnnn {
- \let\l_stex_current_symbol_str\relax
+\cs_new_protected:Nn \stex_notation_do:nnnnn {
+ \let\STEXInternalCurrentSymbolStr\relax
\seq_clear:N \l_@@_precedences_seq
\tl_clear:N \l_@@_opprec_tl
\str_set:Nx \l_@@_args_str { #1 }
\str_set:Nx \l_@@_arity_str { #2 }
- \str_set:Nx \_@@_suffix_str { #3 }
+ \str_set:Nx \l_@@_suffix_str { #3 }
+ \str_set:Nx \l_@@_prec_str { #4 }
% precedences
\str_if_empty:NTF \l_@@_prec_str {
@@ -628,10 +704,10 @@
\int_compare:nNnTF \l_@@_arity_str = 0 {
\exp_args:NNe
\cs_set:Npn \l_stex_notation_macrocode_cs {
- \_stex_term_math_oms:nnnn { \l_stex_current_symbol_str }
- { \_@@_suffix_str }
+ \STEXInternalTermMathOMSiiii { \STEXInternalCurrentSymbolStr }
+ { \l_@@_suffix_str }
{ \l_@@_opprec_tl }
- { \exp_not:n { #4 } }
+ { \exp_not:n { #5 } }
}
\l_stex_notation_after_do_tl
}{
@@ -640,10 +716,10 @@
{
\cs_generate_from_arg_count:NNnn \l_stex_notation_macrocode_cs
\cs_set:Npn \l_@@_arity_str } { {
- \_stex_term_math_omb:nnnn { \l_stex_current_symbol_str }
- { \_@@_suffix_str }
+ \STEXInternalTermMathOMBiiii { \STEXInternalCurrentSymbolStr }
+ { \l_@@_suffix_str }
{ \l_@@_opprec_tl }
- { \exp_not:n { #4 } }
+ { \exp_not:n { #5 } }
}}
}{
\str_if_in:NnTF \l_@@_args_str B {
@@ -651,20 +727,20 @@
{
\cs_generate_from_arg_count:NNnn \l_stex_notation_macrocode_cs
\cs_set:Npn \l_@@_arity_str } { {
- \_stex_term_math_omb:nnnn { \l_stex_current_symbol_str }
- { \_@@_suffix_str }
+ \STEXInternalTermMathOMBiiii { \STEXInternalCurrentSymbolStr }
+ { \l_@@_suffix_str }
{ \l_@@_opprec_tl }
- { \exp_not:n { #4 } }
+ { \exp_not:n { #5 } }
} }
}{
\exp_args:Nne \use:nn
{
\cs_generate_from_arg_count:NNnn \l_stex_notation_macrocode_cs
\cs_set:Npn \l_@@_arity_str } { {
- \_stex_term_math_oma:nnnn { \l_stex_current_symbol_str }
- { \_@@_suffix_str }
+ \STEXInternalTermMathOMAiiii { \STEXInternalCurrentSymbolStr }
+ { \l_@@_suffix_str }
{ \l_@@_opprec_tl }
- { \exp_not:n { #4 } }
+ { \exp_not:n { #5 } }
} }
}
}
@@ -692,16 +768,16 @@
\str_set:Nx \l_tmpa_str { \str_head:N \l_@@_remaining_args_str }
\str_set:Nx \l_@@_remaining_args_str { \str_tail:N \l_@@_remaining_args_str }
\str_if_eq:VnTF \l_tmpa_str a {
- \_@@_argument_assoc:n
+ \_@@_argument_assoc:nn{a}
}{
\str_if_eq:VnTF \l_tmpa_str B {
- \_@@_argument_assoc:n
+ \_@@_argument_assoc:nn{B}
}{
- \seq_pop_left:NN \l_@@_remaining_precs_seq \l_tmpa_str
+ \seq_pop_left:NN \l_@@_remaining_precs_seq \l_tmpb_str
\tl_put_right:Nx \l_stex_notation_dummyargs_tl {
- { \_stex_term_math_arg:nnn
- { \int_use:N \l_@@_currarg_int }
- { \l_tmpa_str }
+ { \STEXInternalTermMathArgiii
+ { \l_tmpa_str\int_use:N \l_@@_currarg_int }
+ { \l_tmpb_str }
{ ####\int_use:N \l_@@_currarg_int }
}
}
@@ -713,13 +789,13 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\_@@_argument_assoc:n}
+% \begin{macro}{\_@@_argument_assoc:nn}
% \begin{macrocode}
-\cs_new_protected:Nn \_@@_argument_assoc:n {
+\cs_new_protected:Nn \_@@_argument_assoc:nn {
\cs_generate_from_arg_count:NNnn \l_tmpa_cs \cs_set:Npn
{\l_@@_arity_str}{
- #1
+ #2
}
\int_zero:N \l_tmpa_int
\tl_clear:N \l_tmpa_tl
@@ -728,7 +804,7 @@
\tl_put_right:Nx \l_tmpa_tl {
\str_if_eq:nnTF {##1}{a}{ {} }{
\str_if_eq:nnTF {##1}{B}{ {} }{
- {\_stex_term_arg:nn{\int_use:N \l_tmpa_int}{################ \int_use:N \l_tmpa_int}}
+ {\_stex_term_arg:nn{##1\int_use:N \l_tmpa_int}{################ \int_use:N \l_tmpa_int}}
}
}
}
@@ -748,8 +824,8 @@
\seq_pop_left:NN \l_@@_remaining_precs_seq \l_tmpa_str
\tl_put_right:Nx \l_stex_notation_dummyargs_tl { {
- \_stex_term_math_assoc_arg:nnnn
- { \int_use:N \l_@@_currarg_int }
+ \STEXInternalTermMathAssocArgiiii
+ { #1\int_use:N \l_@@_currarg_int }
{ \l_tmpa_str }
{ ####\int_use:N \l_@@_currarg_int }
{ \l_tmpa_cs {####1} {####2} }
@@ -764,132 +840,88 @@
% Called after processing all notation arguments
%
% \begin{macrocode}
-\cs_new_protected:Nn \_@@_final: {
- \exp_args:Nne \use:nn
- {
- \cs_generate_from_arg_count:cNnn {
- stex_notation_ \l_stex_get_symbol_uri_str \c_hash_str
- \_@@_suffix_str
- _cs
- }
- \cs_set:Npn \l_@@_arity_str } { {
- \exp_after:wN \exp_after:wN \exp_after:wN
- \exp_not:n \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_stex_notation_macrocode_cs \l_stex_notation_dummyargs_tl \stex_symbol_after_invocation_tl}
- } }
-
- \tl_if_empty:NF \l_@@_op_tl {
- \cs_set:cpx {
- stex_op_notation_ \l_stex_get_symbol_uri_str \c_hash_str
- \_@@_suffix_str
- _cs
- } {
- \_stex_term_oms:nnn {
- \l_stex_get_symbol_uri_str \c_hash_str \_@@_suffix_str
- }{
- \l_stex_get_symbol_uri_str
- }{ \comp{ \exp_args:No \exp_not:n { \l_@@_op_tl } } }
- }
+\cs_new_protected:Nn \_@@_restore_notation:nnnnn {
+ \cs_generate_from_arg_count:cNnn{stex_notation_\detokenize{#1} \c_hash_str \detokenize{#2}_cs}
+ \cs_set_nopar:Npn {#3}{#4}
+ \tl_if_empty:nF {#5}{
+ \tl_set:cn{stex_op_notation_\detokenize{#1} \c_hash_str \detokenize{#2}_cs}{ \comp{ #5 } }
+ }
+ \seq_if_exist:cT { l_stex_symdecl_\detokenize{#1} _notations }{
+ \seq_put_right:cx { l_stex_symdecl_\detokenize{#1} _notations } { \detokenize{#2} }
}
+}
- \exp_args:Ne
- \stex_add_to_current_module:n {
- \cs_generate_from_arg_count:cNnn {
- stex_notation_ \l_stex_get_symbol_uri_str \c_hash_str
- \_@@_suffix_str
- _cs
- } \cs_set:Npn {\l_@@_arity_str} {
+\cs_new_protected:Nn \_@@_final: {
+
+ \stex_execute_in_module:x {
+ \_@@_restore_notation:nnnnn
+ {\l_stex_get_symbol_uri_str}
+ {\l_@@_suffix_str}
+ {\l_@@_arity_str}
+ {
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:n \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_stex_notation_macrocode_cs \l_stex_notation_dummyargs_tl \stex_symbol_after_invocation_tl}
- }
- \tl_if_empty:NF \l_@@_op_tl {
- \cs_set:cpn {
- stex_op_notation_\l_stex_get_symbol_uri_str \c_hash_str
- \_@@_suffix_str
- _cs
- } {
- \_stex_term_oms:nnn {
- \l_stex_get_symbol_uri_str\c_hash_str \_@@_suffix_str
- }{
- \l_stex_get_symbol_uri_str
- }{ \comp{ \exp_args:No \exp_not:n { \l_@@_op_tl } } }
+ { \exp_after:wN \l_stex_notation_macrocode_cs \l_stex_notation_dummyargs_tl \STEXInternalSymbolAfterInvokationTL}
}
- }
+ {\exp_args:No \exp_not:n \l_@@_op_tl }
}
- %\exp_args:Nx
- % \stex_do_up_to_module:n {
- \seq_put_right:cx {
- l_stex_symdecl_ \l_stex_get_symbol_uri_str
- _notations
- } {
- \_@@_suffix_str
- }
- % }
\stex_debug:nn{symbols}{
- Notation~\_@@_suffix_str
+ Notation~\l_@@_suffix_str
~for~\l_stex_get_symbol_uri_str^^J
Operator~precedence:~\l_@@_opprec_tl^^J
Argument~precedences:~
\seq_use:Nn \l_@@_precedences_seq {,~}^^J
Notation: \cs_meaning:c {
stex_notation_ \l_stex_get_symbol_uri_str \c_hash_str
- \_@@_suffix_str
+ \l_@@_suffix_str
_cs
}
}
-
- \exp_args:Ne
- \stex_add_to_current_module:n {
- \seq_put_right:cn {
- l_stex_symdecl_\l_stex_get_symbol_uri_str
- _notations
- } { \_@@_suffix_str }
- }
-
- \stex_if_smsmode:F {
-
% HTML annotations
- \stex_if_do_html:T {
- \stex_annotate_invisible:nnn { notation }
- { \l_stex_get_symbol_uri_str } {
- \stex_annotate_invisible:nnn { notationfragment }
- { \_@@_suffix_str }{}
- \stex_annotate_invisible:nnn { precedence }
- { \l_@@_prec_str }{}
-
- \int_zero:N \l_tmpa_int
- \str_set_eq:NN \l_@@_remaining_args_str \l_@@_args_str
- \tl_clear:N \l_tmpa_tl
- \int_step_inline:nn { \l_@@_arity_str }{
- \int_incr:N \l_tmpa_int
- \str_set:Nx \l_tmpb_str { \str_head:N \l_@@_remaining_args_str }
- \str_set:Nx \l_@@_remaining_args_str { \str_tail:N \l_@@_remaining_args_str }
- \str_if_eq:VnTF \l_tmpb_str a {
+ \stex_if_do_html:T {
+ \stex_annotate_invisible:nnn { notation }
+ { \l_stex_get_symbol_uri_str } {
+ \stex_annotate_invisible:nnn { notationfragment }
+ { \l_@@_suffix_str }{}
+ \stex_annotate_invisible:nnn { precedence }
+ { \l_@@_prec_str }{}
+
+ \int_zero:N \l_tmpa_int
+ \str_set_eq:NN \l_@@_remaining_args_str \l_@@_args_str
+ \tl_clear:N \l_tmpa_tl
+ \int_step_inline:nn { \l_@@_arity_str }{
+ \int_incr:N \l_tmpa_int
+ \str_set:Nx \l_tmpb_str { \str_head:N \l_@@_remaining_args_str }
+ \str_set:Nx \l_@@_remaining_args_str { \str_tail:N \l_@@_remaining_args_str }
+ \str_if_eq:VnTF \l_tmpb_str a {
+ \tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int a}{} ,
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int b}{}
+ } }
+ }{
+ \str_if_eq:VnTF \l_tmpb_str B {
\tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int a ,
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int b
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int a}{} ,
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int b}{}
} }
}{
- \str_if_eq:VnTF \l_tmpb_str B {
- \tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int a ,
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int b
- } }
- }{
- \tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int
- } }
- }
+ \tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int}{}
+ } }
}
}
- \stex_annotate_invisible:nnn { notationcomp }{}{
- \str_set:Nx \l_stex_current_symbol_str {\l_stex_get_symbol_uri_str }
- $ \exp_args:Nno \use:nn { \use:c {
- stex_notation_ \l_stex_current_symbol_str
- \c_hash_str \_@@_suffix_str _cs
- } } { \l_tmpa_tl } $
+ }
+ \stex_annotate_invisible:nnn { notationcomp }{}{
+ \str_set:Nx \STEXInternalCurrentSymbolStr {\l_stex_get_symbol_uri_str }
+ $ \exp_args:Nno \use:nn { \use:c {
+ stex_notation_ \STEXInternalCurrentSymbolStr
+ \c_hash_str \l_@@_suffix_str _cs
+ } } { \l_tmpa_tl } $
+ }
+ \tl_if_empty:NF \l_@@_op_tl {
+ \stex_annotate_invisible:nnn { notationopcomp }{}{
+ $\l_@@_op_tl$
}
}
}
@@ -901,44 +933,38 @@
% \begin{macro}{\setnotation}
% \begin{macrocode}
\keys_define:nn { stex / setnotation } {
- lang .tl_set_x:N = \l_@@_lang_str ,
+% lang .tl_set_x:N = \l_@@_lang_str ,
variant .tl_set_x:N = \l_@@_variant_str ,
unknown .code:n = \str_set:Nx
\l_@@_variant_str \l_keys_key_str
}
\cs_new_protected:Nn \_stex_setnotation_args:n {
- \str_clear:N \l_@@_lang_str
+ % \str_clear:N \l_@@_lang_str
\str_clear:N \l_@@_variant_str
\keys_set:nn { stex / setnotation } { #1 }
}
+\cs_new_protected:Nn \_@@_setnotation:nn {
+ \seq_if_exist:cT{l_stex_symdecl_#1_notations}{
+ \seq_remove_all:cn { l_stex_symdecl_#1 _notations }{ #2 }
+ \seq_put_left:cn { l_stex_symdecl_#1 _notations }{ #2 }
+ }
+}
+
\cs_new_protected:Nn \stex_setnotation:n {
\exp_args:Nnx \seq_if_in:cnTF { l_stex_symdecl_#1 _notations }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }{
- \exp_args:Nnx \seq_remove_all:cn { l_stex_symdecl_#1 _notations }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
- \exp_args:Nnx \seq_remove_all:cn { l_stex_symdecl_#1 _notations }
- { \c_hash_str }
- \exp_args:Nnx \seq_put_left:cn { l_stex_symdecl_#1 _notations }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
- \exp_args:Nx \stex_add_to_current_module:n {
- \exp_args:Nnx \seq_remove_all:cn { l_stex_symdecl_#1 _notations }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
- \exp_args:Nnx \seq_put_left:cn { l_stex_symdecl_#1 _notations }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
- \exp_args:Nnx \seq_remove_all:cn { l_stex_symdecl_#1 _notations }
- { \c_hash_str }
- }
+ { \l_@@_variant_str }{
+ \stex_execute_in_module:x{ \_@@_setnotation:nn {#1}{\l_@@_variant_str} }
\stex_debug:nn {notations}{
Setting~default~notation~
- {\l_@@_variant_str \c_hash_str \l_@@_lang_str}~for~
+ {\l_@@_variant_str }~for~
#1 \\
\expandafter\meaning\csname
l_stex_symdecl_#1 _notations\endcsname
}
}{
- % todo throw error
+ \msg_error:nnxx{stex}{unknownnotation}{\l_@@_variant_str}{#1}
}
}
@@ -946,7 +972,7 @@
\stex_get_symbol:n { #1 }
\_stex_setnotation_args:n { #2 }
\stex_setnotation:n{\l_stex_get_symbol_uri_str}
- \stex_smsmode_do:
+ \stex_smsmode_do:\ignorespacesandpars
}
\cs_new_protected:Nn \stex_copy_notations:nn {
@@ -956,9 +982,10 @@
}
\tl_clear:N \l_tmpa_tl
\int_step_inline:nn { \prop_item:cn {l_stex_symdecl_#2_prop}{ arity } } {
- \tl_put_right:Nn \l_tmpa_tl { {## ##1} }
+ \tl_put_right:Nn \l_tmpa_tl { {######## ##1} }
}
- \seq_map_inline:cn {l_stex_symdecl_#2_notations}{
+ \seq_map_inline:cn {l_stex_symdecl_#2_notations}{\begingroup
+ \stex_debug:nn{Here}{Here:~##1}
\cs_set_eq:Nc \l_tmpa_cs { stex_notation_ #2 \c_hash_str ##1 _cs }
\edef \l_tmpa_tl {
\exp_after:wN\exp_after:wN\exp_after:wN \exp_not:n
@@ -966,15 +993,30 @@
\exp_after:wN \l_tmpa_cs \l_tmpa_tl
}
}
- \exp_args:Nx
- \stex_do_up_to_module:n {
- \seq_put_right:cn{l_stex_symdecl_#1_notations}{##1}
- \cs_generate_from_arg_count:cNnn {
- stex_notation_ #1 \c_hash_str ##1 _cs
- } \cs_set:Npn { \prop_item:cn {l_stex_symdecl_#2_prop}{ arity } }{
- \exp_after:wN\exp_not:n\exp_after:wN{\l_tmpa_tl}
+
+ \exp_after:wN \def \exp_after:wN \l_tmpa_tl
+ \exp_after:wN ####\exp_after:wN 1 \exp_after:wN ####\exp_after:wN 2
+ \exp_after:wN { \l_tmpa_tl }
+
+ \edef \l_tmpa_tl {
+ \exp_after:wN \exp_not:n \exp_after:wN {
+ \l_tmpa_tl {######## 1}{######## 2}
}
}
+
+ \stex_debug:nn{Here}{Here:~\expandafter\detokenize\expandafter{\l_tmpa_tl}}
+
+ \stex_execute_in_module:x {
+ \_@@_restore_notation:nnnnn
+ {#1}{##1}
+ { \prop_item:cn {l_stex_symdecl_#2_prop}{ arity } }
+ { \exp_after:wN\exp_not:n\exp_after:wN{\l_tmpa_tl} }
+ {
+ \cs_if_exist:cT{stex_op_notation_ #2\c_hash_str ##1 _cs}{
+ \exp_args:NNo\exp_args:No\exp_not:n{\csname stex_op_notation_ #2\c_hash_str ##1 _cs\endcsname}
+ }
+ }
+ }\endgroup
}
}
@@ -984,10 +1026,7 @@
\stex_get_symbol:n { #2 }
\exp_args:Noo
\stex_copy_notations:nn \l_tmpa_str \l_stex_get_symbol_uri_str
- \exp_args:Nx \stex_add_import_to_current_module:n{
- \stex_copy_notations:nn {\l_tmpa_str} {\l_stex_get_symbol_uri_str}
- }
- \stex_smsmode_do:
+ \stex_smsmode_do:\ignorespacesandpars
}
% \end{macrocode}
@@ -1001,8 +1040,9 @@
args .str_set_x:N = \l_stex_symdecl_args_str ,
type .tl_set:N = \l_stex_symdecl_type_tl ,
def .tl_set:N = \l_stex_symdecl_definiens_tl ,
+ reorder .str_set_x:N = \l_stex_symdecl_reorder_str ,
op .tl_set:N = \l_@@_op_tl ,
- lang .str_set_x:N = \l_@@_lang_str ,
+ % lang .str_set_x:N = \l_@@_lang_str ,
variant .str_set_x:N = \l_@@_variant_str ,
prec .str_set_x:N = \l_@@_prec_str ,
assoc .choices:nn =
@@ -1016,10 +1056,11 @@
\str_clear:N \l_stex_symdecl_name_str
\str_clear:N \l_stex_symdecl_args_str
\str_clear:N \l_stex_symdecl_assoctype_str
+ \str_clear:N \l_stex_symdecl_reorder_str
\bool_set_false:N \l_stex_symdecl_local_bool
\tl_clear:N \l_stex_symdecl_type_tl
\tl_clear:N \l_stex_symdecl_definiens_tl
- \str_clear:N \l_@@_lang_str
+ % \str_clear:N \l_@@_lang_str
\str_clear:N \l_@@_variant_str
\str_clear:N \l_@@_prec_str
\tl_clear:N \l_@@_op_tl
@@ -1033,15 +1074,16 @@
\stex_symdecl_do:n { #1 }
\tl_set:Nn \l_stex_notation_after_do_tl {
\_@@_final:
- \stex_smsmode_do:
+ \stex_smsmode_do:\ignorespacesandpars
}
\str_set:Nx \l_stex_get_symbol_uri_str {
\l_stex_current_module_str ? \l_stex_symdecl_name_str
}
- \exp_args:Nx \stex_notation_do:nnnn
+ \exp_args:Nx \stex_notation_do:nnnnn
{ \prop_item:cn {l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { args } }
{ \prop_item:cn { l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { arity } }
- { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
+ { \l_@@_variant_str }
+ { \l_@@_prec_str}
}
\stex_deactivate_macro:Nn \symdef {module~environments}
% \end{macrocode}
@@ -1059,6 +1101,7 @@
def .tl_set:N = \l_@@_def_tl ,
op .tl_set:N = \l_@@_op_tl ,
prec .str_set_x:N = \l_@@_prec_str ,
+ reorder .str_set_x:N = \l_@@_reorder_str ,
assoc .choices:nn =
{bin,binl,binr,pre,conj,pwconj}
{\str_set:Nx \l_@@_assoctype_str {\l_keys_choice_tl}},
@@ -1072,6 +1115,7 @@
\str_clear:N \l_@@_args_str
\str_clear:N \l_@@_prec_str
\str_clear:N \l_@@_assoctype_str
+ \str_clear:N \l_@@_reorder_str
\str_clear:N \l_@@_bind_str
\tl_clear:N \l_@@_type_tl
\tl_clear:N \l_@@_def_tl
@@ -1137,11 +1181,7 @@
\tl_if_empty:NF \l_@@_op_tl {
\cs_set:cpx {
stex_var_op_notation_ \l_@@_name_str _cs
- } {
- \_stex_term_omv:nn {
- var://\l_@@_name_str
- }{ \comp{ \exp_args:No \exp_not:n { \l_@@_op_tl } } }
- }
+ } { \exp_not:N\comp{ \exp_args:No \exp_not:n { \l_@@_op_tl } } }
}
\tl_set:Nn \l_stex_notation_after_do_tl {
@@ -1151,14 +1191,14 @@
} {{
\exp_after:wN \exp_after:wN \exp_after:wN
\exp_not:n \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_stex_notation_macrocode_cs \l_stex_notation_dummyargs_tl \stex_symbol_after_invocation_tl}
+ { \exp_after:wN \l_stex_notation_macrocode_cs \l_stex_notation_dummyargs_tl \STEXInternalSymbolAfterInvokationTL}
}}
\stex_if_do_html:T {
\stex_annotate_invisible:nnn {vardecl}{\l_@@_name_str}{
\stex_annotate_invisible:nnn { precedence }
{ \l_@@_prec_str }{}
\tl_if_empty:NF \l_@@_type_tl {\stex_annotate_invisible:nnn{type}{}{$\l_@@_type_tl$}}
- \stex_annotate_invisible:nnn{args}{}{ \l_@@_args_str }
+ \stex_annotate_invisible:nnn{args}{ \l_@@_args_str }{}
\stex_annotate_invisible:nnn{macroname}{#1}{}
\tl_if_empty:NF \l_@@_def_tl {
\stex_annotate_invisible:nnn{definiens}{}
@@ -1167,6 +1207,9 @@
\str_if_empty:NF \l_@@_assoctype_str {
\stex_annotate_invisible:nnn{assoctype}{\l_@@_assoctype_str}{}
}
+ \str_if_empty:NF \l_@@_reorder_str {
+ \stex_annotate_invisible:nnn{reorderargs}{\l_@@_reorder_str}{}
+ }
\int_zero:N \l_tmpa_int
\str_set_eq:NN \l_@@_remaining_args_str \l_@@_args_str
\tl_clear:N \l_tmpa_tl
@@ -1176,36 +1219,44 @@
\str_set:Nx \l_@@_remaining_args_str { \str_tail:N \l_@@_remaining_args_str }
\str_if_eq:VnTF \l_tmpb_str a {
\tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int a ,
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int b
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int a}{} ,
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int b}{}
} }
}{
\str_if_eq:VnTF \l_tmpb_str B {
\tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int a ,
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int b
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int a}{} ,
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int b}{}
} }
}{
\tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
- \c_hash_str \c_hash_str \int_use:N \l_tmpa_int
+ \stex_annotate:nnn{argmarker}{\int_use:N \l_tmpa_int}{}
} }
}
}
}
\stex_annotate_invisible:nnn { notationcomp }{}{
- \str_set:Nx \l_stex_current_symbol_str {var://\l_@@_name_str }
+ \str_set:Nx \STEXInternalCurrentSymbolStr {var://\l_@@_name_str }
$ \exp_args:Nno \use:nn { \use:c {
stex_var_notation_\l_@@_name_str _cs
} } { \l_tmpa_tl } $
}
+ \tl_if_empty:NF \l_@@_op_tl {
+ \stex_annotate_invisible:nnn { notationopcomp }{}{
+ $\l_@@_op_tl$
+ }
+ }
}
- }
+ \str_if_empty:NF \l_@@_bind_str {
+ \stex_annotate_invisible:nnn {bindtype}{\l_@@_bind_str,\l_@@_name_str}{}
+ }
+ }\ignorespacesandpars
}
- \stex_notation_do:nnnn { \l_@@_args_str } { \prop_item:Nn \l_tmpa_prop { arity } } {}
+ \stex_notation_do:nnnnn { \l_@@_args_str } { \prop_item:Nn \l_tmpa_prop { arity } } {}{ \l_@@_prec_str}
}
-\cs_new:Nn \_@@_reset:N {
+\cs_new:Nn \_stex_reset:N {
\tl_if_exist:NTF #1 {
\def \exp_not:N #1 { \exp_args:No \exp_not:n #1 }
}{
@@ -1217,13 +1268,13 @@
\clist_set:Nx \l_@@_names { \tl_to_str:n {#1} }
\exp_args:Nnx \use:nn {
% TODO
- \stex_annotate_invisible:nnn {vardecls}{\clist_use:Nn\l_@@_names,}{
+ \stex_annotate_invisible:nnn {vardecl}{\clist_use:Nn\l_@@_names,}{
#2
}
}{
- \_@@_reset:N \varnot
- \_@@_reset:N \vartype
- \_@@_reset:N \vardefi
+ \_stex_reset:N \varnot
+ \_stex_reset:N \vartype
+ \_stex_reset:N \vardefi
}
}
@@ -1242,8 +1293,143 @@
\str_set:Nn \l_tmpa_str { #1 }
}
\_stex_term_omv:nn {
- var://\l_tmpa_str
- }{ \comp{ #2 } }
+ var://\l_tmpa_str
+ }{
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \str_set:Nx \STEXInternalCurrentSymbolStr { var://\l_tmpa_str }
+ \comp{ #2 }
+ }{
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ }
+ }
+}
+
+
+
+\keys_define:nn { stex / varseq } {
+ name .str_set_x:N = \l_@@_name_str ,
+ args .int_set:N = \l_@@_args_int ,
+ type .tl_set:N = \l_@@_type_tl ,
+ mid .tl_set:N = \l_@@_mid_tl ,
+ bind .choices:nn =
+ {forall,exists}
+ {\str_set:Nx \l_@@_bind_str {\l_keys_choice_tl}}
+}
+
+\cs_new_protected:Nn \_@@_seq_args:n {
+ \str_clear:N \l_@@_name_str
+ \int_set:Nn \l_@@_args_int 1
+ \tl_clear:N \l_@@_type_tl
+ \str_clear:N \l_@@_bind_str
+
+ \keys_set:nn { stex / varseq } { #1 }
+}
+
+\NewDocumentCommand \varseq {m O{} m m m}{
+ \_@@_seq_args:n { #2 }
+ \str_if_empty:NT \l_@@_name_str {
+ \str_set:Nx \l_@@_name_str { #1 }
+ }
+ \prop_clear:N \l_tmpa_prop
+ \prop_put:Nnx \l_tmpa_prop { arity }{\int_use:N \l_@@_args_int}
+
+ \seq_set_from_clist:Nn \l_tmpa_seq {#3}
+ \int_compare:nNnF {\seq_count:N \l_tmpa_seq} = \l_@@_args_int {
+ \msg_error:nnxx{stex}{error/seqlength}
+ {\int_use:N \l_@@_args_int}
+ {\seq_count:N \l_tmpa_seq}
+ }
+ \seq_set_from_clist:Nn \l_tmpb_seq {#4}
+ \int_compare:nNnF {\seq_count:N \l_tmpb_seq} = \l_@@_args_int {
+ \msg_error:nnxx{stex}{error/seqlength}
+ {\int_use:N \l_@@_args_int}
+ {\seq_count:N \l_tmpb_seq}
+ }
+ \prop_put:Nnn \l_tmpa_prop {starts} {#3}
+ \prop_put:Nnn \l_tmpa_prop {ends} {#4}
+
+ \cs_generate_from_arg_count:cNnn {stex_varseq_\l_@@_name_str _cs}
+ \cs_set:Npn {\int_use:N \l_@@_args_int} { #5 }
+
+ \exp_args:NNo \tl_set:No \l_tmpa_tl {\use:c{stex_varseq_\l_@@_name_str _cs}}
+ \int_step_inline:nn \l_@@_args_int {
+ \tl_put_right:Nx \l_tmpa_tl { {\seq_item:Nn \l_tmpa_seq {##1}} }
+ }
+ \tl_set:Nx \l_tmpa_tl {\exp_args:NNo \exp_args:No \exp_not:n{\l_tmpa_tl}}
+ \tl_put_right:Nn \l_tmpa_tl {,\ellipses,}
+ \tl_if_empty:NF \l_@@_mid_tl {
+ \tl_put_right:No \l_tmpa_tl \l_@@_mid_tl
+ \tl_put_right:Nn \l_tmpa_tl {,\ellipses,}
+ }
+ \exp_args:NNo \tl_set:No \l_tmpb_tl {\use:c{stex_varseq_\l_@@_name_str _cs}}
+ \int_step_inline:nn \l_@@_args_int {
+ \tl_put_right:Nx \l_tmpb_tl { {\seq_item:Nn \l_tmpb_seq {##1}} }
+ }
+ \tl_set:Nx \l_tmpb_tl {\exp_args:NNo \exp_args:No \exp_not:n{\l_tmpb_tl}}
+ \tl_put_right:No \l_tmpa_tl \l_tmpb_tl
+
+
+ \prop_put:Nno \l_tmpa_prop { notation }\l_tmpa_tl
+
+ \tl_set:cx {#1} {\stex_invoke_sequence:n {\l_@@_name_str}}
+
+ \exp_args:NNo \tl_set:No \l_tmpa_tl {\use:c{stex_varseq_\l_@@_name_str _cs}}
+
+ \int_step_inline:nn \l_@@_args_int {
+ \tl_set:Nx \l_tmpa_tl {\exp_args:No \exp_not:n \l_tmpa_tl {
+ \STEXInternalTermMathArgiii{i##1}{0}{\exp_not:n{####}##1}
+ }}
+ }
+
+ \tl_set:Nx \l_tmpa_tl {
+ \STEXInternalTermMathOMAiiii { varseq://\l_@@_name_str}{}{0}{
+ \exp_args:NNo \exp_args:No \exp_not:n {\l_tmpa_tl}
+ }
+ }
+
+ \tl_set:No \l_tmpa_tl { \exp_after:wN { \l_tmpa_tl \STEXInternalSymbolAfterInvokationTL} }
+
+ \exp_args:Nno \use:nn {
+ \cs_generate_from_arg_count:cNnn {stex_varseq_\l_@@_name_str _cs}
+ \cs_set:Npn {\int_use:N \l_@@_args_int}}{\l_tmpa_tl}
+
+ \stex_debug:nn{sequences}{New~Sequence:~
+ \expandafter\meaning\csname stex_varseq_\l_@@_name_str _cs\endcsname\\~\\
+ \prop_to_keyval:N \l_tmpa_prop
+ }
+ \stex_if_do_html:T{\stex_annotate_invisible:nnn{varseq}{\l_@@_name_str}{
+ \tl_if_empty:NF \l_@@_type_tl {
+ \stex_annotate:nnn {type}{}{$\l_@@_type_tl$}
+ }
+ \stex_annotate:nnn {args}{\int_use:N \l_@@_args_int}{}
+ \str_if_empty:NF \l_@@_bind_str {
+ \stex_annotate:nnn {bindtype}{\l_@@_bind_str}{}
+ }
+ \stex_annotate:nnn{startindex}{}{$#3$}
+ \stex_annotate:nnn{endindex}{}{$#4$}
+
+ \tl_clear:N \l_tmpa_tl
+ \int_step_inline:nn \l_@@_args_int {
+ \tl_set:Nx \l_tmpa_tl { \l_tmpa_tl {
+ \stex_annotate:nnn{argmarker}{##1}{}
+ } }
+ }
+ \stex_annotate_invisible:nnn { notationcomp }{}{
+ \str_set:Nx \STEXInternalCurrentSymbolStr {varseq://\l_@@_name_str }
+ $ \exp_args:Nno \use:nn { \use:c {
+ stex_varseq_\l_@@_name_str _cs
+ } } { \l_tmpa_tl } $
+ }
+ \stex_annotate_invisible:nnn { notationopcomp }{}{
+ $ \prop_item:Nn \l_tmpa_prop { notation } $
+ }
+
+ }}
+
+ \prop_set_eq:cN {stex_varseq_\l_@@_name_str _prop}\l_tmpa_prop
+ \ignorespacesandpars
}
% \end{macrocode}
@@ -1253,6 +1439,7 @@
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex-terms.dtx b/macros/latex/contrib/stex/source/stex/stex-terms.dtx
index 9322a2411a..3827466f14 100644
--- a/macros/latex/contrib/stex/source/stex/stex-terms.dtx
+++ b/macros/latex/contrib/stex/source/stex/stex-terms.dtx
@@ -10,7 +10,7 @@
% TODO update copyright
%
%<*driver>
-\providecommand\bibfolder{../../lib/bib}
+\def\bibfolder#1{../../lib/bib/#1}
\input{../../doc/stex-docheader}
\begin{document}
@@ -40,6 +40,9 @@
% \fi
%
% \begin{documentation}\label{pkg:terms:doc}
+% \changes{3.1.0}{2022/03/01}{!-Notation now works for symbols with arity=0 without needing an op-notation}
+% \changes{3.1.0}{2022/03/01}{Introduced \detokenize{\varemph, \varemph@uri}}
+% \changes{3.1.0}{2022/02/28}{Fixed bug with \detokenize{\STEXInternalCurrentSymbolStr} in variable annotations}
%
% Code related to symbolic expressions, typesetting notations,
% notation components, etc.
@@ -70,7 +73,7 @@
% |\plus[addition of]{some}{terms}|.
% \end{function}
%
-% \begin{function}{\_stex_term_math_oms:nnnn,\_stex_term_math_oma:nnnn,\_stex_term_math_omb:nnnn}
+% \begin{function}{\STEXInternalTermMathOMSiiii,\STEXInternalTermMathOMAiiii,\STEXInternalTermMathOMBiiii}
% \begin{syntax} \meta{URI}\meta{fragment}\meta{precedence}\meta{body} \end{syntax}
%
% Annotates \meta{body} as an \omdoc-term (|OMID|, |OMA| or |OMBIND|, respectively)
@@ -80,13 +83,13 @@
% the current downwards precedence and operator precedence.
% \end{function}
%
-% \begin{function}{\_stex_term_math_arg:nnn}
+% \begin{function}{\STEXInternalTermMathArgiii}
% \begin{syntax} \cs{stex_term_arg:nnn}\meta{int}\meta{prec}\meta{body} \end{syntax}
% Annotates \meta{body} as the \meta{int}th argument of the current |OMA| or |OMBIND|,
% with (downwards) argument precedence \meta{prec}.
% \end{function}
%
-% \begin{function}{\_stex_term_math_assoc_arg:nnnn}
+% \begin{function}{\STEXInternalTermMathAssocArgiiii}
% \begin{syntax} \cs{stex_term_arg:nnn}\meta{int}\meta{prec}\meta{notation}\meta{body} \end{syntax}
% Annotates \meta{body} as the \meta{int}th (associative) \emph{sequence} argument
% (as comma-separated list of terms) of the current |OMA| or |OMBIND|,
@@ -122,13 +125,7 @@
% followed by |*| in math mode, or whenever followed by |!|.
% \end{function}
%
-% \begin{function}{\stex_highlight_term:nn}
-% \begin{syntax} \cs{stex_highlight_term:nn}\Arg{URI}\Arg{args}\end{syntax}
-% Establishes a context for \cs{comp}. Stores the URI in a variable
-% so that \cs{comp} knows which symbol governs the current notation.
-% \end{function}
-%
-% \begin{function}{\comp, \compemph,\compemph@uri, \defemph, \defemph@uri, \symrefemph,\symrefemph@uri}
+% \begin{function}{\comp, \compemph,\compemph@uri, \defemph, \defemph@uri, \symrefemph,\symrefemph@uri,\varemph,\varemph@uri}
% \begin{syntax} \cs{comp}\Arg{args}\end{syntax}
% Marks \meta{args} as a notation component of the current symbol for
% highlighting, linking, etc.
@@ -180,7 +177,13 @@
Symbol~#1~has~no~operator~notation~for~notation~#2
}
\msg_new:nnn{stex}{error/notallowed}{
- Symbol~invocation~#1~not~allowed~in~notation~component~of~#2
+ Symbol~invokation~#1~not~allowed~in~notation~component~of~#2
+}
+\msg_new:nnn{stex}{error/doubleargument}{
+ Argument~#1~of~symbol~#2~already~assigned
+}
+\msg_new:nnn{stex}{error/overarity}{
+ Argument~#1~invalid~for~symbol~#2~with~arity~#3
}
% \end{macrocode}
@@ -192,33 +195,14 @@
% Invokes a semantic macro
%
% \begin{macrocode}
-\keys_define:nn { stex / terms } {
- lang .tl_set_x:N = \l_@@_lang_str ,
- variant .tl_set_x:N = \l_@@_variant_str ,
- unknown .code:n = \str_set:Nx
- \l_@@_variant_str \l_keys_key_str
-}
-\cs_new_protected:Nn \_@@_args:n {
- \str_clear:N \l_@@_lang_str
- \str_clear:N \l_@@_variant_str
-
- \keys_set:nn { stex / terms } { #1 }
-}
-
-\cs_new:Nn \_@@_reset:N {
- \tl_if_exist:NTF #1 {
- \def \exp_not:N #1 { \exp_args:No \exp_not:n #1 }
- }{
- \let \exp_not:N #1 \exp_not:N \undefined
- }
-}
-\bool_new:N \l_@@_allow_semantic_bool
-\bool_set_true:N \l_@@_allow_semantic_bool
+\bool_new:N \l_stex_allow_semantic_bool
+\bool_set_true:N \l_stex_allow_semantic_bool
\cs_new_protected:Nn \stex_invoke_symbol:n {
- \bool_if:NTF \l_@@_allow_semantic_bool {
+ \ifvmode\indent\fi
+ \bool_if:NTF \l_stex_allow_semantic_bool {
\str_if_eq:eeF {
\prop_item:cn {
l_stex_symdecl_#1_prop
@@ -236,7 +220,7 @@
\exp_after:wN \_@@_invoke_text:n
\fi: { #1 }
}{
- \msg_error:nnxx{stex}{error/notallowed}{#1}{\l_stex_current_symbol_str}
+ \msg_error:nnxx{stex}{error/notallowed}{#1}{\STEXInternalCurrentSymbolStr}
}
}
@@ -280,38 +264,50 @@
\cs_new_protected:Nn \_@@_invoke_op_custom:nn {
\exp_args:Nnx \use:nn {
- \str_set:Nn \l_stex_current_symbol_str { #1 }
- \bool_set_false:N \l_@@_allow_semantic_bool
- \_stex_term_oms:nnn {#1 \c_hash_str\c_hash_str}{#1}{
+ \def\comp{\_comp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \_stex_term_oms:nnn {#1}{#1 \c_hash_str CUSTOM-}{
\comp{ #2 }
}
}{
- \_@@_reset:N \l_stex_current_symbol_str
- \bool_set_true:N \l_@@_allow_semantic_bool
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
}
}
-\cs_new_protected:Nn \_@@_find_notation:nn {
- \str_set:Nn \l_stex_current_symbol_str { #1 }
+\keys_define:nn { stex / terms } {
+% lang .tl_set_x:N = \l_stex_notation_lang_str ,
+ variant .tl_set_x:N = \l_stex_notation_variant_str ,
+ unknown .code:n = \str_set:Nx
+ \l_stex_notation_variant_str \l_keys_key_str
+}
+
+\cs_new_protected:Nn \_@@_args:n {
+ % \str_clear:N \l_stex_notation_lang_str
+ \str_clear:N \l_stex_notation_variant_str
+
+ \keys_set:nn { stex / terms } { #1 }
+}
+
+\cs_new_protected:Nn \stex_find_notation:nn {
\_@@_args:n { #2 }
\seq_if_empty:cTF {
l_stex_symdecl_ #1 _notations
} {
\msg_error:nnxx{stex}{error/nonotation}{#1}{s}
} {
- \bool_lazy_all:nTF {
- {\str_if_empty_p:N \l_@@_variant_str}
- {\str_if_empty_p:N \l_@@_lang_str}
- }{
- \seq_get_left:cN {l_stex_symdecl_#1_notations}\l_@@_variant_str
+ \str_if_empty:NTF \l_stex_notation_variant_str {
+ \seq_get_left:cN {l_stex_symdecl_#1_notations}\l_stex_notation_variant_str
}{
\seq_if_in:cxTF {l_stex_symdecl_#1_notations}{
- \l_@@_variant_str \c_hash_str \l_@@_lang_str
+ \l_stex_notation_variant_str
}{
- \str_set:Nx \l_@@_variant_str { \l_@@_variant_str \c_hash_str \l_@@_lang_str }
+ % \str_set:Nx \l_stex_notation_variant_str { \l_stex_notation_variant_str \c_hash_str \l_stex_notation_lang_str }
}{
\msg_error:nnxx{stex}{error/nonotation}{#1}{
- ~\l_@@_variant_str \c_hash_str \l_@@_lang_str
+ ~\l_stex_notation_variant_str
}
}
}
@@ -319,43 +315,80 @@
}
\cs_new_protected:Npn \_@@_invoke_op_notation:nw #1 [#2] {
- \_@@_find_notation:nn { #1 }{ #2 }
- \bool_set_false:N \l_@@_allow_semantic_bool
- \cs_if_exist:cTF {
- stex_op_notation_ #1 \c_hash_str \l_@@_variant_str _cs
- }{
- \use:c{stex_op_notation_ #1 \c_hash_str \l_@@_variant_str _cs}
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_comp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
+ \stex_find_notation:nn { #1 }{ #2 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \cs_if_exist:cTF {
+ stex_op_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs
+ }{
+ \_stex_term_oms:nnn { #1 }{
+ #1 \c_hash_str \l_stex_notation_variant_str
+ }{
+ \use:c{stex_op_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs}
+ }
+ }{
+ \int_compare:nNnTF {\prop_item:cn {l_stex_symdecl_#1_prop}{arity}} = 0{
+ \cs_if_exist:cTF {
+ stex_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs
+ }{
+ \tl_set:Nx \STEXInternalSymbolAfterInvokationTL {
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalSymbolAfterInvokationTL
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ }
+ \def\comp{\_comp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \use:c{stex_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs}
+ }{
+ \msg_error:nnxx{stex}{error/nonotation}{#1}{
+ ~\l_stex_notation_variant_str
+ }
+ }
+ }{
+ \msg_error:nnxx{stex}{error/noop}{#1}{\l_stex_notation_variant_str}
+ }
+ }
}{
- \msg_error:nnxx{stex}{error/noop}{#1}{\l_@@_variant_str}
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
}
- \bool_set_true:N \l_@@_allow_semantic_bool
}
\cs_new_protected:Npn \_@@_invoke_notation:nw #1 [#2] {
- \_@@_find_notation:nn { #1 }{ #2 }
+ \stex_find_notation:nn { #1 }{ #2 }
\cs_if_exist:cTF {
- stex_notation_ #1 \c_hash_str \l_@@_variant_str _cs
+ stex_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs
}{
- \tl_set:Nx \stex_symbol_after_invocation_tl {
- \_@@_reset:N \stex_symbol_after_invocation_tl
- \_@@_reset:N \l_stex_current_symbol_str
- \bool_set_true:N \l_@@_allow_semantic_bool
+ \tl_set:Nx \STEXInternalSymbolAfterInvokationTL {
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalSymbolAfterInvokationTL
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
}
- \bool_set_false:N \l_@@_allow_semantic_bool
- \use:c{stex_notation_ #1 \c_hash_str \l_@@_variant_str _cs}
+ \def\comp{\_comp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \use:c{stex_notation_ #1 \c_hash_str \l_stex_notation_variant_str _cs}
}{
\msg_error:nnxx{stex}{error/nonotation}{#1}{
- ~\l_@@_variant_str
+ ~\l_stex_notation_variant_str
}
}
}
\prop_new:N \l_@@_custom_args_prop
+\cs_new_protected:Nn\_@@_custom_comp:n{\bool_set_false:N \l_stex_allow_semantic_bool\_comp{#1}\bool_set_true:N \l_stex_allow_semantic_bool}
+
\cs_new_protected:Nn \_@@_invoke_custom:nn {
\exp_args:Nnx \use:nn {
- \bool_set_false:N \l_@@_allow_semantic_bool
- \str_set:Nn \l_stex_current_symbol_str { #1 }
+ \def\comp{\_@@_custom_comp:n}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
\prop_clear:N \l_@@_custom_args_prop
\prop_put:Nnn \l_@@_custom_args_prop {currnum} {1}
\prop_get:cnN {
@@ -364,24 +397,25 @@
\prop_put:Nno \l_@@_custom_args_prop {args} \l_tmpa_str
\tl_set:Nn \arg { \_@@_arg: }
\str_if_empty:NTF \l_tmpa_str {
- \_stex_term_oms:nnn {#1}{#1}{#2}
+ \_stex_term_oms:nnn {#1}{#1\c_hash_str CUSTOM-}{\ignorespaces#2}
}{
\str_if_in:NnTF \l_tmpa_str b {
- \_stex_term_ombind:nnn {#1}{#1}{#2}
+ \_stex_term_ombind:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
}{
\str_if_in:NnTF \l_tmpa_str B {
- \_stex_term_ombind:nnn {#1}{#1}{#2}
+ \_stex_term_ombind:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
}{
- \_stex_term_oma:nnn {#1}{#1}{#2}
+ \_stex_term_oma:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
}
}
}
% TODO check that all arguments exist
}{
- \_@@_reset:N \l_stex_current_symbol_str
- \_@@_reset:N \arg
- \_@@_reset:N \l_@@_custom_args_prop
- \bool_set_true:N \l_@@_allow_semantic_bool
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \_stex_reset:N \arg
+ \_stex_reset:N \comp
+ \_stex_reset:N \l_@@_custom_args_prop
+ %\bool_set_true:N \l_stex_allow_semantic_bool
}
}
@@ -398,42 +432,142 @@
}
}{
\int_set:Nn \l_tmpa_int { #2 }
- \exp_args:NNx \prop_if_in:NnT \l_@@_custom_args_prop {\int_use:N \l_tmpa_int} {
- % TODO throw error
- }
}
\str_set:Nx \l_tmpa_str {\prop_item:Nn \l_@@_custom_args_prop {args} }
\int_compare:nNnT \l_tmpa_int > {\str_count:N \l_tmpa_str} {
- % TODO throw error
+ \msg_error:nnxxx{stex}{error/overarity}
+ {\int_use:N \l_tmpa_int}
+ {\STEXInternalCurrentSymbolStr}
+ {\str_count:N \l_tmpa_str}
+ }
+ \str_set:Nx \l_tmpa_str {\str_item:Nn \l_tmpa_str \l_tmpa_int}
+ \exp_args:NNx \prop_if_in:NnT \l_@@_custom_args_prop {\int_use:N \l_tmpa_int} {
+ \bool_lazy_any:nF {
+ {\str_if_eq_p:Vn \l_tmpa_str {a}}
+ {\str_if_eq_p:Vn \l_tmpa_str {B}}
+ }{
+ \msg_error:nnxx{stex}{error/doubleargument}
+ {\int_use:N \l_tmpa_int}
+ {\STEXInternalCurrentSymbolStr}
+ }
}
+ \exp_args:NNx \prop_put:Nnn \l_@@_custom_args_prop {\int_use:N \l_tmpa_int} {\ignorespaces#3}
+ \bool_set_true:N \l_stex_allow_semantic_bool
\IfBooleanTF#1{
- \stex_annotate_invisible:n {
- \exp_args:No \_stex_term_arg:nn {\l_stex_current_symbol_str}{#3}
+ \stex_annotate_invisible:n { %TODO
+ \exp_args:No \_stex_term_arg:nn {\l_tmpa_str\int_use:N \l_tmpa_int}{\ignorespaces#3}
}
- }{
- \exp_args:No \_stex_term_arg:nn {\l_stex_current_symbol_str}{#3}
+ }{ %TODO
+ \exp_args:No \_stex_term_arg:nn {\l_tmpa_str\int_use:N \l_tmpa_int}{\ignorespaces#3}
}
+ \bool_set_false:N \l_stex_allow_semantic_bool
}
\cs_new_protected:Nn \_stex_term_arg:nn {
- \exp_args:Nnx \use:nn {
- \bool_set_true:N \l_@@_allow_semantic_bool
- \stex_annotate:nnn{ arg }{ #1 }{ #2 }
- }{
- \bool_set_false:N \l_@@_allow_semantic_bool
- }
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ \stex_annotate:nnn{ arg }{ #1 }{ #2 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
}
-\cs_new_protected:Nn \_stex_term_math_arg:nnn {
+\cs_new_protected:Npn \STEXInternalTermMathArgiii #1#2#3 {
\exp_args:Nnx \use:nn
{ \int_set:Nn \l_@@_downprec { #2 }
\_stex_term_arg:nn { #1 }{ #3 }
}
{ \int_set:Nn \exp_not:N \l_@@_downprec { \int_use:N \l_@@_downprec } }
}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\STEXInternalTermMathAssocArgiiii}
+% \begin{macrocode}
+\cs_new_protected:Npn \STEXInternalTermMathAssocArgiiii #1#2#3#4 {
+ \cs_set:Npn \l_tmpa_cs ##1 ##2 { #4 }
+ \tl_set:Nn \l_tmpb_tl {\STEXInternalTermMathArgiii{#1}{#2}}
+ \tl_if_empty:nTF { #3 }{
+ \STEXInternalTermMathArgiii{#1}{#2}{}
+ }{
+ \exp_args:Nx \tl_if_empty:nTF { \tl_tail:n{ #3 }}{
+ \expandafter\if\expandafter\relax\noexpand#3
+ \tl_set:Nn \l_tmpa_tl {\_@@_math_assoc_arg_maybe_sequence:Nn#3{#1}}
+ \else
+ \tl_set:Nn \l_tmpa_tl {\_@@_math_assoc_arg_simple:nn{#1}{#3}}
+ \fi
+ \l_tmpa_tl
+ }{
+ \_@@_math_assoc_arg_simple:nn{#1}{#3}
+ }
+ }
+}
+\cs_new_protected:Nn \_@@_math_assoc_arg_maybe_sequence:Nn {
+ \str_set:Nx \l_tmpa_str { \cs_argument_spec:N #1 }
+ \str_if_empty:NTF \l_tmpa_str {
+ \exp_args:Nx \cs_if_eq:NNTF {
+ \tl_head:N #1
+ } \stex_invoke_sequence:n {
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N #1}
+ \str_set:Nx \l_tmpa_str {\exp_after:wN \use:n \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\prop_item:cn {stex_varseq_\l_tmpa_str _prop}{notation}}
+ \exp_args:NNo \seq_set_from_clist:Nn \l_tmpa_seq \l_tmpa_tl
+ \tl_set:Nx \l_tmpa_tl {{\exp_not:N \exp_not:n{
+ \exp_not:n{\exp_args:Nnx \use:nn} {
+ \exp_not:n {
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr
+ } {varseq://\l_tmpa_str}
+ \exp_not:n{ ##1 }
+ }{
+ \exp_not:n {
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ }
+ }
+ }}}
+ \exp_args:Nno \use:nn {\seq_set_map:NNn \l_tmpa_seq \l_tmpa_seq} \l_tmpa_tl
+ \seq_reverse:N \l_tmpa_seq
+ \seq_pop:NN \l_tmpa_seq \l_tmpa_tl
+ \seq_map_inline:Nn \l_tmpa_seq {
+ \exp_args:NNNo \exp_args:NNo \tl_set:No \l_tmpa_tl {
+ \exp_args:Nno
+ \l_tmpa_cs { ##1 } \l_tmpa_tl
+ }
+ }
+ \tl_set:Nx \l_tmpa_tl {
+ \_stex_term_omv:nn {varseq://\l_tmpa_str}{
+ \exp_args:No \exp_not:n \l_tmpa_tl
+ }
+ }
+ \exp_args:No\l_tmpb_tl\l_tmpa_tl
+ }{
+ \_@@_math_assoc_arg_simple:nn{#2} { #1 }
+ }
+ } {
+ \_@@_math_assoc_arg_simple:nn{#2} { #1 }
+ }
+}
+
+\cs_new_protected:Nn \_@@_math_assoc_arg_simple:nn {
+ \clist_set:Nn \l_tmpa_clist{ #2 }
+ \int_compare:nNnTF { \clist_count:N \l_tmpa_clist } < 2 {
+ \tl_set:Nn \l_tmpa_tl { \_stex_term_arg:nn{A#1}{ #2 } }
+ }{
+ \clist_reverse:N \l_tmpa_clist
+ \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
+ \tl_set:Nx \l_tmpa_tl { \_stex_term_arg:nn{A#1}{
+ \exp_args:No \exp_not:n \l_tmpa_tl
+ }}
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \exp_args:NNNo \exp_args:NNo \tl_set:No \l_tmpa_tl {
+ \exp_args:Nno
+ \l_tmpa_cs { \_stex_term_arg:nn{A#1}{##1} } \l_tmpa_tl
+ }
+ }
+ }
+ \exp_args:No\l_tmpb_tl\l_tmpa_tl
+}
% \end{macrocode}
% \end{macro}
%
@@ -535,15 +669,15 @@
%
% \omdoc terms:
%
-% \begin{macro}{\_stex_term_math_oms:nnnn}
+% \begin{macro}{\STEXInternalTermMathOMSiiii}
% \begin{macrocode}
\cs_new_protected:Nn \_stex_term_oms:nnn {
\stex_annotate:nnn{ OMID }{ #2 }{
- \stex_highlight_term:nn { #1 } { #3 }
+ #3
}
}
-\cs_new_protected:Nn \_stex_term_math_oms:nnnn {
+\cs_new_protected:Npn \STEXInternalTermMathOMSiiii #1#2#3#4 {
\_@@_maybe_brackets:nn { #3 }{
\_stex_term_oms:nnn { #1 } { #1\c_hash_str#2 } { #4 }
}
@@ -554,22 +688,22 @@
% \begin{macro}{\_stex_term_math_omv:nn}
% \begin{macrocode}
\cs_new_protected:Nn \_stex_term_omv:nn {
- \stex_annotate:nnn{ OMID }{ #1 }{
- \stex_highlight_term:nn { #1 } { #2 }
+ \stex_annotate:nnn{ OMV }{ #1 }{
+ #2
}
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\_stex_term_math_oma:nnnn}
+% \begin{macro}{\STEXInternalTermMathOMAiiii}
% \begin{macrocode}
\cs_new_protected:Nn \_stex_term_oma:nnn {
\stex_annotate:nnn{ OMA }{ #2 }{
- \stex_highlight_term:nn { #1 } { #3 }
+ #3
}
}
-\cs_new_protected:Nn \_stex_term_math_oma:nnnn {
+\cs_new_protected:Npn \STEXInternalTermMathOMAiiii #1#2#3#4 {
\_@@_maybe_brackets:nn { #3 }{
\_stex_term_oma:nnn { #1 } { #1\c_hash_str#2 } { #4 }
}
@@ -577,15 +711,15 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\_stex_term_math_omb:nnnn}
+% \begin{macro}{\STEXInternalTermMathOMBiiii}
% \begin{macrocode}
\cs_new_protected:Nn \_stex_term_ombind:nnn {
\stex_annotate:nnn{ OMBIND }{ #2 }{
- \stex_highlight_term:nn { #1 } { #3 }
+ #3
}
}
-\cs_new_protected:Nn \_stex_term_math_omb:nnnn {
+\cs_new_protected:Npn \STEXInternalTermMathOMBiiii #1#2#3#4 {
\_@@_maybe_brackets:nn { #3 }{
\_stex_term_ombind:nnn { #1 } { #1\c_hash_str#2 } { #4 }
}
@@ -593,173 +727,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\_stex_term_math_assoc_arg:nnnn}
-% \begin{macrocode}
-\cs_new_protected:Nn \_stex_term_math_assoc_arg:nnnn {
- % TODO sequences
- \clist_set:Nn \l_tmpa_clist{ #3 }
- \int_compare:nNnTF { \clist_count:N \l_tmpa_clist } < 2 {
- \tl_set:Nn \l_tmpa_tl { #3 }
- }{
- \cs_set:Npn \l_tmpa_cs ##1 ##2 { #4 }
- \clist_reverse:N \l_tmpa_clist
- \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
-
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:NNNo \exp_args:NNo \tl_set:No \l_tmpa_tl {
- \exp_args:Nno
- \l_tmpa_cs { ##1 } \l_tmpa_tl
- }
- }
- }
- \exp_args:Nnno
- \_stex_term_math_arg:nnn{#1}{#2}\l_tmpa_tl
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\stex_term_custom:nn}
-% \begin{macrocode}
-\cs_new_protected:Nn \stex_term_custom:nn {
- \str_set:Nn \l_@@_custom_uri { #1 }
- \str_set:Nn \l_tmpa_str { #2 }
- \tl_clear:N \l_tmpa_tl
- \int_zero:N \l_tmpa_int
- \int_set:Nn \l_tmpb_int { \str_count:N \l_tmpa_str }
- \_@@_custom_loop:
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\_@@_custom_loop:}
-% \begin{macrocode}
-\cs_new_protected:Nn \_@@_custom_loop: {
- \bool_set_false:N \l_tmpa_bool
- \bool_while_do:nn {
- \str_if_eq_p:ee X {
- \str_item:Nn \l_tmpa_str { \l_tmpa_int + 1 }
- }
- }{
- \int_incr:N \l_tmpa_int
- }
-
- \peek_charcode:NTF [ {
- % notation/text component
- \_@@_custom_component:w
- } {
- \int_compare:nNnTF \l_tmpa_int = \l_tmpb_int {
- % all arguments read => finish
- \_@@_custom_final:
- } {
- % arguments missing
- \peek_charcode_remove:NTF * {
- % invisible, specific argument position or both
- \peek_charcode:NTF [ {
- % visible specific argument position
- \_@@_custom_arg:wn
- } {
- % invisible
- \peek_charcode_remove:NTF * {
- % invisible specific argument position
- \_@@_custom_arg_inv:wn
- } {
- % invisible next argument
- \_@@_custom_arg_inv:wn [ \l_tmpa_int + 1 ]
- }
- }
- } {
- % next normal argument
- \_@@_custom_arg:wn [ \l_tmpa_int + 1 ]
- }
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\_@@_custom_arg_inv:wn}
-% \begin{macrocode}
-\cs_new_protected:Npn \_@@_custom_arg_inv:wn [ #1 ] #2 {
- \bool_set_true:N \l_tmpa_bool
- \_@@_custom_arg:wn [ #1 ] { #2 }
-}
-% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\_@@_custom_arg:wn}
-% \begin{macrocode}
-\cs_new_protected:Npn \_@@_custom_arg:wn [ #1 ] #2 {
- \str_set:Nx \l_tmpb_str {
- \str_item:Nn \l_tmpa_str { #1 }
- }
- \str_case:VnTF \l_tmpb_str {
- { X } {
- \msg_error:nnx{stex}{error/notationarg}{\l_@@_custom_uri}
- }
- { i } { \_@@_custom_set_X:n { #1 } }
- { b } { \_@@_custom_set_X:n { #1 } }
- { a } { \_@@_custom_set_X:n { #1 } } % TODO ?
- { B } { \_@@_custom_set_X:n { #1 } } % TODO ?
- }{}{
- \msg_error:nnx{stex}{error/notationarg}{\l_@@_custom_uri}
- }
-
- \bool_if:nTF \l_tmpa_bool {
- \tl_put_right:Nx \l_tmpa_tl {
- \stex_annotate_invisible:n {
- \_stex_term_arg:nn { \int_eval:n { #1 } }
- \exp_not:n { { #2 } }
- }
- }
- } {
- \tl_put_right:Nx \l_tmpa_tl {
- \_stex_term_arg:nn { \int_eval:n { #1 } }
- \exp_not:n { { #2 } }
- }
- }
-
- \_@@_custom_loop:
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\_@@_custom_set_X:n}
-% \begin{macrocode}
-\cs_new_protected:Nn \_@@_custom_set_X:n {
- \str_set:Nx \l_tmpa_str {
- \str_range:Nnn \l_tmpa_str 1 { #1 - 1 }
- X
- \str_range:Nnn \l_tmpa_str { #1 + 1 } { -1 }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\_@@_custom_component:}
-% \begin{macrocode}
-\cs_new_protected:Npn \_@@_custom_component:w [ #1 ] {
- \tl_put_right:Nn \l_tmpa_tl { \comp{ #1 } }
- \_@@_custom_loop:
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\_@@_custom_final:}
-% \begin{macrocode}
-\cs_new_protected:Nn \_@@_custom_final: {
- \int_compare:nNnTF \l_tmpb_int = 0 {
- \exp_args:Nnno \_stex_term_oms:nnn
- }{
- \str_if_in:NnTF \l_tmpa_str {b} {
- \exp_args:Nnno \_stex_term_ombind:nnn
- } {
- \exp_args:Nnno \_stex_term_oma:nnn
- }
- }
- { \l_@@_custom_uri } { \l_@@_custom_uri } { \l_tmpa_tl }
-}
-% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\symref,\symname}
% \begin{macrocode}
@@ -805,7 +773,7 @@
\let\compemph_uri_prev:\compemph@uri
\let\compemph@uri\symrefemph@uri
\exp_args:NNx \use:nn
- \stex_invoke_symbol:n { { \l_stex_get_symbol_uri_str }!{
+ \stex_invoke_symbol:n { { \l_stex_get_symbol_uri_str }!\ifmmode*\fi{
\l_@@_pre_tl \l_tmpa_str \l_@@_post_tl
} }
\let\compemph@uri\compemph_uri_prev:
@@ -821,7 +789,7 @@
\let\compemph_uri_prev:\compemph@uri
\let\compemph@uri\symrefemph@uri
\exp_args:NNx \use:nn
- \stex_invoke_symbol:n { { \l_stex_get_symbol_uri_str }!{
+ \stex_invoke_symbol:n { { \l_stex_get_symbol_uri_str }!\ifmmode*\fi{
\exp_after:wN \stex_capitalize:n \l_tmpa_str
\l_@@_post_tl
} }
@@ -836,48 +804,30 @@
%<@@=stex_notationcomps>
% \end{macrocode}
%
-%
-% \begin{macro}{\stex_highlight_term:nn}
+% \begin{macro}{\comp,\compemph@uri,\compemph,\defemph,\defemph@uri,\symrefemph,\symrefemph@uri,\varemph,\varemph@uri}
% \begin{macrocode}
-
-\str_new:N \l_stex_current_symbol_str
-\cs_new_protected:Nn \stex_highlight_term:nn {
- \exp_args:Nnx
- \use:nn {
- \str_set:Nx \l_stex_current_symbol_str { #1 }
- #2
- } {
- \str_set:Nx \exp_not:N \l_stex_current_symbol_str
- { \l_stex_current_symbol_str }
+\cs_new_protected:Npn \_comp #1 {
+ \str_if_empty:NF \STEXInternalCurrentSymbolStr {
+ \stex_html_backend:TF {
+ \stex_annotate:nnn { comp }{ \STEXInternalCurrentSymbolStr }{ #1 }
+ }{
+ \exp_args:Nnx \compemph@uri { #1 } { \STEXInternalCurrentSymbolStr }
+ }
}
}
-\cs_new_protected:Nn \stex_unhighlight_term:n {
-% \latexml_if:TF {
-% #1
-% } {
-% \rustex_if:TF {
-% #1
-% } {
- #1 %\iffalse{{\fi}} #1 {{\iffalse}}\fi
-% }
-% }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\comp,\compemph@uri,\compemph,\defemph,\defemph@uri,\symrefemph,\symrefemph@uri}
-% \begin{macrocode}
-\cs_new_protected:Npn \comp #1 {
- \str_if_empty:NF \l_stex_current_symbol_str {
- \rustex_if:TF {
- \stex_annotate:nnn { comp }{ \l_stex_current_symbol_str }{ #1 }
+\cs_new_protected:Npn \_varcomp #1 {
+ \str_if_empty:NF \STEXInternalCurrentSymbolStr {
+ \stex_html_backend:TF {
+ \stex_annotate:nnn { varcomp }{ \STEXInternalCurrentSymbolStr }{ #1 }
}{
- \exp_args:Nnx \compemph@uri { #1 } { \l_stex_current_symbol_str }
+ \exp_args:Nnx \varemph@uri { #1 } { \STEXInternalCurrentSymbolStr }
}
}
}
+\def\comp{\_comp}
+
\cs_new_protected:Npn \compemph@uri #1 #2 {
\compemph{ #1 }
}
@@ -900,7 +850,15 @@
}
\cs_new_protected:Npn \symrefemph #1 {
- \textbf{#1}
+ \emph{#1}
+}
+
+\cs_new_protected:Npn \varemph@uri #1 #2 {
+ \varemph{#1}
+}
+
+\cs_new_protected:Npn \varemph #1 {
+ #1
}
% \end{macrocode}
% \end{macro}
@@ -974,7 +932,11 @@
}
\cs_new_protected:Nn \_@@_invoke_text:n {
- %TODO
+ \peek_charcode_remove:NTF ! {
+ \_@@_invoke_op_custom:nn {#1}
+ }{
+ \_@@_invoke_custom:nn {#1}
+ }
}
@@ -982,29 +944,57 @@
\peek_charcode_remove:NTF ! {
\peek_charcode_remove:NTF ! {
\peek_charcode:NTF [ {
- \_@@_invoke_op_custom:nw
- }{
% TODO throw error
+ }{
+ \_@@_invoke_op_custom:nn
}
}{
\_@@_invoke_op:n { #1 }
}
}{
\peek_charcode_remove:NTF * {
- \_@@_invoke_text:n { #1 }
+ \_@@_invoke_custom:nn { #1 }
}{
\_@@_invoke_math_ii:n { #1 }
}
}
}
+\cs_new_protected:Nn \_@@_invoke_op_custom:nn {
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { var://#1 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \_stex_term_omv:nn {var://#1}{
+ \comp{ #2 }
+ }
+ }{
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ }
+}
+
\cs_new_protected:Nn \_@@_invoke_op:n {
\cs_if_exist:cTF {
stex_var_op_notation_ #1 _cs
}{
- \use:c{stex_var_op_notation_ #1 _cs }
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { var://#1 }
+ \_stex_term_omv:nn { var://#1 }{
+ \use:c{stex_var_op_notation_ #1 _cs }
+ }
+ }{
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ }
}{
- \msg_error:nnxx{stex}{error/noop}{variable~#1}{}
+ \int_compare:nNnTF {\prop_item:cn {l_stex_variable_#1_prop}{arity}} = 0{
+ \_@@_invoke_math_ii:n {#1}
+ }{
+ \msg_error:nnxx{stex}{error/noop}{variable~#1}{}
+ }
}
}
@@ -1012,21 +1002,94 @@
\cs_if_exist:cTF {
stex_var_notation_#1_cs
}{
- \str_set:Nn \l_stex_current_symbol_str { #1 }
+ \tl_set:Nx \STEXInternalSymbolAfterInvokationTL {
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalSymbolAfterInvokationTL
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ }
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { var://#1 }
+ \bool_set_false:N \l_stex_allow_semantic_bool
\use:c{stex_var_notation_#1_cs}
}{
\msg_error:nnxx{stex}{error/nonotation}{variable~#1}{s}
}
}
+
+\cs_new_protected:Nn \_@@_invoke_custom:nn {
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr { var://#1 }
+ \prop_clear:N \l__stex_terms_custom_args_prop
+ \prop_put:Nnn \l__stex_terms_custom_args_prop {currnum} {1}
+ \prop_get:cnN {
+ l_stex_variable_#1 _prop
+ }{ args } \l_tmpa_str
+ \prop_put:Nno \l__stex_terms_custom_args_prop {args} \l_tmpa_str
+ \tl_set:Nn \arg { \__stex_terms_arg: }
+ \str_if_empty:NTF \l_tmpa_str {
+ \_stex_term_omv:nn {var://#1}{\ignorespaces#2}
+ }{
+ \str_if_in:NnTF \l_tmpa_str b {
+ \_stex_term_ombind:nnn {var://#1}{}{\ignorespaces#2}
+ }{
+ \str_if_in:NnTF \l_tmpa_str B {
+ \_stex_term_ombind:nnn {var://#1}{}{\ignorespaces#2}
+ }{
+ \_stex_term_oma:nnn {var://#1}{}{\ignorespaces#2}
+ }
+ }
+ }
+ % TODO check that all arguments exist
+ }{
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \_stex_reset:N \arg
+ \_stex_reset:N \comp
+ \_stex_reset:N \l__stex_terms_custom_args_prop
+ %\bool_set_true:N \l_stex_allow_semantic_bool
+ }
+}
% \end{macrocode}
% \end{macro}
%
-%
+% \subsection{Sequences}
+% \begin{macrocode}
+%<@@=stex_sequences>
+
+\cs_new_protected:Nn \stex_invoke_sequence:n {
+ \peek_charcode_remove:NTF ! {
+ \_stex_term_omv:nn {varseq://#1}{
+ \exp_args:Nnx \use:nn {
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr {varseq://#1}
+ \prop_item:cn{stex_varseq_#1_prop}{notation}
+ }{
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ }
+ }
+ }{
+ \bool_set_false:N \l_stex_allow_semantic_bool
+ \def\comp{\_varcomp}
+ \str_set:Nn \STEXInternalCurrentSymbolStr {varseq://#1}
+ \tl_set:Nx \STEXInternalSymbolAfterInvokationTL {
+ \_stex_reset:N \comp
+ \_stex_reset:N \STEXInternalSymbolAfterInvokationTL
+ \_stex_reset:N \STEXInternalCurrentSymbolStr
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ }
+ \use:c { stex_varseq_#1_cs }
+ }
+}
+% \end{macrocode}
+
% \begin{macrocode}
%</package>
% \end{macrocode}
%
% \end{implementation}
+% \ifinfulldoc\else\printbibliography\fi
%
% \PrintIndex
diff --git a/macros/latex/contrib/stex/source/stex/stex.ins b/macros/latex/contrib/stex/source/stex/stex.ins
index 8d645b251b..0ca62264cb 100644
--- a/macros/latex/contrib/stex/source/stex/stex.ins
+++ b/macros/latex/contrib/stex/source/stex/stex.ins
@@ -31,8 +31,8 @@
\from{stex-statements.dtx}{package}
\from{stex-proofs.dtx}{package}
% ...
- \from{stex-others.dtx}{package}
\from{stex-metatheory.dtx}{package}
+ \from{stex-others.dtx}{package}
}
}
diff --git a/macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty b/macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
index 5d3a63c630..d7b861086a 100644
--- a/macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
+++ b/macros/latex/contrib/stex/tex/etc/beamerthemesTeX.sty
@@ -20,9 +20,14 @@
\mode
<presentation>
+\ifcsname slidelogo\endcsname\else
+ \newsavebox\slidelogo
+ \sbox\slidelogo{\sTeX}
+\fi
+
%% Logo images
\pgfdeclareimage[height=2ex]{instlogo}{sTeX-logo}
-\pgfdeclareimage[height=2ex]{cclogo}{cc_somerights}
+\pgfdeclareimage[height=2ex]{cclogo}{stex-cc_somerights}
%% A simple frame title with a long rule under it.
\setbeamertemplate{frametitle}{%
@@ -36,7 +41,7 @@
%% A Footer line with a Institution and CC logos
\setbeamertemplate{footline}[text line]{%
\usebeamercolor[fg]{titlelike}
- \pgfuseimage{instlogo}\hspace*{1cm}\insertshortauthor: \insertshorttitle\hfill{}%
+ \usebox\slidelogo\hspace*{1cm}\insertshortauthor: \insertshorttitle\hfill{}%
\insertframenumber\hfill\insertshortdate\hspace*{1cm}\pgfuseimage{cclogo}%
}
diff --git a/macros/latex/contrib/stex/tex/etc/lststex.sty b/macros/latex/contrib/stex/tex/etc/lststex.sty
index e3865cb464..2b0f7a9b2e 100644
--- a/macros/latex/contrib/stex/tex/etc/lststex.sty
+++ b/macros/latex/contrib/stex/tex/etc/lststex.sty
@@ -10,16 +10,10 @@
}
\lstdefinelanguage[sTeX]{TeX}[LaTeX]{TeX}%
- {moretexcs={[2]defin,twindef,atwindef,definalt,twindefalt,atwindefalt,definiendum,
- importmodule,usemodule,importmhmodule,usemhmodule,gimport,guse,
- symdef,symvariant,symtest,
- defi,defii,defiii,adefi,adefii,adefiii,defis,defiis,defiiis,
- trefi,trefii,trefiii,atrefi,atrefii,atrefiii,mtrefi,mtrefii,mtrefiii,
- trefis,trefiis,trefiiis,atrefis,atrefiis,atrefiiis,
- symi,symii,symiii,
- termref,sref},
- morekeywords={module,definition,axiom,assertion,omtext,
- mhmodule,mhmodsig,mhmodnl,modsig,modnl,
+ {moretexcs={[2]definiendum,definame,symref,symname,comp,
+ importmodule,usemodule
+ symdef,symdecl,notation,sref},
+ morekeywords={smodule,sdefinition,sassertion,sparagraph,
inputref,
sproof,spfstep,spfcases,spfcase,justification,premise}}
diff --git a/macros/latex/contrib/stex/tex/etc/stex-backend-latexml.cfg b/macros/latex/contrib/stex/tex/etc/stex-backend-latexml.cfg
new file mode 100644
index 0000000000..1cb4e31d3a
--- /dev/null
+++ b/macros/latex/contrib/stex/tex/etc/stex-backend-latexml.cfg
@@ -0,0 +1,56 @@
+\ifcsname if@latexml\endcsname\else
+\expandafter\newif\csname if@latexml\endcsname\@latexmlfalse
+\fi
+
+\tl_const:Nx \c_stex_html_emptyarg_tl {~}
+
+\prg_new_conditional:Nnn \latexml_if: {p, T, F, TF} {
+ \if@latexml
+ \expandafter\prg_return_true:
+ \else:
+ \expandafter\prg_return_false:
+ \fi:
+}
+
+\cs_new_protected:Nn \stex_annotate:nnn {
+ \_stex_html_checkempty:n { #3 }
+ \mode_if_math:TF {
+ \cs:w latexml@annotate@math\cs_end:{#1}{#2}{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+ }{
+ \cs:w latexml@annotate@text\cs_end:{#1}{#2}{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+ }
+}
+
+\cs_new_protected:Nn \stex_annotate_invisible:n {
+ \_stex_html_checkempty:n { #1 }
+ \mode_if_math:TF {
+ \cs:w latexml@invisible@math\cs_end:{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+ } {
+ \cs:w latexml@invisible@text\cs_end:{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+ }
+}
+
+\cs_new_protected:Nn \stex_annotate_invisible:nnn {
+ \_stex_html_checkempty:n { #3 }
+ \cs:w latexml@annotate@invisible\cs_end:{#1}{#2}{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+}
+
+\NewDocumentEnvironment{stex_annotate_env} { m m } {
+ \par\begin{latexml@annotateenv}{#1}{#2}
+}{
+ \par\end{latexml@annotateenv}
+}
+
+\prg_new_conditional:Nnn \stex_html_backend: {p, T, F, TF} {
+ \prg_return_true:
+} \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stex-backend-pdflatex.cfg b/macros/latex/contrib/stex/tex/etc/stex-backend-pdflatex.cfg
new file mode 100644
index 0000000000..bdd2810d09
--- /dev/null
+++ b/macros/latex/contrib/stex/tex/etc/stex-backend-pdflatex.cfg
@@ -0,0 +1,10 @@
+\tl_const:Nx \c_stex_html_emptyarg_tl {~}
+
+\cs_new_protected:Nn \stex_annotate:nnn {#3}
+\cs_new_protected:Nn \stex_annotate_invisible:n {}
+\cs_new_protected:Nn \stex_annotate_invisible:nnn {}
+\NewDocumentEnvironment{stex_annotate_env} { m m } {}{}
+
+\prg_new_conditional:Nnn \stex_html_backend: {p, T, F, TF} {
+ \prg_return_false:
+} \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg b/macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg
new file mode 100644
index 0000000000..3f48631e40
--- /dev/null
+++ b/macros/latex/contrib/stex/tex/etc/stex-backend-rustex.cfg
@@ -0,0 +1,59 @@
+\RequirePackage{rustex}
+
+\rustex_add_Namespace:nn{stex}{http://kwarc.info/ns/sTeX}
+\rustex_add_Namespace:nn{mmt}{http://uniformal.github.io/MMT}
+
+\tl_const:Nx \c_stex_html_emptyarg_tl {
+ \rustex_direct_HTML:n { \c_ampersand_str \c_hash_str 8205; }
+}
+
+\cs_new_protected:Nn \stex_annotate:nnn {
+ \_stex_html_checkempty:n { #3 }
+ \rustex_annotate_HTML:nn {
+ property="stex:#1" ~
+ resource="#2"
+ } {
+ \mode_if_vertical:TF{
+ \tl_use:N \l_stex_html_arg_tl\stex_par:
+ }{
+ \tl_use:N \l_stex_html_arg_tl
+ }
+ }
+}
+
+\cs_new_protected:Nn \stex_annotate_invisible:n {
+ \_stex_html_checkempty:n { #1 }
+ \rustex_annotate_HTML:nn {
+ stex:visible="false" ~
+ style:display="none"
+ } {
+ \ifmmode\tl_use:N \l_stex_html_arg_tl\else\hbox{\tl_use:N \l_stex_html_arg_tl}\fi
+ }
+}
+
+\cs_new_protected:Nn \stex_annotate_invisible:nnn {
+ \_stex_html_checkempty:n { #3 }
+ \rustex_annotate_HTML:nn {
+ property="stex:#1" ~
+ resource="#2" ~
+ stex:visible="false" ~
+ style:display="none"
+ } {
+ \ifmmode\tl_use:N \l_stex_html_arg_tl\else\hbox{\tl_use:N \l_stex_html_arg_tl}\fi
+ }
+}
+
+\NewDocumentEnvironment{stex_annotate_env} { m m } {
+ \stex_par:
+ \rustex_annotate_HTML_begin:n {
+ property="stex:#1" ~
+ resource="#2"
+ }
+}{
+ \stex_par:
+ \rustex_annotate_HTML_end:
+}
+
+\prg_new_conditional:Nnn \stex_html_backend: {p, T, F, TF} {
+ \prg_return_true:
+} \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stex-logo.sty b/macros/latex/contrib/stex/tex/etc/stex-logo.sty
new file mode 100644
index 0000000000..1bcb487aba
--- /dev/null
+++ b/macros/latex/contrib/stex/tex/etc/stex-logo.sty
@@ -0,0 +1,7 @@
+\RequirePackage{xspace}
+\protected\def\stex{%
+ \@ifundefined{texorpdfstring}{\raisebox{-.5ex}S\kern-.5ex\TeX}{%
+ \texorpdfstring{\raisebox{-.5ex}S\kern-.5ex\TeX}{sTeX}\xspace%
+ }%
+}
+\let\sTeX\stex \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stexthm.sty b/macros/latex/contrib/stex/tex/etc/stexthm.sty
index 5f2071c4fe..16931b514a 100644
--- a/macros/latex/contrib/stex/tex/etc/stexthm.sty
+++ b/macros/latex/contrib/stex/tex/etc/stexthm.sty
@@ -26,13 +26,16 @@
\declaretheorem[sibling=theorem]{axiom}
\stexpatchassertion[axiom]
-{\ifx\sassertiontitle\@empty\begin{axiom}[type=axiom]\else\begin{axiom}[type=axiom,\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{axiom}\else\begin{axiom}[\sassertiontitle]\fi}
{\end{axiom}}
\declaretheorem[sibling=theorem,style=remark]{remark}
\stexpatchassertion[remark]
{\ifx\sassertiontitle\@empty\begin{remark}\else\begin{remark}[\sassertiontitle]\fi}
{\end{remark}}
+\stexpatchparagraph[remark]
+{\ifx\sparagraphtitle\@empty\begin{remark}\else\begin{remark}[\sparagraphtitle]\fi}
+{\end{remark}}
\declaretheorem[sibling=theorem,style=definition]{example}
\stexpatchexample
@@ -42,4 +45,42 @@
\declaretheorem[sibling=theorem,style=definition]{definition}
\stexpatchdefinition
{\ifx\sdefinitiontitle\@empty\begin{definition}\else\begin{definition}[\sdefinitiontitle]\fi}
- {\end{definition}} \ No newline at end of file
+ {\end{definition}}
+
+
+\RequirePackage{pdfcomment}
+\RequirePackage{xcolor}
+
+\def\compemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{#1}\else#1\fi}
+\def\symrefemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{#1}\else#1\fi}
+\def\defemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{\textbf{#1}}\else\textbf{#1}\fi}
+\def\varemph#1{\ifcsname textcolor\endcsname\textcolor{gray}{#1}\else#1\fi}
+
+\protected\def\compemph@uri#1#2{%
+ \pdftooltip{%
+ \srefsymuri{#2}{\compemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\symrefemph@uri#1#2{%
+ \pdftooltip{%
+ \srefsymuri{#2}{\symrefemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\defemph@uri#1#2{%
+ \pdftooltip{%
+ \defemph{#1}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\varemph@uri#1#2{%
+ \pdftooltip{%
+ \varemph{#1}%
+ }{%
+ Variable~\detokenize{#2}%
+ }%
+} \ No newline at end of file
diff --git a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
index 100a1cc039..79611c3fd7 100644
--- a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
+++ b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
@@ -110,7 +110,7 @@
%<class|doc>\NeedsTeXFormat{LaTeX2e}
%<class|doc>\RequirePackage{expl3}
%<*!(driver|install)>
-%<!readme>\GetIdInfo $Id: nwafuthesis.dtx 1.11 2022-04-03 Nan Geng <nangeng@nwafu.edu.cn> $
+%<!readme>\GetIdInfo $Id: nwafuthesis.dtx 1.12 2022-05-24 Nan Geng <nangeng@nwafu.edu.cn> $
%<class> {Thesis template for Northwest A\&F University}
%<class>\ProvidesExplClass{\ExplFileName}
%<definition> {Definition file for nwafuthesis}
@@ -143,7 +143,7 @@
\textbf{\nwafuthesis: 西北农林科技大学学位论文
\xpinyin[font=\sffamily,format=\color{MaterialIndigo800}]{模}{mu2}板}}}
\author{耿楠}
-\date{\today\quad v1.11%
+\date{\today\quad v1.12%
\thanks{\url{https://gitee.com/nwafu_nan/nwafuthesis-l3}.}}
\begin{document}
@@ -803,7 +803,14 @@
% \begin{nwafusyntax}[emph={[1]withchapter}]
% withchapter = (*<\TTF>*)
% \end{nwafusyntax}
-% 选择论文章标题格式为章格式(如:第1章 绪论)还是报告格式(如:1 绪论)。
+% 选择论文章标题格式为章格式(如:第1章 绪论)还是报告格式(如:1 绪论),默认为章格式。
+% \end{function}
+%
+% \begin{function}[added=2022-05-24]{style/chapnum}
+% \begin{nwafusyntax}[emph={[1]chapnum}]
+% chapnum = (*<zh|(en)>*)
+% \end{nwafusyntax}
+% 选择章编号格式,zh表示中文数字,en表示阿拉伯数字,默认为阿拉伯数字。
% \end{function}
%
% \subsubsection{信息录入} \label{subsubsec:信息录入}
@@ -1793,6 +1800,17 @@
% \end{macrocode}
% \end{variable}
%
+% \changes{v1.12}{2022/05/24}{添加本科生中文章编号处理。}
+%
+% \begin{variable}{\g_@@_chapnum_int}
+% 章编号编号类型(默认为阿拉伯数字)。
+% 该选项是针对部分学院需要中文数字进行章编号(类似``第一章 绪论'')的需求
+% 仅为撰写本科毕业论文(设计)而设置的。
+% \begin{macrocode}
+\int_new:N \g_@@_chapnum_int
+% \end{macrocode}
+% \end{variable}
+%
% \subsubsection{内部函数}
%
% \begin{macro}{\file_input:V,
@@ -1860,8 +1878,10 @@
% \begin{macro}{\@@_fake_bold:nn,\fakebold}
% 利用PDF literal实现的伪粗命令。
% 参考\url{https://zhuanlan.zhihu.com/p/60262200}实现。
-% \#1 加粗系数
-% \#2 加粗内容
+% \begin{arguments}
+% \item 加粗系数
+% \item 需要加粗的文字
+% \end{arguments}
% \begin{macrocode}
\cs_new:Npn \@@_fake_bold:nn #1#2
{
@@ -2132,12 +2152,15 @@
{
{ ideo_comma } { "3001 },
{ ideo_full_stop } { "3002 },
+ { fwid_tilde } { "FF5E },
{ fwid_comma } { "FF0C },
{ fwid_full_stop } { "FF0E },
{ fwid_colon } { "FF1A },
{ fwid_semicolon } { "FF1B },
{ fwid_left_paren } { "FF08 },
- { fwid_right_paren } { "FF09 }
+ { fwid_right_paren } { "FF09 },
+ { fwid_left_title } { "300A },
+ { fwid_right_title } { "300B }
}
{ \@@_define_punct:nn #1 }
% \end{macrocode}
@@ -2153,11 +2176,14 @@
% 中文顿号 & Ideographic comma & \symbol{"3001} & U+3001 \\
% 中文句号 & Ideographic full stop & \symbol{"3002} & U+3002 \\
% 中文逗号 & Fullwidth comma & \symbol{"FF0C} & U+FF0C \\
+% 中文波浪号 & Fullwidth tilde & \symbol{"FF5E} & U+FF5E \\
% 全角西文句点 & Fullwidth full stop & \symbol{"FF0E} & U+FF0E \\
% 中文冒号 & Fullwidth colon & \symbol{"FF1A} & U+FF1A \\
% 中文分号 & Fullwidth semicolon & \symbol{"FF1B} & U+FF1B \\
% 中文左圆括号 & Fullwidth left parenthesis & \symbol{"FF08} & U+FF08 \\
% 中文右圆括号 & Fullwidth right parenthesis & \symbol{"FF09} & U+FF09 \\
+% 中文左书名号 & Fullwidth left book title & \symbol{"300A} & U+300A \\
+% 中文右书名号 & Fullwidth right book title & \symbol{"300B} & U+300B \\
% \bottomrule
% \end{tabular}
% \end{table}
@@ -2189,15 +2215,19 @@
% \begin{macrocode}
\tl_const:Nn \c_@@_orig_decl_text_tl
{
- 本人声明:所呈交的学位论文是我个人在导师指导下独立进行的研究工作及取
- 得的研究结果;论文中的研究数据及结果的获得完全符合学校《关于规范西北
- 农林科技大学研究生学术道德的暂行规定》,如果违反此规定,一切后果与法
- 律责任均由本人承担。\par
+ 本人声明{\c_@@_fwid_colon_tl}所呈交的学位论文是我个人在导师指导下%
+ 独立进行的研究工作及取得的研究结果{\c_@@_fwid_semicolon_tl}论文中%
+ 的研究数据及结果的获得完全符合学校{\c_@@_fwid_left_title_tl}%
+ 关于规范西北农林科技大学研究生学术道德的暂行规定{\c_@@_fwid_right_title_tl}%
+ {\c_@@_fwid_comma_tl}如果违反此规定{\c_@@_fwid_comma_tl}一切后果与%
+ 法律责任均由本人承担{\c_@@_ideo_full_stop_tl}\par%
- 尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经
- 发表或撰写过的研究结果,也不包含其他人和自己本人已获得西北农林科技大
- 学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同事对本
- 研究所做的任何贡献均已在论文的致谢中作了明确的说明并表示了谢意。
+ 尽我所知{\c_@@_fwid_comma_tl}除了文中特别加以标注和致谢的地方外%
+ {\c_@@_fwid_comma_tl}论文中不包含其他人已经发表或撰写过的研究结果%
+ {\c_@@_fwid_comma_tl}也不包含其他人和自己本人已获得西北农林科技大学%
+ 或其它教育机构的学位或证书而使用过的材料{\c_@@_ideo_full_stop_tl}与%
+ 我一同工作的同事对本研究所做的任何贡献均已在论文的致谢中作了明确的说%
+ 明并表示了谢意{\c_@@_ideo_full_stop_tl}%
}
}
{
@@ -2206,16 +2236,18 @@
% \begin{macrocode}
\tl_const:Nn \c_@@_orig_decl_text_tl
{
- 本人声明:所呈交的毕业
+ 本人声明{\c_@@_fwid_colon_tl}所呈交的毕业%
\clist_item:Nn \c__@@_bachelor_type_clist
- { \l__@@_info_bachelor_type_int }
- 是我个人在导师指导下
- 独立进行的研究工作及取得的研究结果。尽我所知,除了文中特别加
- 以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究结果,
- 也不包含其他人和自己本人已获得\c_@@_name_simp_tl{}或其它教育
- 机构的学位或证书而使用过的材料。与我一同工作的同事对本研究所做
- 的任何贡献均已在论文的致谢中作了明确的说明并表示了谢意。
- 如违反此声明,一切后果与法律责任均由本人承担。
+ { \l__@@_info_bachelor_type_int }%
+ 是我个人在导师指导下独立进行的研究工作及取得的研究结果{\c_@@_ideo_full_stop_tl}%
+ 尽我所知{\c_@@_fwid_comma_tl}除了文中特别加以标注和致谢的地%
+ 方外{\c_@@_fwid_comma_tl}论文中不包含其他人已经发表或撰写过%
+ 的研究结果{\c_@@_fwid_comma_tl}也不包含其他人和自己本人已获%
+ 得\c_@@_name_simp_tl{}或其它教育机构的学位或证书而使用过的材%
+ 料{\c_@@_ideo_full_stop_tl}与我一同工作的同事对本研究所做的%
+ 任何贡献均已在论文的致谢中作了明确的说明并表示了谢意{\c_@@_ideo_full_stop_tl}%
+ 如违反此声明{\c_@@_fwid_comma_tl}一切后果与法律责任均由本人%
+ 承担{\c_@@_ideo_full_stop_tl}%
}
}
}
@@ -2228,12 +2260,15 @@
% \begin{macrocode}
\tl_const:Nn \c_@@_super_decl_text_tl
{
- 本人承诺:我的研究生{\@@_text_uline:V \l_@@_info_author_tl}所呈交的
- 学位论文是在我指导下独立开展研究工作及取得的研究结果,属于我现
- 岗职务工作的结果,并严格按照学校《关于规范西北农林科技大学研究生学术
- 道德的暂行规定》而获得的研究结果。如果违反学校《关于规范西北农林科
- 技大学研究生学术道德的暂行规定》,我愿接受按学校有关规定的处罚处理并
- 承担相应导师连带责任。
+ 本人承诺{\c_@@_fwid_colon_tl}我的研究生{\@@_text_uline:V \l_@@_info_author_tl}%
+ 所呈交的学位论文是在我指导下独立开展研究工作及取得的研究结果%
+ {\c_@@_fwid_comma_tl}属于我现岗职务工作的结果{\c_@@_fwid_comma_tl}%
+ 并严格按照学校{\c_@@_fwid_left_title_tl}关于规范西北农林科技大学研%
+ 究生学术道德的暂行规定{\c_@@_fwid_right_title_tl}而%
+ 获得的研究结果{\c_@@_ideo_full_stop_tl}如果违反学校{\c_@@_fwid_left_title_tl}%
+ 关于规范西北农林科技大学研究生学术道德的暂行规定{\c_@@_fwid_right_title_tl}%
+ {\c_@@_fwid_comma_tl}我愿接受按学校%
+ 有关规定的处罚处理并承担相应导师连带责任{\c_@@_ideo_full_stop_tl}%
}
% \end{macrocode}
% \end{variable}
@@ -2250,23 +2285,34 @@
% \begin{macrocode}
\tl_const:Nn \c_@@_auth_decl_text_tl
{
- 本学位论文的知识产权归属西北农林科技大学。本人同意西北农林科技大学
- 保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和
- 借阅;同意西北农林科技大学将本学位论文的全部或部分内容授权汇编录入
- 中国博士/硕士学位论文全文数据库》和《中国学位论文全文数据库》进行
- 出版,并享受相关权益。\par
+ 本学位论文的知识产权归属西北农林科技大学{\c_@@_ideo_full_stop_tl}%
+ 本人同意西北农林科技大学保存或向国家有关部门或机构送交论文的纸%
+ 质版和电子版{\c_@@_fwid_comma_tl}允许论文被查阅和借阅{\c_@@_fwid_semicolon_tl}%
+ 同意西北农林科技大学将本学位论文的全部或部分内容授权汇编录入%
+ {\c_@@_fwid_left_title_tl}中国博士/硕士学位论文全文数据库%
+ {\c_@@_fwid_right_title_tl}和{\c_@@_fwid_left_title_tl}中国学位%
+ 论文全文数据库{\c_@@_fwid_right_title_tl}进行出版%
+ {\c_@@_fwid_comma_tl}并享受相关权益{\c_@@_ideo_full_stop_tl}\par
- 本人保证,在毕业离开(或者工作调离)西北农林科技大学后,发表或者使用本
- 学位论文及其相关的工作成果时,将以西北农林科技大学为第一署名单位,否
- 则,愿意按《中华人民共和国著作权法》等有关规定接受处理并承担法律责任。\par
+ 本人保证{\c_@@_fwid_comma_tl}在毕业离开(或者工作调离)西北农林科技%
+ 大学后{\c_@@_fwid_comma_tl}发表或者使用本学位论文及其相关的工作成%
+ 果时{\c_@@_fwid_comma_tl}将以西北农林科技大学为第一署名单位%
+ {\c_@@_fwid_comma_tl}否则{\c_@@_fwid_comma_tl}愿意按
+ {\c_@@_fwid_left_title_tl}中华人民共和国著作权法{\c_@@_fwid_right_title_tl}%
+ 等有关规定接受处理并承担法律责任{\c_@@_ideo_full_stop_tl}\par%
- 任何收存和保管本论文各种版本的其他单位和个人(包括研究生本人)未经本
- 论文作者的导师同意,不得有对本论文进行复制、修改、发行、出租、改编等
- 侵犯著作权的行为,否则,按违背《中华人民共和国著作权法》等有关规定处
- 理并追究法律责任。\par
+ 任何收存和保管本论文各种版本的其他单位和个人(包括研究生本人)未经本%
+ 论文作者的导师同意{\c_@@_fwid_comma_tl}不得有对本论文进行复制%
+ {\c_@@_ideo_comma_tl}修改{\c_@@_ideo_comma_tl}发行{\c_@@_ideo_comma_tl}%
+ 出租{\c_@@_ideo_comma_tl}改编等侵犯著作权的行为{\c_@@_fwid_comma_tl}%
+ 否则{\c_@@_fwid_comma_tl}按违背{\c_@@_fwid_left_title_tl}中华人民共和国%
+ 著作权法{\c_@@_fwid_right_title_tl}等有关规定处%
+ 理并追究法律责任{\c_@@_ideo_full_stop_tl}\par%
- {\sffamily (保密的学位论文在保密期限内,不得以任何方式发表、借阅、复印、
- 缩印或扫描复制手段保存、汇编论文)}
+ {\sffamily (保密的学位论文在保密期限内{\c_@@_fwid_comma_tl}不得以任何%
+ 方式发表{\c_@@_ideo_comma_tl}借阅{\c_@@_ideo_comma_tl}复印%
+ {\c_@@_ideo_comma_tl}缩印或扫描复制手段保存{\c_@@_ideo_comma_tl}汇编论文)%
+ }
}
}
{
@@ -2275,24 +2321,29 @@
% \begin{macrocode}
\tl_const:Nn \c_@@_auth_decl_text_tl
{
- 本毕业
- \clist_item:Nn \c__@@_bachelor_type_clist
- { \l__@@_info_bachelor_type_int }
- 的知识产权归属\c_@@_name_simp_tl{}。
- 本人同意\c_@@_name_simp_tl{}保存或向国家有关部门或机构
- 送交论文的纸质版和电子版,允许论文被查阅和借阅。\par
+ 本毕业\clist_item:Nn \c__@@_bachelor_type_clist
+ { \l__@@_info_bachelor_type_int }%
+ 的知识产权归属\c_@@_name_simp_tl{}{\c_@@_ideo_full_stop_tl}本%
+ 人同意\c_@@_name_simp_tl{}保存或向国家有关部门或机构送交论文的%
+ 纸质版和电子版{\c_@@_fwid_comma_tl}允许论文被查阅和借阅%
+ {\c_@@_ideo_full_stop_tl}\par
- 本人保证,在毕业离开\c_@@_name_simp_tl{}后,发表或者使用本毕业
- \clist_item:Nn \c__@@_bachelor_type_clist
- { \l__@@_info_bachelor_type_int }
- 及其相关的工作成果时,将以\c_@@_name_simp_tl{}
- 为第一署名单位,否则,愿意按《中华人民共和国著作权法》等
- 有关规定接受处理并承担法律责任。\par
+ 本人保证{\c_@@_fwid_comma_tl}在毕业离开\c_@@_name_simp_tl{}后%
+ {\c_@@_fwid_comma_tl}发表或者使用本毕业%
+ \clist_item:Nn \c__@@_bachelor_type_clist { \l__@@_info_bachelor_type_int }%
+ 及其相关的工作成果时{\c_@@_fwid_comma_tl}将以\c_@@_name_simp_tl{}%
+ 为第一署名单位{\c_@@_fwid_comma_tl}否则{\c_@@_fwid_comma_tl}%
+ 愿意按{\c_@@_fwid_left_title_tl}中华人民共和国著作权法%
+ {\c_@@_fwid_right_title_tl}等有关规定接受处理并承担法律责任%
+ {\c_@@_ideo_full_stop_tl}\par%
- 任何收存和保管本论文各种版本的其他单位和个人(包括作者本人)未经
- 本论文作者的导师同意,不得有对本论文进行复制、修改、发行、出租、
- 改编等侵犯著作权的行为,否则,按违背《中华人民共和国著作权法》
- 等有关规定处理并追究法律责任。
+ 任何收存和保管本论文各种版本的其他单位和个人(包括作者本人)未经%
+ 本论文作者的导师同意{\c_@@_fwid_comma_tl}不得有对本论文进行复制%
+ {\c_@@_ideo_comma_tl}修改{\c_@@_ideo_comma_tl}发行{\c_@@_ideo_comma_tl}%
+ 出租{\c_@@_ideo_comma_tl}改编等侵犯著作权的行为{\c_@@_fwid_comma_tl}%
+ 否则{\c_@@_fwid_comma_tl}按违背{\c_@@_fwid_left_title_tl}中华人民%
+ 共和国著作权法{\c_@@_fwid_right_title_tl}%
+ 等有关规定处理并追究法律责任{\c_@@_ideo_full_stop_tl}%
}
}
}
@@ -2456,7 +2507,7 @@
{ cosupervisor } { 联合指导教师 } { Co-Supervisor },
{ date } { 论文提交时间 } { Date~ of~ Submission },
{ abstract } { 摘 \quad 要 } { ABSTRACT },
- { keywords } { 关键字 } { KEYWORDS },
+ { keywords } { 关键词 } { KEY~WORDS },
{ clc } { 分类号 } { CLC~ number: },
{ notation } { 主要符号对照表 } { List~ of~ Symbols }
}
@@ -2470,7 +2521,7 @@
\clist_map_inline:nn
{
{ abstract } { 摘要 } { Abstract },
- { keywords } { 关键字 } { Keywords },
+ { keywords } { 关键词 } { Keywords },
{ clc } { 分类号 } { CLC~ number },
}
{ \@@_define_name:nnn ##1 }
@@ -2675,18 +2726,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{withchapter}
-% 设置本科论文章标题是否为章格式。
-% \begin{macrocode}
-\keys_define:nn { nwafu / style }
- {
- withchapter .bool_set:N = \l_@@_withchap_bool,
- withchapter .default:n = true,
- withchapter .initial:n = true,
- }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{
% \@@_setmainfont:nn,
% \@@_setsansfont:nn,
@@ -3439,8 +3478,8 @@
% \end{macrocode}
%
% \begin{variable}{\l_@@_header_center_mark_tl}
-% 保存中间页眉的文字。正文中设置为空,目录、摘要、符号表、
-% 参考文献、附录、致谢、个人简历等设置为相应标题。
+% 用于保存中间页眉文字的变量。正文中将其设置为空,目录、摘要、符号表、
+% 参考文献、附录、致谢、个人简历等设置为相应标题文字。
% \begin{macrocode}
\tl_new:N \l_@@_header_center_mark_tl
% \end{macrocode}
@@ -3462,7 +3501,7 @@
\bool_if:NT \g_@@_twoside_bool
{
\int_if_odd:nF \c@page
- { \hbox:n { } \thispagestyle { empty } \newpage }
+ { \hbox:n { } \thispagestyle{ empty } \newpage }
}
\tl_gset:Nn \l_@@_header_center_mark_tl { }
}
@@ -3479,8 +3518,8 @@
% \changes{v1.11}{2022/04/02}{删除本科生目录页眉,并修正单面模式目录页眉。}
%
% \begin{macro}{\frontmatter,\mainmatter}
-% 重定义 \tn{frontmatter}和\tn{frontmatter},
-% 以根据学校要求定制摘要、目录、主要符号对照表等前置部分的页眉页脚。
+% 重定义 \tn{frontmatter}和\tn{mainmatter},
+% 根据学校要求定制摘要、目录、主要符号对照表等前置及下文部分的页眉页脚。
% \begin{macrocode}
\cs_gset_eq:NN \nwafuhead\fancyhead
\cs_gset_eq:NN \nwafufoot\fancyfoot
@@ -3512,16 +3551,17 @@
% \end{macrocode}
% 研究生偶数页页眉
% \begin{macrocode}
- \nwafuhead[EC]{\small \nouppercase{
- \c_@@_name_simp_tl
- \clist_item:Nn \c_@@_thesis_type_clist
- { \g_@@_thesis_type_int } }
+ \nwafuhead[EC]{
+ \small \nouppercase{
+ \c_@@_name_simp_tl
+ \clist_item:Nn \c_@@_thesis_type_clist { \g_@@_thesis_type_int }
+ }
}
}{
% \end{macrocode}
% 本科生目录无页眉
% \begin{macrocode}
- \renewcommand{\headrulewidth}{0.0pt}
+ \RenewDocumentCommand \headrulewidth { } { 0 pt }
}
}{
% \end{macrocode}
@@ -3534,7 +3574,7 @@
\small \nouppercase { \l_@@_header_center_mark_tl }
}
}{
- \renewcommand{\headrulewidth}{0.0pt}
+ \RenewDocumentCommand \headrulewidth { } { 0 pt }
}
}
\nwafufoot[C]{\small\thepage}
@@ -3576,14 +3616,14 @@
% \end{macrocode}
% 本科生偶数页页眉
% \begin{macrocode}
- \renewcommand{\headrulewidth}{0.4pt}
+ \RenewDocumentCommand \headrulewidth { } { 0.4 pt }
\nwafuhead[EC]{\small \nouppercase{ \l__@@_info_title_tl } }
}
}{
% \end{macrocode}
% 单面模式
% \begin{macrocode}
- \renewcommand{\headrulewidth}{0.4pt}
+ \RenewDocumentCommand \headrulewidth { } { 0.4 pt }
\nwafuhead [ C ]
{
\int_if_odd:nTF \c@page
@@ -3823,6 +3863,25 @@
%
% \subsection{章节标题设置}
%
+% \begin{macro}{withchapter}
+% 设置本科论文章标题是否为章格式。
+% \begin{macrocode}
+\keys_define:nn { nwafu / style }
+ {
+ withchapter .bool_set:N = \l_@@_withchap_bool,
+ withchapter .default:n = true,
+ withchapter .initial:n = true,
+
+ chapnum .choice:,
+ chapnum .value_required:n = true,
+ chapnum .choices:nn =
+ { zh, en }
+ { \int_set_eq:NN \g_@@_chapnum_int \l_keys_choice_int },
+ chapnum .initial:n = en,
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \changes{v1.11}{2022/04/02}{修订本科生subsubsection编号两端括号为中文全角括号。}
%
% |\keys_set:nn{ctex}| 实际相当于调用 \cs{ctexset}。
@@ -3846,28 +3905,28 @@
{
pagestyle = fancy,
aftername = \hspace*{1.0\ccwd},
- format = \zihao{3} \normalfont \nwafu@hei \bfseries \centering,
+ format = \zihao{3} \normalfont \nwafu@hei \centering,
beforeskip = 1.47\baselineskip,
afterskip = 1.24\baselineskip,
- number = \@@_arabic:n { chapter },
+ number = \chinese{ chapter },
fixskip = true
},
section =
{
- format = \zihao{-3} \normalfont \nwafu@hei \bfseries \raggedright,
+ format = \zihao{-3} \normalfont \nwafu@hei \raggedright,
beforeskip = 1.09\baselineskip,
afterskip = 0.80\baselineskip,
fixskip = true
},
subsection =
{
- format = \zihao{4} \normalfont \nwafu@hei \bfseries \raggedright,
+ format = \zihao{4} \normalfont \nwafu@hei \raggedright,
beforeskip = 0.80\baselineskip,
fixskip = true
},
subsubsection =
{
- format = \zihao{-4} \normalfont \nwafu@hei \bfseries \raggedright,
+ format = \zihao{-4} \normalfont \nwafu@hei \raggedright,
beforeskip = 0.40\baselineskip,
afterskip = 0.40\baselineskip,
fixskip = true
@@ -3885,7 +3944,14 @@
pagestyle = fancy,
name = { \bool_if:NT \l_@@_withchap_bool {第},
\bool_if:NT \l_@@_withchap_bool {章} },
- number = \@@_arabic:n { chapter },
+ number = {%
+ \int_compare:nNnTF { \g_@@_chapnum_int } = { 1 }
+ {
+ \chinese{ chapter }
+ }{
+ \@@_arabic:n { chapter }
+ }
+ },
aftername = \hspace*{\ccwd},
format = \zihao{3} \normalfont \nwafu@hei \centering,
beforeskip = 0.25\baselineskip,
@@ -3913,7 +3979,7 @@
},
subsubsection =
{
- name = {(,)},
+ name = {{\c_@@_fwid_left_paren_tl},{\c_@@_fwid_right_paren_tl}},
aftername = \hspace*{0.0pt},
number = \@@_arabic:n { subsubsection },
format = \zihao{-4} \normalfont,
@@ -4442,15 +4508,24 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{图表绘制;浮动体}
+% \begin{macro}{\theequation}
+% 重定义公式编号。
+% \begin{macrocode}
+\cs_set:Npn \theequation
+ { \thechapter - \@@_arabic:n { equation } }
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.12}{2022/05/24}{修订图表题注西文为加粗。}
%
+% \subsection{图表及其浮动体}
%
% 分别设置浮动体 \env{figure} 和 \env{table} 的标题样式。
% \begin{macrocode}
\DeclareCaptionLabelSeparator{ccwd}{\hspace{0.5\ccwd}}
\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{~}(#2)}
-\DeclareCaptionFont{nwafu@table@font}{\nwafu@hei\small}
-\DeclareCaptionFont{nwafu@figure@font}{\nwafu@hei\small}
+\DeclareCaptionFont{nwafu@table@font}{\nwafu@hei\bfseries\small}
+\DeclareCaptionFont{nwafu@figure@font}{\nwafu@hei\bfseries\small}
\DeclareCaptionFont{nwafu@subtable@font}{\small}
\DeclareCaptionFont{nwafu@subfigure@font}{\small}
% \end{macrocode}
@@ -4462,7 +4537,7 @@
font = {stretch = 1},
labelsep = ccwd,
singlelinecheck = true,
- skip=4bp,
+ skip = 4bp,
}
% \end{macrocode}
% 图表题注字体设置。
@@ -4512,7 +4587,7 @@
% 在tabular、tabularx、longtable环境开始处添加代码,
% 设置表格行距和字号。
% \begin{macrocode}
-\@@_at_begin_environment:nn { tabular,tabularx,longtable,tblr }
+\@@_at_begin_environment:nn { tabular,longtable }
{
\exp_args:Nx \linespread { 1.05 }
\small\selectfont\ignorespaces
@@ -4859,7 +4934,7 @@
% \end{macrocode}
% \end{macro}
%
-% \subsubsection{定义内部函数}
+% \subsubsection{内部函数}
%
% \begin{macro}{\@@_spread_box:nn,\@@_spread_box:Vn,\@@_spread_box:nV}
% 分散对齐的水平盒子。
@@ -5240,7 +5315,7 @@
{ \c_@@_name_author_tl },
{ \c_@@_name_supervisor_tl },
{ \c_@@_name_cosupervisor_tl },
- { \c_@@_name_date_tl, }
+ { \c_@@_name_date_tl }
}
\@@_get_max_text_width:NN \l_@@_tmpa_dim \l_@@_tmpa_clist
% \end{macrocode}
@@ -5858,622 +5933,871 @@
% \end{macrocode}
% \end{macro}
%
+% \changes{v1.12}{2022/04/12}{重新抽象封面\pkg{xtemplate}模板。}
+%
% \subsubsection{封面模板}
%
-% 声明封面对象。不需要带参数(\emph{完全复制fduthesis.dtx未做任何修改})。
+% 改自\url{https://github.com/stone-zeng/fduthesis/pull/236}
+%
+% 本模板使用 \pkg{xtemplate} 提供的面向对象方法绘制封面。
+%
+% 以下分别从页面元素(element)和页面整体(page)的层次进行了抽象。
+% 当把页面部件作为一个对象时,则页面部件只具备有限数量的属性:
+% 内容、格式、边距、对齐方式等。而具体页面是这些对象的实例的集合,
+% 附加边距、行距等属性。通过 \pkg{xtemplate} 提供的功能,可以
+% 根据这些属性创建模板(template),进而能大量构建具有\emph{相似行为}
+% 的实例(instance)。
+%
+% 声明对象类型,此类对象均不需要带参数。
% \begin{macrocode}
-%<@@=nwafu_cover>
-\DeclareObjectType { nwafu / cover } { \c_zero_int }
+\DeclareObjectType { nwafu } { \c_zero_int }
% \end{macrocode}
%
-% \begin{macro}{\DeclareCoverTemplate,\nwafu_cover_declare_template:nn}
-% 声明封面模板。
-% \begin{arguments}
-% \item 模板名称
-% \item 封面部件列表,以逗号分隔
-% \end{arguments}
+% 定义元素模板。
+% \begin{macrocode}
+%<@@=nwafu_elem>
+% \end{macrocode}
+%
+% 声明页面元素模板接口。
+%
+% 元素是一个页面的基本组成单位,包括文字段落、插图等等。
+% 一个抽象的元素应当具备以下属性:
+% \begin{description}
+% \item[\opt{content}] 内容,即剥离了样式的元素本身
+% \item[\opt{format}] 格式,例如字号、字体
+% \item[\opt{bottom-skip}] 底边距,即与下一个元素的垂直距离
+% \item[\opt{align}] 对齐方式,包括左对齐、右对齐、居中、正常段落
+% \end{description}
% \begin{macrocode}
-\NewDocumentCommand \DeclareCoverTemplate { m m }
- { \nwafu_cover_declare_template:nn {#1} {#2} }
-\cs_new_protected:Npn \nwafu_cover_declare_template:nn #1#2
+\DeclareTemplateInterface { nwafu } { element } { \c_zero_int }
{
- \tl_set:Nn \l_@@_template_tl {#1}
+ content : tokenlist = \c_empty_tl,
+ format : tokenlist = \c_empty_tl,
+ bottom-skip : skip = \c_zero_skip,
+ align : choice { left, right, center, normal } = normal
+ }
% \end{macrocode}
-% 构建模板接口。
+%
+% 声明页面元素模板代码。^^A 涉及的变量将被自动创建。
% \begin{macrocode}
- \@@_declare_template_interface:nx {#1}
+\DeclareTemplateCode { nwafu } { element } { \c_zero_int }
+ {
+ content = \l_@@_content_tl,
+ format = \l_@@_format_tl,
+ bottom-skip = \l_@@_bottom_skip,
+ align =
{
- format : tokenlist,
- top-skip : skip,
- bottom-skip : skip,
- \clist_map_function:nN {#2} \@@_key_type:n
+ left =
+ { \tl_set_eq:NN \l_@@_begin_align_tl \flushleft
+ \tl_set_eq:NN \l_@@_end_align_tl \endflushleft },
+ right =
+ { \tl_set_eq:NN \l_@@_begin_align_tl \flushright
+ \tl_set_eq:NN \l_@@_end_align_tl \endflushright },
+ center =
+ { \tl_set_eq:NN \l_@@_begin_align_tl \center
+ \tl_set_eq:NN \l_@@_end_align_tl \endcenter },
+ normal =
+ { \tl_clear:N \l_@@_begin_align_tl
+ \tl_clear:N \l_@@_end_align_tl }
}
+ }
+ {
+ \AssignTemplateKeys
+ \group_begin:
+ \l_@@_begin_align_tl
+ \l_@@_format_tl
+ \l_@@_content_tl \par
+ \l_@@_end_align_tl
+ \group_end:
+ \__nwafu_vspace:N \l_@@_bottom_skip
+ }
% \end{macrocode}
-% 声明所用变量。
+%
+% 定义页面模板。
% \begin{macrocode}
- \tl_new:c { l_@@ / #1 / format_tl }
- \skip_new:c { l_@@ / #1 / top_skip }
- \skip_new:c { l_@@ / #1 / bottom_skip }
- \clist_map_inline:nn {#2}
- {
- \tl_new:c { l_@@ / #1 / ##1 / content_tl }
- \tl_new:c { l_@@ / #1 / ##1 / format_tl }
- \skip_new:c { l_@@ / #1 / ##1 / bottom_skip }
- }
+%<@@=nwafu_page>
% \end{macrocode}
-% 声明模板代码。^^A 以下名字空间为 `nwafu_cover' 而非 `nwafu'
+%
+% 声明页面模板接口。
+%
+% 页面是元素的集合。一个抽象的页面应当具备以下属性:
+% \begin{description}
+% \item[\opt{content}] 内容,包含页面元素模板实例名称的列表
+% \item[\opt{prefix}] 元素模板实例名称前缀(表示封一、封二等)
+% \item[\opt{format}] 格式,例如行距
+% \item[\opt{top-skip}] 上间距,即与页面顶部的距离
+% \item[\opt{bottom-skip}] 下间距,即与页面底部的距离
+% \end{description}
% \begin{macrocode}
- \@@_declare_template_code:nxn {#1}
- {
- format = \exp_not:c { l_@@ / #1 / format_tl },
- top-skip = \use:c { l_@@ / #1 / top_skip },
- bottom-skip = \use:c { l_@@ / #1 / bottom_skip },
- \clist_map_function:nN {#2} \@@_key_binding:n
- }
- {
- \AssignTemplateKeys
- \tl_use:c { l_@@ / #1 / format_tl }
- \__nwafu_vspace:c { l_@@ / #1 / top_skip }
- \clist_map_inline:nn {#2}
- {
- \use:c { @@ / #1 / ####1 / align:n }
- {
- \tl_use:c { l_@@ / #1 / ####1 / format_tl }
- \tl_use:c { l_@@ / #1 / ####1 / content_tl }
- \par
- }
- \__nwafu_vspace:c { l_@@ / #1 / ####1 / bottom_skip }
- }
- \__nwafu_vspace:c { l_@@ / #1 / bottom_skip }
- }
+\DeclareTemplateInterface { nwafu } { page } { \c_zero_int }
+ {
+ content : commalist = \c_empty_clist,
+ prefix : tokenlist = \c_empty_tl,
+ format : tokenlist = \c_empty_tl,
+ top-skip : skip = \c_zero_skip,
+ bottom-skip : skip = \c_zero_skip
}
% \end{macrocode}
+%
+% 声明页面模板代码。
+% \begin{macrocode}
+\DeclareTemplateCode { nwafu } { page } { \c_zero_int }
+ {
+ content = \l_@@_content_clist,
+ prefix = \l_@@_prefix_tl,
+ format = \l_@@_format_tl,
+ top-skip = \l_@@_top_skip,
+ bottom-skip = \l_@@_bottom_skip
+ }
+ {
+ \AssignTemplateKeys
+ \__nwafu_vspace:N \l_@@_top_skip
+ \group_begin:
+ \l_@@_format_tl
+ \clist_map_inline:Nn \l_@@_content_clist
+ { \UseInstance { nwafu } { \l_@@_prefix_tl ##1 } }
+ \group_end:
+ \__nwafu_vspace:N \l_@@_bottom_skip
+ }
+%
+%<@@=nwafu>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_declare_element:nn,\@@_declare_page:nn}
+% 封装 \pkg{xtemplate} 提供的函数,简化创建实例的过程。
+% \begin{arguments}
+% \item 实例名称
+% \item 参数列表
+% \end{arguments}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_declare_element:nn #1#2
+ { \DeclareInstance { nwafu } {#1} { element } {#2} }
+\cs_generate_variant:Nn \@@_declare_element:nn { nx }
+\cs_new_protected:Npn \@@_declare_page:nn #1#2
+ { \DeclareInstance { nwafu } {#1} { page } {#2} }
+\cs_generate_variant:Nn \@@_declare_page:nn { nx }
+% \end{macrocode}
% \end{macro}
%
-% \begin{variable}{\l_@@_template_tl}
-% 保存模板名称。
+% \subsubsection{定义封面页面元素}
+%
+% \begin{macro}{cover/i/id}
+% 封一学校代码和学号。仅本科生需要
% \begin{macrocode}
-\tl_new:N \l_@@_template_tl
+\@@_declare_element:nn { cover / i / id }
+ {
+ content = \@@_cover_id:,
+ format = \bfseries\zihao { -5 },
+ bottom-skip = 0 pt plus 0.3 fill,
+ align = right,
+ }
% \end{macrocode}
-% \end{variable}
+% \end{macro}
%
-% \begin{macro}{\@@_declare_template_interface:nn,
-% \@@_declare_template_code:nnn,
-% \@@_declare_template_interface:nx,
-% \@@_declare_template_code:nxn}
-% 为了展开的方便,这里需要封装 \pkg{xtemplate} 的一些函数。
+% \begin{macro}{cover/i/logo}
+% 封一学校视觉识别图片(Logo)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / i / logo }
+ {
+ content = \@@_cover_logo:,
+ bottom-skip = \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
+% \end{macrocode}
+% 研究生
+% \begin{macrocode}
+ -45 pt plus 0.3 fill
+ }{
+% \end{macrocode}
+% 本科生
% \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2
- { \DeclareTemplateInterface { nwafu / cover } {#1} { \c_zero_int } {#2} }
-\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3
- { \DeclareTemplateCode { nwafu / cover } {#1} { \c_zero_int } {#2} {#3} }
-\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx }
-\cs_generate_variant:Nn \@@_declare_template_code:nnn { nxn }
+ -30 pt plus 0.3 fill
+ },
+ align = center,
+ }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_key_type:n}
+% \begin{macro}{cover/i/type}
+% 封一论文类型。
% \begin{macrocode}
-\cs_new:Npn \@@_key_type:n #1
+\@@_declare_element:nn { cover / i / type }
{
- #1 / content : tokenlist,
- #1 / format : tokenlist,
- #1 / bottom-skip : skip,
- #1 / align : choice { left, right, center, normal } = normal,
+ content = \@@_cover_type:,
+ format = \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
+% \end{macrocode}
+% 研究生
+% \begin{macrocode}
+ \sffamily \zihao { 0 }
+ }{
+% \end{macrocode}
+% 本科生
+% \begin{macrocode}
+ \nwafu@kai\zihao{ 1 }
+ },
+ bottom-skip = -20 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_key_binding:n}
+% \begin{macro}{cover/i/title}
+% 封一论文题目。
% \begin{macrocode}
-\cs_new:Npn \@@_key_binding:n #1
+\@@_declare_element:nn { cover / i / title }
{
- #1 / content =
- \exp_not:c
- { l_@@ / \l_@@_template_tl / #1 / content_tl },
- #1 / format =
- \exp_not:c
- { l_@@ / \l_@@_template_tl / #1 / format_tl },
- #1 / bottom-skip =
- \exp_not:c
- { l_@@ / \l_@@_template_tl / #1 / bottom_skip },
- #1 / align =
- {
- left =
- \exp_not:N \cs_set_protected:cpn
- { @@ / \l_@@_template_tl / #1 / align:n }
- \exp_not:n {##1}
- {
- \exp_not:n
- {
- \group_begin:
- \flushleft ##1 \endflushleft
- \group_end:
- }
- },
- right =
- \exp_not:N \cs_set_protected:cpn
- { @@ / \l_@@_template_tl / #1 / align:n }
- \exp_not:n {##1}
- {
- \exp_not:n
- {
- \group_begin:
- \flushright ##1 \endflushright
- \group_end:
- }
- },
- center =
- \exp_not:N \cs_set_protected:cpn
- { @@ / \l_@@_template_tl / #1 / align:n }
- \exp_not:n {##1}
- {
- \exp_not:n
- {
- \group_begin:
- \center ##1 \endcenter
- \group_end:
- }
- },
- normal =
- \exp_not:N \cs_set_protected:cpn
- { @@ / \l_@@_template_tl / #1 / align:n }
- \exp_not:n {##1}
- { \exp_not:n { \group_begin: ##1 \group_end: } }
- },
+ content = \@@_fixed_width_center_box:nn { 0.9 \textwidth }
+ { \l_@@_info_title_tl },
+ format = \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
+% \end{macrocode}
+% 研究生
+% \begin{macrocode}
+ \sffamily \zihao { 2 }
+ }{
+% \end{macrocode}
+% 本科生
+% \begin{macrocode}
+ \nwafu@hei\zihao{ 2 }
+ },
+ bottom-skip = 80 pt plus 0.3 fill,
+ align = center,
}
-%<@@=nwafu>
% \end{macrocode}
% \end{macro}
%
-% \subsubsection{绘制封面}
+% \begin{macro}{cover/i/info}
+% 封一论文专业、单位、作者、导师等信息栏。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / i / info }
+ {
+ content = \@@_cover_info:,
+ format = \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
+% \end{macrocode}
+% 研究生
+% \begin{macrocode}
+ \@@_line_spread:n {1.05}\nwafu@hei \zihao { -3 }
+ }{
+% \end{macrocode}
+% 本科生
+% \begin{macrocode}
+ \rmfamily \zihao { 3 }
+ },
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
%
-% \begin{macro}{\makecoveri,\makecoverii,\makecoveriii,
-% \makecoveriv,\makecoverv,\makecovervi,\makecovervii}
-% 封面一$\sim$七,其中一$\sim$六为研究生使用,一和七为本科生使用。
+% \begin{macro}{cover/ii/type}
+% 封二论文类型(仅研究生用)。
% \begin{macrocode}
-% 封面一,研究生、本科生中文封面
-\NewDocumentCommand \makecoveri { }
+\@@_declare_element:nn { cover / ii / type }
{
- \thispagestyle { empty }
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \UseInstance { nwafu / cover } { cover-i-default }
- \restoregeometry
+ content = \int_case:nn { \g_@@_thesis_type_int }
+ {
+ {1}{
+% \end{macrocode}
+% 博士研究生
+% \begin{macrocode}
+ \@@_fixed_width_center_box:nn { 0.7\textwidth } {
+ Thesis~Submitted~to~\c_@@_name_en_tl\\
+ in~Partial~Fulfillment~of~the~Requirements\\
+ for~Degree~of\\
+ Doctor~of~Philosophy
+ }
+ }
+ {2}{
+% \end{macrocode}
+% 硕士研究生
+% \begin{macrocode}
+ \@@_fixed_width_center_box:nn { 0.7\textwidth } {
+ Thesis~Submitted~to~\c_@@_name_en_tl\\
+ in~Partial~Fulfillment~of~the~Requirements\\
+ for~Degree~of\\
+ Master~of
+ \int_case:nn {\l_@@_info_degree_type_int}
+ {
+ {1}{
+ \@@_text_uline:V \l_@@_info_mastertype_en_tl
+ }
+ {2}{
+ \@@_text_uline:V \l_@@_info_professionaltype_en_tl
+ }
+ }
+ }
+ }
+ },
+ format = \@@_line_spread:n {1.22} \zihao { -3 },
+ bottom-skip = 42 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
-% 封面二,研究生英文封面
+% \end{macro}
+%
+% \begin{macro}{cover/ii/title}
+% 封二论文英文(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecoverii { }
+\@@_declare_element:nn { cover / ii / title }
{
- \thispagestyle { empty }
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \UseInstance { nwafu / cover } { cover-ii-default }
- \restoregeometry
+ content = \l_@@_info_title_en_tl,
+ format = \@@_line_spread:n {0.90} \zihao { 1 } \bfseries,
+ bottom-skip = 35 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
-% 封面三,研究生封面内页(ID、答辩委员会等)
+% \end{macro}
+%
+% \begin{macro}{cover/ii/info}
+% 封二论文专业、作者、导师等英文信息栏(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecoveriii { }
+\@@_declare_element:nn { cover / ii / info }
{
- % \cleardoublepage
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \thispagestyle { empty }
- \UseInstance { nwafu / cover } { cover-iii-default }
- \restoregeometry
+ content = \@@_cover_info_en:,
+ format = \@@_line_spread:n {1.12} \zihao { -3 },
+ bottom-skip = 72 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
-% 封面四,研究生项目资助页
+% \end{macro}
+%
+% \begin{macro}{cover/ii/department}
+% 封二论文单位英文(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecoveriv { }
+\@@_declare_element:nn { cover / ii / department }
{
- % \cleardoublepage
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \thispagestyle { empty }
- \UseInstance { nwafu / cover } { cover-iv-default }
- \restoregeometry
+ content = \l_@@_info_department_en_tl,
+ format = \zihao { -3 },
+ bottom-skip = -32 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
-% 封面五,研究生独创性声明与导师承诺
+% \end{macro}
+%
+% \begin{macro}{cover/ii/nwafu}
+% 封二学校名称英文(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecoverv { }
+\@@_declare_element:nn { cover / ii / nwafu }
{
- % \cleardoublepage
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \thispagestyle { empty }
- \UseInstance { nwafu / cover } { cover-v-default }
- \restoregeometry
+ content = \c_@@_name_en_tl,
+ format = \zihao { -3 },
+ align = center,
}
% \end{macrocode}
-% 封面六,研究生论文使用授权说明
+% \end{macro}
+%
+% \begin{macro}{cover/iii/id}
+% 封三题名页ID(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecovervi { }
+\@@_declare_element:nn { cover / iii / id }
{
- % \cleardoublepage
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \thispagestyle { empty }
- \UseInstance { nwafu / cover } { cover-vi-default }
- \restoregeometry
+ content = \@@_cover_id:,
+ format = \@@_line_spread:n {1.12}\zihao { -4 },
+ bottom-skip = 35 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
-% 封面七,本科生独创性声明及论文使用授权说明
+% \end{macro}
+%
+% \begin{macro}{cover/iii/type}
+% 封三题名页论文类型(仅研究生用)。
% \begin{macrocode}
-\NewDocumentCommand \makecovervii { }
+\@@_declare_element:nn { cover / iii / type }
{
- % \cleardoublepage
- \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
- \thispagestyle { empty }
- \UseInstance { nwafu / cover } { cover-vii-default }
- \restoregeometry
+ content = \c_@@_name_simp_tl
+ \clist_item:Nn \c_@@_thesis_type_clist { \g_@@_thesis_type_int },
+ format = \zihao { -2 }\bfseries,
+ bottom-skip = 0 pt plus 0.3 fill,
+ align = center,
}
% \end{macrocode}
% \end{macro}
%
-% 声明各封面模板组成部分。
+% \begin{macro}{cover/iii/title}
+% 封三题名页论文题目(仅研究生用)。
% \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_cover_i_template:
+\@@_declare_element:nn { cover / iii / title }
{
- \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
- {
+ content = \l_@@_info_title_tl,
+ format = \zihao { 2 }\sffamily,
+ bottom-skip = 65 pt plus 0.3 fill,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/iii/instructors}
+% 封三题名页作者、导师(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / iii / instructors }
+ {
+ content = \@@_cover_instructors:,
+ format = \@@_line_spread:n {0.88}\zihao { 3 }\bfseries,
+ bottom-skip = 75 pt plus 0.3 fill,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/iii/ctitle}
+% 封三题名页答辩委员会标题(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / iii / ctitle }
+ {
+ content = 答辩委员会\c_@@_fwid_colon_tl,
+ format = \zihao { -3 }\bfseries,
+ bottom-skip = -20 pt plus 0.3 fill,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/iii/committees}
+% 封三题名页答辩委员会成员(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / iii / committees }
+ {
+ content = \@@_cover_defensecommittees:,
+ format = \@@_line_spread:n {1.12}\zihao { -3 },
+ bottom-skip = 60 pt plus 0.3 fill,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/iii/date}
+% 封三题名页答辩日期(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / iii / date }
+ {
+ content = {\bfseries{}答辩日期}\c_@@_fwid_colon_tl\l_@@_info_defensedate_tl,
+ format = \zihao { -3 },
+ bottom-skip = 0 pt plus 0.3 fill,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/iv/foundation}
+% 封四资助页(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / iv / foundation }
+ {
+ content = \@@_cover_foundation:,
+ format = \sffamily\zihao{3},
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/originality-decl-name}
+% 封五独创声明标题(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / originality-decl-name }
+ {
+ content = \c_@@_name_orig_decl_tl,
+ format = \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
+ bottom-skip = 0.25 cm,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/originality-decl-text}
+% 封五独创声明内容(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / originality-decl-text }
+ {
+ content = \c_@@_orig_decl_text_tl,
+ format = \zihao { -4 },
+ bottom-skip = 0.4 cm,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/originality-decl-sig}
+% 封五独创声明签字(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / originality-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
+ format = \zihao { -4 },
+ bottom-skip = 0.4 cm,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/supervisor-decl-name}
+% 封五导师承诺标题(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / supervisor-decl-name }
+ {
+ content = \c_@@_name_super_decl_tl,
+ format = \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
+ bottom-skip = 0.25 cm,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/supervisor-decl-text}
+% 封五导师承诺内容(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / supervisor-decl-text }
+ {
+ content = \c_@@_super_decl_text_tl,
+ format = \zihao { -4 },
+ bottom-skip = 0.4 cm,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/v/supervisor-decl-sig}
+% 封五导师承诺签字(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / v / supervisor-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_super_decl_sign_tl,
+ format = \zihao { -4 },
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vi/authorization-decl-name}
+% 封六使用授权标题(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vi / authorization-decl-name }
+ {
+ content = \c_@@_name_auth_decl_tl,
+ format = \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
+ bottom-skip = 0.25 cm,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vi/authorization-decl-text}
+% 封六使用授权内容(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vi / authorization-decl-text }
+ {
+ content = \c_@@_auth_decl_text_tl,
+ format = \zihao { -4 },
+ bottom-skip = 0.8 cm,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vi/authorization-decl-sig}
+% 封六使用授权签字(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vi / authorization-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vi/supervisor-decl-sig}
+% 封六使用授权签字(仅研究生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vi / supervisor-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_super_decl_sign_tl,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/originality-decl-name}
+% 封七独创声明标题(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / originality-decl-name }
+ {
+ content = \c_@@_name_orig_decl_tl,
+ format = \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
+ bottom-skip = 0.25 cm,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/originality-decl-text}
+% 封七独创声明内容(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / originality-decl-text }
+ {
+ content = \c_@@_orig_decl_text_tl,
+ format = \indent \zihao { -4 } \nwafu@kai,
+ bottom-skip = 0.4 cm,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/originality-decl-sig}
+% 封七独创声明学生签字(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / originality-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
+ format = \zihao { -4 } \nwafu@kai,
+ bottom-skip = 0.4 cm,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/authorization-decl-name}
+% 封七使用授权标题(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / authorization-decl-name }
+ {
+ content = \c_@@_name_auth_decl_tl,
+ format = \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
+ bottom-skip = 0.25 cm,
+ align = center,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/authorization-decl-text}
+% 封七使用授权内容(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / authorization-decl-text }
+ {
+ content = \c_@@_auth_decl_text_tl,
+ format = \zihao { -4 } \nwafu@kai,
+ bottom-skip = 0.4 cm,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/authorization-decl-sig}
+% 封七使用授权学生签字(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / authorization-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
+ format = \zihao { -4 } \nwafu@kai,
+ bottom-skip = -0.5 cm,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{cover/vii/supervisor-decl-sig}
+% 封七使用授权教师签字(仅本科生用)。
+% \begin{macrocode}
+\@@_declare_element:nn { cover / vii / supervisor-decl-sig }
+ {
+ content = \@@_cover_signature:N \c_@@_super_decl_sign_tl,
+ format = \zihao { -4 } \nwafu@kai,
+ align = left,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{定义封面页面参数}
+%
+% \begin{macro}{cover-i-default}
+% 封一。
+% \begin{macrocode}
+\@@_declare_page:nx { cover-i-default }
+ {
+ content = \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
% \end{macrocode}
% 研究生封面一
% \begin{macrocode}
- \DeclareCoverTemplate { cover-i }
- { logo, type, title, info }
- }{
+ { logo, type, title, info }
+ }{
% \end{macrocode}
% 本科生封面一
% \begin{macrocode}
- \DeclareCoverTemplate { cover-i }
- { id, logo, type, title, info }
- }
+ { id, logo, type, title, info }
+ },
+ prefix = cover / i /,
+ bottom-skip = 0 pt plus 1.5 fill
}
-\@@_declare_cover_i_template:
% \end{macrocode}
-% 研究生封面二
+% \end{macro}
+%
+% \begin{macro}{cover-ii-default}
+% 封二(仅研究生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-ii } {
- type, title, info, department, nwafu
+\@@_declare_page:nn { cover-ii-default }
+ {
+ content = { type, title, info, department, nwafu },
+ prefix = cover / ii /,
+ bottom-skip = 0 pt plus 1.5 fill
}
% \end{macrocode}
-% 研究生封面三
+% \end{macro}
+%
+% \begin{macro}{cover-iii-default}
+% 封三(仅研究生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-iii } { id, name, title, instructors,
- ctitle, committees, dtitle, date
+\@@_declare_page:nn { cover-iii-default }
+ {
+ content = { id, type, title, instructors, ctitle, committees, date },
+ prefix = cover / iii /,
+ top-skip = -55 pt plus 0.1 fill,
+ bottom-skip = 0 pt plus 0.5 fill
}
% \end{macrocode}
-% 研究生封面四
+% \end{macro}
+%
+% \begin{macro}{cover-iv-default}
+% 封四(仅研究生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-iv } { name-list }
+\@@_declare_page:nn { cover-iv-default }
+ {
+ content = { foundation },
+ prefix = cover / iv /,
+ }
% \end{macrocode}
-% 研究生封面五
+% \end{macro}
+%
+% \begin{macro}{cover-v-default}
+% 封五(仅研究生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-v }
+\@@_declare_page:nn { cover-v-default }
{
- originality-decl-name,
- originality-decl-text,
- originality-decl-sig,
- supervisor-decl-name,
- supervisor-decl-text,
- supervisor-decl-sig
+ content = { originality-decl-name,
+ originality-decl-text,
+ originality-decl-sig,
+ supervisor-decl-name,
+ supervisor-decl-text,
+ supervisor-decl-sig
+ },
+ prefix = cover / v /,
+ format = \@@_line_spread:n { 1.25 },
+ top-skip = 0 pt plus 0.2 fill,
+ bottom-skip = 0 pt plus 2.5 fill
}
% \end{macrocode}
-% 研究生封面六
+% \end{macro}
+%
+% \begin{macro}{cover-vi-default}
+% 封六(仅研究生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-vi }
+\@@_declare_page:nn { cover-vi-default }
{
- authorization-decl-name,
- authorization-decl-text,
- authorization-decl-sig,
- supervisor-decl-sig
+ content = { authorization-decl-name,
+ authorization-decl-text,
+ authorization-decl-sig,
+ supervisor-decl-sig
+ },
+ prefix = cover / vi /,
+ format = \@@_line_spread:n { 1.25 },
+ top-skip = 0 pt plus 0.2 fill,
+ bottom-skip = 0 pt plus 2.5 fill
}
% \end{macrocode}
-% 封面七,仅用于本科生独创性声明和授权说明
+% \end{macro}
+%
+% \begin{macro}{cover-vii-default}
+% 封七(仅本科生用)。
% \begin{macrocode}
-\DeclareCoverTemplate { cover-vii }
+\@@_declare_page:nn { cover-vii-default }
{
- originality-decl-name,
- originality-decl-text,
- originality-decl-sig,
- authorization-decl-name,
- authorization-decl-text,
- authorization-decl-sig,
- supervisor-decl-sig
+ content = { originality-decl-name,
+ originality-decl-text,
+ originality-decl-sig,
+ authorization-decl-name,
+ authorization-decl-text,
+ authorization-decl-sig,
+ supervisor-decl-sig
+ },
+ prefix = cover / vii /,
+ format = \@@_line_spread:n { 1.25 },
+ top-skip = 0 pt plus 0.2 fill,
+ bottom-skip = 0 pt plus 2.5 fill
}
% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{排版封面}
%
-% 定义封面的具体配置参数。
-% 封面一
+% \begin{macro}{\makecoveri,\makecoverii,\makecoveriii,
+% \makecoveriv,\makecoverv,\makecovervi,\makecovervii}
+% 封面一$\sim$七,其中一$\sim$六为研究生使用,一和七为本科生使用。
% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_cover_i_entities:
+% 封面一,研究生、本科生中文封面
+\NewDocumentCommand \makecoveri { }
{
- \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
- {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-i-default }
+ \restoregeometry
+ }
% \end{macrocode}
-% 研究生
+% 封面二,研究生英文封面
% \begin{macrocode}
- \DeclareInstance { nwafu / cover } { cover-i-default } { cover-i }
- {
- bottom-skip = 0 pt plus 1.5 fill,
- logo / content = \@@_cover_logo:,
- logo / bottom-skip = -45 pt plus 0.3 fill,
- logo / align = center,
- type / content = \@@_cover_type:,
- type / format = \sffamily \zihao { 0 },% \bfseries,
- type / bottom-skip = -20 pt plus 0.3 fill,
- type / align = center,
- title / content =
- \@@_fixed_width_center_box:nn
- { 0.9 \textwidth } { \l_@@_info_title_tl },
- title / format = \nwafu@hei \bfseries \zihao { 2 },
- title / bottom-skip = 80 pt plus 0.3 fill,
- title / align = center,
- info / content = \@@_cover_info:,
- info / format = \@@_line_spread:n {1.05}\nwafu@hei \zihao { -3 },
- info / align = center,
- }
- }{
+\NewDocumentCommand \makecoverii { }
+ {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-ii-default }
+ \restoregeometry
+ }
% \end{macrocode}
-% 本科生
+% 封面三,研究生封面内页(ID、答辩委员会等)
% \begin{macrocode}
- \DeclareInstance { nwafu / cover } { cover-i-default } { cover-i }
- {
- bottom-skip = 0 pt plus 0.5 fill,
- id / content = \@@_cover_id:,
- id / format = \bfseries\zihao { 4 },
- id / bottom-skip = 0 pt plus 0.3 fill,
- id / align = right,
- logo / content = \@@_cover_logo:,
- logo / bottom-skip = -30 pt,% plus 0.3 fill,
- logo / align = center,
- type / content = \@@_cover_type:,
- type / format = \nwafu@kai\zihao { 1 },
- type / bottom-skip = -20 pt plus 0.3 fill,
- type / align = center,
- title / content = \@@_fixed_width_center_box:nn
- { 0.9 \textwidth } { \l_@@_info_title_tl },
- title / format = \nwafu@hei \zihao { 2 },
- title / bottom-skip = 80 pt plus 0.3 fill,
- title / align = center,
- info / content = \@@_cover_info:,
- info / format = \rmfamily\zihao { 3 },
- info / align = center,
- }
- }
+\NewDocumentCommand \makecoveriii { }
+ {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-iii-default }
+ \restoregeometry
}
-\@@_define_cover_i_entities:
% \end{macrocode}
-% 封面二
+% 封面四,研究生项目资助页
% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_cover_ii_entities:
+\NewDocumentCommand \makecoveriv { }
{
- \int_case:nn {\g_@@_thesis_type_int}
- {
- {1}{
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-iv-default }
+ \restoregeometry
+ }
% \end{macrocode}
-% 博士研究生
+% 封面五,研究生独创性声明与导师承诺
% \begin{macrocode}
- \DeclareInstance { nwafu / cover } { cover-ii-default } { cover-ii }
- {
- bottom-skip = 0 pt plus 0.5 fill,
- type / content =
- \@@_fixed_width_center_box:nn { 0.7\textwidth } {
- Thesis~Submitted~to~\c_@@_name_en_tl\\
- in~Partial~Fulfillment~of~the~Requirements\\
- for~Degree~of\\
- Doctor~of~Philosophy
- },
- type / format = \@@_line_spread:n {1.22} \zihao { -3 },
- type / bottom-skip = 42 pt,% plus 0.3 fill,
- type / align = center,
- title / content = \l_@@_info_title_en_tl,
- title / format = \@@_line_spread:n {0.90}
- \zihao { 1 } \bfseries,
- title / bottom-skip = 35 pt,% plus 0.3 fill,
- title / align = center,
- info / content = \@@_cover_info_en:,
- info / format = \@@_line_spread:n {1.12} \zihao { -3 },
- info / bottom-skip = 72 pt,% plus 0.3 fill,
- info / align = center,
- department / content = \l_@@_info_department_en_tl,
- department / format = \zihao { -3 },
- department / bottom-skip = -32 pt,% plus 0.3 fill,
- department / align = center,
- nwafu / content = \c_@@_name_en_tl,
- nwafu / format = \zihao { -3 },
- nwafu / align = center,
- }
- }
- {2}{
+\NewDocumentCommand \makecoverv { }
+ {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-v-default }
+ \restoregeometry
+ }
% \end{macrocode}
-% 硕士研究生
+% 封面六,研究生论文使用授权说明
% \begin{macrocode}
- \DeclareInstance { nwafu / cover } { cover-ii-default } { cover-ii }
- {
- bottom-skip = 0 pt plus 0.5 fill,
- type / content =
- \@@_fixed_width_center_box:nn { 0.7\textwidth } {
- Thesis~Submitted~to~\c_@@_name_en_tl\\
- in~Partial~Fulfillment~of~the~Requirements\\
- for~Degree~of\\
- Master~of
- \int_case:nn {\l_@@_info_degree_type_int}
- {
- {1}{
- \@@_text_uline:V \l_@@_info_mastertype_en_tl
- }
- {2}{
- \@@_text_uline:V \l_@@_info_professionaltype_en_tl
- }
- }
- },
- type / format = \@@_line_spread:n {1.22} \zihao { -3 },
- type / bottom-skip = 42 pt,% plus 0.3 fill,
- type / align = center,
- title / content = \l_@@_info_title_en_tl,
- title / format = \@@_line_spread:n {0.90} \zihao { 1 } \bfseries,
- title / bottom-skip = 35 pt,% plus 0.3 fill,
- title / align = center,
- info / content = \@@_cover_info_en:,
- info / format = \@@_line_spread:n {1.12} \zihao { -3 },
- info / bottom-skip = 72 pt,% plus 0.3 fill,
- info / align = center,
- department / content = \l_@@_info_department_en_tl,
- department / format = \zihao { -3 },
- department / bottom-skip = -32 pt,% plus 0.3 fill,
- department / align = center,
- nwafu / content = \c_@@_name_en_tl,
- nwafu / format = \zihao { -3 },
- nwafu / align = center,
- }
- }
- }
+\NewDocumentCommand \makecovervi { }
+ {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-vi-default }
+ \restoregeometry
}
-\@@_define_cover_ii_entities:
-% \end{macrocode}
-% 封面三
-% \begin{macrocode}
-\DeclareInstance { nwafu / cover } { cover-iii-default } { cover-iii }
- {
- top-skip = -55 pt plus 0.1 fill,
- bottom-skip = 0 pt plus 0.5 fill,
- id / content = \@@_cover_id:,
- id / format = \@@_line_spread:n {1.12}\zihao { -4 },
- id / bottom-skip = 35 pt plus 0.3 fill,
- id / align = center,
- name / content = \c_@@_name_simp_tl
- \clist_item:Nn \c_@@_thesis_type_clist { \g_@@_thesis_type_int },
- name / format = \zihao { -2 }\bfseries,
- name / bottom-skip = 0 pt plus 0.3 fill,
- name / align = center,
- title / content = \l_@@_info_title_tl,
- title / format = \zihao { 2 } \sffamily,
- title / bottom-skip = 65 pt plus 0.3 fill,
- title / align = center,
- instructors / content = \@@_cover_instructors:,
- instructors / format = \@@_line_spread:n {0.88}\zihao { 3 }\bfseries,
- instructors / bottom-skip = 75 pt plus 0.3 fill,
- instructors / align = center,
- ctitle / content = 答辩委员会\c_@@_fwid_colon_tl,
- ctitle / format = \zihao { -3 }\bfseries,
- ctitle / bottom-skip = -20 pt plus 0.3 fill,
- ctitle / align = left,
- committees / content = \@@_cover_defensecommittees:,
- committees / format = \@@_line_spread:n {1.12}\zihao { -3 },
- committees / bottom-skip = 60 pt plus 0.3 fill,
- committees / align = center,
- date / content = {\bfseries{}答辩日期}\c_@@_fwid_colon_tl\l_@@_info_defensedate_tl,
- date / format = \zihao { -3 },
- date / bottom-skip = 0 pt plus 0.3 fill,
- date / align = left,
- }
-% \end{macrocode}
-% 封面四
-% \begin{macrocode}
-\DeclareInstance { nwafu / cover } { cover-iv-default } { cover-iv }
- {
- name-list / content = \@@_cover_foundation:,
- name-list / format = \sffamily\zihao{3},
- name-list / align = center,
- }
-% \end{macrocode}
-% 封面五
-% \begin{macrocode}
-\DeclareInstance { nwafu / cover } { cover-v-default } { cover-v }
- {
- format =
- \@@_line_spread:n { 1.25 },
- top-skip = 0 pt plus 0.2 fill,
- bottom-skip = 0 pt plus 2.5 fill,
- originality-decl-name / content = \c_@@_name_orig_decl_tl,
- originality-decl-text / content = \c_@@_orig_decl_text_tl,
- originality-decl-sig / content =
- \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
- supervisor-decl-name / content = \c_@@_name_super_decl_tl,
- supervisor-decl-text / content = \c_@@_super_decl_text_tl,
- supervisor-decl-sig / content =
- \@@_cover_signature:N \c_@@_super_decl_sign_tl,
- originality-decl-name / format =
- \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
- supervisor-decl-name / format =
- \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
- originality-decl-text / format = \zihao { -4 },
- supervisor-decl-text / format = \zihao { -4 },
- originality-decl-name / bottom-skip = 0.25 cm,
- originality-decl-text / bottom-skip = 0.4 cm,
- originality-decl-sig / bottom-skip = 0.4 cm,
- supervisor-decl-name / bottom-skip = 0.25 cm,
- supervisor-decl-text / bottom-skip = 0.4 cm,
- originality-decl-name / align = center,
- originality-decl-sig / align = left,
- supervisor-decl-name / align = center,
- supervisor-decl-sig / align = left,
- }
-% \end{macrocode}
-% 封面六
-% \begin{macrocode}
-\DeclareInstance { nwafu / cover } { cover-vi-default } { cover-vi }
- {
- format =
- \@@_line_spread:n { 1.25 },
- top-skip = 0 pt plus 0.2 fill,
- bottom-skip = 0 pt plus 2.5 fill,
- authorization-decl-name / content = \c_@@_name_auth_decl_tl,
- authorization-decl-text / content = \c_@@_auth_decl_text_tl,
- authorization-decl-sig / content =
- \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
- supervisor-decl-sig / content =
- \@@_cover_signature:N \c_@@_super_decl_sign_tl,
- authorization-decl-name / format =
- \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
- authorization-decl-text / format = \zihao { -4 },
- authorization-decl-name / bottom-skip = 0.25 cm,
- authorization-decl-text / bottom-skip = 0.8 cm,
- authorization-decl-sig / bottom-skip = -0.50 cm,
- authorization-decl-name / align = center,
- authorization-decl-sig / align = left,
- supervisor-decl-sig / align = left,
- }
-% \end{macrocode}
-% 封面七
-% \begin{macrocode}
-\DeclareInstance { nwafu / cover } { cover-vii-default } { cover-vii }
- {
- format =
- \@@_line_spread:n { 1.25 },
- top-skip = 0 pt plus 0.2 fill,
- bottom-skip = 0 pt plus 2.5 fill,
- originality-decl-name / content = \c_@@_name_orig_decl_tl,
- originality-decl-text / content = \c_@@_orig_decl_text_tl,
- originality-decl-sig / content =
- \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
- authorization-decl-name / content = \c_@@_name_auth_decl_tl,
- authorization-decl-text / content = \c_@@_auth_decl_text_tl,
- authorization-decl-sig / content =
- \@@_cover_signature:N \c_@@_orig_decl_sign_tl,
- supervisor-decl-sig / content =
- \@@_cover_signature:N \c_@@_super_decl_sign_tl,
- originality-decl-name / format =
- \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
- authorization-decl-name / format =
- \@@_line_spread:n { 1.2 } \zihao { 3 } \sffamily,
- originality-decl-text / format = \zihao { -4 } \nwafu@kai,
- authorization-decl-text / format = \zihao { -4 } \nwafu@kai,
- originality-decl-sig / format = \zihao { -4 } \nwafu@kai,
- authorization-decl-sig / format = \zihao { -4 } \nwafu@kai,
- supervisor-decl-sig / format = \zihao { -4 } \nwafu@kai,
- originality-decl-name / bottom-skip = 0.25 cm,
- originality-decl-text / bottom-skip = 0.4 cm,
- originality-decl-sig / bottom-skip = 0.4 cm,
- authorization-decl-name / bottom-skip = 0.25 cm,
- authorization-decl-text / bottom-skip = 0.4 cm,
- authorization-decl-sig / bottom-skip = -0.5 cm,
- originality-decl-name / align = center,
- originality-decl-sig / align = left,
- authorization-decl-name / align = center,
- authorization-decl-sig / align = left,
- supervisor-decl-sig / align = left,
+% \end{macrocode}
+% 封面七,本科生独创性声明及论文使用授权说明
+% \begin{macrocode}
+\NewDocumentCommand \makecovervii { }
+ {
+ \thispagestyle { empty }
+ \newgeometry{top=1.0in, bottom=1.0in, left=1.25in, right=1.25in}
+ \UseInstance { nwafu } { cover-vii-default }
+ \restoregeometry
}
% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{自动生成封面}
%
% \begin{macro}{style/auto-make-cover}
% \begin{variable}{\l_@@_auto_make_cover_bool}
@@ -6580,20 +6904,12 @@
% \begin{macrocode}
\NewDocumentCommand \makefront { }
{
- \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
- {
% \end{macrocode}
-% 恢复研究生页面尺寸
+% 恢复页面尺寸
% \begin{macrocode}
- \newgeometry{
- top = 3.1cm,
- bottom = 3.3cm,
- left = 2.6cm,
- right = 2.6cm,
- headheight = 0.8cm,
- headsep = 0.7cm,
- footskip = 1.4cm,
- }
+ \restoregeometry
+ \int_compare:nNnTF { \g_@@_thesis_type_int } < { 3 }
+ {
% \end{macrocode}
% 研究生,\cs{frontmatter}命令用于设置页眉页脚,页码格式
% 并于奇数页起排。
@@ -6637,18 +6953,6 @@
}
}{
% \end{macrocode}
-% 恢复本科生页面尺寸
-% \begin{macrocode}
- \newgeometry{
- top = 3.14cm,
- bottom = 3.80cm,
- left = 2.45cm,
- right = 2.45cm,
- headheight = 0.80cm,
- headsep = 0.63cm,
- footskip = 2.30cm,
- }
-% \end{macrocode}
% 本科生,无页眉页脚
% \begin{macrocode}
\cleardoublepage
@@ -6662,7 +6966,7 @@
\@@_get_text_width:Nn \l_@@_tmpa_dim {\c_@@_name_keywords_tl}
\group_begin:
\par \indent
- {\sffamily\zihao{-4}
+ {\nwafu@hei\zihao{-4}
\@@_spread_box:Vn \l_@@_tmpa_dim {\c_@@_name_abstract_tl}
\c_@@_fwid_colon_tl}
\normalfont
@@ -6670,7 +6974,7 @@
\group_end:
\end{abstract}
}
- \clearpage
+ \cleardoublepage
\thispagestyle { empty }
\tl_if_empty:NF \l_@@_abstract_file_en_tl
{
@@ -7059,7 +7363,7 @@
\cs_new_protected:Npn \@@_abstract_end:
{
\@@_keywords:nNn
- { \sffamily \zihao{-4} \c_@@_name_keywords_tl \c_@@_fwid_colon_tl }
+ { \nwafu@hei \zihao{-4} \c_@@_name_keywords_tl \c_@@_fwid_colon_tl }
\l_@@_abstract_keywords_clist { ; ~}
}
\cs_new_protected:Npn \@@_abstract_en_end:
@@ -7249,18 +7553,20 @@
% \end{macrocode}
% 参考文献引用与著录样式。
% \begin{macrocode}
- \@@_pass_options_to_biblatex:n { style = gb7714-NWAFU,
- sortlocale=zh__pinyin, gbtype=false,
- maxbibnames=99, maxcitenames=2, mincitenames=1,
- gbpub=false, uniquename=false, uniquelist=false,
- gbnamefmt=lowercase,
- doi=false, isbn=false,
- gbfieldtype=true, gbpunctin=false,
- }
+ \@@_pass_options_to_biblatex:n { style = gb7714-NWAFU }
% \end{macrocode}
% 其它参数。
% \begin{macrocode}
- \@@_pass_options_to_biblatex:n { backend = biber, }
+ % \@@_pass_options_to_biblatex:n
+ % {
+ % backend = biber,
+ % sortlocale=zh__pinyin, gbtype=false,
+ % maxbibnames=99, maxcitenames=2, mincitenames=1,
+ % gbpub=false, uniquename=false, uniquelist=false,
+ % gbnamefmt=lowercase,
+ % doi=false, isbn=false,
+ % gbfieldtype=true, gbpunctin=false,
+ % }
}
\cs_new_protected:Npn \@@_biblatex_post_setup:
{
@@ -7272,6 +7578,23 @@
% 修改参考文献标题。
% \begin{macrocode}
\defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} }
+% \end{macrocode}
+% 修订著录列表中字号为5号字。
+% \begin{macrocode}
+ \renewcommand{\bibfont}{\zihao{5}}
+% \end{macrocode}
+% 修订著录列表中英文页码范围连接符号。
+% \begin{macrocode}
+ \DefineBibliographyExtras{english}{%
+ \renewcommand*{\bibrangedash}{%
+ \iffieldequalstr{userd}{chinese}%
+ {%
+ \c_@@_fwid_tilde_tl%$\sim$
+ }{%
+ \textendash\penalty\hyphenpenalty
+ }
+ }
+ }
}
\cs_new_protected:Npn \@@_pass_options_to_biblatex:n #1
{ \PassOptionsToPackage {#1} { biblatex } }
@@ -7322,15 +7645,15 @@
{ \SetEnumitemValue{label}{#1}{#2} }
\clist_map_inline:nn
{
- { bullet } { \textbullet },
- { endash } { \normalfont\bfseries\textendash },
- { asterisk } { \textasteriskcentered },
- { arabic } { (\arabic*) },
- { alph } { (\alph*) },
- { roman } { (\roman*) },
- { alph } { (\alph*) },
- { roman } { \roman*. },
- { outline } { \upshape\ding{111} }
+ { bullet } { \textbullet },
+ { endash } { \normalfont\bfseries\textendash },
+ { asterisk } { \textasteriskcentered },
+ { arabic } { \c_@@_fwid_left_paren_tl\arabic*\c_@@_fwid_right_paren_tl },
+ { alph } { \c_@@_fwid_left_paren_tl\alph*\c_@@_fwid_right_paren_tl },
+ { roman } { \c_@@_fwid_left_paren_tl\roman*\c_@@_fwid_right_paren_tl },
+ { alph } { \c_@@_fwid_left_paren_tl\alph*\c_@@_fwid_right_paren_tl },
+ { roman } { \roman*. },
+ { outline } { \upshape\ding{111} }
}
{ \@@_enumitem_label_set:nn #1 }
\SetEnumitemValue{font}{sf}{\normalfont\sffamily}
@@ -7538,9 +7861,9 @@
figurename = 图,
tablename = 表,
}
-\labelformat{equation}{式(#1)}
-\labelformat{section}{节 #1}
-\labelformat{subsection}{小节 #1}
+\labelformat{equation}{式(#1)}
+\labelformat{section}{第 #1 节}
+\labelformat{subsection}{第 #1 小节}
% \end{macrocode}
%
% \subsection{用户接口}
diff --git a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
index 5fdeb65580..21c3a57b03 100644
--- a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+++ b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
Binary files differ
diff --git a/macros/xetex/latex/bidi/README b/macros/xetex/latex/bidi/README
index 0c1c7cdd26..f54d2a2278 100644
--- a/macros/xetex/latex/bidi/README
+++ b/macros/xetex/latex/bidi/README
@@ -1,6 +1,6 @@
___________________
The bidi package
-v36.9
+v37.0
This package provides a convenient interface for typesetting
bidirectional texts in Plain TeX and LaTeX, using XeTeX engine.
@@ -25,7 +25,7 @@ The announcements for the new releases of the package will
also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/05/22
+Current version release date: 2022/05/24
___________________________________________
Vafa Khalighi
diff --git a/macros/xetex/latex/bidi/bidi-doc-intro.ltx b/macros/xetex/latex/bidi/bidi-doc-intro.ltx
index 96be56fdff..086bc4557a 100644
--- a/macros/xetex/latex/bidi/bidi-doc-intro.ltx
+++ b/macros/xetex/latex/bidi/bidi-doc-intro.ltx
@@ -20,7 +20,7 @@ If you use \textsf{bidi} package to write any input \TeX\ document, and then run
* Copyright (c) 2007--2022 Vafa Khalighi
* Copyright (c) 2018--2020 bidi-tex GitHub Organization
*
-* v36.9, 2022/05/22
+* v37.0, 2022/05/24
*
* License: LaTeX Project Public License, version
* 1.3c or higher (your choice)
diff --git a/macros/xetex/latex/bidi/bidi-doc-title.ltx b/macros/xetex/latex/bidi/bidi-doc-title.ltx
index 4cca7587dd..e1b7a505fd 100644
--- a/macros/xetex/latex/bidi/bidi-doc-title.ltx
+++ b/macros/xetex/latex/bidi/bidi-doc-title.ltx
@@ -3,7 +3,7 @@
\begin{document}
\title{\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}\\
\LARGE Bidirectional typesetting in plain \TeX{} and \LaTeX, using \XeTeX{} engine\\[5pt]
-\large User documentation for \textcolor{blue!65!black}{version 36.9}}
+\large User documentation for \textcolor{blue!65!black}{version 37.0}}
\author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
\setcounter{page}{0}
\thispagestyle{empty}
@@ -13,7 +13,7 @@
\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}
\Large
-User documentation for \textcolor{blue!65!black}{version 36.9}}
+User documentation for \textcolor{blue!65!black}{version 37.0}}
\vskip 0pt plus 3fill
\textit{\large to my Master, \textbf{Ferdowsi The Great}}
diff --git a/macros/xetex/latex/bidi/bidi-doc.ltx b/macros/xetex/latex/bidi/bidi-doc.ltx
index cd2d09f9aa..2e468609a0 100644
--- a/macros/xetex/latex/bidi/bidi-doc.ltx
+++ b/macros/xetex/latex/bidi/bidi-doc.ltx
@@ -1,7 +1,7 @@
\documentclass{ltxdoc}
\input{bidi-doc-preamble.ltx}
\hypersetup{%
- pdftitle={User documentation for version 36.9 of the bidi
+ pdftitle={User documentation for version 37.0 of the bidi
package}%
}
\begin{document}
diff --git a/macros/xetex/latex/bidi/bidi-doc.pdf b/macros/xetex/latex/bidi/bidi-doc.pdf
index dfc66c1851..0e2223f9a5 100644
--- a/macros/xetex/latex/bidi/bidi-doc.pdf
+++ b/macros/xetex/latex/bidi/bidi-doc.pdf
Binary files differ
diff --git a/macros/xetex/latex/bidi/bidi.dtx b/macros/xetex/latex/bidi/bidi.dtx
index 4b48ad45ea..793628e4fa 100644
--- a/macros/xetex/latex/bidi/bidi.dtx
+++ b/macros/xetex/latex/bidi/bidi.dtx
@@ -5,7 +5,7 @@
%<*readme>
___________________
The bidi package
-v36.9
+v37.0
This package provides a convenient interface for typesetting
bidirectional texts in Plain TeX and LaTeX, using XeTeX engine.
@@ -30,7 +30,7 @@ The announcements for the new releases of the package will
also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/05/22
+Current version release date: 2022/05/24
___________________________________________
Vafa Khalighi
@@ -83,6 +83,11 @@ by Vafa Khalighi.
\generate{\file{artikel2-xetex-bidi.def}{\from{\jobname.dtx}{table,artikel2-xetex-bidi.def}}}
\generate{\file{artikel3-xetex-bidi.def}{\from{\jobname.dtx}{table,artikel3-xetex-bidi.def}}}
\generate{\file{arydshln-xetex-bidi.def}{\from{\jobname.dtx}{table,arydshln-xetex-bidi.def}}}
+\generate{\file{beamer-xetex-bidi.def}{\from{\jobname.dtx}{table,beamer-xetex-bidi.def}}}
+\generate{\file{beamerbasecolor-xetex-bidi.def}{\from{\jobname.dtx}{table,beamerbasecolor-xetex-bidi.def}}}
+\generate{\file{beamerbaseframecomponents-xetex-bidi.def}{\from{\jobname.dtx}{table,beamerbaseframecomponents-xetex-bidi.def}}}
+\generate{\file{beamerbaselocalstructure-xetex-bidi.def}{\from{\jobname.dtx}{table,beamerbaselocalstructure-xetex-bidi.def}}}
+\generate{\file{beamerinnerthemedefault-xetex-bidi.def}{\from{\jobname.dtx}{table,beamerinnerthemedefault-xetex-bidi.def}}}
\generate{\file{bidi.sty}{\from{\jobname.dtx}{table,bidi.sty}}}
\generate{\file{bidi.tex}{\from{\jobname.dtx}{table,bidi.tex}}}
\generate{\file{bidi2in1.sty}{\from{\jobname.dtx}{table,bidi2in1.sty}}}
@@ -234,7 +239,7 @@ by Vafa Khalighi.
\documentclass{ltxdoc}
\input{bidi-doc-preamble.ltx}
\hypersetup{%
- pdftitle={Source documentation for version 36.9 of the bidi
+ pdftitle={Source documentation for version 37.0 of the bidi
package}%
}
\EnableCrossrefs
@@ -253,7 +258,7 @@ by Vafa Khalighi.
% \GetFileInfo{\jobname.dtx}
% \title{\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}\\
%\LARGE Bidirectional typesetting in plain \TeX{} and \LaTeX, using \XeTeX{} engine\\[5pt]
-%\large Source documentation for \textcolor{blue!65!black}{version 36.9}}
+%\large Source documentation for \textcolor{blue!65!black}{version 37.0}}
% \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
%\setcounter{page}{0}
%\thispagestyle{empty}
@@ -263,7 +268,7 @@ by Vafa Khalighi.
%\textcolor{blue!65!black}{\Huge The \textsf{bidi} \textit{Package}}
%
%\Large
-%Source documentation for \textcolor{blue!65!black}{version 36.9}}
+%Source documentation for \textcolor{blue!65!black}{version 37.0}}
%
%\vskip 0pt plus 3fill
%\textit{\large to my Master, \textbf{Ferdowsi The Great}}
@@ -312,7 +317,7 @@ by Vafa Khalighi.
%\iffalse
%<*table>
%\fi
-%% \CheckSum{50672}
+%% \CheckSum{51690}
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
@@ -1927,13 +1932,540 @@ by Vafa Khalighi.
% \end{macrocode}
% \iffalse
%</arydshln-xetex-bidi.def>
+%<*beamer-xetex-bidi.def>
+%\fi
+% \section{File \texttt{beamer-xetex-bidi.def}}
+% \begin{macrocode}
+\ProvidesFile{beamer-xetex-bidi.def}[2022/05/24 v0.1 bidi adaptations for beamer class for XeTeX engine]
+\AtBeginDocument{%
+ \if@RTLmain
+ \raggedleft
+ \else
+ \raggedright
+ \fi
+}
+\renewcommand*{\bidi@beamer@ragged}{%
+ \if@RTL
+ \raggedleft
+ \else
+ \raggedright
+ \fi
+}
+% \end{macrocode}
+% \iffalse
+%</beamer-xetex-bidi.def>
+%<*beamerbasecolor-xetex-bidi.def>
+%\fi
+% \section{File \texttt{beamerbasecolor-xetex-bidi.def}}
+% \begin{macrocode}
+\ProvidesFile{beamerbasecolor-xetex-bidi.def}[2022/05/24 v0.1 bidi adaptations for beamerbasecolor package for XeTeX engine]
+\renewenvironment{beamercolorbox}[2][]{%
+ \def\beamer@vmode{\leavevmode}%
+ \setkeys{beamercolbox}{wd=\textwidth,ht={},dp={},%
+ leftskip=0pt,rightskip=0pt plus1fil,%
+ sep=0pt,colsep=0pt,colsep*=0pt,%
+ shadow=false,rounded=false,ignorebg=false}%
+ \setkeys{beamercolbox}{#1}%
+ \ifbeamercolorempty[bg]{#2}{\@tempswafalse}{\@tempswatrue}%
+ \ifbeamer@colbox@ignorebg\@tempswafalse\fi%
+ \def\beamer@colbox@color{#2}%
+ \setbox\beamer@tempbox=\hbox\bgroup\color@begingroup
+ \if@RTL
+ \@hboxRconstructtrue
+ \else
+ \@hboxRconstructfalse
+ \fi
+ \ifbeamer@colbox@ignorebg%
+ \colorlet{beamer@temp@color}{bg}%
+ \usebeamercolor[fg]{#2}%
+ \colorlet{bg}{beamer@temp@color}%
+ \else%
+ \usebeamercolor[fg]{#2}%
+ \fi%
+ \vbox\bgroup%
+ \hsize=\beamer@colbox@wd%
+ \@arrayparboxrestore%
+ \leftskip=\beamer@colbox@ls%
+ \ifdim\beamer@colbox@sep>\z@\advance\leftskip\beamer@colbox@sep\fi%
+ \rightskip=\beamer@colbox@rs%
+ \ifdim\beamer@colbox@sep>\z@\advance\rightskip\beamer@colbox@sep\fi%
+ \if@tempswa\ifdim\beamer@colbox@colsep>\z@%
+ \advance\leftskip by\beamer@colbox@colsep%
+ \advance\rightskip by\beamer@colbox@colsep%
+ \vskip\beamer@colbox@colsep%
+ \fi%
+ \ifdim\beamer@colbox@colseps>\z@\vskip\beamer@colbox@colseps\fi%
+ \fi%
+ \ifdim\beamer@colbox@sep>\z@\vskip\beamer@colbox@sep\fi%
+ \beamer@vmode\ignorespaces}{%
+ \ifdim\beamer@colbox@sep>\z@\vskip\beamer@colbox@sep\fi%
+ \if@tempswa
+ \ifdim\beamer@colbox@colsep>\z@\vskip\beamer@colbox@colsep\fi%
+ \ifdim\beamer@colbox@colseps>\z@\vskip\beamer@colbox@colseps\fi%
+ \fi%
+ \egroup\color@endgroup\egroup%
+ \wd\beamer@tempbox=\beamer@colbox@wd%
+ \ifx\beamer@colbox@ht\@empty\else\ht\beamer@tempbox=\beamer@colbox@ht\fi%
+ \ifx\beamer@colbox@dp\@empty\else\dp\beamer@tempbox=\beamer@colbox@dp\fi%
+ \ifbeamer@colbox@rounded%
+ \if@tempswa%
+ \begin{beamerboxesrounded}[%
+ shadow=\beamer@colbox@shadow,%
+ lower=\beamer@colbox@color,%
+ upper=normal text,%
+ width=\beamer@colbox@wd]{}%
+ \box\beamer@tempbox%
+ \end{beamerboxesrounded}%
+ \else%
+ \ifdim\wd\beamer@tempbox>\textwidth%
+ \setbox\beamer@tempbox=\hbox to\textwidth{\hss\box\beamer@tempbox\hss}%
+ \fi%
+ \box\beamer@tempbox%
+ \fi%
+ \else%
+ \if@tempswa\setbox\beamer@tempbox=\hbox{%
+ \usebeamercolor{\beamer@colbox@color}%
+ \hskip-\beamer@colbox@colseps%
+ \fboxsep=\z@\colorbox{bg}{%
+ \hskip\beamer@colbox@colseps%
+ \box\beamer@tempbox%
+ \hskip\beamer@colbox@colseps%
+ }%
+ \hskip-\beamer@colbox@colseps%
+ }\fi%
+ \ifdim\wd\beamer@tempbox>\textwidth%
+ \setbox\beamer@tempbox=\hbox to\textwidth{\hskip0pt minus\beamer@leftmargin\relax\box\beamer@tempbox\hskip0pt minus\beamer@rightmargin\relax}%
+ \fi%
+ \box\beamer@tempbox%
+ \fi%
+}
+
+
+% \end{macrocode}
+% \iffalse
+%</beamerbasecolor-xetex-bidi.def>
+%<*beamerbaseframecomponents-xetex-bidi.def>
+%\fi
+% \section{File \texttt{beamerbaseframecomponents-xetex-bidi.def}}
+% \begin{macrocode}
+\ProvidesFile{beamerbaseframecomponents-xetex-bidi.def}[2022/05/24 v0.1 bidi adaptations for beamerbaseframecomponents package for XeTeX engine]
+\renewcommand<>\beamer@columncom[2][\beamer@colmode]{%
+ \beamer@colclose%
+ \def\beamer@colclose{\end{minipage}\hfill\end{actionenv}\ignorespaces}%
+\begin{actionenv}#3%
+ \setkeys{beamer@col}{#1}%
+ \begin{minipage}[\beamer@colalign]{#2}%
+ \leavevmode\bidi@beamer@ragged\beamer@colheadskip\ignorespaces}
+
+\renewenvironment<>{columns}[1][]{%
+ \begin{actionenv}#2%
+ \ifbeamer@onlytextwidth
+ \def\beamer@colentrycode{\hbox to\textwidth\bgroup\ignorespaces}%
+ \def\beamer@colexitcode{\unskip\egroup}
+ \else%
+ \def\beamer@colentrycode{%
+ \hbox to\textwidth\bgroup%
+ \leavevmode%
+ \hskip-\beamer@leftmargin%
+ \nobreak%
+ \beamer@tempdim=\textwidth%
+ \advance\beamer@tempdim by\beamer@leftmargin%
+ \advance\beamer@tempdim by\beamer@rightmargin%
+ \hbox to\beamer@tempdim\bgroup%
+ \hbox{}\hfill\ignorespaces}%
+ \def\beamer@colexitcode{\egroup%
+ \nobreak%
+ \hskip-\beamer@rightmargin\egroup}%
+ \fi%
+ \ifbeamer@centered\setkeys{beamer@col}{c}\else\setkeys{beamer@col}{t}\fi%
+ \setkeys{beamer@col}{#1}%
+ \par%
+ \leavevmode
+ \beamer@colentrycode%
+ \def\beamer@colclose{}\ignorespaces}%
+ {\beamer@colclose\def\beamer@colclose{}\beamer@colexitcode\end{actionenv}}%
+
+
+\def\@makeRTLfntext#1{%
+ \def\insertfootnotetext{#1}%
+ \def\insertfootnotemark{\@makefnmark}%
+ \usebeamertemplate***{RTLfootnote}}
+
+\def\@makeLTRfntext#1{%
+ \def\insertfootnotetext{#1}%
+ \def\insertfootnotemark{\@makefnmark}%
+ \usebeamertemplate***{LTRfootnote}}
+
+\renewcommand<>\beamer@framefootnotetext[1]{%
+ \global\setbox\beamer@footins\vbox{%
+ \if@RTL@footnote\@RTLtrue\else\@RTLfalse\fi%
+ \hsize\framewidth
+ \textwidth\hsize
+ \columnwidth\hsize
+ \unvbox\beamer@footins
+ \reset@font
+ \bidi@@footnotetext@font
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@footnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\renewcommand<>\beamer@frameRTLfootnotetext[1]{%
+ \global\setbox\beamer@footins\vbox{%
+ \@RTLtrue
+ \hsize\framewidth
+ \textwidth\hsize
+ \columnwidth\hsize
+ \unvbox\beamer@footins
+ \reset@font
+ \bidi@@RTLfootnotetext@font
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@footnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makeRTLfntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\renewcommand<>\beamer@frameLTRfootnotetext[1]{%
+ \global\setbox\beamer@footins\vbox{%
+ \@RTLfalse
+ \hsize\framewidth
+ \textwidth\hsize
+ \columnwidth\hsize
+ \unvbox\beamer@footins
+ \reset@font
+ \bidi@@LTRfootnotetext@font
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@footnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makeLTRfntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\renewcommand<>\@mpfootnotetext[1]{%
+ \global\setbox\@mpfootins\vbox{%
+ \ifbidi@autofootnoterule\ifnum\c@mpfootnote=\@ne\if@RTL@footnote\global\let\bidi@mpfootnoterule\right@footnoterule\else\global\let\bidi@mpfootnoterule\left@footnoterule\fi\fi\fi
+ \unvbox\@mpfootins
+ \reset@font
+ \bidi@@footnotetext@font
+ \hsize\columnwidth
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\renewcommand<>\@mpRTLfootnotetext[1]{%
+ \global\setbox\@mpfootins\vbox{%
+ \ifbidi@autofootnoterule\ifnum\c@mpfootnote=\@ne\global\let\bidi@mpfootnoterule\right@footnoterule\fi\fi
+ \unvbox\@mpfootins
+ \reset@font
+ \bidi@@RTLfootnotetext@font
+ \hsize\columnwidth
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makeRTLfntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\renewcommand<>\@mpLTRfootnotetext[1]{%
+ \global\setbox\@mpfootins\vbox{%
+ \ifbidi@autofootnoterule\ifnum\c@mpfootnote=\@ne\global\let\bidi@mpfootnoterule\left@footnoterule\fi\fi
+ \unvbox\@mpfootins
+ \reset@font
+ \bidi@@LTRfootnotetext@font
+ \hsize\columnwidth
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \uncover#2{\@makeLTRfntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}}%
+ \color@endgroup}}
+
+\let\@footnotetext=\beamer@framefootnotetext
+\let\@RTLfootnotetext=\beamer@frameRTLfootnotetext
+\let\@LTRfootnotetext=\beamer@frameLTRfootnotetext
+
+\footdir@temp\footdir@ORG@bidi@beamer@footnotetext\@footnotetext{\bidi@footdir@footnote}%
+\footdir@temp\footdir@ORG@bidi@beamer@RTLfootnotetext\@RTLfootnotetext{R}%
+\footdir@temp\footdir@ORG@bidi@beamer@LTRfootnotetext\@LTRfootnotetext{L}%
+
+\renewcommand<>{\footnote}[1][]{%
+ \let\beamer@footnotetext=\@footnotetext%
+ \let\beamer@mpfn=\@mpfn%
+ \let\beamer@thempfn=\thempfn%
+ \let\beamer@kvorig=\KV@errx%
+ \let\beamer@xkvorig=\XKV@err
+ \def\beamer@footarg{}%
+ \def\KV@errx##1{\edef\beamer@footarg{\@tempa}}%
+ \def\XKV@err##1{\edef\beamer@footarg{\XKV@tkey}}%
+ \setkeys{beamerfootnote}{#1}%
+ \let\KV@errx=\beamer@kvorig%
+ \let\XKV@errx=\beamer@xkvorig
+ \ifx\beamer@footarg\@empty%
+ \def\beamer@next{\stepcounter\beamer@mpfn
+ \protected@xdef\@thefnmark{\beamer@thempfn}%
+ \@footnotemark\beamer@footnotetext#2}%
+ \else%
+ \def\beamer@next{%
+ \begingroup
+ \csname c@\beamer@mpfn\endcsname\beamer@footarg\relax
+ \unrestored@protected@xdef\@thefnmark{\beamer@thempfn}%
+ \endgroup
+ \@footnotemark\beamer@footnotetext#2}%
+ \fi%
+ \beamer@next}
+
+\renewcommand<>{\RTLfootnote}[1][]{%
+ \let\beamer@RTLfootnotetext=\@RTLfootnotetext%
+ \let\beamer@mpfn=\@mpfn%
+ \let\beamer@thempfn=\thempfn%
+ \let\beamer@kvorig=\KV@errx%
+ \let\beamer@xkvorig=\XKV@err
+ \def\beamer@footarg{}%
+ \def\KV@errx##1{\edef\beamer@footarg{\@tempa}}%
+ \def\XKV@err##1{\edef\beamer@footarg{\XKV@tkey}}%
+ \setkeys{beamerfootnote}{#1}%
+ \let\KV@errx=\beamer@kvorig%
+ \let\XKV@errx=\beamer@xkvorig
+ \ifx\beamer@footarg\@empty%
+ \def\beamer@next{\stepcounter\beamer@mpfn
+ \protected@xdef\@thefnmark{\beamer@thempfn}%
+ \@footnotemark\beamer@RTLfootnotetext#2}%
+ \else%
+ \def\beamer@next{%
+ \begingroup
+ \csname c@\beamer@mpfn\endcsname\beamer@footarg\relax
+ \unrestored@protected@xdef\@thefnmark{\beamer@thempfn}%
+ \endgroup
+ \@footnotemark\beamer@footnotetext#2}%
+ \fi%
+ \beamer@next}
+
+\renewcommand<>{\LTRfootnote}[1][]{%
+ \let\beamer@LTRfootnotetext=\@LTRfootnotetext%
+ \let\beamer@mpfn=\@mpfn%
+ \let\beamer@thempfn=\thempfn%
+ \let\beamer@kvorig=\KV@errx%
+ \let\beamer@xkvorig=\XKV@err
+ \def\beamer@footarg{}%
+ \def\KV@errx##1{\edef\beamer@footarg{\@tempa}}%
+ \def\XKV@err##1{\edef\beamer@footarg{\XKV@tkey}}%
+ \setkeys{beamerfootnote}{#1}%
+ \let\KV@errx=\beamer@kvorig%
+ \let\XKV@errx=\beamer@xkvorig
+ \ifx\beamer@footarg\@empty%
+ \def\beamer@next{\stepcounter\beamer@mpfn
+ \protected@xdef\@thefnmark{\beamer@thempfn}%
+ \@footnotemark\beamer@LTRfootnotetext#2}%
+ \else%
+ \def\beamer@next{%
+ \begingroup
+ \csname c@\beamer@mpfn\endcsname\beamer@footarg\relax
+ \unrestored@protected@xdef\@thefnmark{\beamer@thempfn}%
+ \endgroup
+ \@footnotemark\beamer@footnotetext#2}%
+ \fi%
+ \beamer@next}
+
+
+% \end{macrocode}
+% \iffalse
+%</beamerbaseframecomponents-xetex-bidi.def>
+%<*beamerbaselocalstructure-xetex-bidi.def>
+%\fi
+% \section{File \texttt{beamerbaselocalstructure-xetex-bidi.def}}
+% \begin{macrocode}
+\ProvidesFile{beamerbaselocalstructure-xetex-bidi.def}[2022/05/24 v0.1 bidi adaptations for beamerbaselocalstructure package for XeTeX engine]
+\def\beamer@enum@{%
+ \beamer@computepref\@itemdepth% sets \beameritemnestingprefix
+ \usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
+ \bgroup
+ \usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}%
+ \usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
+ \egroup
+ \expandafter
+ \list
+ {\usebeamertemplate{\beamer@enumtempl}}
+ {\usecounter\@enumctr%
+ \def\makelabel##1{{\hss\llap{{%
+ \usebeamerfont*{enumerate \beameritemnestingprefix item}%
+ \usebeamercolor[fg]{enumerate \beameritemnestingprefix item}##1}}}}}%
+ \beamer@cramped%
+ \bidi@beamer@ragged%
+ \beamer@firstlineitemizeunskip%
+}
+
+\renewcommand{\itemize}[1][]{%
+ \ifblank{#1}{}{\def\beamer@defaultospec{#1}}%
+ \ifnum \@itemdepth >2\relax\@toodeep\else
+ \advance\@itemdepth\@ne
+ \beamer@computepref\@itemdepth% sets \beameritemnestingprefix
+ \usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
+ \bgroup
+ \usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}%
+ \usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
+ \egroup
+ \list
+ {\usebeamertemplate{itemize \beameritemnestingprefix item}}
+ {\def\makelabel##1{%
+ {%
+ \hss\llap{{%
+ \usebeamerfont*{itemize \beameritemnestingprefix item}%
+ \usebeamercolor[fg]{itemize \beameritemnestingprefix item}##1}}%
+ }%
+ }%
+ }
+ \fi%
+ \beamer@cramped%
+ \bidi@beamer@ragged%
+ \beamer@firstlineitemizeunskip%
+}
+
+\def\@@description{%
+ \advance\beamer@descdefault by \labelsep%
+ \usebeamerfont{description body}%
+ \bgroup
+ \usebeamercolor[fg]{description body}%
+ \usebeamertemplate{description body begin}%
+ \egroup
+ \list
+ {}
+ {\labelwidth\beamer@descdefault\leftmargin\beamer@descdefault\let\makelabel\beamer@descriptionitem}%
+ \beamer@cramped%
+ \bidi@beamer@ragged
+ \beamer@firstlineitemizeunskip%
+}
+
+\renewenvironment{thebibliography}[1]
+{%\leavevmode\unskip%
+\if@RTL\if@LTRbibitems\@RTLfalse\else\fi\else\if@RTLbibitems\@RTLtrue\else\fi\fi
+\bidi@@thebibliography@font@hook%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\beamer@biblabeltemplate{\@biblabel{#1}}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \itemsep=0pt%
+ \partopsep=0pt%
+ \topsep=0pt%
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}
+ \let\makelabel\beamer@biblabeltemplate}%
+ \sloppy\bidi@beamer@ragged
+ \clubpenalty10000
+ \@clubpenalty \clubpenalty
+ \widowpenalty10000%
+ \sfcode`\.\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \ifhmode\unskip\fi\endlist}
+
+
+% \end{macrocode}
+% \iffalse
+%</beamerbaselocalstructure-xetex-bidi.def>
+%<*beamerinnerthemedefault-xetex-bidi.def>
+%\fi
+% \section{File \texttt{beamerinnerthemedefault-xetex-bidi.def}}
+% \begin{macrocode}
+\ProvidesFile{beamerinnerthemedefault-xetex-bidi.def}[2022/05/24 v0.1 bidi adaptations for beamerinnerthemedefault package for XeTeX engine]
+\newcommand*{\bidi@beamer@leftskip}{%
+ \if@RTL
+ \rightskip
+ \else
+ \leftskip
+ \fi
+}
+
+\expandafter\let\csname beamer@@tmpop@subsection in toc@default\endcsname\relax
+
+\expandafter\let\csname beamer@@tmpop@subsubsection in toc@default\endcsname\relax
+
+\defbeamertemplate*{subsection in toc}{default}
+{\leavevmode\bidi@beamer@leftskip=1.5em\inserttocsubsection\par}
+
+\defbeamertemplate*{subsubsection in toc}{default}
+{\leavevmode\normalsize\usebeamerfont{subsection in toc}\bidi@beamer@leftskip=3em%
+ \usebeamerfont{subsubsection in toc}\inserttocsubsubsection\par}
+
+\newcommand*{\bidi@beamer@blacktriangle}{%
+ \if@RTL
+ $\blacktriangleleft$%
+ \else
+ $\blacktriangleright$%
+ \fi
+}
+
+\expandafter\let\csname beamer@@tmpop@itemize item@default\endcsname\relax
+
+\expandafter\let\csname beamer@@tmpop@itemize subitem@default\endcsname\relax
+
+\expandafter\let\csname beamer@@tmpop@itemize subsubitem@default\endcsname\relax
+
+\defbeamertemplate*{itemize item}{default}{\usebeamerfont*{itemize item}\raise1.25pt\hbox{\donotcoloroutermaths\bidi@beamer@blacktriangle}}
+\defbeamertemplate*{itemize subitem}{default}{\usebeamerfont*{itemize subitem}\raise1.5pt\hbox{\donotcoloroutermaths\bidi@beamer@blacktriangle}}
+\defbeamertemplate*{itemize subsubitem}{default}{\usebeamerfont*{itemize subsubitem}\raise1.5pt\hbox{\donotcoloroutermaths\bidi@beamer@blacktriangle}}
+
+\bidi@undef\beamer@@tmpop@footnote@default
+
+\defbeamertemplate*{footnote}{default}
+{
+ \parindent 1em\noindent%
+ \bidi@beamer@ragged
+ \hbox to 1.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
+}
+
+\defbeamertemplate*{RTLfootnote}{default}
+{
+ \parindent 1em\noindent%
+ \raggedleft
+ \hbox to 1.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
+}
+
+\defbeamertemplate*{LTRfootnote}{default}
+{
+ \parindent 1em\noindent%
+ \raggedright
+ \hbox to 1.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
+}
+
+\bidi@undef\beamer@@tmpop@caption@default
+
+\defbeamertemplate*{caption}{default}
+{%
+ \bidi@beamer@ragged
+ {%
+ \leavevmode
+ \usebeamercolor[fg]{caption name}%
+ \usebeamerfont*{caption name}%
+ \insertcaptionname
+ \usebeamertemplate{caption label separator}%
+ }%
+ \insertcaption\par
+}
+
+
+% \end{macrocode}
+% \iffalse
+%</beamerinnerthemedefault-xetex-bidi.def>
%<*bidi.sty>
%\fi
% \section{File \texttt{bidi.sty}}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\def\bididate{2022/05/22}
-\def\bidi@version{36.9}
+\def\bididate{2022/05/24}
+\def\bidi@version{37.0}
\ProvidesPackage{bidi}[\bididate\space v\bidi@version\space
Bidirectional typesetting in plain TeX and LaTeX]
\edef\@bidi@info{****************************************************^^J%
@@ -2021,8 +2553,9 @@ Bidirectional typesetting in plain TeX and LaTeX]
}
\newcommand*{\@bidi@pdfcustomproperties}{%
This is the bidi package, Version \bidi@version,
- Released May 22, 2022.
+ Released May 24, 2022.
}
+\newcommand*{\bidi@beamer@ragged}{}
\@RTLmainfalse
\AtBeginDocument{%
\if@RTLmain\else
@@ -2264,9 +2797,9 @@ Bidirectional typesetting in plain TeX and LaTeX]
%\fi
% \section{File \texttt{bidi.tex}}
% \begin{macrocode}
-\def\bididate{2022/05/22}
+\def\bididate{2022/05/24}
\catcode`@=11
-\def\bidi@version{36.9}
+\def\bidi@version{37.0}
\let \protect \relax
\newlinechar`\^^J
\edef\@bidi@info{****************************************************^^J%
@@ -2368,7 +2901,7 @@ Bidirectional typesetting in plain TeX and LaTeX]
}
\def\@bidi@pdfcustomproperties{%
This is the bidi package, Version \bidi@version,
- Released May 22, 2022.
+ Released May 24, 2022.
}
\def\bidi@pdfm@mark{%
\special{pdf:%
@@ -22559,7 +23092,7 @@ to\rtside{\box\bslice\hfil}}
}\vbox}
\newcommand*{\bidi@leftskip}{\if@RTL\rightskip\else\leftskip\fi}
\newcommand*{\bidi@rightskip}{\if@RTL\leftskip\else\rightskip\fi}
-\def\LTR{\par\@RTLfalse\@RTL@footnotefalse\@RTLtabfalse\hsize\linewidth\parshape\z@}
+\def\LTR{\par\@RTLfalse\@RTL@footnotefalse\@RTLtabfalse\hsize\linewidth\parshape\z@\bidi@beamer@ragged}
\def\endLTR{\par}
\newenvironment{LTR*}{\LTR
\everypar{%
@@ -22569,7 +23102,7 @@ to\rtside{\box\bslice\hfil}}
\fi}%
}%
}{\endLTR\@endpetrue}
-\def\RTL{\par\@RTLtrue\@RTL@footnotetrue\@RTLtabtrue\hsize\linewidth\parshape\z@}
+\def\RTL{\par\@RTLtrue\@RTL@footnotetrue\@RTLtabtrue\hsize\linewidth\parshape\z@\bidi@beamer@ragged}
\def\endRTL{\par}
\newenvironment{RTL*}{\RTL
\everypar{%
@@ -22579,8 +23112,8 @@ to\rtside{\box\bslice\hfil}}
\fi}%
}%
}{\endRTL\@endpetrue}
-\def\setRTL{\@RTLtrue\@RTL@footnotetrue\@RTLtabtrue}
-\def\setLTR{\@RTLfalse\@RTL@footnotefalse\@RTLtabfalse}
+\def\setRTL{\@RTLtrue\@RTL@footnotetrue\@RTLtabtrue\bidi@beamer@ragged}
+\def\setLTR{\@RTLfalse\@RTL@footnotefalse\@RTLtabfalse\bidi@beamer@ragged}
\let\unsetRTL=\setLTR
\let\unsetLTR=\setRTL
\let\LR=\LRE
@@ -23321,6 +23854,7 @@ $\@@underline{\hbox{#1}}\m@th$\relax\fi\fi}
\@ifclassloaded{artikel2}{\input{artikel2-xetex-bidi.def}}{}
\@ifclassloaded{artikel3}{\input{artikel3-xetex-bidi.def}}{}
\@ifclassloaded{amsart}{\input{amsart-xetex-bidi.def}}{}
+\@ifclassloaded{beamer}{\input{beamer-xetex-bidi.def}}{}
\@ifclassloaded{letter}{\input{letter-xetex-bidi.def}}{}
\@ifclassloaded{extletter}{\input{extletter-xetex-bidi.def}}{}
\@ifclassloaded{memoir}{\input{memoir-xetex-bidi.def}}{}
@@ -23458,6 +23992,10 @@ $\@@underline{\hbox{#1}}\m@th$\relax\fi\fi}
\@ifpackageloaded{tocloft}{\@ifclassloaded{memoir}{}{\input{tocloft-xetex-bidi.def}}}{}
\@ifdefinitionfileloaded{tc-xetex}{\input{tc-xetex-bidi.def}}{}
\@ifpackageloaded{todonotes}{\input{todonotes-xetex-bidi.def}}{}
+\@ifpackageloaded{beamerbasecolor}{\input{beamerbasecolor-xetex-bidi.def}}{}
+\@ifpackageloaded{beamerbaseframecomponents}{\input{beamerbaseframecomponents-xetex-bidi.def}}{}
+\@ifpackageloaded{beamerbaselocalstructure}{\input{beamerbaselocalstructure-xetex-bidi.def}}{}
+\@ifpackageloaded{beamerinnerthemedefault}{\input{beamerinnerthemedefault-xetex-bidi.def}}{}
% \end{macrocode}
% \iffalse
%</latex-xetex-bidi.def>
diff --git a/macros/xetex/latex/bidi/bidi.pdf b/macros/xetex/latex/bidi/bidi.pdf
index 707a619cb6..f84f7aa0e8 100644
--- a/macros/xetex/latex/bidi/bidi.pdf
+++ b/macros/xetex/latex/bidi/bidi.pdf
Binary files differ
diff --git a/macros/xetex/latex/xepersian/README b/macros/xetex/latex/xepersian/README
index 1fdeacf9e2..42c652930b 100644
--- a/macros/xetex/latex/xepersian/README
+++ b/macros/xetex/latex/xepersian/README
@@ -1,6 +1,6 @@
____________________
The XePersian package
-v24.0
+v24.1
The xepersian package provides a convenient interface for
typesetting Persian and English texts in LaTeX, using XeTeX
@@ -25,7 +25,7 @@ The announcements for the new releases of the package will
also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/05/22
+Current version release date: 2022/05/24
___________________________________________
Vafa Khalighi
diff --git a/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx b/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
index daa681cd38..745f9bc598 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
@@ -25,7 +25,7 @@ If you use \textsf{\XePersian} package to write any input \TeX\ document, and th
* Copyright (c) 2008--2022 Vafa Khalighi
* Copyright (c) 2018--2020 bidi-tex GitHub Organization
*
-* v24.0, 2022/05/22
+* v24.1, 2022/05/24
*
* License: LaTeX Project Public License, version
* 1.3c or higher (your choice)
diff --git a/macros/xetex/latex/xepersian/xepersian-doc-title.ltx b/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
index 71f29bdd56..9e99caadf3 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
@@ -3,7 +3,7 @@
\begin{document}
\title{\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}\\
\LARGE Persian for \LaTeXe, using {\XeTeX} engine\\[5pt]
-\large User documentation for \textcolor{blue!65!black}{version 24.0}}
+\large User documentation for \textcolor{blue!65!black}{version 24.1}}
\author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
\setcounter{page}{0}
\thispagestyle{empty}
@@ -13,7 +13,7 @@
\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}
\Large
-User documentation for \textcolor{blue!65!black}{version 24.0}}
+User documentation for \textcolor{blue!65!black}{version 24.1}}
\vskip 0pt plus 3fill
\textit{\large to my Master, \textbf{Ferdowsi The Great}}
diff --git a/macros/xetex/latex/xepersian/xepersian-doc.ltx b/macros/xetex/latex/xepersian/xepersian-doc.ltx
index 29f42a326f..49323dea7f 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc.ltx
@@ -1,7 +1,7 @@
\documentclass{ltxdoc}
\input{xepersian-doc-preamble.ltx}
\hypersetup{%
- pdftitle={User documentation for version 24.0 of the XePersian
+ pdftitle={User documentation for version 24.1 of the XePersian
package}%
}
\begin{document}
diff --git a/macros/xetex/latex/xepersian/xepersian-doc.pdf b/macros/xetex/latex/xepersian/xepersian-doc.pdf
index 955b5e6835..38b07e642b 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc.pdf
+++ b/macros/xetex/latex/xepersian/xepersian-doc.pdf
Binary files differ
diff --git a/macros/xetex/latex/xepersian/xepersian.dtx b/macros/xetex/latex/xepersian/xepersian.dtx
index 6e3e33a3d4..4bfd827b3b 100644
--- a/macros/xetex/latex/xepersian/xepersian.dtx
+++ b/macros/xetex/latex/xepersian/xepersian.dtx
@@ -5,7 +5,7 @@
%<*readme>
____________________
The XePersian package
-v24.0
+v24.1
The xepersian package provides a convenient interface for
typesetting Persian and English texts in LaTeX, using XeTeX
@@ -31,7 +31,7 @@ also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/05/22
+Current version release date: 2022/05/24
___________________________________________
Vafa Khalighi
@@ -83,6 +83,8 @@ by Vafa Khalighi.
\generate{\file{artikel2-xepersian.def}{\from{\jobname.dtx}{table,artikel2-xepersian.def}}}
\generate{\file{artikel3-xepersian.def}{\from{\jobname.dtx}{table,artikel3-xepersian.def}}}
\generate{\file{backref-xepersian.def}{\from{\jobname.dtx}{table,backref-xepersian.def}}}
+\generate{\file{beamer-xepersian.def}{\from{\jobname.dtx}{table,beamer-xepersian.def}}}
+\generate{\file{beamerbasetranslator-xepersian.def}{\from{\jobname.dtx}{table,beamerbasetranslator-xepersian.def}}}
\generate{\file{bidituftesidenote-xepersian.def}{\from{\jobname.dtx}{table,bidituftesidenote-xepersian.def}}}
\generate{\file{bidimoderncv-xepersian.def}{\from{\jobname.dtx}{table,bidimoderncv-xepersian.def}}}
\generate{\file{boek3-xepersian.def}{\from{\jobname.dtx}{table,boek3-xepersian.def}}}
@@ -166,7 +168,7 @@ by Vafa Khalighi.
\documentclass{ltxdoc}
\input{xepersian-doc-preamble.ltx}
\hypersetup{%
- pdftitle={Source documentation for version 24.0 of the XePersian
+ pdftitle={Source documentation for version 24.1 of the XePersian
package}%
}
\EnableCrossrefs
@@ -185,7 +187,7 @@ by Vafa Khalighi.
% \GetFileInfo{\jobname.dtx}
% \title{\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}\\
%\LARGE Persian for \LaTeXe, using {\XeTeX} engine\\[5pt]
-%\large Source documentation for \textcolor{blue!65!black}{version 24.0}}
+%\large Source documentation for \textcolor{blue!65!black}{version 24.1}}
% \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
%\setcounter{page}{0}
%\thispagestyle{empty}
@@ -195,7 +197,7 @@ by Vafa Khalighi.
%\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}
%
%\Large
-%Source documentation for \textcolor{blue!65!black}{version 24.0}}
+%Source documentation for \textcolor{blue!65!black}{version 24.1}}
%
%\vskip 0pt plus 3fill
%\textit{\large to my Master, \textbf{Ferdowsi The Great}}
@@ -243,7 +245,7 @@ by Vafa Khalighi.
%\iffalse
%<*table>
%\fi
-%% \CheckSum{11097}
+%% \CheckSum{11118}
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
@@ -416,6 +418,39 @@ by Vafa Khalighi.
% \end{macrocode}
% \iffalse
%</backref-xepersian.def>
+%<*beamer-xepersian.def>
+%\fi
+% \section{File \texttt{beamer-xepersian.def}}
+% \begin{macrocode}
+\ProvidesFile{beamer-xepersian.def}[2022/05/24 v0.1 xepersian changes to beamer class]
+\usefonttheme[stillsansserifmath]{serif}
+% \end{macrocode}
+% \iffalse
+%</beamer-xepersian.def>
+%<*beamerbasetranslator-xepersian.def>
+%\fi
+% \section{File \texttt{beamerbasetranslator-xepersian.def}}
+% \begin{macrocode}
+\ProvidesFile{beamerbasetranslator-xepersian.def}[2022/05/24 v0.1 xepersian changes to beamerbasetranslator package]
+\newcommand*{\ProvideTranslation}[2]{%
+ \providetranslation{#1}{\ifRtoL{#2}{#1}}%
+}
+
+\ProvideTranslation{Theorem}{قضیه}
+\ProvideTranslation{Corollary}{نتیجه}
+\ProvideTranslation{Fact}{حقیقت}
+\ProvideTranslation{Lemma}{لما}
+\ProvideTranslation{Problem}{مساله}
+\ProvideTranslation{Solution}{راه‌حل}
+\ProvideTranslation{Definition}{تعریف}
+\ProvideTranslation{Definitions}{تعریف‌ها}
+\ProvideTranslation{Example}{مثال}
+\ProvideTranslation{Examples}{مثال‌ها}
+
+
+% \end{macrocode}
+% \iffalse
+%</beamerbasetranslator-xepersian.def>
%<*bidituftesidenote-xepersian.def>
%\fi
% \section{File \texttt{bidituftesidenote-xepersian.def}}
@@ -3540,8 +3575,8 @@ U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
% \section{File \texttt{xepersian.sty}}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\def\xepersian@version{24.0}
-\def\xepersiandate{2022/05/22}
+\def\xepersian@version{24.1}
+\def\xepersiandate{2022/05/24}
\ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space
Persian typesetting in XeLaTeX]
\RequirePackage{fontspec}
@@ -4390,7 +4425,7 @@ Persian typesetting in XeLaTeX]
\newcommand*{\@xepersian@pdfcustomproperties}{%
This is the xepersian package, Version \xepersian@version,
- Released May 22, 2022.
+ Released May 24, 2022.
}
\newcommand\twocolumnstableofcontents{%
@@ -4711,6 +4746,7 @@ number is 999,999,999.}%
\@ifpackageloaded{algorithmic}{\input{algorithmic-xepersian.def}}{}
\@ifpackageloaded{algorithm}{\input{algorithm-xepersian.def}}{}
\@ifpackageloaded{backref}{\input{backref-xepersian.def}}{}
+\@ifpackageloaded{beamerbasetranslator}{\input{beamerbasetranslator-xepersian.def}}{}
\@ifpackageloaded{fancyref}{\input{fancyref-xepersian.def}}{}
\@ifpackageloaded{bidituftesidenote}{\input{bidituftesidenote-xepersian.def}}{}
\@ifpackageloaded{breqn}{\input{breqn-xepersian.def}}{}
@@ -4732,6 +4768,7 @@ number is 999,999,999.}%
\@ifclassloaded{artikel2}{\input{artikel2-xepersian.def}}{}
\@ifclassloaded{artikel3}{\input{artikel3-xepersian.def}}{}
\@ifclassloaded{amsart}{\input{amsart-xepersian.def}}{}
+\@ifclassloaded{beamer}{\input{beamer-xepersian.def}}{}
\@ifclassloaded{bidimoderncv}{\input{bidimoderncv-xepersian.def}}{}
\@ifclassloaded{report}{\input{report-xepersian.def}}{}
\@ifclassloaded{extreport}{\input{extreport-xepersian.def}}{}
diff --git a/macros/xetex/latex/xepersian/xepersian.pdf b/macros/xetex/latex/xepersian/xepersian.pdf
index 987fb2a2d4..b53d9d6fcc 100644
--- a/macros/xetex/latex/xepersian/xepersian.pdf
+++ b/macros/xetex/latex/xepersian/xepersian.pdf
Binary files differ
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 2827fac4e5..2fb633af5c 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -51,6 +51,7 @@ $mirrors = {
'https://cran.asia/tex/' => 1,
'https://ftp.harukasan.org/CTAN/' => 1,
'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
+ 'https://mirror.kakao.com/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
},
@@ -105,6 +106,7 @@ $mirrors = {
'https://ctan.mc1.root.project-creative.net/' => 1,
'https://ctan.mirror.norbert-ruehl.de/' => 1,
'https://ctan.net/' => 1,
+ 'https://ctan.space-pro.be/tex-archive/' => 1,
'https://ftp.agdsn.de/pub/mirrors/latex/dante/' => 1,
'https://ftp.fau.de/ctan/' => 1,
'https://ftp.gwdg.de/pub/ctan/' => 1,
@@ -158,6 +160,7 @@ $mirrors = {
'https://ctan.ijs.si/tex-archive/' => 1,
},
'Spain' => {
+ 'https://ctan.fisiquimicamente.com/' => 1,
'https://ctan.javinator9889.com/' => 1,
'https://osl.ugr.es/CTAN/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 5db417dcfe..0ba2139ee3 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/63385
+depend revision/63395
name 00texlive.image
category TLCore
-revision 63386
+revision 63394
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
@@ -3881,6 +3881,7 @@ runfiles size=12865
tlpkg/tlpsrc/swimgraf.tlpsrc
tlpkg/tlpsrc/swrule.tlpsrc
tlpkg/tlpsrc/syllogism.tlpsrc
+ tlpkg/tlpsrc/symbats3.tlpsrc
tlpkg/tlpsrc/symbol.tlpsrc
tlpkg/tlpsrc/sympytexpackage.tlpsrc
tlpkg/tlpsrc/synctex.tlpsrc
@@ -4570,7 +4571,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 63377
+revision 63388
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
@@ -40553,17 +40554,17 @@ catalogue-version 2.2
name bidi
category Package
-revision 63370
+revision 63392
shortdesc Bidirectional typesetting in plain TeX and LaTeX, using XeTeX
relocated 1
longdesc A convenient interface for typesetting bidirectional texts with
longdesc plain TeX and LaTeX. The package includes adaptations for use
longdesc with many other commonly-used packages.
-containersize 117592
-containerchecksum ac7b7082ea99ef5b2e3ae82cd978b6d8a5769b7c83da07881e703d2acf7c7ad24ab9423e214bcdd7a3ef5d992a06a21bbffe148cf9dd25957b91103c56a513ca
-doccontainersize 3758040
-doccontainerchecksum d124ae293647dcd9b34c36665a4b2f71c386e4eaa698e529e88c2f6a0ae2920043287ca0e18411b15fa30e2f69798c9a1d8369c6070c90be170a29e1283ffd58
-docfiles size=1034
+containersize 119972
+containerchecksum 4b169673335ea395e9402d08794f0df7f9cc24cd69c740bfedc91cbcf4fcd990d4835bf4d271db707066b05245752b355e82c8218f44d6bef035116df26fd120
+doccontainersize 3819944
+doccontainerchecksum 381c802df48f96a57ec8d891c946635418a01c73022d83c48e536bbec36b980c1da8cffee2bb852554a298f0e72666e46d04c331eebc45c5a76d80ea2ebf9756
+docfiles size=1050
RELOC/doc/xelatex/bidi/README details="Readme"
RELOC/doc/xelatex/bidi/bidi-bibitem.pdf
RELOC/doc/xelatex/bidi/bidi-doc.pdf details="Package user documentation"
@@ -40588,9 +40589,9 @@ docfiles size=1034
RELOC/doc/xelatex/bidi/test2-colortbl.tex
RELOC/doc/xelatex/bidi/test2-wrapfig.tex
RELOC/doc/xelatex/bidi/test3-wrapfig.tex
-srccontainersize 135256
-srccontainerchecksum 42cf9accf1c5438bfae9851630dc76c6538449046fee37ab8e34ac9bc2ebf0165c0ee94d0fbfc96b2f210ac94e28735d3c1035da82945669e00011131eff9cfa
-srcfiles size=246
+srccontainersize 137532
+srccontainerchecksum 6fc7766e7992e11e2fd6b1ddbad706b7878ac3e4664f65b4751edbd60119975c547f8a5b193e9d6ddf3835bb614394c0d7912dcc042b148a2726a2817d0b2a63
+srcfiles size=250
RELOC/source/xelatex/bidi/bidi-doc-intro.ltx
RELOC/source/xelatex/bidi/bidi-doc-latex-basics.ltx
RELOC/source/xelatex/bidi/bidi-doc-latex-pkgs.ltx
@@ -40603,7 +40604,7 @@ srcfiles size=246
RELOC/source/xelatex/bidi/bidi-doc.ltx
RELOC/source/xelatex/bidi/bidi.dtx
RELOC/source/xelatex/bidi/bidi.ins
-runfiles size=300
+runfiles size=310
RELOC/tex/xelatex/bidi/adjmulticol-xetex-bidi.def
RELOC/tex/xelatex/bidi/algorithm2e-xetex-bidi.def
RELOC/tex/xelatex/bidi/amsart-xetex-bidi.def
@@ -40617,6 +40618,11 @@ runfiles size=300
RELOC/tex/xelatex/bidi/artikel2-xetex-bidi.def
RELOC/tex/xelatex/bidi/artikel3-xetex-bidi.def
RELOC/tex/xelatex/bidi/arydshln-xetex-bidi.def
+ RELOC/tex/xelatex/bidi/beamer-xetex-bidi.def
+ RELOC/tex/xelatex/bidi/beamerbasecolor-xetex-bidi.def
+ RELOC/tex/xelatex/bidi/beamerbaseframecomponents-xetex-bidi.def
+ RELOC/tex/xelatex/bidi/beamerbaselocalstructure-xetex-bidi.def
+ RELOC/tex/xelatex/bidi/beamerinnerthemedefault-xetex-bidi.def
RELOC/tex/xelatex/bidi/bidi-logo.pdf
RELOC/tex/xelatex/bidi/bidi-media9.sty
RELOC/tex/xelatex/bidi/bidi-perpage.sty
@@ -40742,7 +40748,7 @@ catalogue-contact-support https://github.com/kvafa/bidi/discussions
catalogue-ctan /macros/xetex/latex/bidi
catalogue-license lppl1.3c
catalogue-topics typesetting xetex bidi class
-catalogue-version 36.9
+catalogue-version 37.0
name bidi-atbegshi
category Package
@@ -67433,7 +67439,7 @@ containerchecksum 5bd74e1a434549cf31ce31777e9a32f90baa14148e6658633945508a46dbf6
name collection-fontsextra
category Collection
-revision 63335
+revision 63394
shortdesc Additional fonts
relocated 1
depend aboensis
@@ -67749,6 +67755,7 @@ depend stix2-otf
depend stix2-type1
depend superiors
depend svrsymbols
+depend symbats3
depend tapir
depend tempora
depend tengwarscript
@@ -67777,8 +67784,8 @@ depend yfonts
depend yfonts-t1
depend yinit-otf
depend zlmtt
-containersize 1956
-containerchecksum d88d72eaf536c648d63cc57d9b72cff5570cbc9a5151d64ef02b1afc7195f48b7dec94445f9fce3be37816e7dbfaa1370b94ca8ec60f7d97dff8d3c1eaea28cf
+containersize 1964
+containerchecksum 4a2d4d71ae78131785fcc8d84cae3b2d60bc0b780d8ad013c426f9bca539134dc3418e995d233e41445d8f48ce2a54dae2f5eff340c7498088ee2938d456290f
name collection-fontsrecommended
category Collection
@@ -228786,7 +228793,7 @@ catalogue-version 0.0.1
name nwafuthesis
category Package
-revision 62905
+revision 63391
shortdesc A thesis template package for Northwest A&F University, China
relocated 1
longdesc This template supports doctoral and master dissertations and
@@ -228796,11 +228803,11 @@ longdesc normative format, as well as a hackable class for the users. At
longdesc present, nwafuthesis only supports XeTeX and LuaTeX engines.
longdesc nwafuthesis only allows UTF-8 encoding. nwafuthesis is based on
longdesc the fduthesis template.
-containersize 19564
-containerchecksum b2d77deea8f21a62ca5f621015ca9e0ecd8183c599a7266f0c47b0c066432f4e04e5878c0c028661b6a38e181c83c78b2ea9ac81fa47de780f36d9e184f4ed55
-doccontainersize 2241144
-doccontainerchecksum 430e01367885837b173419c2eba5809b9b2a30b50ceb61e109fd26303c57437b0b2668a3ede6240f753316bda691e22818a24fa9f77ce3ea97f21436bcf53cda
-docfiles size=977
+containersize 19348
+containerchecksum 7500ff77e35e17153bc21b6684dff5bee3add4ed9b0eb8e5d9e1861bedd11f62375e933a35d8ef4ed1f887656468b281ac49de047d9ddc10d0b593224576bc89
+doccontainersize 2254592
+doccontainerchecksum addf1809913992feb2e31703e821b96f094ad625634de1d4e8841a6a7ca7c33a2d680ab1ce23fd387796a3aaf15187eea34d58d79b667ccdec6e7806c4527f2e
+docfiles size=980
RELOC/doc/latex/nwafuthesis/README.md details="Readme"
RELOC/doc/latex/nwafuthesis/logo/building.jpg
RELOC/doc/latex/nwafuthesis/logo/motto.png
@@ -228809,9 +228816,9 @@ docfiles size=977
RELOC/doc/latex/nwafuthesis/logo/workflow.pdf
RELOC/doc/latex/nwafuthesis/nwafudoc.cls
RELOC/doc/latex/nwafuthesis/nwafuthesis.pdf details="Package documentation" language="zh"
-srccontainersize 61028
-srccontainerchecksum 6d21ecaeebf7110c6aed338c5db68c682512db1209b9b548ef32ed6ce4e57a81728093c4c36ae2a284806e70c40d5ece6c6fc4a0d98b74c77e65b1b0df51360b
-srcfiles size=83
+srccontainersize 61868
+srccontainerchecksum 28ecd4ecc289dadb58b87d366869d751fe6945fd22d4a2e8c295e554a00f9e0bf162503035c21fbff3a74e5fce5951314e070c32f6b7c6db5ad8fbbdd0af69ee
+srcfiles size=84
RELOC/source/latex/nwafuthesis/build-win.bat
RELOC/source/latex/nwafuthesis/build.sh
RELOC/source/latex/nwafuthesis/nwafuthesis-doc.dtx
@@ -228823,7 +228830,7 @@ catalogue-contact-repository https://gitee.com/nwafu_nan/nwafuthesis-l3
catalogue-ctan /macros/unicodetex/latex/nwafuthesis
catalogue-license lppl1.3c
catalogue-topics class doc-templ dissertation chinese expl3
-catalogue-version 1.11
+catalogue-version 1.12
name nwejm
category Package
@@ -264001,7 +264008,7 @@ catalogue-version 0.1
name roboto
category Package
-revision 63386
+revision 63389
shortdesc Support for the Roboto family of fonts
relocated 1
longdesc This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
@@ -264009,10 +264016,10 @@ longdesc support for the Roboto Sans, Roboto Condensed, Roboto Mono,
longdesc Roboto Slab and Roboto Serif families of fonts, designed by
longdesc Christian Robertson and Greg Gazdowicz for Google.
execute addMap roboto.map
-containersize 25354320
-containerchecksum a48a83168ec4f3180995f8230275eb948120f6c05dfc29b526650e176af767ac2821f255e467c860688609b19b777e4a6f06e9cd92a21a3147e7e380b05c047b
-doccontainersize 514100
-doccontainerchecksum d0fd95eaf61cdb4734d3f6b1bd11ffb317744342986e1f269efd18361ab16e8d67d3163c74fb6bbdd34f5f214e18f3e7759d6a087666c2f416ed6b026372fe90
+containersize 25354304
+containerchecksum 3bd66724f820525f168573a1d65831b533d4eb2b852dee96158f59a04467b00b9b0db271c9b361b9d24333ab32f0058864fba6ec849aef89e2ccfc9214893120
+doccontainersize 514096
+doccontainerchecksum 655d9aac326604320abbc6771021ddc05afd17e4c9b69e21afc228a09eff6143506c071451d1aaa93696744f59ac70217e406f73fec22035ed1c2a0df5a1e0b8
docfiles size=160
RELOC/doc/fonts/roboto/COPYRIGHT.txt
RELOC/doc/fonts/roboto/ChangeLogLaTeX.txt
@@ -285895,18 +285902,18 @@ catalogue-version 3.0b1
name stex
category Package
-revision 62230
+revision 63390
shortdesc An Infrastructure for Semantic Preloading of LaTeX Documents
relocated 1
longdesc The sTeX package collection is a version of TeX/LaTeX that
longdesc allows to markup TeX/LaTeX documents semantically without
longdesc leaving the document format, essentially turning it into a
longdesc document format for mathematical knowledge management (MKM).
-containersize 70884
-containerchecksum 7f6dc3e3338c4233b56587a4414a703c87ad0f65dd414c6431754de917688789a0ecc8421590dd5a5b1405e2233faa46a479aa0d44df95abcab7fe182dc4d4e9
-doccontainersize 1905976
-doccontainerchecksum 8211605850b7ecb762fb15ded83e78adf458bf45c71328e0052a53d36614a9face368eff8c10b0375b40fbbbab2162f3199b96d524a02b3a41480304a02d86a7
-docfiles size=557
+containersize 77016
+containerchecksum 21665a38a9956eed19a3d224f0ba57ace735ff7dcc44d3b7449a31360b2cdd0d0ec318c49baee469205df25413628be0b2a8e4eca0e47c71f87498354deca2c7
+doccontainersize 2217204
+doccontainerchecksum 757bb258d2736fd7235c39e595d44da3cf565885882a235d6f2a86193275a90a5a2ae28c2a6190b087b6d24d111afae3dedb48d3164f74519f6b5303f0299976
+docfiles size=699
RELOC/doc/latex/stex/Makefile
RELOC/doc/latex/stex/Makefile.top
RELOC/doc/latex/stex/README.md details="Readme"
@@ -285932,9 +285939,10 @@ docfiles size=557
RELOC/doc/latex/stex/stex-docheader.tex
RELOC/doc/latex/stex/stex-manual.pdf details="User manual"
RELOC/doc/latex/stex/stex-manual.tex
-srccontainersize 71548
-srccontainerchecksum 2ab6fd66d79279a41884983337037e78652980d9598ded6a8cd60e343e01575e7b49878a4b2ae8cfde4a5e3831f5a6e4bf754938f6975d770c6be969de3888e1
-srcfiles size=111
+ RELOC/doc/latex/stex/stex-tutorial.tex
+srccontainersize 61736
+srccontainerchecksum 62a028e9ffd4b22b8865a9d133deffe5a5aba0e9fe7a302d4380b02f68a7813027490f03ff4e0b94d7a1351005da514393b598e99b9f39903eb0c533310d3ecc
+srcfiles size=106
RELOC/source/latex/stex/Makefile
RELOC/source/latex/stex/extensions/Makefile
RELOC/source/latex/stex/extensions/document-structure.dtx
@@ -285957,16 +285965,18 @@ srcfiles size=111
RELOC/source/latex/stex/stex/stex-symbols.dtx
RELOC/source/latex/stex/stex/stex-terms.dtx
RELOC/source/latex/stex/stex/stex.ins
-runfiles size=93
- RELOC/tex/latex/stex/document-structure.cls
+runfiles size=106
RELOC/tex/latex/stex/document-structure.sty
RELOC/tex/latex/stex/etc/beamernotesthemesTeX.sty
RELOC/tex/latex/stex/etc/beamerthemesTeX.sty
RELOC/tex/latex/stex/etc/hwexam-default.header
RELOC/tex/latex/stex/etc/lststex.sty
RELOC/tex/latex/stex/etc/rustex.sty
+ RELOC/tex/latex/stex/etc/stex-backend-latexml.cfg
+ RELOC/tex/latex/stex/etc/stex-backend-pdflatex.cfg
+ RELOC/tex/latex/stex/etc/stex-backend-rustex.cfg
+ RELOC/tex/latex/stex/etc/stex-logo.sty
RELOC/tex/latex/stex/etc/stexthm.sty
- RELOC/tex/latex/stex/hwexam.cls
RELOC/tex/latex/stex/hwexam.sty
RELOC/tex/latex/stex/img/sTeX-logo.png
RELOC/tex/latex/stex/img/stex-cc-by-sa.png
@@ -285998,7 +286008,7 @@ catalogue-contact-repository https://github.com/slatex/sTeX
catalogue-ctan /macros/latex/contrib/stex
catalogue-license lppl
catalogue-topics struc-mkup format expl3
-catalogue-version 3.0.1
+catalogue-version 3.1.0
name stickstoo
category Package
@@ -288917,6 +288927,33 @@ catalogue-license lppl
catalogue-topics logic
catalogue-version 1.2
+name symbats3
+category Package
+revision 63394
+shortdesc Macros to use the Symbats3 dingbats fonts
+relocated 1
+longdesc This package makes available for LaTeX the glyphs in Feorag's
+longdesc OpenType Symbats3 neopagan dingbats fonts.
+containersize 6152
+containerchecksum 29369d05ebefd13f1b22e57ab170b0e63c719c88d3e35ce24558d45d7cac46f79ab97f000256270efe058b6321e4ade7839df54ba9def03646f34fc1fbc493fc
+doccontainersize 183672
+doccontainerchecksum 3f9fdf385cc79c20353d376c37b00bdc94fcdf2e9582bc3d82bcfb6839b461e26d5994335fd64775691793fc31efeaa5da78ddb1252c4adde7ad0aacf9aba6a7
+docfiles size=74
+ RELOC/doc/fonts/symbats3/MANIFEST
+ RELOC/doc/fonts/symbats3/README.md details="Readme"
+ RELOC/doc/fonts/symbats3/VERSION
+ RELOC/doc/fonts/symbats3/codepoint.tex
+ RELOC/doc/fonts/symbats3/latexname.tex
+ RELOC/doc/fonts/symbats3/symbats3.pdf details="Package documentation"
+ RELOC/doc/fonts/symbats3/symbats3.tex
+ RELOC/doc/fonts/symbats3/unicodename.tex
+runfiles size=13
+ RELOC/tex/latex/symbats3/symbats3.sty
+catalogue-contact-home http://latex.silmaril.ie/packages
+catalogue-ctan /fonts/symbats3
+catalogue-license lppl1.3c
+catalogue-topics font-absent font-symbol font-supp-symbol
+
name symbol
category Package
revision 61719
@@ -304585,7 +304622,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 63377
+revision 63388
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.
@@ -304593,10 +304630,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 109744
-containerchecksum 730fa26fed3e61bfb783e2503fd8477ccc4c7ad7c59930f61ba5a416aec127d4720c65fefae593d7f919912ca0fece227456fe017e02bf9e424e56d2e7b362b8
-doccontainersize 406660
-doccontainerchecksum 3dee19c17b0fc138848c1c7ba7040859d6b12602faf86ec1be9043b7f18ad0903c5f20e89634bae6f1086d4b42d766c26943fa294611342cbccf84c1e14b223c
+containersize 109756
+containerchecksum 3a2a0480eca7a52d0c88b5f2de0c07481050f59d3de2c921e92513c78b3e530c44facebfd77d7cc31a65d0611c873478d8b19be5cb61cf0c9758f05a6fca120a
+doccontainersize 406720
+doccontainerchecksum b7723266a4b84d24c5ac244ebfcd08739328e9c40ce18e3e4bdf90424ab7b5c91f4a7d42c10ba9b8549a96933bb269f4b89aa34a31748d117fc92547a7d9a19f
docfiles size=506
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -341963,15 +342000,15 @@ catalogue-version 2.0
name xepersian
category Package
-revision 63371
+revision 63393
shortdesc Persian for LaTeX, using XeTeX
relocated 1
longdesc This package provides a convenient interface for typesetting
longdesc Persian and English texts in LaTeX, using the XeTeX engine.
-containersize 59744
-containerchecksum 7916dcb33d8912cd2f40e38728c5c071876e3bf8938de3d5af8c17f9472de91f658ea51314afd5b872a2301262ef229b3ab60e0ac3e3426bbd7f245a6ad46163
-doccontainersize 1007548
-doccontainerchecksum d5f3d4ceb836924b1dfacc81aad1a7055a0e36b64a5eb8f5dfcb59e8c028ff2a22727ffa7967c61d4498a450df63807cad56f58730f628c2f1af70c396b1c58c
+containersize 60044
+containerchecksum f78578bb91f62f4d715fe485fa1a0faa1c10ac904dcabcca22492078024b79e6311d36a917d86ab4b4b97fd1d59addc0fdaf8857d6a468d9779e0ad44fc2c751
+doccontainersize 1010132
+doccontainerchecksum cc1efa03e475f68c4b403fe58deb652ecc072e98d35e2e587fad4d40d5716b1ba5e080f810708745e66b3f8630286801531d185ebf36c16018c465ec900350ff
docfiles size=321
RELOC/doc/xelatex/xepersian/README details="Readme"
RELOC/doc/xelatex/xepersian/dkun-0.3.py
@@ -341991,8 +342028,8 @@ docfiles size=321
RELOC/doc/xelatex/xepersian/xepersian-doc.pdf details="Package user documentation"
RELOC/doc/xelatex/xepersian/xepersian-logo.tex
RELOC/doc/xelatex/xepersian/xepersian.pdf details="Package source documentation"
-srccontainersize 74944
-srccontainerchecksum cfa53b3893b25b27391ec387f5184b6ce7387b4c4e36b76ca6950695a7028db373b25ec74f9d3eb8ca314357566caa75753c68ecf46826db07dbe828c5623e1c
+srccontainersize 75228
+srccontainerchecksum 08ccb1ebfc5296b5747644f69f534f6199ae0eceffa1eea6dd1d9f662f3938d9115ebde9acf8e2b190f29913dd8eef9c464ef34da0248b8a2370e10dff5f5cb1
srcfiles size=120
RELOC/source/xelatex/xepersian/xepersian-doc-basics.ltx
RELOC/source/xelatex/xepersian/xepersian-doc-boolean.ltx
@@ -342005,7 +342042,7 @@ srcfiles size=120
RELOC/source/xelatex/xepersian/xepersian-doc.ltx
RELOC/source/xelatex/xepersian/xepersian.dtx
RELOC/source/xelatex/xepersian/xepersian.ins
-runfiles size=114
+runfiles size=116
RELOC/fonts/misc/xetex/fontmapping/xepersian/persian-tex-text-nonumbers.map
RELOC/fonts/misc/xetex/fontmapping/xepersian/persian-tex-text-nonumbers.tec
RELOC/fonts/misc/xetex/fontmapping/xepersian/persian-tex-text.map
@@ -342020,6 +342057,8 @@ runfiles size=114
RELOC/tex/xelatex/xepersian/artikel2-xepersian.def
RELOC/tex/xelatex/xepersian/artikel3-xepersian.def
RELOC/tex/xelatex/xepersian/backref-xepersian.def
+ RELOC/tex/xelatex/xepersian/beamer-xepersian.def
+ RELOC/tex/xelatex/xepersian/beamerbasetranslator-xepersian.def
RELOC/tex/xelatex/xepersian/bidimoderncv-xepersian.def
RELOC/tex/xelatex/xepersian/bidituftesidenote-xepersian.def
RELOC/tex/xelatex/xepersian/boek-xepersian.def
@@ -342079,7 +342118,7 @@ catalogue-contact-support https://github.com/kvafa/xepersian/discussions
catalogue-ctan /macros/xetex/latex/xepersian
catalogue-license lppl1.3c
catalogue-topics persian xetex class
-catalogue-version 24.0
+catalogue-version 24.1
name xepersian-hm
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index fbd1f6b9eb..2d4cd25917 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-5e95c924fc00bcf594f029462fa5e82f texlive.tlpdb
+090c8e4b7c132ef15ee03dbd6f8dbd6f texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 09c33d4965..2622f60380 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-a493069f20652af808f7c90b21580c9827f8f2ea6493493c58510bf560ec2d3b248e89799caa154e53a46cd95e79f1c03f723cc50a20a973f4fe485948ffc378 texlive.tlpdb
+8a4f52265392746760aedc63a2750cbb79f9d63d45d29e5872bff42bb588f8b91247f7a0f3d72fe82db79ced3eb6d40d7f2183a4129795440a4d9f76fa38427e texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 6c962c1654..8bf7a86738 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-----
-iQEcBAEBCgAGBQJijB67AAoJEEzhh34ZQ4xwGIUH/it5QD5sC9Cg8Pr+vW8Rrw10
-sP/zsPt5v+bngGLrCIrOGASZMs7dW55kKesC5CdGnNQdo3WrJQUM+S+4jkVFKWJv
-5vQxkRHQ2UKiwqlsDtFrrJ3QVe7m2Hw8amsDOJ38AaSJ3XWTyCyUq50/qFagKePO
-J6BXHr7MVusgq2G/PWwIfJ4J5OZ1UfaZNY31iQMmAiElmHEKve8HpheIt7IzRkQo
-jMJZe/PNvUEFQfECeFTyKHLeRZKHz/JvueAu7Ee4TJjXtIQCrzf2JH7MXREh6IWr
-hVXY5vNSErW4VelMLpX9YFia0HVwutZH1A8C4fBleKLCWG4R5nTQkL32M4lB9IU=
-=4eEK
+iQEcBAEBCgAGBQJijW/5AAoJEEzhh34ZQ4xwBtQH/2Ld7I7xrOQjS/hNrIP7dGOF
+gv0dthy5x4odcsKeEh5PtFJjFq8kMKWoIUQjeDbvcYaOA+FSAruN1DQQt7E+ncwn
+qqMNdfwQ6T8gLyGfYjCFpZQbTngq+KldYblZhr/kgSDeXc/bFce64pdIIJXqrIM9
+ii9G1Rhz+ohfAjl0k54BV0UE3JqJ1iMi3P8FVlyrITuUICTF8YtevC0bD9OD7B/w
+NSyfXqavJSkyA92Yha9duqVi5bxdDp3OjfePanmZWn5wIcAhd4U1v+5lNaWoEg8u
+k9S/3vOoV2bGwLNxzMo6HKHIDSSUXWMLEmnt9qvnGj+P12/PUixj9L5uSQfl5Ao=
+=V/6F
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 70d248b80c..3b368f30ef 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/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index a69426bbe8..5b0bea8e89 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=1653337067
+date=1653423541
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=c8460ba6954e95dd7bfdbb9040dc4d7f
+lstdigest=fb2428591f92abda82bc9babf008952a
numpkg=5608
relstate=next
-version=8178
+version=8179
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: ZtQRh3a3ZHshENVa1jjNbkuM7uaUhJKyJtmln+zLh4HLvysoqXx566xg/Jb/lyRTKMXIR+DgeqqD/sCJUoHMfapUHRHbQYoQ9AA62bUAuiwEZVjBxUGrFR8+7Mcj2CQH3Nrinzd9vVmOXV0xauMMGLDwKjwEu/VtV6yBy62qF6FXrmiGMZPJa3KX7O8iozt7xjOS8dnUcgHOHKj2mEumNjYkGoTGOYyN0maAlILKfrNDPKJKs41p0kPI/ssJHLSvfbkuQCuyDbpwW9BZag1tpJaEFSYle3gYG7RRErhvuW9VBhTg44m1b1LKpzd+1Qs57QanZxVR9s9kDKwCm4monQ==
+;;;; signature/miktex: TkphZbazj578ex2PNoKGAtaHALiFdAhh/AZBBu8vX1BIW0Fq2JiBxO23hhOA4y9pKCaDdfkf/X/jqzynW0VaOEdtBGYhGKjYgIH55f6etAd07UX8bMjKgfrYBVU7neo3LVr0cOBiO9D5qcP1Qw8NPW9FXbvES/mm+Iq8EC46OQKTHsuOY+ZLCEuPaUGJmKeTiwrrOJVQeerV4VLRXr5Piy+iHKBVfYh4gcBVzFHNyPibV7RcZM3w48lYjqWLYfo4TGH828ctEw9suTBp4tmRO/3Os9EjhNkZ7WJ3yFwdw8ia7RfIMGz4aCEL1J45FcJUyoLXO4D19ymUa/RtU3SsRA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 43a7bccaf7..82cff35c53 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1653336672
+date=1653423123
lastupd=arara arara__doc arara__source beamertheme-trigon beamertheme-trigon__doc beamertheme-trigon__source begingreek begingreek__doc begingreek__source bithesis bithesis__doc bithesis__source bxtexlogo bxtexlogo__doc bxtexlogo__source changebar changebar__doc changebar__source chinesechess chinesechess__doc
-lstdigest=eb5ceef67d2a8722207468adda398e7a
+lstdigest=1c55335aeb357401066624360d1de968
numpkg=5608
relstate=stable
-version=8178
+version=8179
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: u3J8TFLCwvMQPtoDm2R0sUJ0zT9xUnz1niS27LDNdyhvh8ZWKA0D0JePz7/JEr1/56xIBhaiEJ4N4Otg4naoeLq6szbGh1mRw5/z0t9PinqMl42zS+gkIow3Qb5td8kKn7irkHRxPENTOGcdZjaU95eF4Eo8fxrdoWOYyULUjMPLF3wM5qwio03kMNW8+agBEbUD7HefTVEIwncKMl6AkUSxSGyG2DreoBpkRFfWRVkk714Pjycv1KgHaTAlX1kr4xb7kHhxqT6bDkyf3r0q8+4F3sRgREzCGO6S02XmooIUdbieVPBHZ1wHcaJQb0ZADMaX5jvxL2wlXSDirlP+HQ==
+;;;; signature/miktex: ub5AnwyLfDsk3hVgLlztBUfUjOryAXkmc0mr7hFLKe1vDrWdUPWA7RMKK4LsMl5yGLVW78hWwDfkQfbc4vl6ob4UGMOX5ZPJprjSZT1Rz6K/WYo6qP26U2cGnPDH+zw7ZDzrEnEva9bIg4CkdeB+uw54GWphL0d0w851d+c9r8wgtUuMffB4FB+f4SgKLqkjXICTrFrbSrTCBystFKQDijePPFh48IJblcP8qXfwDt/cwy/V2iuh7ydIOC+nFF0YeDe1MyUJohS57EwFOc9e6Ku/EoiPEB1ds64krQ69+/R2uvEc4qyYx1509s3JrOre8N0SuBzSgxYgKw7JJ0r/HA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 8dad3d37c6..58f05c40f6 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2022-05-24-02-02
+2022-05-25-02-02